class JsonTestData::JsonSchema
Attributes
handler[RW]
schema[RW]
Public Class Methods
new(schema, handler = nil)
click to toggle source
# File lib/json_test_data/json_schema.rb, line 8 def initialize(schema, handler = nil) @schema = JSON.parse(schema, symbolize_names: true) @handler = handler end
Public Instance Methods
generate_example()
click to toggle source
# File lib/json_test_data/json_schema.rb, line 13 def generate_example generate(schema).to_json end
Private Instance Methods
generate(obj, key = nil)
click to toggle source
# File lib/json_test_data/json_schema.rb, line 33 def generate(obj, key = nil) if is_object?(obj) generate_object(obj) elsif is_array?(obj) generate_array(obj) else generate_data(obj, key) end end
generate_array(object)
click to toggle source
# File lib/json_test_data/json_schema.rb, line 90 def generate_array(object) object.fetch(:minItems, nil) || object[:minItems] = 1 if object.fetch(:items, nil) && object.fetch(:items).has_key?(:type) Array.new(object.fetch(:minItems)).map { generate(object.fetch(:items)) } else Array.new(object.fetch(:minItems)) end end
generate_data(obj, key)
click to toggle source
# File lib/json_test_data/json_schema.rb, line 18 def generate_data(obj, key) return handler.get_data(key, obj) if handler && handler.manages_key?(key) case obj.fetch(:type) when "number" JsonTestData::Number.create(obj) when "integer" JsonTestData::Number.create(obj) when "boolean" true when "string" JsonTestData::String.create(obj) end end
generate_object(object)
click to toggle source
# File lib/json_test_data/json_schema.rb, line 61 def generate_object(object) obj = {} if object.has_key?(:oneOf) schema_to_be_used = object.fetch(:oneOf).sample object = set_object(object, schema_to_be_used) end if object.has_key?(:properties) object.fetch(:properties).each do |k, v| unless v.has_key?(:type) obj[k] = nil next end obj[k] = generate(v, k) end end if object.has_key?(:minProperties) && obj.length < object.fetch(:minProperties, 0) (object.fetch(:minProperties) - obj.length).times do key = JsonTestData::String.create({type: "string"}) obj[key] = nil end end obj.size == 0 ? {} : obj end
is_array?(property)
click to toggle source
# File lib/json_test_data/json_schema.rb, line 47 def is_array?(property) property.fetch(:type, nil) == "array" end
is_object?(property)
click to toggle source
# File lib/json_test_data/json_schema.rb, line 43 def is_object?(property) property.fetch(:type, nil) == "object" end
resolve_ref(object, ref)
click to toggle source
# File lib/json_test_data/json_schema.rb, line 51 def resolve_ref(object, ref) ref = ref.split("/").map(&:to_sym)[1..-1] ref.each {|key| object = object.fetch(key) } object end
set_object(obj, schema)
click to toggle source
# File lib/json_test_data/json_schema.rb, line 57 def set_object(obj, schema) schema.has_key?(:"$ref") ? resolve_ref(obj, schema.fetch(:"$ref")) : schema end