marty 1.0.36 → 1.0.37

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3ee1b4758299664b9d0140ae70dcd1b2c0dddc5e
4
- data.tar.gz: 865b7a125ce0321f3ca674936ab74023daa6c6a9
3
+ metadata.gz: 4e2be11ff162cb9ff6d61e1f98f91e3c24b692a8
4
+ data.tar.gz: ecc6fa69360347e2ac3b607adeb495534323b68c
5
5
  SHA512:
6
- metadata.gz: 1a3bce72d9bd0f1b5f9aa1f92bfca51385163be1b669fee56ef7faf71e0ea45919b3573f056bfb81ff07d8176e095f1c61c8dd0e067186573004686ad6fb05e1
7
- data.tar.gz: 3ebfdc6cd512712555ad8f329cf2d8d5f3a1655618cc95b5db5f2b75fdec1f8cb2d0e547252410eb7217a0b5eff6b08f81469983094dcd1fee9a8aa0f95f2c4c
6
+ metadata.gz: 49984e9ef1fa5e9c0145404a78a175f9c1dd333c2db218d083451e13a16f7a0e3b1b2233edee9e0e5b74d6eb996407640eb25ac695eaa32b4319ea1ab8046945
7
+ data.tar.gz: 0c7dba4c68ad11fb575c73801ce8d49d782f8d04b31733d7017b4b33fef779a2419f382364956bc2ffe984429ac1d6e457cc3ab4f4508c777be36091564f3019
@@ -151,7 +151,8 @@ class Marty::RpcController < ActionController::Base
151
151
  {error: the_error,
152
152
  data: res}) if the_error
153
153
  is_strict && the_error ?
154
- {error: "Error(s) validating: #{the_error}"} : res
154
+ {error: "Error(s) validating: #{the_error}",
155
+ data: res} : res
155
156
  end
156
157
  end
157
158
  end
@@ -5,15 +5,18 @@ module Marty
5
5
  private
6
6
  class PgEnumAttribute < JSON::Schema::Attribute
7
7
  def self.validate(curr_schema, data, frag, pro, validator, opt={})
8
- enum = nil
8
+ values = nil
9
+ path = '#/' + frag.join('/')
9
10
  begin
10
- enum = curr_schema.schema["pg_enum"].constantize
11
- rescue
12
- msg = "#{self.class.name} error: '#{data}' is not a pg_enum class"
11
+ cs = curr_schema.schema["pg_enum"]
12
+ enum = cs.constantize
13
+ values = enum::VALUES
14
+ rescue => e
15
+ msg = "The property '#{path}': '#{cs}' is not a pg_enum class"
13
16
  validation_error(pro, msg, frag, curr_schema, self, opt[:record_errors])
14
17
  end
15
- if !enum::VALUES.include?(data)
16
- msg = "#{self.class.name} error: '#{data}' not contained in #{enum}"
18
+ if values && !values.include?(data)
19
+ msg = "The property '#{path}' value '#{data}' not contained in #{enum}"
17
20
  validation_error(pro, msg, frag, curr_schema, self, opt[:record_errors])
18
21
  end
19
22
  end
data/lib/marty/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Marty
2
- VERSION = "1.0.36"
2
+ VERSION = "1.0.37"
3
3
  end
@@ -8,6 +8,10 @@ class ElectronicsEnum
8
8
  VALUES=Set['Phone','Keyboard','Terminator']
9
9
  end
10
10
 
11
+ class NotAnEnum
12
+ HI = "MOM"
13
+ end
14
+
11
15
  module Marty
12
16
 
13
17
  describe JsonSchema do
@@ -24,20 +28,28 @@ module Marty
24
28
  },
25
29
  }
26
30
  }
31
+ opt = { :validate_schema => true,
32
+ :errors_as_objects => false,
33
+ :version => Marty::JsonSchema::RAW_URI }
27
34
 
