activerecord_json_validator 0.5.1 → 2.0.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
- SHA1:
3
- metadata.gz: e122734c159cf841ab43d38bdc6efd2e4d554605
4
- data.tar.gz: 96c99ba0cde8902483245991ccab6b2bc03870d6
2
+ SHA256:
3
+ metadata.gz: 0f5b518bda8ab28520f561dc840f47223e252530a9182ef31a164c12fb831451
4
+ data.tar.gz: 79e01fcce3c8cb0e27f6e3e24df4db54a312f6cef7285f38cec05689e897d042
5
5
  SHA512:
6
- metadata.gz: 3d060208f9aebadac25bd9b6c3a72db71eb689e775c9a3be343c45f05d0e5d7a5e36c4b91a6341b2823c3b6b7bce7a2c2efe7a3b1972a0b4d97a618b3da2a759
7
- data.tar.gz: 5aff819411acfe4a894c3e5f4d6422f7ffdef61c78cf07b8551025c8b7d0ab6794ed51283e9d90a1f4c479c32fe65622e2c548fd526ef7e2f0059ed560d04a72
6
+ metadata.gz: b4e5420f0c6aaad0e1e13ed296bc598e88b16974bfbaa7e55cc1680ad4ca499ba0b570de3ee26d72a993cbb9e712370f7e23fcf14e56e46ba40d7c601c5695f1
7
+ data.tar.gz: 93cf5acde18b71f512f2f68eaec1ba8191a721e1ace7853604d9e6ac4c6c7d03ae88a19c402a4c8b8545e8bfa5546de4ced97dfa032536f18747a5658419b752
data/.rubocop.yml CHANGED
@@ -18,7 +18,7 @@ IfUnlessModifier:
18
18
  Enabled: false
19
19
 
20
20
  CaseIndentation:
21
- IndentWhenRelativeTo: case
21
+ EnforcedStyle: case
22
22
  IndentOneStep: true
23
23
 
24
24
  MethodLength:
data/.travis.yml CHANGED
@@ -1,15 +1,25 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 2.2
5
- - 2.1
4
+ - 2.4.6
5
+ - 2.6.3
6
6
 
7
7
  gemfile:
8
8
  - gemfiles/Gemfile.activerecord-4.2.x
9
- - gemfiles/Gemfile.activerecord-4.1.x
9
+ - gemfiles/Gemfile.activerecord-5.0.x
10
+ - gemfiles/Gemfile.activerecord-6.0.x
11
+
12
+ matrix:
13
+ exclude:
14
+ - gemfile: gemfiles/Gemfile.activerecord-6.0.x
15
+ rvm: 2.4.6
10
16
 
11
17
  sudo: false
12
18
 
19
+ services:
20
+ - mysql
21
+ - postgresql
22
+
13
23
  env:
14
24
  - DB_ADAPTER=mysql2
15
25
  - DB_ADAPTER=postgresql
@@ -21,6 +31,3 @@ before_script:
21
31
  script:
22
32
  - 'echo "Checking code style" && bundle exec phare'
23
33
  - 'echo "Running tests" && bundle exec rake spec'
24
-
25
- addons:
26
- postgresql: 9.3
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
  gemspec
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013-2015, Mirego
1
+ Copyright (c) 2013-2016, 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
@@ -1,9 +1,15 @@
1
- # ActiveRecord::JSONValidator
2
-
3
- `ActiveRecord::JSONValidator` makes it easy to validate JSON attributes against a JSON schema.
4
-
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)
1
+ <p align="center">
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="" />
4
+ </a>
5
+ <br />
6
+ <code>ActiveRecord::JSONValidator</code> makes it easy to validate<br /> JSON attributes against a <a href="http://json-schema.org/">JSON schema</a>.
7
+ <br /><br />
8
+ <a href="https://rubygems.org/gems/activerecord_json_validator"><img src="http://img.shields.io/gem/v/activerecord_json_validator.svg" /></a>
9
+ <a href="https://travis-ci.org/mirego/activerecord_json_validator"><img src="http://img.shields.io/travis/mirego/activerecord_json_validator.svg" /></a>
10
+ </p>
11
+
12
+ ---
7
13
 
8
14
  ## Installation
