Sha256: 369a40f11bc1c57d012ddf1348abe899a4f4232f9f890e4dfaf111610ccdfcbc

Contents?: true

Size: 1.45 KB

Versions: 2

Compression:

Stored size: 1.45 KB

Contents

module MongoMapper
  module Associations
    class Base
      attr_reader :type, :name, :options

      def initialize(type, name, options = {})
        @options = options
        @type = type
        @name = name
      end
      
      def class_name
        @class_name ||= begin
          if cn = options[:class_name]
            cn
          elsif many?
            name.to_s.singularize.camelize
          else
            name.to_s.camelize
          end
        end
      end
      
      def klass
        @klass ||= class_name.constantize
      end
      
      def many?
        @many_type ||= @type == :many
      end
      
      def belongs_to?
        @belongs_to_type ||= @type == :belongs_to
      end
      
      def polymorphic?
        !!@options[:polymorphic]
      end
      
      def type_key_name
        @type_key_name ||= many? ? '_type' : "#{name}_type"
      end
      
      def belongs_to_key_name
        "#{name}_id"
      end
      
      def ivar
        @ivar ||= "@_#{name}"
      end
      
      def embeddable?
        many? && klass.embeddable?
      end

      def proxy_class
        @proxy_class ||= begin
          if many?
            return ManyProxy unless self.klass.embeddable?            
            polymorphic? ? ManyEmbeddedPolymorphicProxy : ManyEmbeddedProxy
          else
            polymorphic? ? BelongsToPolymorphicProxy : BelongsToProxy
          end
        end # end begin
      end # end proxy_class
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jnunemaker-mongomapper-0.3.0 lib/mongomapper/associations/base.rb
jnunemaker-mongomapper-0.3.1 lib/mongomapper/associations/base.rb