activerecord_json_validator 2.0.1 → 2.1.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.
- checksums.yaml +4 -4
- data/.travis.yml +8 -0
- data/README.md +1 -1
- data/activerecord_json_validator.gemspec +3 -3
- data/gemfiles/Gemfile.activerecord-7.0.x +5 -0
- data/lib/active_record/json_validator/version.rb +1 -1
- data/spec/json_validator_spec.rb +25 -83
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d73e408cd69522e53d830509f0a4772607eeee5b7a0102b25aea4a0e3f2fb62
|
4
|
+
data.tar.gz: 9f3b97d92b0c5f8a55608fdd590e906b576d00036c87cff151967392244b7ada
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2fcf0da7354630f8619d075988f904dbb8b61b977e2f2fdd87f2f29fc545d5aaf0a0331e57c5e8d2bce5eeef9913900392a3a2978f6df17dd840546b9a706ca
|
7
|
+
data.tar.gz: 7fd00e24032a036bccf04d1e9c677de07ae085ee7d46f658b8dcda0e2bc35d0cb0c263662b18c0fb86ed144eb3d248cfc213f9216641abae84d0c5afd9403675
|
data/.travis.yml
CHANGED
@@ -3,16 +3,24 @@ language: ruby
|
|
3
3
|
rvm:
|
4
4
|
- 2.4.6
|
5
5
|
- 2.6.3
|
6
|
+
- 2.7.5
|
6
7
|
|
7
8
|
gemfile:
|
8
9
|
- gemfiles/Gemfile.activerecord-4.2.x
|
9
10
|
- gemfiles/Gemfile.activerecord-5.0.x
|
10
11
|
- gemfiles/Gemfile.activerecord-6.0.x
|
12
|
+
- gemfiles/Gemfile.activerecord-7.0.x
|
11
13
|
|
12
14
|
matrix:
|
13
15
|
exclude:
|
14
16
|
- gemfile: gemfiles/Gemfile.activerecord-6.0.x
|
15
17
|
rvm: 2.4.6
|
18
|
+
- gemfile: gemfiles/Gemfile.activerecord-7.0.x
|
19
|
+
rvm: 2.4.6
|
20
|
+
- gemfile: gemfiles/Gemfile.activerecord-7.0.x
|
21
|
+
rvm: 2.6.3
|
22
|
+
- gemfile: gemfiles/Gemfile.activerecord-4.2.x
|
23
|
+
rvm: 2.7.5
|
16
24
|
|
17
25
|
sudo: false
|
18
26
|
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
<p align="center">
|
2
2
|
<a href="https://github.com/mirego/activerecord_json_validator">
|
3
|
-
<img src="https://
|
3
|
+
<img src="https://user-images.githubusercontent.com/11348/126779905-3468eb15-d554-46d5-925b-235f68169d86.png" alt="" />
|
4
4
|
</a>
|
5
5
|
<br />
|
6
6
|
<code>ActiveRecord::JSONValidator</code> makes it easy to validate<br /> JSON attributes against a <a href="http://json-schema.org/">JSON schema</a>.
|
@@ -18,15 +18,15 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency 'bundler', '
|
21
|
+
spec.add_development_dependency 'bundler', '>= 1.12'
|
22
22
|
spec.add_development_dependency 'rake'
|
23
23
|
spec.add_development_dependency 'rspec', '~> 3.5'
|
24
24
|
spec.add_development_dependency 'pg'
|
25
25
|
spec.add_development_dependency 'mysql2'
|
26
|
-
spec.add_development_dependency 'activesupport', '>= 4.2.0', '<
|
26
|
+
spec.add_development_dependency 'activesupport', '>= 4.2.0', '< 8'
|
27
27
|
spec.add_development_dependency 'phare'
|
28
28
|
spec.add_development_dependency 'rubocop', '~> 0.28'
|
29
29
|
|
30
30
|
spec.add_dependency 'json_schemer', '~> 0.2.18'
|
31
|
-
spec.add_dependency 'activerecord', '>= 4.2.0', '<
|
31
|
+
spec.add_dependency 'activerecord', '>= 4.2.0', '< 8'
|
32
32
|
end
|
data/spec/json_validator_spec.rb
CHANGED
@@ -4,107 +4,49 @@
|
|
4
4
|
require 'spec_helper'
|
5
5
|
|
6
6
|
describe JsonValidator do
|
7
|
-
describe :
|
8
|
-
# NOTE: We do not explicitely call `JsonValidator.new` in the tests,
|
9
|
-
# because we let Rails (ActiveModel::Validations) do that when we call
|
10
|
-
# `validates … json: true` on the model.
|
11
|
-
#
|
12
|
-
# This allows us to test the constructor behavior when executed in
|
13
|
-
# different Rails versions that do not pass the same arguments to it.
|
7
|
+
describe :validate_each do
|
14
8
|
before do
|
15
9
|
run_migration do
|
16
10
|
create_table(:users, force: true) do |t|
|
17
|
-
t.string :name
|
18
11
|
t.text :data
|
19
12
|
end
|
20
13
|
end
|
21
14
|
|
22
15
|
spawn_model 'User' do
|
16
|
+
schema = '
|
17
|
+
{
|
18
|
+
"type": "object",
|
19
|
+
"properties": {
|
20
|
+
"city": { "type": "string" },
|
21
|
+
"country": { "type": "string" }
|
22
|
+
},
|
23
|
+
"required": ["country"]
|
24
|
+
}
|
25
|
+
'
|
23
26
|
serialize :data, JSON
|
24
|
-
validates :data, json:
|
27
|
+
validates :data, json: { schema: schema, message: ->(errors) { errors.map { |error| error['details'].to_a.flatten.join(' ') } } }
|
25
28
|
end
|
26
|
-
|
27
|
-
record.data = data
|
28
|
-
end
|
29
|
-
|
30
|
-
let(:record) { User.new }
|
31
|
-
|
32
|
-
context 'with valid JSON data' do
|
33
|
-
let(:data) { 'What? This is not JSON at all.' }
|
34
|
-
it { expect(record.data_invalid_json).to eql(data) }
|
35
|
-
end
|
36
|
-
|
37
|
-
context 'with invalid JSON data' do
|
38
|
-
let(:data) { { foo: 'bar' } }
|
39
|
-
it { expect(record.data_invalid_json).to be_nil }
|
40
29
|
end
|
41
|
-
end
|
42
30
|
|
43
|
-
|
44
|
-
|
45
|
-
let(:options) { { attributes: [attribute], options: { format: true } } }
|
46
|
-
let(:validate_each!) { validator.validate_each(record, attribute, value) }
|
47
|
-
|
48
|
-
# Doubles
|
49
|
-
let(:attribute) { double(:attribute, to_s: 'attribute_name') }
|
50
|
-
let(:record) { double(:record, errors: record_errors) }
|
51
|
-
let(:record_errors) { double(:errors) }
|
52
|
-
let(:value) { double(:value) }
|
53
|
-
let(:schema) { double(:schema) }
|
54
|
-
let(:schema_validator) { double(:schema_validator) }
|
55
|
-
let(:raw_errors) { double(:raw_errors) }
|
56
|
-
let(:validator_errors) { double(:validator_errors) }
|
31
|
+
context 'with valid JSON data but schema errors' do
|
32
|
+
let(:user) { User.new(data: '{"city":"Quebec City"}') }
|
57
33
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'with JSON Schemer errors' do
|
66
|
-
before do
|
67
|
-
expect(validator_errors).to receive(:empty?).and_return(false)
|
68
|
-
expect(record).not_to receive(:"#{attribute}_invalid_json")
|
69
|
-
expect(record_errors).to receive(:add).with(attribute, options[:message], value: value)
|
34
|
+
specify do
|
35
|
+
expect(user).not_to be_valid
|
36
|
+
expect(user.errors.full_messages).to eql(['Data missing_keys country'])
|
37
|
+
expect(user.data).to eql({ 'city' => 'Quebec City' })
|
38
|
+
expect(user.data_invalid_json).to be_nil
|
70
39
|
end
|
71
|
-
|
72
|
-
specify { validate_each! }
|
73
40
|
end
|
74
41
|
|
75
|
-
context '
|
76
|
-
|
77
|
-
|
78
|
-
expect(record).to receive(:"#{attribute}_invalid_json").and_return('foo"{]')
|
79
|
-
expect(record_errors).to receive(:add).with(attribute, options[:message], value: value)
|
80
|
-
end
|
81
|
-
|
82
|
-
specify { validate_each! }
|
83
|
-
end
|
84
|
-
|
85
|
-
context 'without JSON Schemer errors and valid JSON data' do
|
86
|
-
before do
|
87
|
-
expect(validator_errors).to receive(:empty?).and_return(true)
|
88
|
-
expect(record).to receive(:"#{attribute}_invalid_json").and_return(nil)
|
89
|
-
expect(record_errors).not_to receive(:add)
|
90
|
-
end
|
91
|
-
|
92
|
-
specify { validate_each! }
|
93
|
-
end
|
94
|
-
|
95
|
-
context 'with multiple error messages' do
|
96
|
-
let(:options) { { attributes: [attribute], message: message, options: { strict: true } } }
|
97
|
-
let(:message) { ->(errors) { errors.to_a } }
|
42
|
+
context 'with invalid JSON data' do
|
43
|
+
let(:data) { 'What? This is not JSON at all.' }
|
44
|
+
let(:user) { User.new(data: data) }
|
98
45
|
|
99
|
-
|
100
|
-
expect(
|
101
|
-
expect(
|
102
|
-
expect(record).not_to receive(:"#{attribute}_invalid_json")
|
103
|
-
expect(record_errors).to receive(:add).with(attribute, :first_error, value: value)
|
104
|
-
expect(record_errors).to receive(:add).with(attribute, :second_error, value: value)
|
46
|
+
specify do
|
47
|
+
expect(user.data_invalid_json).to eql(data)
|
48
|
+
expect(user.data).to eql({})
|
105
49
|
end
|
106
|
-
|
107
|
-
specify { validate_each! }
|
108
50
|
end
|
109
51
|
end
|
110
52
|
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord_json_validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rémi Prévost
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.12'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.12'
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -89,7 +89,7 @@ dependencies:
|
|
89
89
|
version: 4.2.0
|
90
90
|
- - "<"
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version: '
|
92
|
+
version: '8'
|
93
93
|
type: :development
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -99,7 +99,7 @@ dependencies:
|
|
99
99
|
version: 4.2.0
|
100
100
|
- - "<"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: '
|
102
|
+
version: '8'
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: phare
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,7 +151,7 @@ dependencies:
|
|
151
151
|
version: 4.2.0
|
152
152
|
- - "<"
|
153
153
|
- !ruby/object:Gem::Version
|
154
|
-
version: '
|
154
|
+
version: '8'
|
155
155
|
type: :runtime
|
156
156
|
prerelease: false
|
157
157
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -161,7 +161,7 @@ dependencies:
|
|
161
161
|
version: 4.2.0
|
162
162
|
- - "<"
|
163
163
|
- !ruby/object:Gem::Version
|
164
|
-
version: '
|
164
|
+
version: '8'
|
165
165
|
description: ActiveRecord::JSONValidator makes it easy to validate JSON attributes
|
166
166
|
with a JSON schema.
|
167
167
|
email:
|
@@ -182,6 +182,7 @@ files:
|
|
182
182
|
- gemfiles/Gemfile.activerecord-4.2.x
|
183
183
|
- gemfiles/Gemfile.activerecord-5.0.x
|
184
184
|
- gemfiles/Gemfile.activerecord-6.0.x
|
185
|
+
- gemfiles/Gemfile.activerecord-7.0.x
|
185
186
|
- lib/active_record/json_validator/validator.rb
|
186
187
|
- lib/active_record/json_validator/version.rb
|
187
188
|
- lib/activerecord_json_validator.rb
|