Module: DiffbotSimple::Symbolize

Included in:
V2::ApiHelper
Defined in:
lib/diffbot_simple/symbolize.rb

Class Method Summary collapse

Class Method Details

.symbolize(hash) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/diffbot_simple/symbolize.rb', line 3

def symbolize hash
  return hash unless hash.kind_of? Hash or hash.kind_of? Array
   sym_hash = y_combinator do |&f| 
    lambda do |h|
      if h.kind_of? Array
        h.map {|r| f.call(r)}
      elsif h.kind_of? Hash
        h.reduce({}) do |memo,(k,v)|
          v = f.call(v) if v.kind_of? Hash
          v = v.map {|u| f.call(u)} if v.kind_of? Array
          memo[k.to_sym] = v
          memo
        end
      else
        h
    end
    end
  end
  sym_hash.call hash
end

.y_combinator(&f) ⇒ Object



25
26
27
28
29
# File 'lib/diffbot_simple/symbolize.rb', line 25

def y_combinator(&f)
  lambda do |g|
    f.call {|*args| g[g][*args]}
  end.tap {|g| break g[g]}
end