Class: HashMangler::Mangler

Inherits:
Object
  • Object
show all
Defined in:
lib/hash_mangler/mangler.rb,
lib/hash_mangler/mangler/key_mangler.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Mangler

Returns a new instance of Mangler.

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :snake_case_method_names (Boolean)

    specifies if generated method names should be formatted to snake case, defaults to: true

  • :value_mangler (Proc)

    optional proc called for each leaf value defaults to: proc { |o| o }

  • :struct_class (Class)

    optional class which will be used to convert hash data into object, defaults to: HashMangler::SimpleStruct any class with [](key) and []=(key, value) accessor methods



16
17
18
19
20
# File 'lib/hash_mangler/mangler.rb', line 16

def initialize(options = {})
  @value_mangler           = options.fetch(:value_mangler, proc { |o| o })
  @struct_class            = options.fetch(:struct_class , HashMangler::SimpleStruct)
  @key_mangler             = KeyMangler.new(options)
end

Instance Method Details

#mangle(obj) ⇒ struct_class

Parameters:

  • obj (Object)

    for which mangling should be performed it should respond to []= and [] methods

Returns:

  • (struct_class)


27
28
29
30
31
32
33
# File 'lib/hash_mangler/mangler.rb', line 27

def mangle(obj)
  return @value_mangler.call(obj) unless obj.is_a?(Hash) || obj.is_a?(Array)
  return obj.map { |v| mangle(v) } if obj.is_a?(Array)
  r = @struct_class.new()
  obj.each { |k, v| r[@key_mangler.format(k)] = mangle(v) }
  r
end