Sha256: 131b841c03ee35780cd5f6be3e1de4bfb00278069b5ad23ff0b658c81437c293
Contents?: true
Size: 1.83 KB
Versions: 2
Compression:
Stored size: 1.83 KB
Contents
module FlexibleFeeds module ActsAsEventable extend ActiveSupport::Concern module ClassMethods def acts_as_eventable(options = {}) has_one :event, as: :eventable, class_name: "FlexibleFeeds::Event", dependent: :destroy has_many :feeds, through: :event, class_name: "FlexibleFeeds::Feed" after_save :post_to_default_feeds send :include, InstanceMethods cattr_accessor :default_feeds self.default_feeds = options[:add_to_feeds] || :default_custom_feeds cattr_accessor :created_by self.created_by = options[:created_by] if options[:is_parent] === true acts_as_parent elsif options[:is_parent].present? acts_as_parent options[:is_parent] end if options[:is_child] === true acts_as_child elsif options[:is_child].present? acts_as_child options[:is_child] end end end module InstanceMethods def post_to_feeds(*destinations) destinations = destinations[0] if destinations[0].kind_of?(Array) self.class.transaction do create_event_for(destinations) end end def touch_event event.touch end def default_custom_feeds [] end private def creator send(created_by) if created_by.present? end def post_to_default_feeds post_to_feeds(public_send(default_feeds)) end def create_event_if_nil create_event!(creator: creator) if event.nil? end def create_event_for(destinations) create_event_if_nil destinations.each do |feed| event.event_joins.where(feed: feed).first_or_create! if feed.present? end end end end end ActiveRecord::Base.send :include, FlexibleFeeds::ActsAsEventable
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
flexible_feeds-0.3.6 | lib/flexible_feeds/acts_as_eventable.rb |
flexible_feeds-0.3.5 | lib/flexible_feeds/acts_as_eventable.rb |