Module: KeyDial::Coercion::Hashes::ClassMethods

Defined in:
lib/key_dial/coercion.rb

Instance Method Summary collapse

Instance Method Details

#from(obj) ⇒ Object

Allows you to do Hash.from(obj) to create a Hash from any object intelligently.



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/key_dial/coercion.rb', line 38

def from(obj)
  case obj
  when Hash
    return obj
  when Array
    # Hash from Array. Forgiving and avoids errors. ['a', 'b', 'c'] will become {0 => 'a', 1 => 'b', 2 => 'c'}

    obj.each_with_index.map { |k, i|
      if k.is_a?(Array)
        if k.empty?
          [i, nil]
        elsif k.size == 2
          k # k in this case is a keyval pair, e.g. [k, v]

        else
          [i, k]
        end
      else
        [i, k]
      end
    }.to_h
  when Struct
    # Hash from Struct

    return obj.to_h
  else
    {0 => obj}
  end
end