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