easy_json_matcher 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8247cb3e9791930357fc71b2adccd2207722d96c
4
- data.tar.gz: a016110a42e4c8b82b0b58e06b9c0a858d20af14
3
+ metadata.gz: 29eb515cf0aae680f37f2c881b061c8d56fa5cc0
4
+ data.tar.gz: 5f617e24d4270c30f26e6bed85692402adad047e
5
5
  SHA512:
6
- metadata.gz: ac9579c176287786a0f09bfe575f9362aa9d3ab723cf8ad6a94c18f546be62ec7f7cb08c1e9052f888129c0547ff8c2c82706e6c52042eb6ebe490acea22549c
7
- data.tar.gz: 79cf3770d9f3898dfec75acfff000133e88f2e636e7a9f2ec802fd9386995aad72c73c39836d6584518213b52f2060916a29f0eb570e508ae7857c071be24ecf
6
+ metadata.gz: 317e11578a3bd7420e88fa30ab294941a6d644a2303ecd2412cb2650973ed466ea565357455052bd0323acf4a1b30b4b9b63d89ce6b5266cb2205b09aadd6551
7
+ data.tar.gz: 5e12a27e3f4f436afec4951e26e8136df61662859a3b240c617b7c70d2d7aa891072724a976b1c6383334245446c654762b50da35652b88053feafb9c6b41ba9
@@ -29,6 +29,7 @@ module EasyJSONMatcher
29
29
  end
30
30
 
31
31
  def reset!
32
+ @validity = true
32
33
  errors.clear
33
34
  validators.each(&:reset!)
34
35
  end
@@ -0,0 +1,121 @@
1
+ require 'easy_json_matcher/validator_factory'
2
+ require 'json'
3
+ require 'easy_json_matcher/content_wrapper'
4
+ module EasyJSONMatcher
5
+ class Node < Validator
6
+ include ContentWrapper
7
+
8
+ attr_reader :validators, :validity, :strict
9
+
10
+ def initialize(opts: {})
11
+ super(options: opts)
12
+ @validators = []
13
+ @validity = true
14
+ end
15
+
16
+ def add_validator(validator)
17
+ validators << validator
18
+ end
19
+
20
+ def _post_initialise(options)
21
+ @strict = options[:strict]
22
+ end
23
+
24
+ def _validate
25
+ _validate_strict_keyset
26
+ validators.each do |val|
27
+ @validity = false unless _use_validator val
28
+ end
29
+ end
30
+
31
+ def reset!
32
+ errors.clear
33
+ validators.each(&:reset!)
34
+ end
35
+
36
+ def _validate_strict_keyset
37
+ _validate_keyset if strict
38
+ end
39
+
40
+ def _validate_keyset
41
+ unexpected_keys = keys - _expected_keys
42
+ errors << "#{unexpected_keys} found in addition to expected keys" unless unexpected_keys.empty?
43
+ end
44
+
45
+ def _expected_keys
46
+ validators.each_with_object([]) do |validator, keyset|
47
+ keyset << validator.key
48
+ end
49
+ end
50
+
51
+ def _use_validator(validator)
52
+ validator.valid? self
53
+ end
54
+
55
+ def _get_content_for(key)
56
+ content[key]
57
+ end
58
+
59
+ def _get_validator_for(key)
60
+ validators[key]
61
+ end
62
+
63
+ def _set_content(candidate)
64
+ @content = _is_root? ? _prep_root_content(candidate) : candidate[key]
65
+ end
66
+
67
+ def _is_root?
68
+ key.nil?
69
+ end
70
+
71
+ def get_errors
72
+ child_errors = _collect_child_errors
73
+ _wrap_errors(child_errors)
74
+ end
75
+
76
+ def _collect_child_errors
77
+ validators.each_with_object({}) do |val, container|
78
+ container.merge!(val.get_errors)
79
+ end
80
+ end
81
+
82
+ def _wrap_errors(child_errors)
83
+ _add_local_errors_to child_errors
84
+ unless _is_root?
85
+ _wrap_child_errors(child_errors)
86
+ else
87
+ _root_errors(child_errors)
88
+ end
89
+ end
90
+
91
+ def _add_local_errors_to(child_errors)
92
+ child_errors.merge!({node_errors_: errors}) unless errors.empty?
93
+ end
94
+
95
+ def _wrap_child_errors(child_errors)
96
+ errors_wrapper = {}
97
+ errors_wrapper[key] = child_errors
98
+ errors_wrapper
99
+ end
100
+
101
+ def _root_errors(child_errors)
102
+ errors.length > 0 ? {root: errors} : child_errors
103
+ end
104
+
105
+ def _prep_root_content(candidate)
106
+ candidate.is_a?(String) ? _parse_and_verify_json(candidate) : candidate
107
+ end
108
+
109
+ def _parse_and_verify_json(json)
110
+ begin
111
+ JSON.parse(json)
112
+ rescue JSON::ParserError
113
+ errors << '#{json} is not a valid JSON String'
114
+ end
115
+ end
116
+
117
+ def _no_errors?
118
+ validity && errors.empty?
119
+ end
120
+ end
121
+ end
@@ -14,7 +14,7 @@ module EasyJSONMatcher
14
14
  yield self if block_given?
