Module: JsonSchemaSpec::Util

Defined in:
lib/json_schema_spec/util.rb

Class Method Summary collapse

Class Method Details

.deep_dup(hash) ⇒ Object



4
5
6
7
8
9
10
11
# File 'lib/json_schema_spec/util.rb', line 4

def deep_dup(hash)
  duplicate = hash.dup
  duplicate.each_pair do |k,v|
    tv = duplicate[k]
    duplicate[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? deep_dup(tv) : v
  end
  duplicate
end

.deep_merge(value, other_value) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/json_schema_spec/util.rb', line 13

def deep_merge(value, other_value)
  if value.is_a?(Hash) && other_value.is_a?(Hash)
    other_value.each_pair do |k, v|
      if v == :_DEL
        value.delete(k)
      else
        value[k] = deep_merge(value[k], v)
      end
    end
  
  elsif value.is_a?(Array) && other_value.is_a?(Array)
    value = (0..([ value.length, other_value.length ].max - 1)).collect do |i|
      deep_merge(value[i], other_value[i])
    end

  else

    value = other_value
  end

  value
end

.stringify_keys(value) ⇒ Object



36
37
38
# File 'lib/json_schema_spec/util.rb', line 36

def stringify_keys(value)
  work_on_keys(value) { |k| k.to_s }
end

.symbolize_keys(value) ⇒ Object



40
41
42
# File 'lib/json_schema_spec/util.rb', line 40

def symbolize_keys(value)
  work_on_keys(value) { |k| k.to_sym }
end

.work_on_keys(value, &block) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/json_schema_spec/util.rb', line 44

def work_on_keys(value, &block)
  if value.is_a?(Array)
    value.collect { |v| work_on_keys(v, &block) }

  elsif value.is_a?(Hash)
    value.inject({}) do |memo, (k, v)|
      k = (yield(k) rescue k) || k
      v = work_on_keys(v, &block)
      
      memo[k] = v
      memo
    end

  else value
  end
end