28
- it "returns true on correct simple data" do
35
+ it "returns no error on correct simple data" do
29
36
  data = {"a" => 5}
30
- expect(JSON::Validator.validate(simple_schema, data)).to be true
37
+ expect(JSON::Validator.fully_validate(simple_schema, data, opt)).to eq([])
31
38
  end
32
39
 
33
- it "returns false on incorrect simple data -- 1" do
40
+ it "returns error on incorrect simple data -- 1" do
34
41
  data = {"a" => 5.2}
35
- expect(JSON::Validator.validate(simple_schema, data)).to be false
42
+ expect(JSON::Validator.
43
+ fully_validate(simple_schema, data, opt)[0]).to include(
44
+ "property '#/a' of type number did not match the following type: integer")
36
45
  end
37
46
 
38
- it "returns false on incorrect simple data -- 2" do
47
+ it "returns error on incorrect simple data -- 2" do
39
48
  data = {"a" => "Kangaroo"}
40
- expect(JSON::Validator.validate(simple_schema, data)).to be false
49
+ expect(JSON::Validator.
50
+ fully_validate(simple_schema, data, opt)[0]).to include(
51
+ "property '#/a' of type string did not match the following type: integer")
52
+
41
53
  end
42
54
 
43
55
  ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
@@ -53,29 +65,33 @@ module Marty
53
65
  }
54
66
  }
55
67
 
56
- it "returns true on correct existing enums" do
68
+ it "returns no error on correct existing enums" do
57
69
  data = {"a" => 'Dog'}
58
- expect(JSON::Validator.validate(pg_schema_opt, data)).to be true
70
+ expect(JSON::Validator.fully_validate(pg_schema_opt, data, opt)).to eq([])
59
71
  end
60
72
 
61
- it "vacuously returns true on a field not validated" do
73
+ it "vacuously returns no error on a field not validated" do
62
74
  data = {"b" => 'Dawg'}
63
- expect(JSON::Validator.validate(pg_schema_opt, data)).to be true
75
+ expect(JSON::Validator.fully_validate(pg_schema_opt, data, opt)).to eq([])
64
76
  end
65
77
 
66
- it "returns false on non-existant enums" do
78
+ it "returns error on non-existant enums" do
67
79
  data = {"a" => 'Beer'}
68
- expect(JSON::Validator.validate(pg_schema_opt, data)).to be false
80
+ expect(JSON::Validator.
81
+ fully_validate(pg_schema_opt, data, opt)[0]).to include(
82
+ "property '#/a' value 'Beer' not contained in MammalEnum")
69
83
  end
70
84
 
71
- it "returns true when a optional field is not suppplied" do
85
+ it "returns no error when a optional field is not suppplied" do
72
86
  data = {}
73
- expect(JSON::Validator.validate(pg_schema_opt, data)).to be true
87
+ expect(JSON::Validator.fully_validate(pg_schema_opt, data, opt)).to eq([])
74
88
  end
75
89
 
76
- it "returns false when a nil enum is passed even when enum is optional" do
90
+ it "returns error when a nil enum is passed even when enum is optional" do
77
91
  data = {"a" => nil}
78
- expect(JSON::Validator.validate(pg_schema_opt, data)).to be false
92
+ expect(JSON::Validator.
93
+ fully_validate(pg_schema_opt, data, opt)[0]).to include(
94
+ "property '#/a' value '' not contained in MammalEnum")
79
95
  end
80
96
 
81
97
  pg_schema_req = {
@@ -88,14 +104,52 @@ module Marty
88
104
  }
89
105
  }
90
106
 
91
- it "returns false when a required field is not supplied" do
107
+ it "returns error when a required field is not supplied" do
92
108
  data = {}
93
- expect(JSON::Validator.validate(pg_schema_req, data)).to be false
109
+ expect(JSON::Validator.
110
+ fully_validate(pg_schema_req, data, opt)[0]).to include(
111
+ "property '#/' did not contain a required property of 'a'")
94
112
  end