15
15
  end
16
16
 
17
- def has_attribute(key:, opts: {}, custom_validator: nil)
17
+ def has_attribute(key:, opts: {})
18
18
  node.add_validator(_create_validator(key, opts))
19
19
  end
20
20
 
@@ -0,0 +1,104 @@
1
+ require 'easy_json_matcher/validator_factory'
2
+ require 'easy_json_matcher/node'
3
+ require 'easy_json_matcher/schema_library'
4
+ require 'easy_json_matcher/exceptions'
5
+ module EasyJSONMatcher
6
+ class SchemaGenerator
7
+
8
+ attr_reader :node, :name, :options, :glob_opts
9
+
10
+ def initialize(opts: {}, global_opts: {})
11
+ @name = opts.delete(:key)
12
+ @options = opts
13
+ @glob_opts = global_opts
14
+ yield self if block_given?
15
+ end
16
+
17
+ def has_attribute(key:, opts: {})
18
+ node.add_validator(_create_validator(key, opts))
19
+ end
20
+
21
+ ################ Methods for adding specific attribute types ##############
22
+
23
+ def contains_node(key:, opts: {})
24
+ generator = _node_generator _validator_opts(key, opts)
25
+ yield generator if block_given?
26
+ node.add_validator generator.generate_schema
27
+ end
28
+
29
+ def has_boolean(key:, opts: {})
30
+ has_attribute(key: key, opts: opts.merge({type: :boolean}))
31
+ end
32
+
33
+ def has_number(key: , opts: {})
34
+ has_attribute(key: key, opts: opts.merge({type: :number}))
35
+ end
36
+
37
+ def has_date(key:, opts: {})
38
+ has_attribute(key: key, opts: opts.merge({type: :date}))
39
+ end
40
+
41
+ def has_object(key:, opts: {})
42
+ has_attribute(key: key, opts: opts.merge({type: :object}))
43
+ end
44
+
45
+ def has_value(key:, opts: {})
46
+ has_attribute(key: key, opts: opts.merge({type: :value}))
47
+ end
48
+
49
+ def has_string(key:, opts: {})
50
+ has_attribute(key: key, opts: opts.merge({type: :string}))
51
+ end
52
+
53
+ def contains_array(key:, opts: {})
54
+ opts = opts.merge!({type: :array})
55
+ array_validator = _create_validator(key, opts)
56
+ yield array_validator if block_given?
57
+ node.add_validator array_validator
58
+ end
59
+
60
+ def has_schema(key:, opts: {})
61
+ has_attribute(key: key, opts: opts.merge({type: :schema}))
62
+ end
63
+
64
+ ################ Methods for generating the schema #########################
65
+
66
+ def generate_schema
67
+ node
68
+ end
69
+
70
+ def register(as:)
71
+ SchemaLibrary.add_schema(name: as, schema: generate_schema)
72
+ generate_schema
73
+ end
74
+
75
+ ################## Private methods #########################################
76
+
77
+ def _prep_schema_opts(schema_name, opts)
78
+ opts[:type] = :schema
79
+ opts[:name] = schema_name
80
+ opts
81
+ end
82
+
83
+ def _set_validator_key(validator, key)
84
+ validator.key = key
85
+ end
86
+
87
+ def _validator_opts(key, opts)
88
+ opts[:key] = key
89
+ glob_opts.merge(opts)
90
+ end
91
+
92
+ def _create_validator(key, opts)
93
+ ValidatorFactory.get_instance type: opts[:type], opts: _validator_opts(key, opts)
94
+ end
95
+
96
+ def _node_generator(opts = {})
97
+ self.class.new opts: opts, global_opts: glob_opts
98
+ end
99
+
100
+ def node
101
+ @node ||= Node.new(opts: _validator_opts(name, options))
102
+ end
103
+ end
104
+ end
@@ -1,3 +1,3 @@
1
1
  module EasyJSONMatcher
