Sha256: 146b3deb6a6b6dbacf38226ecc2a8a41b98c115c66807bbc959044471980e4b6

Contents?: true

Size: 1.26 KB

Versions: 18

Compression:

Stored size: 1.26 KB

Contents

require 'active_support/concern'

module SocialStream #:nodoc:
  module Models
    # Common methods for models that have subtypes. Currently, there are two supertypes:
    # * Actor: participates in the social network and has ties with other actors. Its subtypes are subjects, like user or group
    # * ActivityObject: created and managed by actors in activities. Its subtypes are objects, like post or comment
    module Supertype
      extend ActiveSupport::Concern

      included do
        subtypes.each do |s|
          has_one s, :dependent => :destroy
        end
      end

      module ClassMethods
        def subtypes
          SocialStream.__send__ @subtypes_name.to_s.tableize # SocialStream.subjects # in Actor
        end

        def load_subtype_features
          features = "SocialStream::Models::#{ @subtypes_name.to_s.classify }".constantize

          subtypes.each do |s|
            s = s.to_s.classify.constantize
            s.__send__(:include, features) unless s.ancestors.include?(features)
          end
        end
      end 

      module InstanceMethods
        def subtype_instance
          self.class.subtypes.each do |s|
            i = __send__(s)
            return i if i.present?
          end

          nil
        end
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 2 rubygems

Version Path
social_stream-base-0.6.0 lib/social_stream/models/supertype.rb
social_stream-base-0.5.2 lib/social_stream/models/supertype.rb
social_stream-base-0.5.1 lib/social_stream/models/supertype.rb
social_stream-base-0.5.0 lib/social_stream/models/supertype.rb
social_stream-0.4.6 lib/social_stream/models/supertype.rb
social_stream-0.4.5 lib/social_stream/models/supertype.rb
social_stream-0.4.4 lib/social_stream/models/supertype.rb
social_stream-0.4.3 lib/social_stream/models/supertype.rb
social_stream-0.4.2 lib/social_stream/models/supertype.rb
social_stream-0.4.1 lib/social_stream/models/supertype.rb
social_stream-0.4.0 lib/social_stream/models/supertype.rb
social_stream-0.3.6 lib/social_stream/models/supertype.rb
social_stream-0.3.5 lib/social_stream/models/supertype.rb
social_stream-0.3.4 lib/social_stream/models/supertype.rb
social_stream-0.3.3 lib/social_stream/models/supertype.rb
social_stream-0.3.2 lib/social_stream/models/supertype.rb
social_stream-0.3.1 lib/social_stream/models/supertype.rb
social_stream-0.3.0 lib/social_stream/models/supertype.rb