class Massager::AttributeWithMultipleKeys

Attributes

block[R]
keys[R]
name[R]
opts[R]

Public Class Methods

new(name:, keys:, opts: {}, block: nil) click to toggle source
# File lib/massager/attributes/attribute_with_multiple_keys.rb, line 3
def initialize(name:, keys:, opts: {}, block: nil)
  raise ArgumentError, "If you pass multiple keys, you have to use modifier block" if block.nil?
  @name, @keys, @opts, @block = name, keys, opts, block
end

Public Instance Methods

call(values) click to toggle source
# File lib/massager/attributes/attribute_with_multiple_keys.rb, line 8
def call(values)
  values = values.values_at(*keys)
  values = block.call(*values)
  Dry::Monads::Maybe(opts[:type]).fmap {|type|
    begin
      value = type.call(values)
    rescue Dry::Types::ConstraintError
      raise Massager::ConstraintError, "Attribute #{name} did not pass the constraint for value of #{values.inspect}"
    end
  }
  values
end
match_schema?(attrs) click to toggle source
# File lib/massager/attributes/attribute_with_multiple_keys.rb, line 25
def match_schema?(attrs)
  (attrs.keys & keys).any?
end
return_result(values) click to toggle source
# File lib/massager/attributes/attribute_with_multiple_keys.rb, line 21
def return_result(values)
  values
end