2
- VERSION = "0.2.1".freeze
2
+ VERSION = "0.2.2".freeze
3
3
  end
@@ -4,23 +4,22 @@ class CustomValidationsTest < ActiveSupport::TestCase
4
4
 
5
5
  test 'As a user, I want to be able to specify custom validations' do
6
6
  test_schema = EasyJSONMatcher::SchemaGenerator.new do |s|
7
- s.has_string key: :a_string, opts: { custom_validator: ->(candidate) { "String did not say 'hi'" unless candidate == 'hi' } }
7
+ string_validator = ->(candidate) { "String did not say 'hi'" unless candidate == 'hi' }
8
+ s.has_string key: :a_string, opts: { custom_validator: string_validator }
8
9
  end.generate_schema
9
10
 
10
11
  should_not_validate = {
11
12
  a_string: 'go away'
12
13
  }.to_json
13
14
 
14
- assert_not(test_schema.valid? should_not_validate)
15
+ assert_not(test_schema.valid?(should_not_validate))
15
16
 
16
17
  should_validate = {
17
18
  a_string: 'hi'
18
19
  }.to_json
19
20
 
20
-
21
21
  test_schema.reset!
22
22
 
23
23
  assert(test_schema.valid?(should_validate), test_schema.get_errors)
24
-
25
24
  end
