Sha256: 7e2d5b2013d87a1d3db55dc3c657e8d1aca475457b0c180863e447d76b0d1f58
Contents?: true
Size: 1.72 KB
Versions: 2
Compression:
Stored size: 1.72 KB
Contents
require 'dry/core/class_attributes' module ROM class Schema # @api private class Inferrer extend Dry::Core::ClassAttributes extend Initializer defines :attributes_inferrer, :attr_class MissingAttributesError = Class.new(StandardError) do def initialize(name, attributes) super("missing attributes in #{name.inspect} schema: #{attributes.map(&:inspect).join(', ')}") end end DEFAULT_ATTRIBUTES = [EMPTY_ARRAY, EMPTY_ARRAY].freeze attributes_inferrer -> * { DEFAULT_ATTRIBUTES } attr_class Attribute include Dry::Equalizer(:options) option :attr_class, default: -> { self.class.attr_class } option :enabled, default: -> { true } alias_method :enabled?, :enabled option :attributes_inferrer, default: -> { self.class.attributes_inferrer } # @api private def call(schema, gateway) if enabled? inferred, missing = attributes_inferrer.(schema, gateway, options) else inferred, missing = DEFAULT_ATTRIBUTES end attributes = merge_attributes(schema.attributes, inferred) check_all_attributes_defined(schema, attributes, missing) { attributes: attributes } end # @api private def check_all_attributes_defined(schema, all_known, not_inferred) not_defined = not_inferred - all_known.map(&:name) if not_defined.size > 0 raise MissingAttributesError.new(schema.name, not_defined) end end # @api private def merge_attributes(defined, inferred) defined_names = defined.map(&:name) defined + inferred.reject { |attr| defined_names.include?(attr.name) } end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rom-core-4.0.0.beta2 | lib/rom/schema/inferrer.rb |
rom-core-4.0.0.beta1 | lib/rom/schema/inferrer.rb |