class NxtSupport::HashTranslator::HashTranslationService

Public Instance Methods

call() click to toggle source
# File lib/nxt_support/util/hash_translator.rb, line 11
def call
  tuples.inject(hash.with_indifferent_access) do |acc, (old_key, new_key)|
    if new_key.is_a?(Hash)
      raise InvalidTranslationArgument.new("#{new_key} hash must contain only 1 key-value pair!") if new_key.size > 1
      key, value = new_key.shift
      raise InvalidTranslationArgument.new("#{value} must be a callable block!") unless value.respond_to?(:call)
      acc[key] = value.call(acc.delete(old_key))
    elsif new_key.is_a?(Array)
      value = acc.delete(old_key)
      new_key.each { |key| acc[key] = value }
    else
      acc[new_key] = acc.delete(old_key)
    end

    acc
  end
end