26
25
  end
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class CustomValidationsTest < ActiveSupport::TestCase
4
+
5
+ test 'As a user, I want to be able to specify custom validations' do
6
+ test_schema = EasyJSONMatcher::SchemaGenerator.new do |s|
7
+ string_validator = ->(candidate) { "String did not say 'hi'" unless candidate == 'hi' }
8
+ s.has_string key: :a_string, opts: { custom_validator: string_validator }
9
+ end.generate_schema
10
+
11
+ should_not_validate = {
12
+ a_string: 'go away'
13
+ }.to_json
14
+
15
+ assert_not(test_schema.valid?(should_not_validate))
16
+
17
+ should_validate = {
18
+ a_string: 'hi'
19
+ }.to_json
20
+
21
+ test_schema.reset!
22
+
23
+ assert(test_schema.valid?(should_validate), test_schema.get_errors)
24
+ end
25
+ end
@@ -0,0 +1,262 @@
1
+ require 'test_helper'
2
+ require 'json'
3
+
4
+ # This test suite covers the basic concept of validating that a value is a
5
+ # certain type
6
+ class EasyJSONMatcherTest < ActiveSupport::TestCase
7
+
8
+ test "As a user I want to create new Schemas to match JSON objects" do
9
+ # This test represents the minimum level of implementation required to create a
10
+ # working node.
11
+ test_schema = EasyJSONMatcher::SchemaGenerator.new { |schema|
12
+ schema.contains_node(key: :data) do |node|
13
+ node.has_attribute(key: :title, opts: {type: :string})
14
+ end
15
+ }.register(as: :test)
16
+
17
+ valid_json = {
18
+ data: {
19
+ 'title'=> "here's a title"
20
+ }
21
+ }.to_json
22
+ assert(test_schema.valid? valid_json)
23
+ end
24
+
25
+ # The first thing the gem ought to do is to check that the JSON candidate is actually JSON
26
+ test "As a user, if the validation candidate cannot be parsed as JSON, the schema should not be valid" do
27
+ test_schema = EasyJSONMatcher::SchemaGenerator.new {|s|
28
+ s.has_number(key: :population_of_china_1970)
29
+ }.generate_schema
30
+
31
+ invalid_json = "'population_of_china_1970' 810000000"
32
+
33
+ assert_not(test_schema.valid? invalid_json)
34
+ end
35
+
36
+
37
+ test "As a user I want to be able to validate strings" do
38
+ test_schema = EasyJSONMatcher::SchemaGenerator.new {|schema|
39
+ schema.has_string(key: :string, opts: { required: :true})
40
+ }.generate_schema
41
+
42
+ valid_json = {
43
+ string: "Mrs Mogs Hamilton"
44
+ }.to_json
45
+
46
+ assert(test_schema.valid?(valid_json), 'String was not validated')
47
+
48
+ # There isn't really a clear case for the string validator picking up if a
49
+ # value is not intended to be a string since all json values are effectively
50
+ # strings, and how is the library to know if the client meant 16 to be passed
51
+ # as a number or as a string?
52
+ # invalid_json = {
53
+ # string: 16
54
+ # }.to_json
55
+ #
56
+ # assert_not(test_schema.valid?(invalid_json), 'Number was validated as a string')
57
+ end
58
+
59
+
60
+ test "As a user I want to be able to validate numbers" do
61
+
62
+ test_schema = EasyJSONMatcher::SchemaGenerator.new {|schema|
63
+ schema.has_number(key: :number, opts: {required: :true})
64
+ }.generate_schema
65
+
66
+ valid_json = {
67
+ number: 5.55,
68
+ }.to_json
69
+
70
+ assert(test_schema.valid?(valid_json), "Number was not validated")
71
+
72
+ invalid_json = {
73
+ number: "hi"
74
+ }.to_json
75
+ assert_not(test_schema.valid?(invalid_json), "\"hi\" should not have been valid")
76
+
77
+ invalid_nil = {
78
+ number: nil
79
+ }.to_json
80
+ assert_not(test_schema.valid?(invalid_nil), "#{invalid_nil} should not have validated, or thrown an error")
81
+ end
82
+
83
+ test "As a user I want to be able to validate booleans" do
84
+
85
+ test_schema = EasyJSONMatcher::SchemaGenerator.new {|schema|
86
+ schema.has_boolean(key: :true)
87
+ schema.has_boolean(key: :false)
88
+ }.generate_schema
89
+
90
+ valid_json = {
91
+ true: true,
92
+ false: false
93
+ }.to_json
94
+
95
+ assert(test_schema.valid?(valid_json), "Boolean was not validated")
96
+
97
+ invalid_json = {
98
+ true: 1,
99
+ false: "wibble"
100
+ }.to_json
101
+
102
+ # byebug
103
+ assert_not(test_schema.valid?(invalid_json), "\"1\" and \"wibble\" are not valid boolean values")
104
+ end
105
+
106
+ test "As a user I want to be able to validate Array values" do
107
+ test_schema = EasyJSONMatcher::SchemaGenerator.new {|schema|
108
+ schema.has_attribute(key: :array, opts: {type: :array})
109
+ }.generate_schema
110
+
111
+ valid_json = {
112
+ array: []
113
+ }.to_json
114
+
115
+ assert(test_schema.valid?(valid_json), "Array was not validated")
116
+
117
+ invalid_json = {
118
+ array: 1
119
+ }.to_json
120
+
121
+ assert(!test_schema.valid?(invalid_json), "\"1\" is not a valid array value")
122
+ end
123
+
124
+ test "As a user I want to be able to validate date values" do
125
+ test_schema = EasyJSONMatcher::SchemaGenerator.new { |schema|
126
+ schema.has_date(key: :date)
127
+ }.generate_schema
128
+
129
+ valid_json = {
130
+ date: "2015-01-15"
131
+ }.to_json
132
+
133
+ assert(test_schema.valid?(valid_json), "Date was not validated")
134
+
135
+ not_a_date = 'Good Night Mr. Tom'
136
+ invalid_json = {
137
+ date: not_a_date
138
+ }.to_json
139
+
140
+ assert_not(test_schema.valid?(invalid_json), "\"#{not_a_date}\" should not have been validated as a date")
141
+ end
142
+
143
+ test "As a user I want to be able to use different types of date format" do
144
+ flunk "Implement me"
145
+ end
146
+
147
+ test "As a user I want to validate object values" do
148
+ test_schema = EasyJSONMatcher::SchemaGenerator.new { |schema|
149
+ schema.has_object(key: :object)
150
+ }.generate_schema
151
+
152
+ is_an_object = {}
153
+
154
+ valid_json = {
155
+ object: is_an_object
156
+ }.to_json
157
+
158
+ assert(test_schema.valid?(valid_json),"#{is_an_object} was not validated as an object" )
159
+
160
+ not_an_object = "Popular Music"
161
+
162
+ invalid_json = {
163
+ object: not_an_object
164
+ }.to_json
165
+
166
+ assert_not(test_schema.valid?(invalid_json), "#{not_an_object} should not have validated as an object")
167
+ end
168
+
169
+ # Refers to validation of a JSON value attribute. This one is slightly tricky
170
+ # though since attempting to access a Ruby Hash with a missing key will return
171
+ # nil. The ValueValidator (or indeed any Validator) will accept nil as a value
172
+ # when the value is not marked as required.
173
+ # ValueValidator we will be stuck because although the other Validator
174
+ # classes nil indicates a missing value, in the case of the ValueValidator null is
175
+ # a valid value and we just want to check that there is a key available.
176
+ test "As a user I want to validate json value attributes" do
177
+ test_schema = EasyJSONMatcher::SchemaGenerator.new {|schema|
178
+ schema.has_value(key: :array)
179
+ schema.has_value(key: :boolean)
180
+ schema.has_value(key: :date)
181
+ schema.has_value(key: :number)
182
+ schema.has_value(key: :object)
183
+ schema.has_value(key: :string)
184
+ schema.has_value(key: :null)
185
+ }.generate_schema
186
+
187
+
188
+ valid_json = {
189
+ array: [],
190
+ boolean: true,
191
+ date: Date.today,
192
+ number: 1.11,
193
+ object: {},
194
+ string: 'The Tenderness of Wolves',
195
+ null: nil
196
+ }.to_json
197
+
198
+ assert(test_schema.valid?(valid_json), 'Value did not validate')
199
+
200
+ # There is no 'negative' test for this validator at this stage, since
201
+ # the lack of a value does not mean the key is required. See the tests
202
+ # on required validation later on.
203
+ end
204
+
205
+ test "As a user I want to validate nested json objects" do
206
+ test_schema = EasyJSONMatcher::SchemaGenerator.new {|schema|
207
+ schema.has_attribute(key: :level_1_attribute, opts: {type: :number})
208
+ schema.contains_node(key: :level_2) do |n|
209
+ n.has_attribute(key: :level_2_attribute, opts: {type: :number})
210
+ n.contains_node(key: :level_3) do |n3|
211
+ n3.has_attribute(key: :level_3_attribute, opts: {type: :number})
212
+ end
213
+ end
214
+ }.generate_schema
215
+
216
+ valid_json = {
217
+ level_1_attribute: 1,
218
+ level_2:{
219
+ level_2_attribute: 2,
220
+ level_3:{
221
+ level_3_attribute: 3
222
+ }
223
+ }
224
+ }.to_json
225
+
226
+ assert(test_schema.valid?(valid_json), "Nested JSON was not correctly validated")
227
+ end
228
+
229
+ test "As a user, if I specify a node and the content is not a node, it should be invalid without raising an error" do
230
+ test_schema = EasyJSONMatcher::SchemaGenerator.new {|schema|
231
+ schema.has_attribute(key: :fish_name, opts: {type: :string, required: :true})
232
+ schema.contains_node(key: :scientific_name) do |n|
233
+ n.has_attribute(key: :genus, opts: {type: :string, required: :true})
234
+ n.has_attribute(key: :species, opts: {type: :string, required: :true})
235
+ end
236
+ }.generate_schema
237
+
238
+ valid_json = {
239
+ fish_name: 'Clownfish',
240
+ scientific_name: {
241
+ genus: 'Amphiprion',
242
+ species: 'ocellaris'
243
+ }
244
+ }.to_json
245
+
246
+ assert(test_schema.valid?(valid_json), "#{valid_json} should have been valid")
247
+
248
+ invalid_with_array = {
249
+ fish_name: 'Green Mandarin',
250
+ scientific_name: ['Synchiropus', 'splendidus']
251
+ }.to_json
252
+
253
+ assert_not(test_schema.valid?(invalid_with_array), "#{invalid_with_array} should not have been valid as it has an array instead of a node")
254
+
255
+ invalid_with_primitive = {
256
+ fish_name: 'Hawaiian Tang',
257
+ scientific_name: 'Zebrasoma flavescens'
258
+ }.to_json
259
+
260
+ assert_not(test_schema.valid?(invalid_with_primitive), "#{invalid_with_primitive} shoudl not have been valid as it has a primite instead of a node")
261
+ end
262
+ end
data/test/reset_test.rb CHANGED
@@ -19,6 +19,12 @@ class ResetTest < ActiveSupport::TestCase
19
19
 
