Sha256: 58469323ee22a77753a32c7cfd46b2559157e6648902cbb92ef0f0b99feffa62
Contents?: true
Size: 1.34 KB
Versions: 1
Compression:
Stored size: 1.34 KB
Contents
module Stream module Fires def self.included(klass) klass.send(:extend, ClassMethods) end module ClassMethods def fires(activity_type, opts) raise ArgumentError, "Argument :on is mandatory" unless opts.has_key?(:on) # Array provided, set multiple callbacks if opts[:on].kind_of?(Array) opts[:on].each { |on| fires(activity_type, opts.merge({:on => on})) } return end opts[:subject] = :self unless opts.has_key?(:subject) method_name = :"fire_#{activity_type}_after_#{opts[:on]}" define_method(method_name) do create_options = [:actor, :subject, :secondary_subject].inject({}) do |memo, sym| if opts[sym] if opts[sym].respond_to?(:call) memo[sym] = opts[sym].call(self) elsif opts[sym] == :self memo[sym] = self else memo[sym] = send(opts[sym]) end end memo end #create_options[:activity_type] = activity_type.to_s transaction do activity = ActivityItem.create!(create_options) ([user] + user.contacts).each{ |p| p.activity_items << activity } end end send(:"after_#{opts[:on]}", method_name, :if => opts[:if]) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
Stream-0.1.2 | lib/stream/fires.rb |