Sha256: 0c86ad029a28b8c261f744f27d92363f852ef98e000dc3cbd49835753d76c63d

Contents?: true

Size: 1.92 KB

Versions: 1

Compression:

Stored size: 1.92 KB

Contents

# encoding: utf-8

module ROM
  class Mapper

    # Represents a mapping attribute
    #
    # @private
    class Attribute
      include Adamantium, Concord::Public.new(:name, :options), Morpher::NodeHelpers

      class EmbeddedValue < Attribute

        # @api private
        def to_ast
          s(:key_transform, name, name, node)
        end
        memoize :to_ast

        # @api private
        def header
          options.fetch(:header)
        end
        memoize :header

        private

        # @api private
        def node
          options.fetch(:node)
        end
        memoize :node
      end

      class EmbeddedCollection < Attribute

        # @api private
        def to_ast
          s(:key_transform, name, name, s(:map, node))
        end
        memoize :to_ast

        # @api private
        def header
          options.fetch(:header)
        end
        memoize :header

        private

        # @api private
        def node
          options.fetch(:node)
        end
        memoize :node
      end

      # @api private
      def self.build(*args)
        input = args.first

        if input.kind_of?(self)
          input
        else
          name, options = args
          new(name, options || {})
        end
      end

      # @api private
      def to_ast
        s(:block, s(:key_fetch, tuple_key), s(:key_dump, name))
      end
      memoize :to_ast

      # @api private
      def key?
        options.fetch(:key, false)
      end
      memoize :key?

      # @api private
      def mapping
        { tuple_key => name }
      end
      memoize :mapping

      # @api private
      def tuple_key
        options[:from] || name
      end
      memoize :tuple_key

      # @api private
      def type
        options[:type] || Object
      end
      memoize :type

      # @api private
      def rename(new_name)
        self.class.new(new_name, options)
      end

    end # Attribute

  end # Mapper
end # ROM

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rom-0.2.0 lib/rom/mapper/attribute.rb