class Remap::Selector::Key

Selects value at key from state

@example Select the value at key :name from a hash

state = Remap::State.call({ name: "John" })
selector = Remap::Selector::Key.new(:name)

selector.call(state) do |state|
  state.fetch(:value)
end

Public Instance Methods

call(state, &block) click to toggle source

Selects {#key} from state and passes it to block

@param state [State<Hash<K, V>>]

@yieldparam [State<V>] @yieldreturn [State<U>]

@return [State<U>]

# File lib/remap/selector/key.rb, line 28
def call(state, &block)
  unless block
    raise ArgumentError, "The key selector requires an iteration block"
  end

  hash = state.fetch(:value) { return state }

  unless hash.is_a?(Hash)
    state.fatal!("Expected hash got %s", hash.class)
  end

  value = hash.fetch(key) do
    state.ignore!("Key [%s] (%s) not found", key, key.class)
  end

  state.set(value, key: key).then(&block)
end