Class: Remap::Rule::Each

Inherits:
Unit
  • Object
show all
Defined in:
lib/remap/rule/each.rb

Overview

Iterates over a rule, even if the rule is not a collection

Examples:

Upcase each value in an array

state = Remap::State.call(["John", "Jane"])
upcase = Remap::Rule::Map.call({}).then(&:upcase)
each = Remap::Rule::Each.call(rule: upcase)
error = -> failure { raise failure.exception }
each.call(state, &error).fetch(:value) # => ["JOHN", "JANE"]

Instance Method Summary collapse

Instance Method Details

#call(state, &error) ⇒ State<Enumerable>

Iterates over state and passes each value to rule Restores element, key & index before returning state

Parameters:

  • state (State<Enumerable>)

Returns:



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/remap/rule/each.rb', line 25

def call(state, &error)
  unless error
    raise ArgumentError, "Each#call(state, &error) requires a block"
  end

  state.map do |inner_state|
    rule.call(inner_state) do |failure|
      return error[failure]
    end
  end
end

#ruleRule

Returns:



17
# File 'lib/remap/rule/each.rb', line 17

attribute :rule, Types::Rule