20
20
  test_schema.reset!
21
21
 
22
+ valid_json = {
23
+ bool: true
24
+ }.to_json
25
+
26
+ assert(test_schema.valid?(valid_json), test_schema.get_errors)
27
+
22
28
  errors = test_schema.get_errors
23
29
  assert errors[:node][:val].empty?
24
30
  assert errors[:bool].empty?
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+ class ResetTest < ActiveSupport::TestCase
3
+
4
+ test 'As a user, I want to be able to reuse a validator' do
5
+ # In other words, after a valid? has been called, the error messages need to be cleared
6
+ test_schema = EasyJSONMatcher::SchemaGenerator.new(global_opts: { strict: true }) { |sc|
7
+ sc.has_boolean key: :bool, opts: { required: true }
8
+ sc.contains_node key: :node do |n|
9
+ n.has_value key: :val
10
+ end
11
+ }.generate_schema
12
+
13
+ invalid_json = {
14
+
15
+ }.to_json
16
+
17
+ assert_not(test_schema.valid?(invalid_json))
18
+ assert_not(test_schema.get_errors[:bool][0].nil?)
19
+
20
+ test_schema.reset!
21
+
22
+ valid_json = {
23
+ bool: true
24
+ }.to_json
25
+
26
+ assert(test_schema.valid?(valid_json))
27
+
28
+ errors = test_schema.get_errors
29
+ assert errors[:node][:val].empty?
30
+ assert errors[:bool].empty?
31
+ end
32
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy_json_matcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - WJD Hamilton
@@ -27,9 +27,11 @@ files:
27
27
  - lib/easy_json_matcher/date_validator.rb
