Sha256: 5f13de1f583e495e8e119963679dd538a093541b91883985d90d7fc55e46daa0
Contents?: true
Size: 1.66 KB
Versions: 2
Compression:
Stored size: 1.66 KB
Contents
# frozen_string_literal: true 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) validate_keys(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 # @api private def validate_keys(traits, tuple) schema_keys = relation.schema.attributes.map(&:name) assoc_keys = tuple_evaluator.assoc_names(traits) unknown_keys = tuple.keys - schema_keys - assoc_keys raise UnknownFactoryAttributes, unknown_keys unless unknown_keys.empty? end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rom-factory-0.9.1 | lib/rom/factory/builder.rb |
rom-factory-0.9.0 | lib/rom/factory/builder.rb |