Module: Tap::Schema::Utils

Included in:
Tap::Schema
Defined in:
lib/tap/schema/utils.rb

Instance Method Summary collapse

Instance Method Details

#instantiate(data, app) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/tap/schema/utils.rb', line 5

def instantiate(data, app)
  case data
  when Hash  then data['class'].instantiate(symbolize(data), app)
  when Array then data.shift.parse!(data, app)
  else raise "cannot instantiate: #{data.inspect}"
  end
end

#resolve(data) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/tap/schema/utils.rb', line 21

def resolve(data)
  return data if resolved?(data)
  
  case data
  when Hash
    unless resolved?(data)
      data['class'] = yield(data['id']) || data['id']
    end
  when Array 
    data[0] = yield(data[0]) || data[0]
  end
  
  data
end

#resolved?(data) ⇒ Boolean

Returns:

  • (Boolean)


13
14
15
16
17
18
19
# File 'lib/tap/schema/utils.rb', line 13

def resolved?(data)
  case data
  when Hash  then data['class'].respond_to?(:instantiate)
  when Array then data[0].respond_to?(:parse!)
  else false
  end
end

#symbolize(hash) ⇒ Object

Symbolizes the keys of hash. Returns non-hash values directly and raises an error in the event of a symbolize conflict.



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/tap/schema/utils.rb', line 38

def symbolize(hash)
  result = {}
  hash.each_pair do |key, value|
    key = key.to_sym || key
    
    if result.has_key?(key)
      raise "symbolize conflict: #{hash.inspect} (#{key.inspect})"
    end
    
    result[key] = value
  end
  result
end