Sha256: b0d6b0df482cf19ac594415e70b3d19e153200e9a12cd4e2d4534a671e149093

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 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 klass
        @klass ||= class_name.constantize
      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 many?
        @many_type ||= @type == :many
      end
      
      def polymorphic?
        @options[:polymorphic]
      end
      
      def type_key_name
        @type_key_name ||= many? ? '_type' : "#{name}_type"
      end
      
      def ivar
        @ivar ||= "@_#{name}"
      end

      def proxy_class
        @proxy_class ||= begin
          if many?
            return HasManyProxy unless self.klass.embeddable?            
            polymorphic? ? PolymorphicHasManyEmbeddedProxy : HasManyEmbeddedProxy
          else
            polymorphic? ? PolymorphicBelongsToProxy : BelongsToProxy
          end
        end # end begin
      end # end proxy_class
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fcoury-mongomapper-0.4.0 lib/mongomapper/associations/base.rb