json_schemer-fuzz 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +2 -0
  3. data/CHANGELOG.md +19 -0
  4. data/CODE_OF_CONDUCT.md +84 -0
  5. data/CONTRIBUTING.md +47 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +221 -0
  8. data/SECURITY.md +13 -0
  9. data/lib/json_schemer/fuzz/keyword/additional_properties.rb +60 -0
  10. data/lib/json_schemer/fuzz/keyword/all_of.rb +46 -0
  11. data/lib/json_schemer/fuzz/keyword/any_of.rb +43 -0
  12. data/lib/json_schemer/fuzz/keyword/dependencies.rb +49 -0
  13. data/lib/json_schemer/fuzz/keyword/enum.rb +32 -0
  14. data/lib/json_schemer/fuzz/keyword/format.rb +119 -0
  15. data/lib/json_schemer/fuzz/keyword/items.rb +67 -0
  16. data/lib/json_schemer/fuzz/keyword/max_items.rb +43 -0
  17. data/lib/json_schemer/fuzz/keyword/max_length.rb +28 -0
  18. data/lib/json_schemer/fuzz/keyword/max_properties.rb +43 -0
  19. data/lib/json_schemer/fuzz/keyword/maximum.rb +44 -0
  20. data/lib/json_schemer/fuzz/keyword/min_items.rb +42 -0
  21. data/lib/json_schemer/fuzz/keyword/min_length.rb +27 -0
  22. data/lib/json_schemer/fuzz/keyword/min_properties.rb +37 -0
  23. data/lib/json_schemer/fuzz/keyword/minimum.rb +43 -0
  24. data/lib/json_schemer/fuzz/keyword/multiple_of.rb +27 -0
  25. data/lib/json_schemer/fuzz/keyword/not.rb +26 -0
  26. data/lib/json_schemer/fuzz/keyword/one_of.rb +74 -0
  27. data/lib/json_schemer/fuzz/keyword/pattern.rb +17 -0
  28. data/lib/json_schemer/fuzz/keyword/properties.rb +38 -0
  29. data/lib/json_schemer/fuzz/keyword/required.rb +39 -0
  30. data/lib/json_schemer/fuzz/keyword/unique_items.rb +31 -0
  31. data/lib/json_schemer/fuzz/keyword.rb +29 -0
  32. data/lib/json_schemer/fuzz/primitive_type/array.rb +50 -0
  33. data/lib/json_schemer/fuzz/primitive_type/boolean.rb +29 -0
  34. data/lib/json_schemer/fuzz/primitive_type/integer.rb +55 -0
  35. data/lib/json_schemer/fuzz/primitive_type/null.rb +30 -0
  36. data/lib/json_schemer/fuzz/primitive_type/number.rb +50 -0
  37. data/lib/json_schemer/fuzz/primitive_type/object.rb +54 -0
  38. data/lib/json_schemer/fuzz/primitive_type/string.rb +50 -0
  39. data/lib/json_schemer/fuzz/primitive_type.rb +31 -0
  40. data/lib/json_schemer/fuzz/version.rb +7 -0
  41. data/lib/json_schemer/fuzz.rb +170 -0
  42. data/lib/json_schemer-fuzz.rb +7 -0
  43. data.tar.gz.sig +0 -0
  44. metadata +387 -0
  45. metadata.gz.sig +0 -0
