Class: Card::ActManager

Inherits:
Object
  • Object
show all
Defined in:
lib/card/act_manager.rb,
lib/card/act_manager/stage.rb,
lib/card/act_manager/stage_director.rb,
lib/card/act_manager/subdirector_array.rb,
lib/card/act_manager/stage_director/phases.rb

Overview

available values: dirty attributes yes | yes | yes params yes | yes | yes success yes | yes | yes no session yes | yes | yes no

Explanation: yes! the recommended stage to do that yes ok to do it here no not recommended; chance to mess things up but if something forces you to do it here you can try no! never do it here. it won't work or will break things

if there is only a single entry in a phase column it counts for all stages of that phase

1) 'insecure' means a change of a card attribute that can possibly make the card invalid to save 2) 'secure' means you are sure that the change doesn't affect the validation 3) In all stages except IGwD: If you call 'create', 'update_attributes' or 'save' the card will become part of the same act and all stage of the validation and storage phase will be executed immediately for that card. The integration phase will be executed together with the act card and its subcards.

In IGwD all these methods create a new act. 4) This means if an exception is raised in the validation or storage phase everything will rollback. If the integration phase fails the db changes of the other two phases will remain persistent.

Defined Under Namespace

Modules: Stage Classes: StageDirector, StageSubdirector, SubdirectorArray

Class Method Summary collapse

Class Method Details

.act_directorObject



83
84
85
86
# File 'lib/card/act_manager.rb', line 83

def act_director
  return unless act_card
  act_card.director
end

.add(director) ⇒ Object



134
135
136
137
# File 'lib/card/act_manager.rb', line 134

def add director
  # Rails.logger.debug "added: #{director.card.name}".green
  directors[director.card] = director
end

.card_changed(old_card) ⇒ Object



139
140
141
142
# File 'lib/card/act_manager.rb', line 139

def card_changed old_card
  return unless (director = @directors.delete old_card)
  add director
end

.clearObject



103
104
105
106
107
108
109
110
# File 'lib/card/act_manager.rb', line 103

def clear
  self.act_card = nil
  self.act = nil
  directors.each_pair do |card, _dir|
    card.director = nil
  end
  @directors = nil
end

.contextualize_delayed_event(act_id, card, env, auth) ⇒ Object

If active jobs (and hence the integrate_with_delay events) don't run in a background process then Card::Env.deserialize! decouples the controller's params hash and the Card::Env's params hash with the effect that params changes in the CardController get lost (a crucial example are success params that are processed in CardController#update_params_for_success)



167
168
169
170
171
172
173
# File 'lib/card/act_manager.rb', line 167

def contextualize_delayed_event act_id, card, env, auth
  if delaying?
    contextualize_for_delay(act_id, card, env, auth) { yield }
  else
    yield
  end
end

.contextualize_for_delay(act_id, card, env, auth, &block) ⇒ Object

The whole ActManager setup is gone once we reach a integrate with delay event processed by ActiveJob. This is the improvised resetup to get subcards working.



184
185
186
187
188
189
190
191
192
# File 'lib/card/act_manager.rb', line 184

def contextualize_for_delay act_id, card, env, auth, &block
  self.act = Act.find act_id if act_id
  with_env_and_auth env, auth do
    return yield unless act
    run_act(act.card || card) do
      act_card.director.run_delayed_event act, &block
    end
  end
end

.deep_delete(director) ⇒ Object



150
151
152
153
154
155
# File 'lib/card/act_manager.rb', line 150

def deep_delete director
  director.subdirectors.each do |subdir|
    deep_delete subdir
  end
  delete director
end

.delaying?Boolean

Returns:

  • (Boolean)


175
176
177
178
179
# File 'lib/card/act_manager.rb', line 175

def delaying?
  const_defined?("Delayed") &&
    Delayed::Worker.delay_jobs &&
    Card.config.active_job.queue_adapter == :delayed_job
end

.delete(director) ⇒ Object



144
145
146
147
148
# File 'lib/card/act_manager.rb', line 144

def delete director
  return unless @directors
  @directors.delete director.card
  director.delete
end

.directorsObject



88
89
90
# File 'lib/card/act_manager.rb', line 88

def directors
  @directors ||= {}
end

.fetch(card, opts = {}) ⇒ Object



112
113
114
115
116
117
118
# File 'lib/card/act_manager.rb', line 112

def fetch card, opts={}
  return directors[card] if directors[card]
  directors.each_key do |dir_card|
    return dir_card.director if dir_card.name == card.name && dir_card.director
  end
  directors[card] = new_director card, opts
end

.include?(name) ⇒ Boolean

Returns:

  • (Boolean)


120
121
122
# File 'lib/card/act_manager.rb', line 120

def include? name
  directors.keys.any? { |card| card.key == name.to_name.key }
end

.need_actObject



99
100
101
# File 'lib/card/act_manager.rb', line 99

def need_act
  self.act ||= Card::Act.create ip_address: Env.ip
end

.new_director(card, opts = {}) ⇒ Object



124
125
126
127
128
129
130
131
132
# File 'lib/card/act_manager.rb', line 124

def new_director card, opts={}
  if opts[:parent]
    StageSubdirector.new card, opts
  elsif act_card && act_card != card && running_act?
    act_card.director.subdirectors.add card
  else
    StageDirector.new card
  end
end

.run_act(card) ⇒ Object



92
93
94
95
96
97
# File 'lib/card/act_manager.rb', line 92

def run_act card
  self.act_card = card
  yield
ensure
  clear
end

.running_act?Boolean

Returns:

  • (Boolean)


157
158
159
# File 'lib/card/act_manager.rb', line 157

def running_act?
  (dir = act_director) && dir.running?
end

.to_sObject



202
203
204
205
# File 'lib/card/act_manager.rb', line 202

def to_s
  act_director.to_s
  #directors.values.map(&:to_s).join "\n"
end

.with_env_and_auth(env, auth) ⇒ Object



194
195
196
197
198
199
200
# File 'lib/card/act_manager.rb', line 194

def with_env_and_auth env, auth
  Card::Auth.with auth do
    Card::Env.with env do
      yield
    end
  end
end