9
15
 
@@ -16,15 +22,31 @@ gem 'activerecord_json_validator'
16
22
  ## Usage
17
23
 
18
24
  ### JSON Schema
25
+ Schemas must use be a JSON string or use string keys.
19
26
 
20
27
  ```json
21
- {
28
+ '{
22
29
  "type": "object",
23
- "$schema": "http://json-schema.org/draft-03/schema",
30
+ "$schema": "http://json-schema.org/draft-04/schema#",
24
31
  "properties": {
25
- "city": { "type": "string", "required": false },
26
- "country": { "type": "string", "required": true }
27
- }
32
+ "city": { "type": "string" },
33
+ "country": { "type": "string" }
34
+ },
35
+ "required": ["country"]
36
+ }'
37
+ ```
38
+
39
+ or
40
+
41
+ ```ruby
42
+ {
43
+ "type" => "object",
44
+ "$schema" => "http://json-schema.org/draft-04/schema#",
45
+ "properties" => {
46
+ "city" => { "type" => "string" },
47
+ "country" => { "type" => "string" }
48
+ },
49
+ "required" => ["country"]
28
50
  }
29
51
  ```
30
52
 
@@ -60,85 +82,63 @@ user.profile_invalid_json # => '{invalid JSON":}'
60
82
 
61
83
  | Option | Description
62
84
  |------------|-----------------------------------------------------