@@ -0,0 +1,39 @@
1
+ module JSONSchemer
2
+ module Fuzz
3
+ class Keyword
4
+ class Required
5
+ class << self
6
+ def invalid_params(attributes)
7
+ required_properties = attributes["required"]
8
+ raise "No required keyword given: #{attributes}" unless required_properties
9
+
10
+ generated_params = []
11
+
12
+ required_properties.each do |property|
13
+ template = JSONSchemer::Fuzz.default_param(attributes)
14
+ template.delete(property)
15
+ generated_params << template
16
+ end
17
+
18
+ generated_params
19
+ end
20
+
21
+ def valid_param(attributes)
22
+ required_properties = attributes["required"]
23
+ raise "No required keyword given: #{attributes}" unless required_properties
24
+
25
+ generated_param = {}
26
+
27
+ required_properties.each do |property|
28
+ properties_key = attributes.key?("members") ? "members" : "properties"
29
+ attribute = attributes[properties_key][property]
30
+ generated_param[property] = JSONSchemer::Fuzz.default_param(attribute)
31
+ end
32
+
33
+ generated_param
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,31 @@
1
+ module JSONSchemer
2
+ module Fuzz
3
+ class Keyword
4
+ class UniqueItems
5
+ class << self
6
+ def invalid_params(attributes)
7
+ unique_items_flag = attributes["uniqueItems"]
8
+ raise "No uniqueItems keyword given: #{attributes}" if unique_items_flag.nil?
9
+ return unless unique_items_flag
10
+
11
+ generated_params = []
12
+ template = valid_param(attributes)
13
+ template << template.sample
14
+ generated_params << template
15
+
16
+ generated_params
17
+ end
18
+
19
+ def valid_param(attributes)
20
+ attributes = Marshal.load(Marshal.dump(attributes))
21
+ unique_items_flag = attributes.delete("uniqueItems")
22
+ raise "No uniqueItems keyword given: #{attributes}" if unique_items_flag.nil?
23
+ return unless unique_items_flag
24
+
25
+ JSONSchemer::Fuzz.generators("array").valid_param(attributes).uniq
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,29 @@
1
+ module JSONSchemer
2
+ module Fuzz
3
+ class Keyword
4
+ end
5
+ end
6
+ end
7
+
8
+ require_relative "keyword/additional_properties"
9
+ require_relative "keyword/all_of"
10
+ require_relative "keyword/any_of"
11
+ require_relative "keyword/dependencies"
12
+ require_relative "keyword/enum"
13
+ require_relative "keyword/format"
14
+ require_relative "keyword/items"
15
+ require_relative "keyword/max_items"
16
+ require_relative "keyword/max_length"
17
+ require_relative "keyword/max_properties"
18
+ require_relative "keyword/maximum"
19
+ require_relative "keyword/min_items"
20
+ require_relative "keyword/min_length"
21
+ require_relative "keyword/min_properties"
22
+ require_relative "keyword/minimum"
23
+ require_relative "keyword/multiple_of"
24
+ require_relative "keyword/not"
25
+ require_relative "keyword/one_of"
26
+ require_relative "keyword/pattern"
27
+ require_relative "keyword/properties"
28
+ require_relative "keyword/required"
29
+ require_relative "keyword/unique_items"
@@ -0,0 +1,50 @@
1
+ module JSONSchemer
2
+ module Fuzz
3
+ class PrimitiveType
4
+ class Array
5
+ class << self
6
+ def invalid_params(attributes)
7
+ generated_params = []
8
+
9
+ if type = attributes["type"]
10
+ JSONSchemer::Fuzz::PrimitiveType.invalid_params_by_type(attributes).each do |invalid_param|
11
+ generated_params.push(invalid_param)
12
+ end
13
+ end
14
+
15
+ attributes.each do |keyword, attribute|
16
+ if klass = keyword_to_class_map[keyword]
17
+ klass.invalid_params(attributes).each do |invalid_param|
18
+ generated_params << invalid_param
19
+ end
20
+ end
21
+ end
22
+
23
+ generated_params
24
+ end
25
+
26
+ def valid_param(attributes = {})
27
+ valid_params = []
28
+
29
+ attributes.each do |keyword, attribute|
30
+ if klass = keyword_to_class_map[keyword]
31
+ valid_params << klass.valid_param(attributes)
32
+ end
33
+ end
34
+
35
+ valid_params.empty? ? ["sample", "array"] : valid_params.sample
36
+ end
37
+
38
+ def keyword_to_class_map
39
+ {
40
+ "minItems" => JSONSchemer::Fuzz::Keyword::MinItems,
41
+ "maxItems" => JSONSchemer::Fuzz::Keyword::MaxItems,
42
+ "uniqueItems" => JSONSchemer::Fuzz::Keyword::UniqueItems,
43
+ "items" => JSONSchemer::Fuzz::Keyword::Items,
44
+ }
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,29 @@
1
+ module JSONSchemer
2
+ module Fuzz
3
+ class PrimitiveType
4
+ class Boolean
5
+ class << self
6
+ def invalid_params(attributes)
7
+ generated_params = []
8
+
9
+ if type = attributes["type"]
10
+ valid_types = [type].flatten
11
+ generated_params = ["true", "false", "1", "0"] unless valid_types.include?("string")
12
+ JSONSchemer::Fuzz::PrimitiveType.invalid_params_by_type(attributes).each do |invalid_param|
13
+ generated_params.push(invalid_param)
14
+ end
15
+ else
16
+ generated_params = ["true", "false", "1", "0"]
17
+ end
18
+
19
+ generated_params
20
+ end
21
+
22
+ def valid_param(attributes = {})
23
+ [true, false].sample
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,55 @@
1
+ module JSONSchemer
2
+ module Fuzz
3
+ class PrimitiveType
4
+ class Integer
5
+ class << self
6
+ def invalid_params(attributes)
7
+ generated_params = []
8
+ if type = attributes["type"]
9
+ valid_types = [type].flatten
10
+ # TODO: Ideally this array would include a string number, as that is the intent here
11
+ ["&"].each { |val| generated_params << val } unless valid_types.include?("string")
12
+ # TODO: Ideally 0.1 would work here as invalid, as it is not an integer
13
+ # But it doesn't, so instead we use an array
14
+ generated_params << [0.1] unless valid_types.include?("number")
15
+ JSONSchemer::Fuzz::PrimitiveType.invalid_params_by_type(attributes).each do |invalid_param|
16
+ generated_params << invalid_param
17
+ end
18
+ else
19
+ generated_params = ["#"]
20
+ end
21
+
22
+ attributes.each do |keyword, attribute|
23
+ if (klass = keyword_to_class_map[keyword])
24
+ klass.invalid_params(attributes).each do |invalid_param|
25
+ generated_params << invalid_param
26
+ end
27
+ end
28
+ end
29
+
30
+ generated_params
31
+ end
32
+
33
+ def valid_param(attributes = {})
34
+ valid_params = []
35
+ attributes.each do |keyword, attribute|
36
+ if klass = keyword_to_class_map[keyword]
37
+ valid_params << klass.valid_param(attributes)
38
+ end
39
+ end
40
+
41
+ valid_params.empty? ? rand(100) : valid_params.sample
42
+ end
43
+
44
+ def keyword_to_class_map
45
+ {
46
+ "minimum" => JSONSchemer::Fuzz::Keyword::Minimum,
47
+ "maximum" => JSONSchemer::Fuzz::Keyword::Maximum,
48
+ "multipleOf" => JSONSchemer::Fuzz::Keyword::MultipleOf,
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,30 @@
1
+ module JSONSchemer
2
+ module Fuzz
3
+ class PrimitiveType
4
+ class Null
5
+ class << self
6
+ def invalid_params(attributes)
7
+ generated_params = []
8
+ if type = attributes["type"]
9
+ valid_types = [type].flatten
10
+ generated_params = ["nil", "0", "null", ""] unless valid_types.include?("string")
11
+ generated_params.push(false) unless valid_types.include?("boolean")
12
+
13
+ JSONSchemer::Fuzz::PrimitiveType.invalid_params_by_type(attributes).each do |invalid_param|
14
+ generated_params.push(invalid_param)
15
+ end
16
+ else
17
+ generated_params = ["nil", "0", "null", false, ""]
18
+ end
19
+
20
+ generated_params
21
+ end
22
+
23
+ def valid_param(attributes = {})
24
+ nil
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,50 @@
1
+ module JSONSchemer
2
+ module Fuzz
3
+ class PrimitiveType
4
+ class Number
5
+ class << self
6
+ def invalid_params(attributes)
7
+ generated_params = []
8
+ if type = attributes["type"]
9
+ valid_types = [type].flatten
10
+ generated_params = ["0.1", "10", "hoge"] unless valid_types.include?("string")
11
+ JSONSchemer::Fuzz::PrimitiveType.invalid_params_by_type(attributes).each do |invalid_param|
12
+ generated_params << invalid_param
13
+ end
14
+ end
15
+
16
+ attributes.each do |keyword, attribute|
17
+ if klass = keyword_to_class_map[keyword]
18
+ klass.invalid_params(attributes).each do |invalid_param|
19
+ generated_params << invalid_param
20
+ end
21
+ end
22
+ end
23
+
24
+ generated_params
25
+ end
26
+
27
+ def valid_param(attributes = {})
28
+ valid_params = []
29
+
30
+ attributes.each do |keyword, attribute|
31
+ if klass = keyword_to_class_map[keyword]
32
+ valid_params << klass.valid_param(attributes).to_f
33
+ end
34
+ end
35
+
36
+ valid_params.empty? ? rand : valid_params.sample
37
+ end
38
+
39
+ def keyword_to_class_map
40
+ {
41
+ "minimum" => JSONSchemer::Fuzz::Keyword::Minimum,
42
+ "maximum" => JSONSchemer::Fuzz::Keyword::Maximum,
43
+ "multipleOf" => JSONSchemer::Fuzz::Keyword::MultipleOf,
44
+ }
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,54 @@
1
+ module JSONSchemer
2
+ module Fuzz
3
+ class PrimitiveType
4
+ class Object
5
+ class << self
6
+ def invalid_params(attributes)
7
+ generated_params = []
8
+
9
+ if type = attributes["type"]
10
+ valid_types = [type].flatten
11
+ JSONSchemer::Fuzz::PrimitiveType.invalid_params_by_type(attributes).each do |invalid_param|
12
+ generated_params.push(invalid_param)
13
+ end
14
+ end
15
+
16
+ attributes.each do |keyword, attribute|
17
+ if klass = keyword_to_class_map[keyword]
18
+ klass.invalid_params(attributes).each do |invalid_param|
19
+ generated_params << invalid_param
20
+ end
21
+ end
22
+ end
23
+
24
+ generated_params
25
+ end
26
+
27
+ def valid_param(attributes = {})
28
+ generated_params = {}
29
+
30
+ attributes.each do |keyword, attribute|
31
+ if klass = keyword_to_class_map[keyword]
32
+ generated_params.merge!(klass.valid_param(attributes))
33
+ end
34
+ end
35
+
36
+ generated_params
37
+ end
38
+
39
+ def keyword_to_class_map
40
+ {
41
+ "members" => JSONSchemer::Fuzz::Keyword::Properties,
42
+ "properties" => JSONSchemer::Fuzz::Keyword::Properties,
43
+ "required" => JSONSchemer::Fuzz::Keyword::Required,
44
+ "minProperties" => JSONSchemer::Fuzz::Keyword::MinProperties,
45
+ "maxProperties" => JSONSchemer::Fuzz::Keyword::MaxProperties,
46
+ "additionalProperties" => JSONSchemer::Fuzz::Keyword::AdditionalProperties,
47
+ "dependencies" => JSONSchemer::Fuzz::Keyword::Dependencies,
48
+ }
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,50 @@
1
+ module JSONSchemer
2
+ module Fuzz
3
+ class PrimitiveType
4
+ class String
5
+ class << self
6
+ def invalid_params(attributes)
7
+ generated_params = []
8
+ if type = attributes["type"]
9
+ valid_types = [type].flatten
10
+ JSONSchemer::Fuzz::PrimitiveType.invalid_params_by_type(attributes).each do |invalid_param|
11
+ generated_params.push(invalid_param)
12
+ end
13
+ end
14
+
15
+ attributes.each do |keyword, attribute|
16
+ if klass = keyword_to_class_map[keyword]
17
+ klass.invalid_params(attributes).each do |invalid_param|
18
+ generated_params << invalid_param
19
+ end
20
+ end
21
+ end
22
+
23
+ generated_params.empty? ? [1] : generated_params
24
+ end
25
+
26
+ def valid_param(attributes = {})
27
+ generated_params = []
28
+
29
+ attributes.each do |keyword, attribute|
30
+ if klass = keyword_to_class_map[keyword]
31
+ generated_params << klass.valid_param(attributes)
32
+ end
33
+ end
34
+
35
+ generated_params.empty? ? "hoge" : generated_params.sample
36
+ end
37
+
38
+ def keyword_to_class_map
39
+ {
40
+ "pattern" => JSONSchemer::Fuzz::Keyword::Pattern,
41
+ "minLength" => JSONSchemer::Fuzz::Keyword::MinLength,
42
+ "maxLength" => JSONSchemer::Fuzz::Keyword::MaxLength,
43
+ "format" => JSONSchemer::Fuzz::Keyword::Format,
44
+ }
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,31 @@
1
+ require_relative "primitive_type/array"
2
+ require_relative "primitive_type/boolean"
3
+ require_relative "primitive_type/integer"
4
+ require_relative "primitive_type/null"
5
+ require_relative "primitive_type/number"
6
+ require_relative "primitive_type/object"
7
+ require_relative "primitive_type/string"
8
+
9
+ module JSONSchemer
10
+ module Fuzz
11
+ class PrimitiveType
12
+ class << self
13
+ def invalid_params_by_type(attributes)
14
+ type = attributes["type"]
15
+ raise "No type given: #{attributes}" unless type
16
+
17
+ valid_types = [type].flatten
18
+ valid_types.push("integer") if valid_types.include?("number")
19
+
20
+ invalid_params = []
21
+
22
+ GENERATOR_MAP.each do |key, klass|
23
+ invalid_params.push(klass.valid_param(attributes)) unless valid_types.include?(key)
24
+ end
25
+
26
+ invalid_params
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,7 @@
1
+ module JSONSchemer
2
+ module Fuzz
3
+ module Version
4
+ VERSION = "1.0.0"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,170 @@
1
+ # External gems
2
+ require "version_gem"
3
+ require "json_schemer"
4
+ require "file_exists" # must load before randexp
5
+ require "randexp"
6
+
7
+ # This gem
8
+ require_relative "fuzz/version"
9
+ require_relative "fuzz/keyword"
10
+ require_relative "fuzz/primitive_type"
11
+
12
+ module JSONSchemer
13
+ module Fuzz
14
+ GENERATOR_MAP = {
15
+ "array" => JSONSchemer::Fuzz::PrimitiveType::Array,
16
+ "boolean" => JSONSchemer::Fuzz::PrimitiveType::Boolean,
17
+ "integer" => JSONSchemer::Fuzz::PrimitiveType::Integer,
18
+ "null" => JSONSchemer::Fuzz::PrimitiveType::Null,
19
+ "number" => JSONSchemer::Fuzz::PrimitiveType::Number,
20
+ "object" => JSONSchemer::Fuzz::PrimitiveType::Object,
21
+ "string" => JSONSchemer::Fuzz::PrimitiveType::String,
22
+ }.freeze
23
+
24
+ extend self
25
+
26
+ def generators(type)
27
+ raise "no generator for #{type}" unless GENERATOR_MAP.key?(type)
28
+
29
+ GENERATOR_MAP[type]
30
+ end
31
+
32
+ # Generate invalid data
33
+ def generate(schema)
34
+ schema = JSON.parse(open(schema).read) if schema.instance_of?(String)
35
+ generated_params = []
36
+
37
+ if (type = schema["type"])
38
+ if type.instance_of?(Array) # union type
39
+ all_types.each do |target_type|
40
+ if type.include?(target_type)
41
+ generators(target_type).invalid_params(schema).each do |invalid_param|
42
+ generated_params.push(invalid_param)
43
+ end
44
+ else
45
+ generated_params.push(generators(target_type).invalid_params("type" => target_type))
46
+ end
47
+ end
48
+ elsif type == "any"
49
+ # do nothing
50
+ else
51
+ generators(type).invalid_params(schema).each do |invalid_param|
52
+ generated_params.push(invalid_param)
53
+ end
54
+ end
55
+ elsif schema.key?("members") || schema.key?("properties")
56
+ generators("object").invalid_params(schema).each do |invalid_param|
57
+ generated_params.push(invalid_param)
58
+ end
59
+ elsif schema.empty?
60
+ # do nothing
61
+ elsif schema.key?("minimum") || schema.key?("maximum")
62
+ generators("number").invalid_params(schema).each do |invalid_param|
63
+ generated_params.push(invalid_param)
64
+ end
65
+ elsif schema.key?("minItems") || schema.key?("maxItems")
66
+ generators("array").invalid_params(schema).each do |invalid_param|
67
+ generated_params << invalid_param
68
+ end
69
+ elsif schema.key?("minProperties") || schema.key?("maxProperties")
70
+ generators("object").invalid_params(schema).each do |invalid_param|
71
+ generated_params << invalid_param
72
+ end
73
+ elsif schema.key?("uniqueItems")
74
+ generators("array").invalid_params(schema).each do |invalid_param|
75
+ generated_params << invalid_param
76
+ end
77
+ elsif schema.key?("pattern")
78
+ generators("string").invalid_params(schema).each do |invalid_param|
79
+ generated_params << invalid_param
80
+ end
81
+ elsif schema.key?("minLength") || schema.key?("maxLength")
82
+ generators("string").invalid_params(schema).each do |invalid_param|
83
+ generated_params << invalid_param
84
+ end
85
+ elsif schema.key?("enum")
86
+ JSONSchemer::Fuzz::Keyword::Enum.invalid_params(schema).each do |invalid_param|
87
+ generated_params << invalid_param
88
+ end
89
+ elsif schema.key?("multipleOf")
90
+ generators("number").invalid_params(schema).each do |invalid_param|
91
+ generated_params << invalid_param
92
+ end
93
+ elsif schema.key?("items")
94
+ generators("array").invalid_params(schema).each do |invalid_param|
95
+ generated_params << invalid_param
96
+ end
97
+ elsif schema.key?("$ref")
98
+ raise "not impremented yet"
99
+ elsif schema.key?("allOf") || schema.key?("anyOf") || schema.key?("oneOf")
100
+ generators("object").invalid_params(schema).each do |invalid_param|
101
+ generated_params << invalid_param
102
+ end
103
+ elsif schema.key?("not")
104
+ JSONSchemer::Fuzz::Keyword::Not.invalid_params(schema).each do |invalid_param|
105
+ generated_params << invalid_param
106
+ end
107
+ else
108
+ raise "Not implemented generator for schema:#{schema}"
109
+ end
110
+
111
+ generated_params
112
+ end
113
+
114
+ # Generate valid data
115
+ def default_param(schema)
116
+ schema = JSON.parse(open(schema).read) if schema.instance_of?(String)
117
+
118
+ if (type = schema["type"])
119
+ type = type.sample if type.instance_of?(Array)
120
+ type = all_types.sample if type == "any"
121
+ generators(type).valid_param(schema)
122
+ elsif schema.key?("properties")
123
+ generators("object").valid_param(schema)
124
+ elsif schema.empty?
125
+ _, generator = JSONSchemer::Fuzz::GENERATOR_MAP.to_a.sample
126
+ generator.valid_param
127
+ elsif schema.key?("minimum") || schema.key?("maximum")
128
+ generators("number").valid_param(schema)
129
+ elsif schema.key?("minItems") || schema.key?("maxItems")
130
+ generators("array").valid_param(schema)
131
+ elsif schema.key?("minProperties") || schema.key?("maxProperties")
132
+ generators("object").valid_param(schema)
133
+ elsif schema.key?("uniqueItems")
134
+ generators("array").valid_param(schema)
135
+ elsif schema.key?("pattern")
136
+ generators("string").valid_param(schema)
137
+ elsif schema.key?("minLength") || schema.key?("maxLength")
138
+ generators("string").valid_param(schema)
139
+ elsif schema.key?("enum")
140
+ JSONSchemer::Fuzz::Keyword::Enum.valid_param(schema)
141
+ elsif schema.key?("multipleOf")
142
+ generators("number").valid_param(schema)
143
+ elsif schema.key?("items")
144
+ generators("array").valid_param(schema)
145
+ elsif schema.key?("$ref")
146
+ raise "not impremented yet"
147
+ elsif schema.key?("allOf")
148
+ JSONSchemer::Fuzz::Keyword::AllOf.valid_param(schema)
149
+ elsif schema.key?("anyOf")
150
+ JSONSchemer::Fuzz::Keyword::AnyOf.valid_param(schema)
151
+ elsif schema.key?("oneOf")
152
+ JSONSchemer::Fuzz::Keyword::OneOf.valid_param(schema)
153
+ elsif schema.key?("not")
154
+ JSONSchemer::Fuzz::Keyword::Not.valid_param(schema)
155
+ else
156
+ raise "Not implemented generator for schema:#{schema}"
157
+ end
158
+ end
159
+
160
+ private
161
+
162
+ def all_types
163
+ %w[array boolean integer null number object string]
164
+ end
165
+ end
166
+ end
167
+
168
+ JSONSchemer::Fuzz::Version.class_eval do
169
+ extend VersionGem::Basic
170
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file should be required by any tools (e.g. bundler) loading this library
4
+ # Bundler should automatically load this file, based on RubyGems' directory and naming conventions.
5
+ # For technical reasons, this cannot be require_relative.
6
+ # See: https://github.com/fxn/zeitwerk#for_gem_extension
7
+ require "json_schemer/fuzz"
data.tar.gz.sig ADDED
Binary file