activerecord_json_validator 0.2 → 0.3
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 +6 -5
- data/LICENSE.md +1 -1
- data/README.md +8 -5
- data/activerecord_json_validator.gemspec +4 -5
- data/gemfiles/{Gemfile.activerecord-3.2.x → Gemfile.activerecord-4.1.x} +1 -1
- data/gemfiles/{Gemfile.activerecord-4.0 → Gemfile.activerecord-4.2.x} +1 -1
- data/lib/active_record/json_validator/validator.rb +7 -4
- data/lib/active_record/json_validator/version.rb +1 -1
- data/spec/json_validator_spec.rb +27 -7
- data/spec/spec_helper.rb +0 -3
- metadata +48 -51
- data/gemfiles/Gemfile.activerecord-4.1.0.beta1 +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22cf2432dfb4427ba383de56c603a6ab9a02ff74
|
4
|
+
data.tar.gz: eb005d90645dcf4e6471d7bd784523d67146418d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 637ba361b8d482dbe0edea5e27a96a815af724b9cfa5a2cdf7504d0f7f64a26b0e82e3228ad34a044b3e5ea64129f36556889dfa23a6a8d01d22830feb706705
|
7
|
+
data.tar.gz: 910b92a51b66a283b60a15d79854ca58c05104c786de9d0a7a578e21c9ef782c5a5e0bba46ef88df12aed68d5a80f6ec03e71156e4610751cd16dee254a05461
|
data/.travis.yml
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
language: ruby
|
2
2
|
|
3
3
|
rvm:
|
4
|
-
- 2.
|
5
|
-
- 1
|
4
|
+
- 2.2
|
5
|
+
- 2.1
|
6
6
|
|
7
7
|
gemfile:
|
8
|
-
- gemfiles/Gemfile.activerecord-4.
|
9
|
-
- gemfiles/Gemfile.activerecord-4.
|
10
|
-
|
8
|
+
- gemfiles/Gemfile.activerecord-4.2.x
|
9
|
+
- gemfiles/Gemfile.activerecord-4.1.x
|
10
|
+
|
11
|
+
sudo: false
|
11
12
|
|
12
13
|
env:
|
13
14
|
- DB_ADAPTER=mysql2
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
@@ -2,9 +2,8 @@
|
|
2
2
|
|
3
3
|
`ActiveRecord::JSONValidator` makes it easy to validate JSON attributes against a JSON schema.
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
<a href='https://coveralls.io/r/mirego/activerecord_json_validator?branch=master'><img src='https://coveralls.io/repos/mirego/activerecord_json_validator/badge.png?branch=master' alt='Coverage Status' /></a>
|
5
|
+
[](https://rubygems.org/gems/activerecord_json_validator)
|
6
|
+
[](https://travis-ci.org/mirego/activerecord_json_validator)
|
8
7
|
|
9
8
|
## Installation
|
10
9
|
|
@@ -39,7 +38,7 @@ end
|
|
39
38
|
|
40
39
|
class User < ActiveRecord::Base
|
41
40
|
# Constants
|
42
|
-
PROFILE_JSON_SCHEMA = Rails.root.join('config', 'schemas', 'profile.json_schema')
|
41
|
+
PROFILE_JSON_SCHEMA = Rails.root.join('config', 'schemas', 'profile.json_schema').to_s
|
43
42
|
|
44
43
|
# Validations
|
45
44
|
validates :name, presence: true
|
@@ -51,11 +50,15 @@ user.valid? # => false
|
|
51
50
|
|
52
51
|
user = User.new(name: 'Samuel Garneau', profile: { city: 'Quebec City', country: 'Canada' })
|
53
52
|
user.valid? # => true
|
53
|
+
|
54
|
+
user = User.new(name: 'Samuel Garneau', profile: '{invalid JSON":}')
|
55
|
+
user.valid? # => false
|
56
|
+
user.profile_invalid_json # => '{invalid JSON":}'
|
54
57
|
```
|
55
58
|
|
56
59
|
## License
|
57
60
|
|
58
|
-
`ActiveRecord::JSONValidator` is © 2013 [Mirego](http://www.mirego.com) and may be freely distributed under the [New BSD license](http://opensource.org/licenses/BSD-3-Clause). See the [`LICENSE.md`](https://github.com/mirego/activerecord_json_validator/blob/master/LICENSE.md) file.
|
61
|
+
`ActiveRecord::JSONValidator` is © 2013-2015 [Mirego](http://www.mirego.com) and may be freely distributed under the [New BSD license](http://opensource.org/licenses/BSD-3-Clause). See the [`LICENSE.md`](https://github.com/mirego/activerecord_json_validator/blob/master/LICENSE.md) file.
|
59
62
|
|
60
63
|
## About Mirego
|
61
64
|
|
@@ -20,13 +20,12 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
22
22
|
spec.add_development_dependency 'rake'
|
23
|
-
spec.add_development_dependency 'rspec', '~>
|
23
|
+
spec.add_development_dependency 'rspec', '~> 3.1'
|
24
24
|
spec.add_development_dependency 'pg'
|
25
25
|
spec.add_development_dependency 'mysql2'
|
26
|
-
spec.add_development_dependency '
|
27
|
-
spec.add_development_dependency 'activesupport', '>= 3.0.0'
|
26
|
+
spec.add_development_dependency 'activesupport', '>= 4.1.0', '< 5'
|
28
27
|
|
29
|
-
spec.add_dependency 'json-schema', '~> 2.
|
30
|
-
spec.add_dependency 'activerecord', '>=
|
28
|
+
spec.add_dependency 'json-schema', '~> 2.5'
|
29
|
+
spec.add_dependency 'activerecord', '>= 4.1.0', '< 5'
|
31
30
|
spec.add_dependency 'multi_json', '~> 1.8.2'
|
32
31
|
end
|
@@ -30,7 +30,7 @@ class JsonValidator < ActiveModel::EachValidator
|
|
30
30
|
|
31
31
|
errors = ::JSON::Validator.fully_validate(options.fetch(:schema), json_value)
|
32
32
|
|
33
|
-
if errors.any? ||
|
33
|
+
if errors.any? || record.send(:"#{attribute}_invalid_json").present?
|
34
34
|
record.errors.add(attribute, options.fetch(:message), value: value)
|
35
35
|
end
|
36
36
|
end
|
@@ -42,13 +42,16 @@ protected
|
|
42
42
|
def inject_setter_method(klass, attributes)
|
43
43
|
attributes.each do |attribute|
|
44
44
|
klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
45
|
+
attr_reader :"#{attribute}_invalid_json"
|
46
|
+
|
45
47
|
define_method "#{attribute}=" do |args|
|
46
48
|
begin
|
47
|
-
|
49
|
+
@#{attribute}_invalid_json = nil
|
50
|
+
args = ::ActiveSupport::JSON.decode(args) if args.is_a?(::String)
|
48
51
|
super(args)
|
49
52
|
rescue MultiJson::LoadError, JSON::ParserError
|
50
|
-
|
51
|
-
super(
|
53
|
+
@#{attribute}_invalid_json = args
|
54
|
+
super(invalid_json: true)
|
52
55
|
end
|
53
56
|
end
|
54
57
|
RUBY
|
data/spec/json_validator_spec.rb
CHANGED
@@ -25,23 +25,43 @@ describe JsonValidator do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
let(:user) { User.create(attributes) }
|
29
|
+
|
28
30
|
context 'with blank JSON value' do
|
29
31
|
let(:attributes) { { name: 'Samuel Garneau', profile: {} } }
|
30
|
-
it { expect(
|
32
|
+
it { expect(user).to_not be_valid }
|
31
33
|
end
|
32
34
|
|
33
35
|
context 'with invalid JSON value' do
|
34
|
-
|
35
|
-
|
36
|
+
context 'as Ruby Hash' do
|
37
|
+
let(:attributes) { { name: 'Samuel Garneau', profile: { city: 'Quebec City' } } }
|
38
|
+
it { expect(user).to_not be_valid }
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'as JSON string' do
|
42
|
+
let(:attributes) { { name: 'Samuel Garneau', profile: '{ "city": "Quebec City" }' } }
|
43
|
+
it { expect(user).to_not be_valid }
|
44
|
+
end
|
36
45
|
end
|
37
46
|
|
38
47
|
context 'with valid JSON value' do
|
39
|
-
|
40
|
-
|
48
|
+
context 'as Ruby Hash' do
|
49
|
+
let(:attributes) { { name: 'Samuel Garneau', profile: { country: 'CA' } } }
|
50
|
+
it { expect(user).to be_valid }
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'as JSON string' do
|
54
|
+
let(:attributes) { { name: 'Samuel Garneau', profile: '{ "country": "CA" }' } }
|
55
|
+
it { expect(user).to be_valid }
|
56
|
+
end
|
41
57
|
end
|
42
58
|
|
43
|
-
context 'with malformed JSON
|
59
|
+
context 'with malformed JSON string' do
|
44
60
|
let(:attributes) { { name: 'Samuel Garneau', profile: 'foo:}bar' } }
|
45
|
-
|
61
|
+
|
62
|
+
specify do
|
63
|
+
expect(user).to_not be_valid
|
64
|
+
expect(user.profile_invalid_json).to eql('foo:}bar')
|
65
|
+
end
|
46
66
|
end
|
47
67
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,153 +1,151 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord_json_validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
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:
|
11
|
+
date: 2015-01-16 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.3'
|
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.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3.1'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '3.1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pg
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mysql2
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: coveralls
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - '>='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - '>='
|
80
|
+
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: activesupport
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
|
-
- -
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 4.1.0
|
90
|
+
- - "<"
|
102
91
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
92
|
+
version: '5'
|
104
93
|
type: :development
|
105
94
|
prerelease: false
|
106
95
|
version_requirements: !ruby/object:Gem::Requirement
|
107
96
|
requirements:
|
108
|
-
- -
|
97
|
+
- - ">="
|
109
98
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
99
|
+
version: 4.1.0
|
100
|
+
- - "<"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '5'
|
111
103
|
- !ruby/object:Gem::Dependency
|
112
104
|
name: json-schema
|
113
105
|
requirement: !ruby/object:Gem::Requirement
|
114
106
|
requirements:
|
115
|
-
- - ~>
|
107
|
+
- - "~>"
|
116
108
|
- !ruby/object:Gem::Version
|
117
|
-
version: '2.
|
109
|
+
version: '2.5'
|
118
110
|
type: :runtime
|
119
111
|
prerelease: false
|
120
112
|
version_requirements: !ruby/object:Gem::Requirement
|
121
113
|
requirements:
|
122
|
-
- - ~>
|
114
|
+
- - "~>"
|
123
115
|
- !ruby/object:Gem::Version
|
124
|
-
version: '2.
|
116
|
+
version: '2.5'
|
125
117
|
- !ruby/object:Gem::Dependency
|
126
118
|
name: activerecord
|
127
119
|
requirement: !ruby/object:Gem::Requirement
|
128
120
|
requirements:
|
129
|
-
- -
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 4.1.0
|
124
|
+
- - "<"
|
130
125
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
126
|
+
version: '5'
|
132
127
|
type: :runtime
|
133
128
|
prerelease: false
|
134
129
|
version_requirements: !ruby/object:Gem::Requirement
|
135
130
|
requirements:
|
136
|
-
- -
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 4.1.0
|
134
|
+
- - "<"
|
137
135
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
136
|
+
version: '5'
|
139
137
|
- !ruby/object:Gem::Dependency
|
140
138
|
name: multi_json
|
141
139
|
requirement: !ruby/object:Gem::Requirement
|
142
140
|
requirements:
|
143
|
-
- - ~>
|
141
|
+
- - "~>"
|
144
142
|
- !ruby/object:Gem::Version
|
145
143
|
version: 1.8.2
|
146
144
|
type: :runtime
|
147
145
|
prerelease: false
|
148
146
|
version_requirements: !ruby/object:Gem::Requirement
|
149
147
|
requirements:
|
150
|
-
- - ~>
|
148
|
+
- - "~>"
|
151
149
|
- !ruby/object:Gem::Version
|
152
150
|
version: 1.8.2
|
153
151
|
description: ActiveRecord::JSONValidator makes it easy to validate JSON attributes
|
@@ -158,17 +156,16 @@ executables: []
|
|
158
156
|
extensions: []
|
159
157
|
extra_rdoc_files: []
|
160
158
|
files:
|
161
|
-
- .gitignore
|
162
|
-
- .rspec
|
163
|
-
- .travis.yml
|
159
|
+
- ".gitignore"
|
160
|
+
- ".rspec"
|
161
|
+
- ".travis.yml"
|
164
162
|
- Gemfile
|
165
163
|
- LICENSE.md
|
166
164
|
- README.md
|
167
165
|
- Rakefile
|
168
166
|
- activerecord_json_validator.gemspec
|
169
|
-
- gemfiles/Gemfile.activerecord-
|
170
|
-
- gemfiles/Gemfile.activerecord-4.
|
171
|
-
- gemfiles/Gemfile.activerecord-4.1.0.beta1
|
167
|
+
- gemfiles/Gemfile.activerecord-4.1.x
|
168
|
+
- gemfiles/Gemfile.activerecord-4.2.x
|
172
169
|
- lib/active_record/json_validator/validator.rb
|
173
170
|
- lib/active_record/json_validator/version.rb
|
174
171
|
- lib/activerecord_json_validator.rb
|
@@ -189,17 +186,17 @@ require_paths:
|
|
189
186
|
- lib
|
190
187
|
required_ruby_version: !ruby/object:Gem::Requirement
|
191
188
|
requirements:
|
192
|
-
- -
|
189
|
+
- - ">="
|
193
190
|
- !ruby/object:Gem::Version
|
194
191
|
version: '0'
|
195
192
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
193
|
requirements:
|
197
|
-
- -
|
194
|
+
- - ">="
|
198
195
|
- !ruby/object:Gem::Version
|
199
196
|
version: '0'
|
200
197
|
requirements: []
|
201
198
|
rubyforge_project:
|
202
|
-
rubygems_version: 2.
|
199
|
+
rubygems_version: 2.2.2
|
203
200
|
signing_key:
|
204
201
|
specification_version: 4
|
205
202
|
summary: ActiveRecord::JSONValidator makes it easy to validate JSON attributes with
|