module Netfira::WebConnect::Model::Relation::Events

Private Instance Methods

dispatch_create() { || ... } click to toggle source
# File lib/netfira/web_connect/model/relation/events.rb, line 13
def dispatch_create
  dispatch_relation_event(:add, :to) { yield }
end
dispatch_destroy() { || ... } click to toggle source
# File lib/netfira/web_connect/model/relation/events.rb, line 17
def dispatch_destroy
  dispatch_relation_event(:remove, :from) { yield }
end
dispatch_relation_event(action, preposition) { || ... } click to toggle source
# File lib/netfira/web_connect/model/relation/events.rb, line 21
def dispatch_relation_event(action, preposition)
  [records, records.reverse].each do |records|
    event_name = ("#{action}_%s_#{preposition}_%s" % records.map{ |record| record.class.single_name }).to_sym
    named_event_args = [event_name].concat(records)
    event_args = [action].concat(records)
    records[0].as_readonly do
      records[1].as_readonly do
        dispatch_event :before, *named_event_args
        dispatch_event :before, *event_args
        dispatch_event :around, *named_event_args do
          dispatch_event :around, *event_args do
            records[0].as_readwrite { records[1].as_readwrite { yield } }
          end
        end
        dispatch_event [:on, :after], *named_event_args
        dispatch_event [:on, :after], *event_args
      end
    end
  end
end