95
113
 
96
- it "returns false when a nil enum is passed when enum is required" do
114
+ it "returns error when a nil enum is passed when enum is required" do
97
115
  data = {"a" => nil}
98
- expect(JSON::Validator.validate(pg_schema_req, data)).to be false
116
+ expect(JSON::Validator.
117
+ fully_validate(pg_schema_req, data, opt)[0]).to include(
118
+ "property '#/a' value '' not contained in MammalEnum")
119
+ end
120
+
121
+ pg_schema_req_bad = {
122
+ "$schema" => "http://json-schema.org/marty-draft/schema#",
123
+ "required" => ["a"],
124
+ "properties" => {
125
+ "a" => {
126
+ "pg_enum" => "NotAnEnum"
127
+ },
128
+ }
129
+ }
130
+
131
+ it "returns raises meaningful error on schema enum error" do
132
+ data = {"a" => nil}
133
+ expect(JSON::Validator.
134
+ fully_validate(pg_schema_req_bad, data, opt)[0]).to include(
135
+ "property '#/a': 'NotAnEnum' is not a pg_enum class")
136
+ end
137
+
138
+ pg_schema_req_bad2 = {
139
+ "$schema" => "http://json-schema.org/marty-draft/schema#",
140
+ "required" => ["a"],
141
+ "properties" => {
142
+ "a" => {
143
+ "pg_enum" => "NotEvenAClass"
144
+ },
145
+ }
146
+ }
147
+
148
+ it "returns raises meaningful error on schema enum error" do
149
+ data = {"a" => nil}
150
+ expect(JSON::Validator.
151
+ fully_validate(pg_schema_req_bad2, data, opt)[0]).to include(
152
+ "property '#/a': 'NotEvenAClass' is not a pg_enum class")
99
153
  end
100
154
 
101
155
  ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
@@ -122,14 +176,18 @@ module Marty
122
176
  expect(JSON::Validator.validate(date_schema_opt, data)).to be true
123
177
  end
124
178
 
125
- it "returns false on an improperly formatted date" do
179
+ it "returns error on an improperly formatted date" do
126
180
  data = {"a" => '2017-05-32'}
127
- expect(JSON::Validator.validate(date_schema_opt, data)).to be false
181
+ expect(JSON::Validator.
182
+ fully_validate(date_schema_opt, data, opt)[0]).to include(
183
+ "property '#/a' must be a date in the format of YYYY-MM-DD")
128
184
  end
129
185
 
130
- it "returns false on an properly formatted datetime" do
186
+ it "returns error on an properly formatted datetime" do
131
187
  data = {"a" => '2017-05-22T14:51:44Z'}
132
- expect(JSON::Validator.validate(date_schema_opt, data)).to be false
188
+ expect(JSON::Validator.
189
+ fully_validate(date_schema_opt, data, opt)[0]).to include(
190
+ "property '#/a' must be a date in the format of YYYY-MM-DD")
133
191
  end
134
192
 
135
193
  it "returns true when an optional date is not supplied" do
@@ -137,9 +195,11 @@ module Marty
137
195
  expect(JSON::Validator.validate(date_schema_opt, data)).to be true
138
196
  end
139
197
 
140
- it "returns false when a nil date is passed even when date is optional" do
198
+ it "returns error when a nil date is passed even when date is optional" do
141
199
  data = {"a" => nil}
142
- expect(JSON::Validator.validate(date_schema_opt, data)).to be false
200
+ expect(JSON::Validator.
201
+ fully_validate(date_schema_opt, data, opt)[0]).to include(
202
+ "property '#/a' of type null did not match the following type: string")
143
203
  end
144
204
 
145
205
  date_schema_req = {
@@ -153,14 +213,18 @@ module Marty
153
213
  }
154
214
  }
155
215
 
