Class: JsonNormalizer

Inherits:
Object
  • Object
show all
Defined in:
lib/json_normalizer.rb

Instance Method Summary collapse

Constructor Details

#initialize(map) ⇒ JsonNormalizer

Init requires pre defined JSON map. Ex. { “this_key”: [“morphed”, “to”, “this_key”] }



7
8
9
10
11
# File 'lib/json_normalizer.rb', line 7

def initialize(map)
  @map = make_hash(map)
  @mapped_keys = mapped_keys
  @keymap = keymap
end

Instance Method Details

#batch_translate(batch = []) ⇒ Object



27
28
29
30
# File 'lib/json_normalizer.rb', line 27

def batch_translate(batch=[])
  batch.map!{|item| make_hash(item) }.map!{|item| recur_translate(item) }
  batch
end

#fetch_key(key) ⇒ Object



17
18
19
# File 'lib/json_normalizer.rb', line 17

def fetch_key(key)
  @keymap[key]
end

#key_contained?(key) ⇒ Boolean

Returns:

  • (Boolean)


13
14
15
# File 'lib/json_normalizer.rb', line 13

def key_contained?(key)
  @mapped_keys.include?(key)
end

#keymapObject

SETTERS #####



63
64
65
66
67
# File 'lib/json_normalizer.rb', line 63

def keymap
  km = {}
  @map.each {|k,v| v.each{ |old_key| km.merge!({old_key => k}) } }
  km
end

#make_hash(item) ⇒ Object



32
33
34
# File 'lib/json_normalizer.rb', line 32

def make_hash(item)
  [Hash, Array].include?(item.class) ? item : JSON.parse(item)
end

#mapped_keysObject



69
70
71
# File 'lib/json_normalizer.rb', line 69

def mapped_keys
  @map.values.flatten
end

#recur_translate(json) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/json_normalizer.rb', line 41

def recur_translate(json)
  if json.is_a?(Array)
    json.each do |j|
      translate(j) if [Hash, Array].include?(j.class)
    end
  else
    json.keys.each do |key|
      if json[key].is_a?(Array)
        translate(json[key])
        swap_key(json,key)
      else
        if json[key].respond_to?(:keys)
          translate(json[key])
        end
        swap_key(json,key)
      end
    end
  end
  json
end

#swap_key(json, key) ⇒ Object



21
22
23
24
25
# File 'lib/json_normalizer.rb', line 21

def swap_key(json, key)
  if self.key_contained?(key)
    json[fetch_key(key)] = json.delete(key)
  end
end

#translate(json) ⇒ Object



36
37
38
39
# File 'lib/json_normalizer.rb', line 36

def translate(json)
  json = make_hash(json)
  recur_translate(json)
end