Module: Tap::Schema::Utils
- Included in:
- Tap::Schema
- Defined in:
- lib/tap/schema/utils.rb
Instance Method Summary collapse
- #instantiate(data, app) ⇒ Object
- #resolve(data) ⇒ Object
- #resolved?(data) ⇒ Boolean
-
#symbolize(hash) ⇒ Object
Symbolizes the keys of hash.
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
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 |