156
- it "returns false when a required date field is not supplied" do
216
+ it "returns error when a required date field is not supplied" do
157
217
  data = {}
158
- expect(JSON::Validator.validate(date_schema_req, data)).to be false
218
+ expect(JSON::Validator.
219
+ fully_validate(date_schema_req, data, opt)[0]).to include(
220
+ "property '#/' did not contain a required property of 'a'")
159
221
  end
160
222
 
161
- it "returns false when a nil date is passed when date is required" do
223
+ it "returns error when a nil date is passed when date is required" do
162
224
  data = {"a" => nil}
163
- expect(JSON::Validator.validate(date_schema_req, data)).to be false
225
+ expect(JSON::Validator.
226
+ fully_validate(date_schema_req, data, opt)[0]).to include(
227
+ "property '#/a' of type null did not match the following type: string")
164
228
  end
165
229
 
166
230
  ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
@@ -187,9 +251,11 @@ module Marty
187
251
  expect(JSON::Validator.validate(datetime_schema_opt, data)).to be true
188
252
  end
189
253
 
190
- it "returns false on an improperly formatted datetime" do
254
+ it "returns error on an improperly formatted datetime" do
191
255
  data = {"a" => '2017-30-22T14:51:44Z'}
192
- expect(JSON::Validator.validate(datetime_schema_opt, data)).to be false
256
+ expect(JSON::Validator.
257
+ fully_validate(datetime_schema_opt, data, opt)[0]).to include(
258
+ "property '#/a' must be a date/time in the ISO-8601 format")
193
259
  end
194
260
 
195
261
  it "returns true when an opt field is not supplied" do
@@ -197,9 +263,11 @@ module Marty
197
263
  expect(JSON::Validator.validate(datetime_schema_opt, data)).to be true
198
264
  end
199
265
 
200
- it "returns false when a nil dt is passed even when dt is opt" do
266
+ it "returns error when a nil dt is passed even when dt is opt" do
201
267
  data = {"a" => nil}
202
- expect(JSON::Validator.validate(datetime_schema_opt, data)).to be false
268
+ expect(JSON::Validator.
269
+ fully_validate(datetime_schema_opt, data, opt)[0]).to include(
270
+ "property '#/a' of type null did not match the following type: string")
203
271
  end
204
272
 
205
273
  datetime_schema_req = {
@@ -213,14 +281,18 @@ module Marty
213
281
  }
214
282
  }
215
283
 
216
- it "returns false when a required field is not supplied" do
284
+ it "returns error when a required field is not supplied" do
217
285
  data = {}
218
- expect(JSON::Validator.validate(datetime_schema_req, data)).to be false
286
+ expect(JSON::Validator.
287
+ fully_validate(datetime_schema_req, data, opt)[0]).to include(
288
+ "property '#/' did not contain a required property of 'a'")
219
289
  end
220
290
 
221
- it "returns false when a nil dt is passed when dt is required" do
291
+ it "returns error when a nil dt is passed when dt is required" do
222
292
  data = {"a" => nil}
223
- expect(JSON::Validator.validate(datetime_schema_req, data)).to be false
293
+ expect(JSON::Validator.
294
+ fully_validate(datetime_schema_req, data, opt)[0]).to include(
295
+ "property '#/a' of type null did not match the following type: string")
224
296
  end
225
297
 
226
298
  ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
@@ -420,7 +492,7 @@ module Marty
420
492
 
421
493
  it "validates a complex nested schema when incorrect -- 1" do
