activerecord_json_validator 2.0.1 → 2.1.0

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
  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