json-schema-openc-fork 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE.md +19 -0
  3. data/README.textile +452 -0
  4. data/lib/json-schema.rb +19 -0
  5. data/lib/json-schema/attribute.rb +43 -0
  6. data/lib/json-schema/attributes/additionalitems.rb +28 -0
  7. data/lib/json-schema/attributes/additionalproperties.rb +58 -0
  8. data/lib/json-schema/attributes/allof.rb +39 -0
  9. data/lib/json-schema/attributes/anyof.rb +47 -0
  10. data/lib/json-schema/attributes/dependencies.rb +44 -0
  11. data/lib/json-schema/attributes/disallow.rb +12 -0
  12. data/lib/json-schema/attributes/divisibleby.rb +22 -0
  13. data/lib/json-schema/attributes/enum.rb +24 -0
  14. data/lib/json-schema/attributes/extends.rb +50 -0
  15. data/lib/json-schema/attributes/format.rb +14 -0
  16. data/lib/json-schema/attributes/formats/custom.rb +21 -0
  17. data/lib/json-schema/attributes/formats/date.rb +24 -0
  18. data/lib/json-schema/attributes/formats/date_time.rb +36 -0
  19. data/lib/json-schema/attributes/formats/date_time_v4.rb +15 -0
  20. data/lib/json-schema/attributes/formats/ip.rb +41 -0
  21. data/lib/json-schema/attributes/formats/time.rb +22 -0
  22. data/lib/json-schema/attributes/formats/uri.rb +20 -0
  23. data/lib/json-schema/attributes/items.rb +26 -0
  24. data/lib/json-schema/attributes/limit.rb +179 -0
  25. data/lib/json-schema/attributes/maxdecimal.rb +18 -0
  26. data/lib/json-schema/attributes/multipleof.rb +11 -0
  27. data/lib/json-schema/attributes/not.rb +30 -0
  28. data/lib/json-schema/attributes/oneof.rb +56 -0
  29. data/lib/json-schema/attributes/pattern.rb +18 -0
  30. data/lib/json-schema/attributes/patternproperties.rb +22 -0
  31. data/lib/json-schema/attributes/properties.rb +74 -0
  32. data/lib/json-schema/attributes/properties_optional.rb +26 -0
  33. data/lib/json-schema/attributes/ref.rb +74 -0
  34. data/lib/json-schema/attributes/required.rb +28 -0
  35. data/lib/json-schema/attributes/type.rb +83 -0
  36. data/lib/json-schema/attributes/type_v4.rb +29 -0
  37. data/lib/json-schema/attributes/uniqueitems.rb +16 -0
  38. data/lib/json-schema/errors/custom_format_error.rb +6 -0
  39. data/lib/json-schema/errors/json_parse_error.rb +6 -0
  40. data/lib/json-schema/errors/schema_error.rb +6 -0
  41. data/lib/json-schema/errors/validation_error.rb +46 -0
  42. data/lib/json-schema/schema.rb +63 -0
  43. data/lib/json-schema/schema/reader.rb +113 -0
  44. data/lib/json-schema/schema/validator.rb +36 -0
  45. data/lib/json-schema/util/array_set.rb +14 -0
  46. data/lib/json-schema/util/uri.rb +16 -0
  47. data/lib/json-schema/util/uuid.rb +285 -0
  48. data/lib/json-schema/validator.rb +592 -0
  49. data/lib/json-schema/validators/draft1.rb +45 -0
  50. data/lib/json-schema/validators/draft2.rb +46 -0
  51. data/lib/json-schema/validators/draft3.rb +50 -0
  52. data/lib/json-schema/validators/draft4.rb +56 -0
  53. data/lib/json-schema/validators/hyper-draft4.rb +14 -0
  54. data/resources/draft-01.json +155 -0
  55. data/resources/draft-02.json +166 -0
  56. data/resources/draft-03.json +174 -0
  57. data/resources/draft-04.json +150 -0
  58. data/test/data/all_of_ref_data.json +3 -0
  59. data/test/data/any_of_ref_data.json +7 -0
  60. data/test/data/bad_data_1.json +3 -0
  61. data/test/data/good_data_1.json +3 -0
  62. data/test/data/one_of_ref_links_data.json +5 -0
  63. data/test/schemas/address_microformat.json +18 -0
  64. data/test/schemas/all_of_ref_base_schema.json +6 -0
  65. data/test/schemas/all_of_ref_schema.json +7 -0
  66. data/test/schemas/any_of_ref_jane_schema.json +4 -0
  67. data/test/schemas/any_of_ref_jimmy_schema.json +4 -0
  68. data/test/schemas/any_of_ref_john_schema.json +4 -0
  69. data/test/schemas/any_of_ref_schema.json +15 -0
  70. data/test/schemas/definition_schema.json +15 -0
  71. data/test/schemas/extends_and_additionalProperties-1-filename.schema.json +34 -0
  72. data/test/schemas/extends_and_additionalProperties-1-ref.schema.json +34 -0
  73. data/test/schemas/extends_and_additionalProperties-2-filename.schema.json +33 -0
  74. data/test/schemas/extends_and_additionalProperties-2-ref.schema.json +33 -0
  75. data/test/schemas/good_schema_1.json +10 -0
  76. data/test/schemas/good_schema_2.json +10 -0
  77. data/test/schemas/good_schema_extends1.json +10 -0
  78. data/test/schemas/good_schema_extends2.json +13 -0
  79. data/test/schemas/inner.schema.json +21 -0
  80. data/test/schemas/one_of_ref_links_schema.json +16 -0
  81. data/test/schemas/ref john with spaces schema.json +11 -0
  82. data/test/schemas/relative_definition_schema.json +8 -0
  83. data/test/schemas/self_link_schema.json +17 -0
  84. data/test/schemas/up_link_schema.json +17 -0
  85. data/test/test_all_of_ref_schema.rb +35 -0
  86. data/test/test_any_of_ref_schema.rb +35 -0
  87. data/test/test_bad_schema_ref.rb +39 -0
  88. data/test/test_common_test_suite.rb +66 -0
  89. data/test/test_custom_format.rb +116 -0
  90. data/test/test_definition.rb +15 -0
  91. data/test/test_extended_schema.rb +62 -0
  92. data/test/test_extends_and_additionalProperties.rb +52 -0
  93. data/test/test_files_v3.rb +43 -0
  94. data/test/test_fragment_resolution.rb +30 -0
  95. data/test/test_fragment_validation_with_ref.rb +34 -0
  96. data/test/test_full_validation.rb +208 -0
  97. data/test/test_helper.rb +47 -0
  98. data/test/test_initialize_data.rb +118 -0
  99. data/test/test_jsonschema_draft1.rb +171 -0
  100. data/test/test_jsonschema_draft2.rb +142 -0
  101. data/test/test_jsonschema_draft3.rb +502 -0
  102. data/test/test_jsonschema_draft4.rb +704 -0
  103. data/test/test_list_option.rb +21 -0
  104. data/test/test_merge_missing_values.rb +45 -0
  105. data/test/test_minitems.rb +16 -0
  106. data/test/test_one_of.rb +85 -0
  107. data/test/test_ruby_schema.rb +59 -0
  108. data/test/test_schema_loader.rb +74 -0
  109. data/test/test_schema_type_attribute.rb +20 -0
  110. data/test/test_schema_validation.rb +185 -0
  111. data/test/test_stringify.rb +48 -0
  112. data/test/test_uri_related.rb +67 -0
  113. data/test/test_validator.rb +53 -0
  114. metadata +284 -0
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+
3
+ if Gem::Specification::find_all_by_name('multi_json').any?
4
+ require 'multi_json'
5
+
6
+ # Force MultiJson to load an engine before we define the JSON constant here; otherwise,
7
+ # it looks for things that are under the JSON namespace that aren't there (since we have defined it here)
8
+ MultiJson.respond_to?(:adapter) ? MultiJson.adapter : MultiJson.engine
9
+ end
10
+
11
+ require 'json-schema/util/array_set'
12
+ require 'json-schema/util/uri'
13
+ require 'json-schema/schema'
14
+ require 'json-schema/schema/reader'
15
+ require 'json-schema/validator'
16
+
17
+ Dir[File.join(File.dirname(__FILE__), "json-schema/attributes/*.rb")].each {|file| require file }
18
+ Dir[File.join(File.dirname(__FILE__), "json-schema/attributes/formats/*.rb")].each {|file| require file }
19
+ Dir[File.join(File.dirname(__FILE__), "json-schema/validators/*.rb")].sort!.each {|file| require file }
@@ -0,0 +1,43 @@
1
+ require 'json-schema/errors/validation_error'
2
+
3
+ module JSON
4
+ class Schema
5
+ class Attribute
6
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
7
+ end
8
+
9
+ def self.build_fragment(fragments)
10
+ "#/#{fragments.join('/')}"
11
+ end
12
+
13
+ def self.validation_error(processor, message, fragments, current_schema, failed_attribute, record_errors)
14
+ error = ValidationError.new(message, fragments, failed_attribute, current_schema)
15
+ if record_errors
16
+ processor.validation_error(error)
17
+ else
18
+ raise error
19
+ end
20
+ end
21
+
22
+ def self.validation_errors(validator)
23
+ validator.validation_errors
24
+ end
25
+
26
+ TYPE_CLASS_MAPPINGS = {
27
+ "string" => String,
28
+ "number" => Numeric,
29
+ "integer" => Integer,
30
+ "boolean" => [TrueClass, FalseClass],
31
+ "object" => Hash,
32
+ "array" => Array,
33
+ "null" => NilClass,
34
+ "any" => Object
35
+ }
36
+
37
+ def self.data_valid_for_type?(data, type)
38
+ valid_classes = TYPE_CLASS_MAPPINGS.fetch(type) { return true }
39
+ Array(valid_classes).any? { |c| data.is_a?(c) }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,28 @@
1
+ require 'json-schema/attribute'
2
+
3
+ module JSON
4
+ class Schema
5
+ class AdditionalItemsAttribute < Attribute
6
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
7
+ return unless data.is_a?(Array)
8
+
9
+ schema = current_schema.schema
10
+ return unless schema['items'].is_a?(Array)
11
+
12
+ case schema['additionalItems']
13
+ when false
14
+ if schema['items'].length != data.length
15
+ message = "The property '#{build_fragment(fragments)}' contains additional array elements outside of the schema when none are allowed"
16
+ validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
17
+ end
18
+ when Hash
19
+ additional_items_schema = JSON::Schema.new(schema['additionalItems'], current_schema.uri, validator)
20
+ data.each_with_index do |item, i|
21
+ next if i < schema['items'].length
22
+ additional_items_schema.validate(item, fragments + [i.to_s], processor, options)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,58 @@
1
+ require 'json-schema/attribute'
2
+ require 'json-schema/attributes/extends'
3
+
4
+ module JSON
5
+ class Schema
6
+ class AdditionalPropertiesAttribute < Attribute
7
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
8
+ schema = current_schema.schema
9
+ return unless data.is_a?(Hash) && (schema['type'].nil? || schema['type'] == 'object')
10
+
11
+ extra_properties = remove_valid_properties(data.keys, current_schema, validator)
12
+
13
+ addprop = schema['additionalProperties']
14
+ if addprop.is_a?(Hash)
15
+ matching_properties = extra_properties # & addprop.keys
16
+ matching_properties.each do |key|
17
+ additional_property_schema = JSON::Schema.new(addprop[key] || addprop, current_schema.uri, validator)
18
+ additional_property_schema.validate(data[key], fragments + [key], processor, options)
19
+ end
20
+ extra_properties -= matching_properties
21
+ end
22
+
23
+ if extra_properties.any? && (addprop == false || (addprop.is_a?(Hash) && !addprop.empty?))
24
+ message = "The property '#{build_fragment(fragments)}' contains additional properties #{extra_properties.inspect} outside of the schema when none are allowed"
25
+ validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
26
+ end
27
+ end
28
+
29
+ def self.remove_valid_properties(extra_properties, current_schema, validator)
30
+ schema = current_schema.schema
31
+
32
+ if schema['properties']
33
+ extra_properties = extra_properties - schema['properties'].keys
34
+ end
35
+
36
+ if schema['patternProperties']
37
+ schema['patternProperties'].each_key do |key|
38
+ regexp = Regexp.new(key)
39
+ extra_properties.reject! { |prop| regexp.match(prop) }
40
+ end
41
+ end
42
+
43
+ if extended_schemas = schema['extends']
44
+ extended_schemas = [extended_schemas] unless extended_schemas.is_a?(Array)
45
+ extended_schemas.each do |schema_value|
46
+ _, extended_schema = JSON::Schema::ExtendsAttribute.get_extended_uri_and_schema(schema_value, current_schema, validator)
47
+ if extended_schema
48
+ extra_properties = remove_valid_properties(extra_properties, extended_schema, validator)
49
+ end
50
+ end
51
+ end
52
+
53
+ extra_properties
54
+ end
55
+
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,39 @@
1
+ require 'json-schema/attribute'
2
+
3
+ module JSON
4
+ class Schema
5
+ class AllOfAttribute < Attribute
6
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
7
+ # Create an hash to hold errors that are generated during validation
8
+ errors = Hash.new { |hsh, k| hsh[k] = [] }
9
+ valid = true
10
+
11
+ current_schema.schema['allOf'].each_with_index do |element, schema_index|
12
+ schema = JSON::Schema.new(element,current_schema.uri,validator)
13
+
14
+ # We're going to add a little cruft here to try and maintain any validation errors that occur in the allOf
15
+ # We'll handle this by keeping an error count before and after validation, extracting those errors and pushing them onto an error array
16
+ pre_validation_error_count = validation_errors(processor).count
17
+
18
+ begin
19
+ schema.validate(data,fragments,processor,options)
20
+ rescue ValidationError
21
+ valid = false
22
+ end
23
+
24
+ diff = validation_errors(processor).count - pre_validation_error_count
25
+ while diff > 0
26
+ diff = diff - 1
27
+ errors["allOf ##{schema_index}"].push(validation_errors(processor).pop)
28
+ end
29
+ end
30
+
31
+ if !valid || !errors.empty?
32
+ message = "The property '#{build_fragment(fragments)}' of type #{data.class} did not match all of the required schemas"
33
+ validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
34
+ validation_errors(processor).last.sub_errors = errors
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,47 @@
1
+ require 'json-schema/attribute'
2
+
3
+ module JSON
4
+ class Schema
5
+ class AnyOfAttribute < Attribute
6
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
7
+ # Create a hash to hold errors that are generated during validation
8
+ errors = Hash.new { |hsh, k| hsh[k] = [] }
9
+ valid = false
10
+
11
+ original_data = data.is_a?(Hash) ? data.clone : data
12
+
13
+ current_schema.schema['anyOf'].each_with_index do |element, schema_index|
14
+ schema = JSON::Schema.new(element,current_schema.uri,validator)
15
+
16
+ # We're going to add a little cruft here to try and maintain any validation errors that occur in the anyOf
17
+ # We'll handle this by keeping an error count before and after validation, extracting those errors and pushing them onto a union error
18
+ pre_validation_error_count = validation_errors(processor).count
19
+
20
+ begin
21
+ schema.validate(data,fragments,processor,options)
22
+ valid = true
23
+ rescue ValidationError
24
+ # We don't care that these schemas don't validate - we only care that one validated
25
+ end
26
+
27
+ diff = validation_errors(processor).count - pre_validation_error_count
28
+ valid = false if diff > 0
29
+ while diff > 0
30
+ diff = diff - 1
31
+ errors["anyOf ##{schema_index}"].push(validation_errors(processor).pop)
32
+ end
33
+
34
+ break if valid
35
+
36
+ data = original_data
37
+ end
38
+
39
+ if !valid
40
+ message = "The property '#{build_fragment(fragments)}' of type #{data.class} did not match one or more of the required schemas"
41
+ validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
42
+ validation_errors(processor).last.sub_errors = errors
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,44 @@
1
+ require 'json-schema/attribute'
2
+
3
+ module JSON
4
+ class Schema
5
+ class DependenciesAttribute < Attribute
6
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
7
+ return unless data.is_a?(Hash)
8
+
9
+ current_schema.schema['dependencies'].each do |property, dependency_value|
10
+ next unless data.has_key?(property.to_s)
11
+ next unless accept_value?(dependency_value)
12
+
13
+ case dependency_value
14
+ when String
15
+ validate_dependency(current_schema, data, property, dependency_value, fragments, processor, self, options)
16
+ when Array
17
+ dependency_value.each do |value|
18
+ validate_dependency(current_schema, data, property, value, fragments, processor, self, options)
19
+ end
20
+ else
21
+ schema = JSON::Schema.new(dependency_value, current_schema.uri, validator)
22
+ schema.validate(data, fragments, processor, options)
23
+ end
24
+ end
25
+ end
26
+
27
+ def self.validate_dependency(schema, data, property, value, fragments, processor, attribute, options)
28
+ return if data.key?(value.to_s)
29
+ message = "The property '#{build_fragment(fragments)}' has a property '#{property}' that depends on a missing property '#{value}'"
30
+ validation_error(processor, message, fragments, schema, attribute, options[:record_errors])
31
+ end
32
+
33
+ def self.accept_value?(value)
34
+ value.is_a?(String) || value.is_a?(Array) || value.is_a?(Hash)
35
+ end
36
+ end
37
+
38
+ class DependenciesV4Attribute < DependenciesAttribute
39
+ def self.accept_value?(value)
40
+ value.is_a?(Array) || value.is_a?(Hash)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,12 @@
1
+ require 'json-schema/attribute'
2
+
3
+ module JSON
4
+ class Schema
5
+ class DisallowAttribute < Attribute
6
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
7
+ return unless type = validator.attributes['type']
8
+ type.validate(current_schema, data, fragments, processor, validator, options.merge(:disallow => true))
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ require 'json-schema/attribute'
2
+
3
+ module JSON
4
+ class Schema
5
+ class DivisibleByAttribute < Attribute
6
+ def self.keyword
7
+ 'divisibleBy'
8
+ end
9
+
10
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
11
+ return unless data.is_a?(Numeric)
12
+
13
+ factor = current_schema.schema[keyword]
14
+
15
+ if factor == 0 || factor == 0.0 || (BigDecimal.new(data.to_s) % BigDecimal.new(factor.to_s)).to_f != 0
16
+ message = "The property '#{build_fragment(fragments)}' was not divisible by #{factor}"
17
+ validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ require 'json-schema/attribute'
2
+
3
+ module JSON
4
+ class Schema
5
+ class EnumAttribute < Attribute
6
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
7
+ enum = current_schema.schema['enum']
8
+ return if enum.include?(data)
9
+
10
+ values = enum.map { |val|
11
+ case val
12
+ when nil then 'null'
13
+ when Array then 'array'
14
+ when Hash then 'object'
15
+ else val.to_s
16
+ end
17
+ }.join(', ')
18
+
19
+ message = "The property '#{build_fragment(fragments)}' value #{data.inspect} did not match one of the following values: #{values}"
20
+ validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,50 @@
1
+ require 'json-schema/attribute'
2
+ require 'json-schema/attributes/ref'
3
+
4
+ module JSON
5
+ class Schema
6
+ class ExtendsAttribute < Attribute
7
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
8
+ schemas = current_schema.schema['extends']
9
+ schemas = [schemas] if !schemas.is_a?(Array)
10
+ schemas.each do |s|
11
+ uri,schema = get_extended_uri_and_schema(s, current_schema, validator)
12
+ if schema
13
+ schema.validate(data, fragments, processor, options)
14
+ elsif uri
15
+ message = "The extended schema '#{uri.to_s}' cannot be found"
16
+ validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
17
+ else
18
+ message = "The property '#{build_fragment(fragments)}' was not a valid schema"
19
+ validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
20
+ end
21
+ end
22
+ end
23
+
24
+ def self.get_extended_uri_and_schema(s, current_schema, validator)
25
+ uri,schema = nil,nil
26
+
27
+ s = {'$ref' => s} if s.is_a?(String)
28
+
29
+ if s.is_a?(Hash)
30
+ uri = current_schema.uri
31
+ if s['$ref']
32
+ ref_uri,ref_schema = JSON::Schema::RefAttribute.get_referenced_uri_and_schema(s, current_schema, validator)
33
+ if ref_schema
34
+ if s.size == 1 # Check if anything else apart from $ref
35
+ uri,schema = ref_uri,ref_schema
36
+ else
37
+ s = s.dup
38
+ s.delete '$ref'
39
+ s = ref_schema.schema.merge(s)
40
+ end
41
+ end
42
+ end
43
+ schema ||= JSON::Schema.new(s,uri,validator)
44
+ end
45
+
46
+ [uri,schema]
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,14 @@
1
+ require 'json-schema/attribute'
2
+
3
+ module JSON
4
+ class Schema
5
+ class FormatAttribute < Attribute
6
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
7
+ return unless data_valid_for_type?(data, current_schema.schema['type'])
8
+ format = current_schema.schema['format'].to_s
9
+ validator = validator.formats[format]
10
+ validator.validate(current_schema, data, fragments, processor, validator, options) unless validator.nil?
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ require 'json-schema/attribute'
2
+ require 'json-schema/errors/custom_format_error'
3
+
4
+ module JSON
5
+ class Schema
6
+ class CustomFormat < FormatAttribute
7
+ def initialize(validation_proc)
8
+ @validation_proc = validation_proc
9
+ end
10
+
11
+ def validate(current_schema, data, fragments, processor, validator, options = {})
12
+ begin
13
+ @validation_proc.call data
14
+ rescue JSON::Schema::CustomFormatError => e
15
+ message = "The property '#{self.class.build_fragment(fragments)}' #{e.message}"
16
+ self.class.validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ require 'json-schema/attribute'
2
+
3
+ module JSON
4
+ class Schema
5
+ class DateFormat < FormatAttribute
6
+ REGEXP = /\A\d{4}-\d{2}-\d{2}\z/
7
+
8
+ def self.validate(current_schema, data, fragments, processor, validator, options = {})
9
+ if data.is_a?(String)
10
+ error_message = "The property '#{build_fragment(fragments)}' must be a date in the format of YYYY-MM-DD"
11
+ if REGEXP.match(data)
12
+ begin
13
+ Date.parse(data)
14
+ rescue Exception
15
+ validation_error(processor, error_message, fragments, current_schema, self, options[:record_errors])
16
+ end
17
+ else
18
+ validation_error(processor, error_message, fragments, current_schema, self, options[:record_errors])
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end