Sha256: de00a638e90913039ac0eb7a1d309cdb1a30a258a596d09b4118f6dbc8668f92

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

require 'dry/core/constants'

require 'rom/struct'
require 'rom/initializer'
require 'rom/factory/tuple_evaluator'
require 'rom/factory/builder/persistable'

module ROM::Factory
  # @api private
  class Builder
    extend ROM::Initializer

    include Dry::Core::Constants

    # @!attribute [r] attributes
    #   @return [ROM::Factory::Attributes]
    param :attributes

    # @!attribute [r] traits
    #   @return [Hash]
    param :traits, default: -> { EMPTY_HASH }

    # @!attribute [r] relation
    #   @return [ROM::Relation]
    option :relation, reader: false

    # @api private
    def tuple(*traits, **attrs)
      tuple_evaluator.defaults(traits, attrs)
    end

    # @api private
    def struct(*traits, **attrs)
      tuple_evaluator.struct(*traits, attrs)
    end
    alias_method :create, :struct

    # @api private
    def struct_namespace(namespace)
      with(relation: relation.struct_namespace(namespace))
    end

    # @api private
    def persistable(struct_namespace = ROM::Struct)
      Persistable.new(self, relation.struct_namespace(struct_namespace))
    end

    # @api private
    def tuple_evaluator
      @__tuple_evaluator__ ||= TupleEvaluator.new(attributes, options[:relation], traits)
    end

    # @api private
    def relation
      tuple_evaluator.relation
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rom-factory-0.7.0 lib/rom/factory/builder.rb