class JsonSchema::Artesano::Hand
Constants
- PRIMITIVE_MATERIALS
Attributes
tool[R]
Public Class Methods
new(tool: Tools::Static)
click to toggle source
# File lib/json_schema/artesano/hand.rb, line 18 def initialize(tool: Tools::Static) self.use_tool(tool) end
Public Instance Methods
mold(sketch)
click to toggle source
# File lib/json_schema/artesano/hand.rb, line 26 def mold(sketch) transform( material(sketch) ) end
use_tool(tool)
click to toggle source
# File lib/json_schema/artesano/hand.rb, line 22 def use_tool(tool) @tool = tool.new end
Private Instance Methods
material(sketch)
click to toggle source
# File lib/json_schema/artesano/hand.rb, line 84 def material(sketch) JsonSchema.parse!(sketch).tap { |schema| schema.expand_references! } end
transform(material)
click to toggle source
# File lib/json_schema/artesano/hand.rb, line 32 def transform(material) # Enum if !material.enum.nil? return tool.shape_enum(material) end case material.type[0] when *PRIMITIVE_MATERIALS tool.shape_primitive(material) when 'object' # OneOf if material.one_of.any? item = tool.select_oneof( material.one_of ) return tool.shape_object( transform_object(item) ) end # Plain tool.shape_object( transform_object(material) ) when 'array' # AnyOf if material.any_of.any? items = tool.select_anyof( material.any_of ) items = [items] unless items.is_a?(Array) return tool.shape_array( transform_array(items) ) end # AllOf if material.all_of.any? array = material.all_of return tool.shape_array( transform_array(array) ) end tool.shape_array( transform_array(material) ) else # Null end end
transform_array(array)
click to toggle source
# File lib/json_schema/artesano/hand.rb, line 79 def transform_array(array) items = array.respond_to?(:items) ? [array.items] : array items.flatten.map { |item| transform(item) } end
transform_object(object)
click to toggle source
# File lib/json_schema/artesano/hand.rb, line 71 def transform_object(object) object.properties.inject(Hash.new) do |result, property| result.merge( { property[0] => transform( property[1] ) } ) end end