63
- | `:schema` | The JSON schema to validate the data against (see **JSON schema option** section)
64
- | `:message` | The ActiveRecord message added to the record errors (default: `:invalid_json`)
85
+ | `:schema` | The JSON schema to validate the data against (see **Schema** section)
86
+ | `:message` | The ActiveRecord message added to the record errors (see **Message** section)
87
+ | `:options` | A `Hash` of [`json_schemer`](https://github.com/davishmcclurg/json_schemer#options)-supported options to pass to the validator
65
88
 
66
- ##### JSON schema option
89
+ ##### Schema
67
90
 
68
- You can specify four kinds of value for the `:schema` option.
91
+ `ActiveRecord::JSONValidator` uses the [json_schemer](https://github.com/davishmcclurg/json_schemer) gem to validate the JSON
92
+ data against a JSON schema.
69
93
 
70
- ###### A path to a file containing a JSON schema
94
+ Additionally, you can use a `Symbol` or a `Proc`. Both will be executed in the
95
+ context of the validated record (`Symbol` will be sent as a method and the
96
+ `Proc` will be `instance_exec`ed)
71
97
 
72
98
  ```ruby
73
99
  class User < ActiveRecord::Base
74
100
  # Constants
75
- PROFILE_JSON_SCHEMA = Rails.root.join('config', 'schemas', 'profile.json_schema').to_s
101
+ PROFILE_REGULAR_JSON_SCHEMA = Rails.root.join('config', 'schemas', 'profile.json_schema').to_s
102
+ PROFILE_ADMIN_JSON_SCHEMA = Rails.root.join('config', 'schemas', 'profile_admin.json_schema').to_s
76
103
 
77
104
  # Validations
78
- validates :profile, presence: true, json: { schema: PROFILE_JSON_SCHEMA }
79
- end
80
- ```
105
+ validates :profile, presence: true, json: { schema: lambda { dynamic_profile_schema } } # `schema: :dynamic_profile_schema` would also work
81
106
 
82
- ###### A Ruby `Hash` representing a JSON schema
83
-
84
- ```ruby
85
- class User < ActiveRecord::Base
86
- # Constants
87
- PROFILE_JSON_SCHEMA = {
88
- type: 'object',
89
- :'$schema' => 'http://json-schema.org/draft-03/schema',
90
- properties: {
91
- city: { type: 'string', required: false },
92
- country: { type: 'string', required: true }
93
- }
94
- }
95
-
96
- # Validations
97
- validates :profile, presence: true, json: { schema: PROFILE_JSON_SCHEMA }
107
+ def dynamic_profile_schema
108
+ admin? ? PROFILE_ADMIN_JSON_SCHEMA : PROFILE_REGULAR_JSON_SCHEMA
109
+ end
98
110
  end
99
111
  ```
100
112
 
101
- ###### A plain JSON schema as a Ruby `String`
102
-
103
- ```ruby
104
- class User < ActiveRecord::Base
105
- # Constants
106
- PROFILE_JSON_SCHEMA = '{
107
- "type": "object",
108
- "$schema": "http://json-schema.org/draft-03/schema",
109
- "properties": {
110
- "city": { "type": "string", "required": false },
111
- "country": { "type": "string", "required": true }
112
- }
113
- }'
114
-
115
- # Validations
116
- validates :profile, presence: true, json: { schema: PROFILE_JSON_SCHEMA }
117
- end
118
- ```
113
+ ##### Message
119
114
 
120
- ###### A lambda that will get evaluated in the context of the validated record
115
+ Like any other ActiveModel validation, you can specify either a `Symbol` or
116
+ `String` value for the `:message` option. The default value is `:invalid_json`.
121
117
 
122
- The lambda must return a valid value for the `:schema` option (file path, JSON `String` or Ruby `Hash`).
118
+ However, you can also specify a `Proc` that returns an array of errors. The
119
+ `Proc` will be called with a single argument — an array of errors returned by
120
+ the JSON schema validator. So, if you’d like to add each of these errors as
121
+ a first-level error for the record, you can do this:
123
122
 
124
123
  ```ruby
125
124
  class User < ActiveRecord::Base
126
- # Constants
127
- PROFILE_REGULAR_JSON_SCHEMA = Rails.root.join('config', 'schemas', 'profile.json_schema').to_s
128
- PROFILE_ADMIN_JSON_SCHEMA = Rails.root.join('config', 'schemas', 'profile_admin.json_schema').to_s
129
-
130
125
  # Validations
131
- validates :profile, presence: true, json: { schema: lambda { dynamic_profile_schema } }
132
-
133
- def dynamic_profile_schema
134
- admin? ? PROFILE_ADMIN_JSON_SCHEMA : PROFILE_REGULAR_JSON_SCHEMA
135
- end
126
+ validates :profile, presence: true, json: { message: ->(errors) { errors }, schema: 'foo.json_schema' }
136
127
  end
128
+
129
+ user = User.new.tap(&:valid?)
130
+ user.errors.full_messages
131
+ # => [
132
+ # 'The property '#/email' of type Fixnum did not match the following type: string in schema 2d44293f-cd9d-5dca-8a6a-fb9db1de722b#',
133
+ # 'The property '#/full_name' of type Fixnum did not match the following type: string in schema 2d44293f-cd9d-5dca-8a6a-fb9db1de722b#',
134
+ # ]
137
135
  ```
138
136
 
139
137
  ## License
140
138
 
141
- `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.
139
+ `ActiveRecord::JSONValidator` is © 2013-2016 [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.
140
+
141
+ The tree logo is based on [this lovely icon](http://thenounproject.com/term/tree/51004/) by [Sara Quintana](http://thenounproject.com/sara.quintana.75), from The Noun Project. Used under a [Creative Commons BY 3.0](http://creativecommons.org/licenses/by/3.0/) license.
142
142
 
143
143
  ## About Mirego
144
144
 
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler'
2
4
  require 'rake'
3
5
  require 'bundler/gem_tasks'
@@ -12,7 +14,7 @@ end
12
14
 
13
15
  desc 'Start an IRB session with the gem'
14
16
  task :console do
15
- $LOAD_PATH.unshift File.expand_path('..', __FILE__)
17
+ $LOAD_PATH.unshift File.expand_path(__dir__)
16
18
  require 'activerecord_json_validator'
17
19
  require 'irb'
18
20
 
@@ -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.3'
21
+ spec.add_development_dependency 'bundler', '~> 1.12'
22
22
  spec.add_development_dependency 'rake'
23
- spec.add_development_dependency 'rspec', '~> 3.1'
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.1.0', '< 5'
26
+ spec.add_development_dependency 'activesupport', '>= 4.2.0', '< 7'
27
27
  spec.add_development_dependency 'phare'
28
28
  spec.add_development_dependency 'rubocop', '~> 0.28'
29
29
 
30
- spec.add_dependency 'json-schema', '~> 2.5'
31
- spec.add_dependency 'activerecord', '>= 4.1.0', '< 5'
30
+ spec.add_dependency 'json_schemer', '~> 0.2.18'
31
+ spec.add_dependency 'activerecord', '>= 4.2.0', '< 7'
32
32
  end
@@ -3,3 +3,4 @@ source 'https://rubygems.org'
3
3
  gemspec path: '../'
4
4
 
5
5
  gem 'activerecord', '~> 4.2'
6
+ gem 'pg', '~> 0.15'
@@ -2,4 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec path: '../'
4
4
 
5
- gem 'activerecord', '~> 4.1'
5
+ gem 'activerecord', '~> 5.0'
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '../'
4
+
5
+ gem 'activerecord', '~> 6.0'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class JsonValidator < ActiveModel::EachValidator
2
4
  def initialize(options)
3
5
  options.reverse_merge!(message: :invalid_json)
@@ -7,30 +9,21 @@ class JsonValidator < ActiveModel::EachValidator
7
9
 
8
10
  super
9
11
 
10
- # Rails 4.1 and above expose a `class` option
11
- if options[:class]
12
- inject_setter_method(options[:class], @attributes)
13
-
14
- # Rails 4.0 and below calls a `#setup` method
15
- elsif !respond_to?(:setup)
16
- class_eval do
17
- define_method :setup do |model|
18
- inject_setter_method(model, @attributes)
19
- end
20
- end
21
- end
12
+ inject_setter_method(options[:class], @attributes)
22
13
  end
23
14
 
24
15
  # Validate the JSON value with a JSON schema path or String
25
16
  def validate_each(record, attribute, value)
26
- # Validate value with JSON::Validator
27
- errors = ::JSON::Validator.fully_validate(schema(record), validatable_value(value), options.fetch(:options))
17
+ # Validate value with JSON Schemer
18
+ errors = JSONSchemer.schema(schema(record), options.fetch(:options)).validate(value).to_a
28
19
 
29
20
  # Everything is good if we don’t have any errors and we got valid JSON value
30
21
  return if errors.empty? && record.send(:"#{attribute}_invalid_json").blank?
31
22
 
32
23
  # Add error message to the attribute
33
- record.errors.add(attribute, options.fetch(:message), value: value)
24
+ message(errors).each do |error|
25
+ record.errors.add(attribute, error, value: value)
26
+ end
34
27
  end
35
28
 
36
29
  protected
@@ -56,7 +49,7 @@ protected
56
49
  end
57
50
  end
58
51
 
59
- # Return a valid schema for JSON::Validator.fully_validate, recursively calling
52
+ # Return a valid schema, recursively calling
60
53
  # itself until it gets a non-Proc/non-Symbol value.
61
54
  def schema(record, schema = nil)
62
55
  schema ||= options.fetch(:schema)
@@ -68,8 +61,12 @@ protected
68
61
  end
69
62
  end
70
63
 
71
- def validatable_value(value)
72
- return value if value.is_a?(String)
73
- ::ActiveSupport::JSON.encode(value)
64
+ def message(errors)
65
+ message = options.fetch(:message)
66
+
67
+ case message
68
+ when Proc then [message.call(errors)].flatten if message.is_a?(Proc)
69
+ else [message]
70
+ end
74
71
  end
75
72
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module JSONValidator
3
- VERSION = '0.5.1'
5
+ VERSION = '2.0.0'
4
6
  end
5
7
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_record'
2
- require 'json-schema'
4
+ require 'json_schemer'
3
5
 
4
6
  require 'active_record/json_validator/version'
5
7
  require 'active_record/json_validator/validator'
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Metrics/BlockLength
1
4
  require 'spec_helper'
2
5
 
3
6
  describe JsonValidator do
@@ -39,7 +42,7 @@ describe JsonValidator do
39
42
 
40
43
  describe :validate_each do
41
44
  let(:validator) { JsonValidator.new(options) }
42
- let(:options) { { attributes: [attribute], options: { strict: true } } }
45
+ let(:options) { { attributes: [attribute], options: { format: true } } }
43
46
  let(:validate_each!) { validator.validate_each(record, attribute, value) }
44
47
 
45
48
  # Doubles
@@ -48,16 +51,18 @@ describe JsonValidator do
48
51
  let(:record_errors) { double(:errors) }
49
52
  let(:value) { double(:value) }
50
53
  let(:schema) { double(:schema) }
51
- let(:validatable_value) { double(:validatable_value) }
54
+ let(:schema_validator) { double(:schema_validator) }
55
+ let(:raw_errors) { double(:raw_errors) }
52
56
  let(:validator_errors) { double(:validator_errors) }
53
57
 
54
58
  before do
55
59
  expect(validator).to receive(:schema).with(record).and_return(schema)
56
- expect(validator).to receive(:validatable_value).with(value).and_return(validatable_value)
57
- expect(::JSON::Validator).to receive(:fully_validate).with(schema, validatable_value, options[:options]).and_return(validator_errors)
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)
58
63
  end
59
64
 
60
- context 'with JSON::Validator errors' do
65
+ context 'with JSON Schemer errors' do
61
66
  before do
62
67
  expect(validator_errors).to receive(:empty?).and_return(false)
63
68
  expect(record).not_to receive(:"#{attribute}_invalid_json")
@@ -67,7 +72,7 @@ describe JsonValidator do
67
72
  specify { validate_each! }
68
73
  end
69
74
 
70
- context 'without JSON::Validator errors but with invalid JSON data' do
75
+ context 'without JSON Schemer errors but with invalid JSON data' do
71
76
  before do
72
77
  expect(validator_errors).to receive(:empty?).and_return(true)
73
78
  expect(record).to receive(:"#{attribute}_invalid_json").and_return('foo"{]')
@@ -77,7 +82,7 @@ describe JsonValidator do
77
82
  specify { validate_each! }
78
83
  end
79
84
 
80
- context 'without JSON::Validator errors and valid JSON data' do
85
+ context 'without JSON Schemer errors and valid JSON data' do
81
86
  before do
82
87
  expect(validator_errors).to receive(:empty?).and_return(true)
83
88
  expect(record).to receive(:"#{attribute}_invalid_json").and_return(nil)
@@ -86,6 +91,21 @@ describe JsonValidator do
86
91
 
87
92
  specify { validate_each! }
88
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 } }
98
+
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)
105
+ end
106
+
107
+ specify { validate_each! }
108
+ end
89
109
  end
