Sha256: 0a8aa50d5e4552806386c2c831d42c61abbc1d5a2113596c77bbf97535be516c

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

require 'active_support/concern'

module SocialStream
  module Models
    # Additional features for models that are actors
    module Actor
      extend ActiveSupport::Concern

      included do
        belongs_to :actor,
                   :validate => true,
                   :autosave => true

        delegate :name, :name=,
                 :email, :email=,
                 :permalink, :permalink=,
                 :disabled, :disabled=,
                 :ties, :sent_ties, :received_ties,
                 :contacts, :suggestion,
                 :wall,
                 :to => :actor!

        after_create :initialize_default_ties
      end

      module InstanceMethods
        def actor!
          actor || build_actor
        end

        private

        def initialize_default_ties
          self.class.relations.where(:default => true).each do |r|
            Tie.create! :sender => self.actor,
                        :receiver => self.actor,
                        :relation => r
          end
        end
      end

      module ClassMethods
        # Relations defined for this actor model.
        def relations(to = to_s)
          Relation.mode(to_s, to)
        end

        def with_received_ties
          joins(:actor => :received_ties)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
social_stream-0.0.2 lib/social_stream/models/actor.rb