class Clockwork::DatabaseEvents::EventStore
Attributes
Public Class Methods
new(block_to_perform_on_event_trigger)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 32 def initialize(block_to_perform_on_event_trigger) @related_events = {} @block_to_perform_on_event_trigger = block_to_perform_on_event_trigger end
Public Instance Methods
register(event, model)
click to toggle source
DatabaseEvents::Manager#register
creates a new DatabaseEvents::Event
, whose initialize method registers the new database event with the EventStore
by calling this method.
# File lib/clockwork/database_events/event_store.rb, line 40 def register(event, model) related_events_for(model.id).add(event) end
register_new_models(model_objects)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 64 def register_new_models(model_objects) unregistered_models(model_objects).each do |new_model_object| register_with_manager(new_model_object) end end
unregister_all_except(model_objects)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 50 def unregister_all_except(model_objects) ids = model_objects.collect(&:id) (@related_events.keys - ids).each{|id| unregister(id) } end
update(current_model_objects)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 44 def update(current_model_objects) unregister_all_except(current_model_objects) update_registered_models(current_model_objects) register_new_models(current_model_objects) end
update_registered_models(model_objects)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 55 def update_registered_models(model_objects) registered_models(model_objects).each do |model| if has_changed?(model) unregister(model.id) register_with_manager(model) end end end
Private Instance Methods
at_strings_for(model)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 132 def at_strings_for(model) return nil if model.at.to_s.empty? model.at.split(',').map(&:strip) end
has_changed?(model)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 78 def has_changed?(model) related_events_for(model.id).has_changed?(model) end
options(model)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 111 def options(model) options = { :from_database => true, :synchronizer => self, :ignored_attributes => [], } options[:at] = at_strings_for(model) if model.respond_to?(:at) options[:if] = ->(time){ model.if?(time) } if model.respond_to?(:if?) options[:tz] = model.tz if model.respond_to?(:tz) options[:ignored_attributes] = model.ignored_attributes if model.respond_to?(:ignored_attributes) # store the state of the model at time of registering so we can # easily compare and determine if state has changed later options[:model_attributes] = model.attributes.select do |k, v| not options[:ignored_attributes].include?(k.to_sym) end options end
register_with_manager(model)
click to toggle source
When re-creating events, the Clockwork.manager
must be used to create them, as it is ultimately responsible for ensuring that the events actually get run when they should. We call its every method, which will result in DatabaseEvent::Manager#register being called, which creates a new DatabaseEvent::Event, which will be registered with the EventStore
on initialize.
# File lib/clockwork/database_events/event_store.rb, line 105 def register_with_manager(model) Clockwork.manager. every(model.frequency, model, options(model), &@block_to_perform_on_event_trigger) end
registered?(model)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 74 def registered?(model) related_events_for(model.id) != nil end
registered_models(model_objects)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 86 def registered_models(model_objects) model_objects.select{|m| registered?(m) } end
unregister(id)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 94 def unregister(id) related_events_for(id).unregister related_events.delete(id) end
unregistered_models(model_objects)
click to toggle source
# File lib/clockwork/database_events/event_store.rb, line 90 def unregistered_models(model_objects) model_objects.select{|m| !registered?(m) } end