class Ensconce::HashBuilder

Used to convert pairs of arrays into a hash.

hash_builder = HashBuilder.new :keys => ['a', 'b'], :values => ['1', '2']
hash_builder.hash   --> {'a' => '1', 'b' => '2'}

Also allows modification of keys or values

hash_builder.keys_mod = lambda {|key| key.upcase}
hash_builder.hash   --> {'A' => '1', 'B' => '2'}

hash_builder.values_mod = lambda {|value| (value.to_i * 4).to_s}
hash_builder.hash   --> {'A' => '4', 'B' => '8'}

You can use a Proc to define a mod, but I’d recommend not doing so as a return statement in the Proc can cause an unexpected result (see tests).

Attributes

keys[RW]
keys_mod[RW]
values[RW]
values_mod[RW]

Public Class Methods

new(args = {}) click to toggle source
# File lib/ensconce/hash_builder.rb, line 23
def initialize(args = {})
  @keys = args[:keys]
  @values = args[:values]
  @keys_mod = args[:keys_mod]
  @values_mod = args[:values_mod]
end

Public Instance Methods

check_mods_are_valid() click to toggle source
# File lib/ensconce/hash_builder.rb, line 41
def check_mods_are_valid
  mod_attributes.each do |mod|
    mod = send mod
    next unless mod
    raise ":#{mod} must be a Proc or lambda" unless mod.kind_of? Proc
  end
end
check_required_attributes_present() click to toggle source
# File lib/ensconce/hash_builder.rb, line 49
def check_required_attributes_present
  required_attibutes.each do |attribute|
    raise ":#{attribute} is a required attribute but was not found" unless send(attribute)
  end
end
hash() click to toggle source
# File lib/ensconce/hash_builder.rb, line 35
def hash
  valid?
  map = [processed_keys, processed_values].transpose
  Hash[map]
end
mod_attributes() click to toggle source
# File lib/ensconce/hash_builder.rb, line 59
def mod_attributes
  [:keys_mod, :values_mod]
end
processed_keys() click to toggle source
# File lib/ensconce/hash_builder.rb, line 63
def processed_keys
  keys_mod ? keys.collect(&keys_mod) : keys
end
processed_values() click to toggle source
# File lib/ensconce/hash_builder.rb, line 67
def processed_values
  values_mod ? values.collect(&values_mod) : values
end
required_attibutes() click to toggle source
# File lib/ensconce/hash_builder.rb, line 55
def required_attibutes
  [:keys, :values]
end
valid?() click to toggle source
# File lib/ensconce/hash_builder.rb, line 30
def valid?
  check_required_attributes_present
  check_mods_are_valid
end