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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a23791df42cc3761bf97c7582c7ba526806b2b163708e5bf1fe8250b6236d067
4
- data.tar.gz: 57f080ea733883b1e83e81ed28bc28d17332b8939699a3f48cfca9ef49689ffe
3
+ metadata.gz: 4d73e408cd69522e53d830509f0a4772607eeee5b7a0102b25aea4a0e3f2fb62
4
+ data.tar.gz: 9f3b97d92b0c5f8a55608fdd590e906b576d00036c87cff151967392244b7ada
5
5
  SHA512:
6
- metadata.gz: 53836d631662e35b1e864379491a11fbebfde8207318dde0a2572f83d22811add057b5f35609f4bc267e17b0d16aa3672b8e057521ec2f797d9b160cceae0b9a
7
- data.tar.gz: f8806eaa64ee2bb70ff2d44a91f53b8bc2c068b26eb38138f0fd600417263b138d0f5f61f35d0d08457583129260d11bcf8f54761ae4e5fd5996885988b08472
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://cloud.githubusercontent.com/assets/11348/6099354/cffcf35e-afc3-11e4-9a4d-d872941bbcf6.png" alt="" />
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', '~> 1.12'
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', '< 7'
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', '< 7'
31
+ spec.add_dependency 'activerecord', '>= 4.2.0', '< 8'
32
32
  end
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '../'
4
+
5
+ gem 'activerecord', '~> 7.0.0.rc1'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ActiveRecord
4
4
  module JSONValidator
5
- VERSION = '2.0.1'
5
+ VERSION = '2.1.0'
6
6
  end
7
7
  end
@@ -4,107 +4,49 @@
4
4
  require 'spec_helper'
5
5
 
6
6
  describe JsonValidator do
7
- describe :initialize do
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: true
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
- describe :validate_each do
44
- let(:validator) { JsonValidator.new(options) }
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
- before do
59
- expect(validator).to receive(:schema).with(record).and_return(schema)
60
- expect(JSONSchemer).to receive(:schema).with(schema, options[:options]).and_return(schema_validator)
61
- expect(schema_validator).to receive(:validate).with(value).and_return(raw_errors)
62
- expect(raw_errors).to receive(:to_a).and_return(validator_errors)
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 'without JSON Schemer errors but with invalid JSON data' do
76
- before do
77
- expect(validator_errors).to receive(:empty?).and_return(true)
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
- before do
100
- expect(validator_errors).to receive(:empty?).and_return(false)
101
- expect(validator_errors).to receive(:to_a).and_return(%i[first_error second_error])
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.1
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-07-07 00:00:00.000000000 Z
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: '7'
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: '7'
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: '7'
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: '7'
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