90
110
 
91
111
  describe :schema do
@@ -137,19 +157,21 @@ describe JsonValidator do
137
157
  end
138
158
  end
139
159
 
140
- describe :validatable_value do
160
+ describe :message do
141
161
  let(:validator) { JsonValidator.new(options) }
142
- let(:options) { { attributes: [:foo] } }
143
- let(:validatable_value) { validator.send(:validatable_value, value) }
162
+ let(:options) { { attributes: [:foo], message: message_option } }
163
+ let(:message) { validator.send(:message, errors) }
164
+ let(:errors) { %i[first_error second_error] }
144
165
 
145
- context 'with non-String value' do
146
- let(:value) { { foo: 'bar' } }
147
- it { expect(validatable_value).to eql('{"foo":"bar"}') }
166
+ context 'with Symbol message' do
167
+ let(:message_option) { :invalid_json }
168
+ it { expect(message).to eql([:invalid_json]) }
148
169
  end
149
170
 
150
171
  context 'with String value' do
151
- let(:value) { "{\"foo\":\"bar\"}" }
152
- it { expect(validatable_value).to eql(value) }
172
+ let(:message_option) { ->(errors) { errors } }
173
+ it { expect(message).to eql(%i[first_error second_error]) }
153
174
  end
154
175
  end
