class Reynard::ObjectBuilder
Defines dynamic classes based on schema and instantiates them for a response.
Public Class Methods
model_class(name, object_type)
click to toggle source
# File lib/reynard/object_builder.rb, line 44 def self.model_class(name, object_type) model_class_get(name) || model_class_set(name, object_type) end
model_class_get(name)
click to toggle source
# File lib/reynard/object_builder.rb, line 48 def self.model_class_get(name) Reynard::Models.const_get(name) rescue NameError nil end
model_class_set(name, object_type)
click to toggle source
# File lib/reynard/object_builder.rb, line 54 def self.model_class_set(name, object_type) if object_type == 'array' Reynard::Models.const_set(name, Class.new(Array)) else Reynard::Models.const_set(name, Class.new(Reynard::Model)) end end
new(media_type:, schema:, http_response:)
click to toggle source
# File lib/reynard/object_builder.rb, line 8 def initialize(media_type:, schema:, http_response:) @media_type = media_type @schema = schema @http_response = http_response end
Public Instance Methods
call()
click to toggle source
# File lib/reynard/object_builder.rb, line 30 def call if @schema.object_type == 'array' array = object_class.new data.each { |attributes| array << item_object_class.new(attributes) } array else object_class.new(data) end end
data()
click to toggle source
# File lib/reynard/object_builder.rb, line 40 def data @data ||= MultiJson.load(@http_response.body) end
item_object_class()
click to toggle source
# File lib/reynard/object_builder.rb, line 22 def item_object_class if @schema.item_schema_name self.class.model_class(@schema.item_schema_name, 'object') else OpenStruct end end
object_class()
click to toggle source
# File lib/reynard/object_builder.rb, line 14 def object_class if @media_type.schema_name self.class.model_class(@media_type.schema_name, @schema.object_type) else OpenStruct end end