Sha256: 625be11711cde14397fc605884a1d54ee6e06479c451cbc969a7ee8ccf676528
Contents?: true
Size: 1.38 KB
Versions: 2
Compression:
Stored size: 1.38 KB
Contents
module PowerTypes class Observer include AfterCommitEverywhere attr_reader :object PowerTypes::Util::OBSERVABLE_EVENTS.each do |event| PowerTypes::Util::OBSERVABLE_TYPES.each do |type| define_singleton_method("#{type}_#{event}") do |args = nil, &_block| add_trigger(type, event, *args, &_block) end end end def self.trigger(_type, _event, _object) triggers.select { |t| t.type == _type && t.event == _event }.each do |trigger| trigger.call(new(_object)) end end def self.add_trigger(_type, _event, _handler = nil, _options = {}, &_block) triggers << PowerTypes::Trigger.new( _type, _event, (_handler || _block), _options ) triggers.last end def self.triggers @triggers ||= [] end def initialize(_object) @object = _object end PowerTypes::Util::OBSERVABLE_TRANSACTIONAL_EVENTS.each do |event| PowerTypes::Util::OBSERVABLE_TYPES.each do |type| next unless type == :after method_name = "#{type}_#{event}" callback = method_name.gsub('_commit', '') define_singleton_method(method_name) do |method| send(callback) { execute_method_after_commit(method) } end end end def execute_method_after_commit(method) after_commit { send(method) } end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
power-types-0.7.0 | lib/power_types/patterns/observer/observer.rb |
power-types-0.6.0 | lib/power_types/patterns/observer/observer.rb |