Class: Wazowski::ActiveRecordAdapter::TransactionState::StateData

Inherits:
Object
  • Object
show all
Defined in:
lib/wazowski/active_record_adapter.rb

Instance Method Summary collapse

Constructor Details

#initializeStateData

Returns a new instance of StateData.



5
6
7
# File 'lib/wazowski/active_record_adapter.rb', line 5

def initialize
  @changed_models = Set.new
end

Instance Method Details

#clear_after_commit_performed!Object



33
34
35
# File 'lib/wazowski/active_record_adapter.rb', line 33

def clear_after_commit_performed!
  @changed_models.clear
end

#register_model_changed(model) ⇒ Object



37
38
39
# File 'lib/wazowski/active_record_adapter.rb', line 37

def register_model_changed(model)
  @changed_models << model
end

#run_after_commit_only_once!Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/wazowski/active_record_adapter.rb', line 9

def run_after_commit_only_once!
  return if @changed_models.empty?

  info = {}

  # even @changed_models being a Set, it's possible that the "same" model
  # have been included in the set before and after persistence (so they're different,
  # we have both in the set) and by the time this code runs, the non persisted model
  # becomes persisted and now they're identical, but still in the set.
  # So we may have duplicates. `.to_a.uniq` to remove them.
  @changed_models.to_a.uniq.each do |model|
    info.merge!(model.__wazowski_changes_per_node) do |_, old_val, new_val|
      old_val + new_val
    end

    model.__wazowski_clean_dirty!
    model.__wazowski_presence_state.clear
  end

  clear_after_commit_performed!

  Wazowski.run_handlers(info)
end