Sha256: ba79d07c8f2b36b32185123e446b198bb91d482e22b6a006e304d559c15a05c7

Contents?: true

Size: 994 Bytes

Versions: 1

Compression:

Stored size: 994 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|
            begin
              s = s.to_s.classify.constantize
              s.__send__(:include, features) unless s.ancestors.include?(features)
            rescue
              puts "Warning: could not load #{ s }"
            end
          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

1 entries across 1 versions & 1 rubygems

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