activerecord_json_validator 0.2 → 0.3

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
  SHA1:
3
- metadata.gz: de25bab4216c8a05a29a0383db78dff2940a0758
4
- data.tar.gz: dd70493947020e865ca313d334c0a85b3dc43835
3
+ metadata.gz: 22cf2432dfb4427ba383de56c603a6ab9a02ff74
4
+ data.tar.gz: eb005d90645dcf4e6471d7bd784523d67146418d
5
5
  SHA512:
6
- metadata.gz: c01dbb7d8ee0cf98794ad9111eed29109b67f89dce709e62d4cccb9007c3c06661cdcf56384a5d1a738f10d6d98dd748147d80c4666b8d2c011891e961e1eadb
7
- data.tar.gz: 017034733e383eddb894ef52b1728ecd0fa6ad7d31731cf48fa464dbd2abede7057e9b401fda4bc6ce06643f755cf7d4b64144250d07a82317793f7176d43c5d
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.0.0
5
- - 1.9.3
4
+ - 2.2
5
+ - 2.1
6
6
 
7
7
  gemfile:
8
- - gemfiles/Gemfile.activerecord-4.1.0.beta1
9
- - gemfiles/Gemfile.activerecord-4.0
10
- - gemfiles/Gemfile.activerecord-3.2.x
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
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013, Mirego
1
+ Copyright (c) 2013-2015, Mirego
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without
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
- <a href="https://rubygems.org/gems/activerecord_json_validator"><img src="https://badge.fury.io/rb/activerecord_json_validator.png" /></a>
6
- <a href="https://travis-ci.org/mirego/activerecord_json_validator"><img src="https://travis-ci.org/mirego/activerecord_json_validator.png?branch=master" /></a>
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
+ [![Gem Version](http://img.shields.io/gem/v/activerecord_json_validator.svg)](https://rubygems.org/gems/activerecord_json_validator)
6
+ [![Build Status](http://img.shields.io/travis/mirego/activerecord_json_validator.svg)](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', '~> 2.14'
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 'coveralls'
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.1'
30
- spec.add_dependency 'activerecord', '>= 3.0.0'
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
@@ -2,4 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec path: '../'
4
4
 
5
- gem 'activerecord', '~> 3.2.0'
5
+ gem 'activerecord', '~> 4.1'
@@ -2,4 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec path: '../'
4
4
 
5
- gem 'activerecord', '~> 4.0.0'
5
+ gem 'activerecord', '~> 4.2'
@@ -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? || instance_variable_get(:"@_#{attribute}_sane_json") == false
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
- @_#{attribute}_sane_json = true
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
- @_#{attribute}_sane_json = false
51
- super({})
53
+ @#{attribute}_invalid_json = args
54
+ super(invalid_json: true)
52
55
  end
53
56
  end
54
57
  RUBY
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module JSONValidator
3
- VERSION = '0.2'
3
+ VERSION = '0.3'
4
4
  end
5
5
  end
@@ -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(User.create(attributes)).to_not be_valid }
32
+ it { expect(user).to_not be_valid }
31
33
  end
32
34
 
33
35
  context 'with invalid JSON value' do
34
- let(:attributes) { { name: 'Samuel Garneau', profile: { city: 'Quebec City' } } }
35
- it { expect(User.create(attributes)).to_not be_valid }
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
- let(:attributes) { { name: 'Samuel Garneau', profile: { country: 'CA' } } }
40
- it { expect(User.create(attributes)).to be_valid }
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 value' do
59
+ context 'with malformed JSON string' do
44
60
  let(:attributes) { { name: 'Samuel Garneau', profile: 'foo:}bar' } }
45
- it { expect(User.create(attributes)).to_not be_valid }
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
@@ -1,8 +1,5 @@
1
1
  $:.unshift File.expand_path('../lib', __FILE__)
2
2
 
3
- require 'coveralls'
4
- Coveralls.wear!
5
-
6
3
  require 'active_support/all'
7
4
  require 'rspec'
8
5
  require 'mysql2'
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.2'
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: 2014-02-20 00:00:00.000000000 Z
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: '2.14'
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: '2.14'
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: 3.0.0
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: 3.0.0
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.1'
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.1'
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: 3.0.0
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: 3.0.0
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-3.2.x
170
- - gemfiles/Gemfile.activerecord-4.0
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.1.0
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
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '../'
4
-
5
- gem 'activerecord', '~> 4.1.0.beta1'