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