155
176
  end
177
+ # rubocop:enable Metrics/BlockLength
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,6 @@
1
- $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift File.expand_path('lib', __dir__)
2
4
 
3
5
  require 'active_support/all'
4
6
  require 'rspec'
@@ -8,7 +10,7 @@ require 'pg'
8
10
  require 'activerecord_json_validator'
9
11
 
10
12
  # Require our macros and extensions
11
- Dir[File.expand_path('../../spec/support/macros/**/*.rb', __FILE__)].map(&method(:require))
13
+ Dir[File.expand_path('../spec/support/macros/**/*.rb', __dir__)].map(&method(:require))
12
14
 
13
15
  RSpec.configure do |config|
14
16
  # Include our macros
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class DatabaseAdapter
2
4
  def initialize(opts = {})
3
5
  @database = opts[:database]
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'database_adapter'
2
4
 
3
5
  class Mysql2Adapter < DatabaseAdapter
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'database_adapter'
2
4
 
3
5
  class PostgresqlAdapter < DatabaseAdapter
@@ -1,8 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DatabaseMacros
2
4
  # Run migrations in the test database
3
5
  def run_migration(&block)
6
+ migration_class = if ActiveRecord::Migration.respond_to?(:[])
7
+ ActiveRecord::Migration[4.2]
8
+ else
9
+ ActiveRecord::Migration
10
+ end
11
+
4
12
  # Create a new migration class
