Sha256: 1649fc0789c539359e8ac27b6b6933289c1011b459f936f06efe5b6879dfec66
Contents?: true
Size: 1.08 KB
Versions: 3
Compression:
Stored size: 1.08 KB
Contents
module Chronicle module Models # Utility methods to build models from hash input module Builder # Build a nested a model with nested associated from a hash in json-ld format def build(obj) raise ArgumentError, 'Object must be a hash' unless obj.is_a?(Hash) type = obj[:@type] raise ArgumentError, 'Object must have a type' unless type model_klass = const_get(type.to_sym) raise ArgumentError, "Unknown model type: #{type}" unless model_klass # recursively create nested models # TODO: have a better way of detecting chronicle schema objects begin obj.each do |property, value| if value.is_a?(Hash) obj[property] = build(value) elsif value.is_a?(Array) obj[property] = value.map do |v| v.is_a?(Hash) ? build(v) : v end end end model_klass.new(obj.except(:@type)) rescue Chronicle::Models::AttributeError => e raise ArgumentError, e.message end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
chronicle-core-0.3.2 | lib/chronicle/models/builder.rb |
chronicle-core-0.3.1 | lib/chronicle/models/builder.rb |
chronicle-core-0.3.0 | lib/chronicle/models/builder.rb |