activerecord_json_validator 0.5.1 → 2.0.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
- 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