Module: Card::Set::Abstract::MachineInput

Extended by:
Card::Set
Defined in:
tmpsets/set/mod011-machines/abstract/machine_input.rb

Defined Under Namespace

Modules: MachineInputClassMethods

Constant Summary

Constants included from Format

Format::TEMPLATE_DIR

Class Method Summary collapse

Instance Method Summary collapse

Methods included from I18nScope

#mod_name, #scope

Methods included from Loader

#clean_empty_module_from_hash, #clean_empty_modules, #extended, #process_base_modules, #register_set

Methods included from Helpers

#abstract_set?, #all_set?, #num_set_parts, #shortname

Methods included from Card::Set::AdvancedApi

#attachment, #ensure_set, #stage_method

Methods included from Format

#all_set_format_mod!, #define_on_format, #format, #register_set_format, #view

Methods included from Inheritance

#include_set, #include_set_formats

Methods included from Basket

#abstract_basket, #add_to_basket, #basket

Methods included from Trait

#card_accessor, #card_reader, #card_writer

Methods included from Event

#event

Class Method Details

.define_delete_events(event_suffix, host_class) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'tmpsets/set/mod011-machines/abstract/machine_input.rb', line 27

def self.define_delete_events event_suffix, host_class
  event_name = "before_machine_input_deleted_#{event_suffix}".to_sym
  host_class.event event_name, :store, on: :delete do
    # exclude self because it's on the way to the trash
    # otherwise it will be created again with the reset_machine_output
    # call in the event below
    @involved_machines =
      MachineInput.search_involved_machines(name, host_class)
                  .reject { |card| card == self }
  end
  event_name = "after_machine_input_deleted_#{event_suffix}".to_sym
  host_class.event event_name, :finalize, on: :delete do
    expire_machine_cache
    @involved_machines.each do |item|
      item.reset_machine_output if item.is_a? Machine
    end
  end
end

.define_update_event(event_suffix, host_class) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
# File 'tmpsets/set/mod011-machines/abstract/machine_input.rb', line 46

def self.define_update_event event_suffix, host_class
  host_class.event(
    "after_machine_input_updated_#{event_suffix}".to_sym, :integrate,
    on: :save
  ) do
    expire_machine_cache
    MachineInput.search_involved_machines(name, host_class)
                .each do |item|
      item.reset_machine_output if item.is_a? Machine
    end
  end
end

.included(host_class) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'tmpsets/set/mod011-machines/abstract/machine_input.rb', line 16

def self.included host_class
  host_class.extend(MachineInputClassMethods)
  host_class.machines_wql = {}
  host_class.machine_input do
    format._render_raw
  end
  event_suffix = host_class.name.tr ":", "_"
  define_update_event event_suffix, host_class
  define_delete_events event_suffix, host_class
end

.search_involved_machines(name, host_class) ⇒ Object



59
60
61
62
63
64
65
66
# File 'tmpsets/set/mod011-machines/abstract/machine_input.rb', line 59

def self.search_involved_machines name, host_class
  wql_statement =
    { right_plus: [
      { codename: "machine_input" },
      { link_to: name }
    ] }.merge(host_class.machines_wql)
  Card.search(wql_statement)
end

Instance Method Details

#expire_machine_cacheObject



68
69
70
71
72
73
74
75
76
77
78
79
# File 'tmpsets/set/mod011-machines/abstract/machine_input.rb', line 68

def expire_machine_cache
  Card.search(right_plus: [
                { codename: "machine_input" },
                { link_to: name }
              ],
              return: :name).each do |machine_name|
    next unless (cache = Card.fetch(name, machine_name, :machine_cache))
    Auth.as_bot do
      cache.update_attributes! trash: true
    end
  end
end