Sha256: 84094eef5873c107f56f2b44c73f57393b0dc2caaa14f395e763cf78087aa984

Contents?: true

Size: 1.67 KB

Versions: 2

Compression:

Stored size: 1.67 KB

Contents

require 'active_support/concern'

module SocialStream
  module Models
    # Additional features for models that are Activity Objects
    module ActivityObject
      extend ActiveSupport::Concern

      included do
        attr_accessor :_activity_tie_id
        attr_accessor :_activity_parent_id

        belongs_to :activity_object, :dependent => :destroy
        has_many   :activity_object_activities, :through => :activity_object

        delegate :post_activity, :to => :activity_object

        alias_method_chain :create_activity_object, :type
        before_create :create_activity_object

        before_create :create_post_activity
        before_update :create_update_activity

        validates_presence_of :_activity_tie
      end

      module InstanceMethods
        def activities
          activity_object_activities.includes(:activity).map(&:activity).uniq
        end

        # Create corresponding ActivityObject including this class type
        def create_activity_object_with_type(attributes = {}) #:nodoc:
          create_activity_object_without_type attributes.update(:object_type => self.class.to_s)
        end

        def _activity_tie
          @_activity_tie ||= Tie.find(_activity_tie_id)
        end

        private

        def create_post_activity
          create_activity "post"
        end

        def create_update_activity
          create_activity "update"
        end

        def create_activity(verb)
          activity_object.activities.create! :verb      => verb,
                                             :tie       => _activity_tie,
                                             :parent_id => _activity_parent_id
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
social_stream-0.0.2 lib/social_stream/models/activity_object.rb
social_stream-0.0.1 lib/social_stream/models/activity_object.rb