Sha256: 3b29609edf0dfe91e0a262c349848d8cb26dc61a6d70044761367b8c1932553f

Contents?: true

Size: 885 Bytes

Versions: 14

Compression:

Stored size: 885 Bytes

Contents

require 'active_support/concern'

module SocialStream #:nodoc:
  module Models
    module Supertype
      extend ActiveSupport::Concern

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

      module ClassMethods
        def subtypes
          SocialStream.__send__ to_s.tableize
        end

        def load_subtype_features
          features = "SocialStream::Models::#{ to_s }".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

14 entries across 14 versions & 1 rubygems

Version Path
social_stream-0.2.3 lib/social_stream/models/supertype.rb
social_stream-0.2.2 lib/social_stream/models/supertype.rb
social_stream-0.2.1 lib/social_stream/models/supertype.rb
social_stream-0.2.0 lib/social_stream/models/supertype.rb
social_stream-0.1.7 lib/social_stream/models/supertype.rb
social_stream-0.1.6 lib/social_stream/models/supertype.rb
social_stream-0.1.5 lib/social_stream/models/supertype.rb
social_stream-0.1.4 lib/social_stream/models/supertype.rb
social_stream-0.1.3 lib/social_stream/models/supertype.rb
social_stream-0.1.2 lib/social_stream/models/supertype.rb
social_stream-0.1.1 lib/social_stream/models/supertype.rb
social_stream-0.1.0 lib/social_stream/models/supertype.rb
social_stream-0.0.5 lib/social_stream/models/supertype.rb
social_stream-0.0.1 lib/social_stream/models/supertype.rb