28
28
  - lib/easy_json_matcher/exceptions.rb
29
29
  - lib/easy_json_matcher/node.rb
30
+ - lib/easy_json_matcher/node.rb~
30
31
  - lib/easy_json_matcher/number_validator.rb
31
32
  - lib/easy_json_matcher/object_validator.rb
32
33
  - lib/easy_json_matcher/schema_generator.rb
34
+ - lib/easy_json_matcher/schema_generator.rb~
33
35
  - lib/easy_json_matcher/schema_library.rb
34
36
  - lib/easy_json_matcher/string_validator.rb
35
37
  - lib/easy_json_matcher/validation_error.rb
@@ -41,13 +43,16 @@ files:
41
43
  - lib/easy_json_matcher/version.rb~
42
44
  - lib/tasks/jsonapi_matcher_tasks.rake
43
45
  - test/custom_validations_test.rb
46
+ - test/custom_validations_test.rb~
44
47
  - test/easy_json_matcher_test.rb
48
+ - test/easy_json_matcher_test.rb~
45
49
  - test/error_messages_test.rb
46
50
  - test/global_validation_options_test.rb
47
51
  - test/json_api_home.txt
48
52
  - test/managing_schemas_test.rb
49
53
  - test/required_validation_test.rb
50
54
  - test/reset_test.rb
55
+ - test/reset_test.rb~
51
56
  - test/strict_mode_test.rb
52
57
  - test/test_helper.rb
53
58
  - test/validating_arrays_test.rb
@@ -77,13 +82,16 @@ specification_version: 4
77
82
  summary: Easily test your JSON output with templates and Schemas
78
83
  test_files:
79
84
  - test/custom_validations_test.rb
85
+ - test/custom_validations_test.rb~
80
86
  - test/easy_json_matcher_test.rb
87
+ - test/easy_json_matcher_test.rb~
81
88
  - test/error_messages_test.rb
82
89
  - test/global_validation_options_test.rb
83
90
  - test/json_api_home.txt
84
91
  - test/managing_schemas_test.rb
85
92
  - test/required_validation_test.rb
86
93
  - test/reset_test.rb
94
+ - test/reset_test.rb~
87
95
  - test/strict_mode_test.rb
88
96
  - test/test_helper.rb
89
97
  - test/validating_arrays_test.rb