Sha256: 44dc3a13eec80c6231c68c8762b862925d79dec46cfc71eade046614e749c3f4

Contents?: true

Size: 983 Bytes

Versions: 9

Compression:

Stored size: 983 Bytes

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
      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

9 entries across 9 versions & 1 rubygems

Version Path
social_stream-base-0.7.2 lib/social_stream/models/supertype.rb
social_stream-base-0.7.1 lib/social_stream/models/supertype.rb
social_stream-base-0.7.0 lib/social_stream/models/supertype.rb
social_stream-base-0.6.8 lib/social_stream/models/supertype.rb
social_stream-base-0.6.6 lib/social_stream/models/supertype.rb
social_stream-base-0.6.5 lib/social_stream/models/supertype.rb
social_stream-base-0.6.3 lib/social_stream/models/supertype.rb
social_stream-base-0.6.2 lib/social_stream/models/supertype.rb
social_stream-base-0.6.1 lib/social_stream/models/supertype.rb