5
- klass = Class.new(ActiveRecord::Migration)
13
+ klass = Class.new(migration_class)
6
14
 
7
15
  # Create a new `up` that executes the argument
8
16
  klass.send(:define_method, :up) { instance_exec(&block) }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModelMacros
2
4
  # Create a new model class
3
5
  def spawn_model(klass_name, parent_klass = ActiveRecord::Base, &block)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord_json_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 2.0.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: 2015-02-08 00:00:00.000000000 Z
11
+ date: 2021-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
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
- version: '1.3'
26
+ version: '1.12'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.1'
47
+ version: '3.5'
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: '3.1'
54
+ version: '3.5'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pg
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,20 +86,20 @@ dependencies:
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 4.1.0
89
+ version: 4.2.0
90
90
  - - "<"
91
91
  - !ruby/object:Gem::Version
92
- version: '5'
92
+ version: '7'
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
- version: 4.1.0
99
+ version: 4.2.0
100
100
  - - "<"
101
101
  - !ruby/object:Gem::Version
102
- version: '5'
102
+ version: '7'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: phare
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -129,39 +129,39 @@ dependencies:
129
129
  - !ruby/object:Gem::Version
130
130
  version: '0.28'
131
131
  - !ruby/object:Gem::Dependency
132
- name: json-schema
132
+ name: json_schemer
133
133
  requirement: !ruby/object:Gem::Requirement
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: '2.5'
137
+ version: 0.2.18
138
138
  type: :runtime
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '2.5'
144
+ version: 0.2.18
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: activerecord
147
147
  requirement: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - ">="
150
150
  - !ruby/object:Gem::Version
151
- version: 4.1.0
151
+ version: 4.2.0
152
152
  - - "<"
153
153
  - !ruby/object:Gem::Version
154
- version: '5'
154
+ version: '7'
155
155
  type: :runtime
156
156
  prerelease: false
157
157
  version_requirements: !ruby/object:Gem::Requirement
158
158
  requirements:
159
159
  - - ">="
160
160
  - !ruby/object:Gem::Version
161
- version: 4.1.0
161
+ version: 4.2.0
162
162
  - - "<"
163
163
  - !ruby/object:Gem::Version
164
- version: '5'
164
+ version: '7'
165
165
  description: ActiveRecord::JSONValidator makes it easy to validate JSON attributes
166
166
  with a JSON schema.
167
167
  email:
@@ -179,8 +179,9 @@ files:
179
179
  - README.md
180
180
  - Rakefile
181
181
  - activerecord_json_validator.gemspec
182
- - gemfiles/Gemfile.activerecord-4.1.x
183
182
  - gemfiles/Gemfile.activerecord-4.2.x
183
+ - gemfiles/Gemfile.activerecord-5.0.x
184
+ - gemfiles/Gemfile.activerecord-6.0.x
184
185
  - lib/active_record/json_validator/validator.rb
185
186
  - lib/active_record/json_validator/version.rb
186
187
  - lib/activerecord_json_validator.rb
@@ -210,8 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
210
211
  - !ruby/object:Gem::Version
211
212
  version: '0'
212
213
  requirements: []
213
- rubyforge_project:
214
- rubygems_version: 2.2.2
214
+ rubygems_version: 3.1.6
215
215
  signing_key:
216
216
  specification_version: 4
217
217
  summary: ActiveRecord::JSONValidator makes it easy to validate JSON attributes with