A JSON FUZZ Generator in Ruby from JSON Schema files.
This gem is a re-write & renaming of dead-since-2015 json-fuzz-generator
,
It has been re-built on top of the modern json_schemer
instead of the unmaintained json-schema
.
Add this line to your application's Gemfile:
gem 'json_schemer-fuzz'
And then execute:
$ bundle
Or install it yourself as:
$ gem install json_schemer-fuzz
require "json_schema-fuzz"
json = <<~JSON
{
"title": "Basic Schema",
"type": "object",
"properties": {
"id" : {
"type": "integer",
"minimum": 0
},
"name": {
"type": "string"
},
"birthday": {
"type": "string",
"format": "date"
}
}
}
JSON
schema = JSON.parse(json)
JSONSchemer::Fuzz.default_param(schema)
# => {"id"=>0, "name"=>"hoge", "birthday"=>"1992-06-27"}
require "json_schema-fuzz"
json = <<~JSON
{
"title": "Basic Schema",
"type": "object",
"properties": {
"id" : {
"type": "integer",
"minimum": 0
},
"name": {
"type": "string"
},
"birthday": {
"type": "string",
"format": "date"
}
}
}
JSON
schema = JSON.parse(json)
JSONSchemer::Fuzz.generate(schema)
# => [
# ["sample", "array"],
# false,
# 83,
# nil,
# 0.8182545022111043,
# "hoge",
# {"id"=>"&", "name"=>"hoge", "birthday"=>"1992-06-27"},
# {"id"=>[0.1], "name"=>"hoge", "birthday"=>"1992-06-27"},
# {"id"=>["sample", "array"], "name"=>"hoge", "birthday"=>"1992-06-27"},
# {"id"=>false, "name"=>"hoge", "birthday"=>"1992-06-27"},
# {"id"=>nil, "name"=>"hoge", "birthday"=>"1992-06-27"},
# {"id"=>0.0, "name"=>"hoge", "birthday"=>"1992-06-27"},
# {"id"=>{}, "name"=>"hoge", "birthday"=>"1992-06-27"},
# {"id"=>"hoge", "name"=>"hoge", "birthday"=>"1992-06-27"},
# {"id"=>-1, "name"=>"hoge", "birthday"=>"1992-06-27"},
# {"id"=>0, "name"=>["sample", "array"], "birthday"=>"1992-06-27"},
# {"id"=>0, "name"=>true, "birthday"=>"1992-06-27"},
# {"id"=>0, "name"=>30, "birthday"=>"1992-06-27"},
# {"id"=>0, "name"=>nil, "birthday"=>"1992-06-27"},
# {"id"=>0, "name"=>0.8849255474901346, "birthday"=>"1992-06-27"},
# {"id"=>0, "name"=>{}, "birthday"=>"1992-06-27"},
# {"id"=>0, "name"=>"hoge", "birthday"=>["sample", "array"]},
# {"id"=>0, "name"=>"hoge", "birthday"=>true},
# {"id"=>0, "name"=>"hoge", "birthday"=>62},
# {"id"=>0, "name"=>"hoge", "birthday"=>nil},
# {"id"=>0, "name"=>"hoge", "birthday"=>0.05006772646327107},
# {"id"=>0, "name"=>"hoge", "birthday"=>{}},
# {"id"=>0, "name"=>"hoge", "birthday"=>"2010-01-32"},
# {"id"=>0, "name"=>"hoge", "birthday"=>"n2010-01-01"},
# {"id"=>0, "name"=>"hoge", "birthday"=>"2010-1-01"},
# {"id"=>0, "name"=>"hoge", "birthday"=>"2010-01-1"},
# {"id"=>0, "name"=>"hoge", "birthday"=>"2010-01-01n"}
# ]
Run tests!
bundle install
bundle exec rake
See CONTRIBUTING.md
Everyone interacting in this project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.
This Library adheres to Semantic Versioning 2.0.0. Violations of this scheme should be reported as bugs. Specifically, if a minor or patch version is released that breaks backward compatibility, a new version should be immediately released that restores compatibility. Breaking changes to the public API will only be introduced with new major versions.
To get a better understanding of how SemVer is intended to work over a project's lifetime, read this article from the creator of SemVer:
As a result of this policy, you can (and should) specify a dependency on these libraries using the Pessimistic Version Constraint with two digits of precision.
For example:
spec.add_dependency("json_schemer-fuzz", "~> 1.0")
The gem is available as open source under the terms of the MIT License . See LICENSE.txt for the official Copyright Notice.
- Copyright © 2014-2015 Naoki Shimizu
- Copyright © 2023 Peter H. Boling of Rails Bling