422
494
  data = { "a" => 'Dog',
423
- "b" => '2017-05-32T14:51:44Z', #
495
+ "b" => '2017-05-32T14:51:44Z', # note DD
424
496
  "root1" => [ { "x" => {"w" => 0, "t" => 'Bear', "f" => 0.0},
425
497
  "y" => 'Phone' },
426
498
  { "x" => {"w" => 1, "t" => 'Human', "f" => 5.0},
@@ -449,7 +521,9 @@ module Marty
449
521
  "c" => 'Terminator',
450
522
  "d" => 5
451
523
  }
452
- expect(JSON::Validator.validate(nested_schema, data)).to be false
524
+ expect(JSON::Validator.
525
+ fully_validate(nested_schema, data, opt)[0]).to include(
526
+ "property '#/root1/0/x/t' value 'Bar' not contained in MammalEnum")
453
527
  end
454
528
 
455
529
  it "validates a complex nested schema when incorrect -- 3" do
@@ -466,7 +540,9 @@ module Marty
466
540
  "c" => 'Terminator',
467
541
  "d" => 5
468
542
  }
469
- expect(JSON::Validator.validate(nested_schema, data)).to be false
543
+ expect(JSON::Validator.
544
+ fully_validate(nested_schema, data, opt)[0]).to include(
545
+ "property '#/root1/1/x/f' was not divisible by 5.0")
470
546
  end
471
547
 
472
548
  it "validates a complex nested schema when incorrect -- 4" do
@@ -483,7 +559,10 @@ module Marty
483
559
  "c" => 'Terminator',
484
560
  "d" => 5
485
561
  }
486
- expect(JSON::Validator.validate(nested_schema, data)).to be false
562
+ expect(JSON::Validator.
563
+ fully_validate(nested_schema, data, opt)[0]).to include(
564
+ "property '#/root1/1/y' value 'Trminator' not contained "\
565
+ "in ElectronicsEnum")
487
566
  end
488
567
 
489
568
  it "validates a complex nested schema when incorrect -- 5" do
@@ -500,7 +579,9 @@ module Marty
500
579
  "c" => 'Terminator',
501
580
  "d" => 5
502
581
  }
503
- expect(JSON::Validator.validate(nested_schema, data)).to be false
582
+ expect(JSON::Validator.
583
+ fully_validate(nested_schema, data, opt)[0]).to include(
584
+ "property '#/root1/2/x/w' did not have a maximum value of 3, inclusively")
504
585
  end
505
586
 
506
587
  it "validates a complex nested schema when incorrect -- 6" do
@@ -510,14 +591,16 @@ module Marty
510
591
  "y" => 'Phone' },
511
592
  { "x" => {"w" => 1, "t" => 'Human', "f" => 5.0},
512
593
  "y" => 'Terminator' },
513
- { "x" => {"w" => 5, "t" => 'Dog', "f" => 65.0}, #
594
+ { "x" => {"w" => -5, "t" => 'Dog', "f" => 65.0}, #
514
595
  "y" => 'Phone' } ],
515
596
  "root2" => [ {"m1" => 'Cat', "e" => 'Keyboard', "m2" => 'Dog' },
516
597
  {"m1" => 'Dog', "e" => 'Phone', "m2" => 'Cow' }],
517
598
  "c" => 'Terminator',
518
599
  "d" => 5
519
600
  }
520
- expect(JSON::Validator.validate(nested_schema, data)).to be false
601
+ expect(JSON::Validator.
602
+ fully_validate(nested_schema, data, opt)[0]).to include(
603
+ "property '#/root1/2/x/w' did not have a minimum value of 0, inclusively")
521
604
  end
522
605
 
523
606
  it "validates a complex nested schema when incorrect -- 7" do
@@ -534,7 +617,9 @@ module Marty
534
617
  "c" => 'Terminator',
535
618
  "d" => 5
536
619
  }
537
- expect(JSON::Validator.validate(nested_schema, data)).to be false
620
+ expect(JSON::Validator.
621
+ fully_validate(nested_schema, data, opt)[0]).to include(
622
+ "property '#/root2/1/e' value 'Dog' not contained in ElectronicsEnum")
538
623
  end
539
624
 
540
625
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marty
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.36
4
+ version: 1.0.37
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arman Bostani
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2017-09-11 00:00:00.000000000 Z
17
+ date: 2017-09-13 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: pg