Class: Wazowski::ActiveRecordAdapter::TransactionState::StateData
- Inherits:
-
Object
- Object
- Wazowski::ActiveRecordAdapter::TransactionState::StateData
- Defined in:
- lib/wazowski/active_record_adapter.rb
Instance Method Summary collapse
- #clear_after_commit_performed! ⇒ Object
-
#initialize ⇒ StateData
constructor
A new instance of StateData.
- #register_model_changed(model) ⇒ Object
- #run_after_commit_only_once! ⇒ Object
Constructor Details
#initialize ⇒ StateData
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 |