active_data 1.1.4 → 1.2.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: 8fd00914914806d951a6e19e1927d9256d681c3af5b2125b67e06b3d90ad368f
4
- data.tar.gz: ceeb1a7d53206a65d045d7a46017d261a0d872aa384bdebc7f11f4500861226d
3
+ metadata.gz: 80daeb6d630cc5fc243193c917e0b43f19b2fce35a746200551921f3892e1677
4
+ data.tar.gz: 4fc2d73f4d3a59ce0804fa652ba782ee33997e9be4870b4ee402d67b920a8c45
5
5
  SHA512:
6
- metadata.gz: 995f37a727c0815e131189133c31a8bb767f7001fecef437305e81723c11ec25f54884cc50411fb34e53d213fb7482298af8ac2d576e51da68044fb2deb287e5
7
- data.tar.gz: e9609fb34fba1628e4bc3d341378c2fea985fa021b2463ed61d5f9b2b9ae997315d07a54de516402459b2dc51dffc66076f1e64a492021895b507c3770330d58
6
+ metadata.gz: 3d8fe25346c0e72ac3600ed8f89266864cf86081d8a0db463e4b856688e7c5cd7a936b76c872f7470a0f942989ecc51bf5e1a0615ea68f74855119910607b139
7
+ data.tar.gz: c0f31ed6be42bbe6e3d06f82e4d546c04b72b7a527cb628019516531b430273a89eae8c727a4c4edc2010aa3cdd80fa8195953f793296e4726b2d5f666b973ec
@@ -0,0 +1,35 @@
1
+ name: CI
2
+ on: [push, pull_request]
3
+ jobs:
4
+ rspec:
5
+ strategy:
6
+ fail-fast: false
7
+ matrix:
8
+ include:
9
+ - { ruby: '2.3', rails: '4.2' }
10
+ - { ruby: '2.4', rails: '5.0' }
11
+ - { ruby: '2.5', rails: '5.1' }
12
+ - { ruby: '2.6', rails: '5.2' }
13
+ - { ruby: '2.7', rails: '6.0' }
14
+ - { ruby: '3.0', rails: '6.1' }
15
+ - { ruby: '3.0', rails: '7.0' }
16
+ runs-on: ubuntu-latest
17
+ env:
18
+ BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/rails.${{ matrix.rails }}.gemfile
19
+ steps:
20
+ - uses: actions/checkout@v2
21
+ - uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby }}
24
+ bundler-cache: true
25
+ - run: bundle exec rspec
26
+
27
+ rubocop:
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@v2
31
+ - uses: ruby/setup-ruby@v1
32
+ with:
33
+ ruby-version: 3.0
34
+ bundler-cache: true
35
+ - run: bundle exec rubocop
data/.rubocop.yml CHANGED
@@ -49,6 +49,7 @@ Metrics/BlockLength:
49
49
  Metrics/ModuleLength:
50
50
  Exclude:
51
51
  - '**/*_spec.rb'
52
+ - 'lib/active_data.rb'
52
53
 
53
54
  Style/Alias:
54
55
  EnforcedStyle: prefer_alias_method
data/Appraisals CHANGED
@@ -1,7 +1,8 @@
1
- %w[4.0 4.1 4.2 5.0 5.1 5.2].each do |version|
1
+ %w[4.2 5.0 5.1 5.2 6.0 6.1 7.0].each do |version|
2
2
  appraise "rails.#{version}" do
3
3
  gem 'activesupport', "~> #{version}.0"
4
4
  gem 'activemodel', "~> #{version}.0"
5
5
  gem 'activerecord', "~> #{version}.0"
6
+ gem 'sqlite3', '~> 1.3.6' if version < '6.0'
6
7
  end
7
8
  end
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # master
2
2
 
3
+ # Version 1.2.0
4
+
5
+ * Rails 6.1 and 7 support (#80). Thanks to @ojab and @rewritten
6
+
7
+ # Version 1.1.7
8
+
9
+ * Add typecasting from `ActionController::Parameters` to `Hash` (#73)
10
+
11
+ # Version 1.1.6
12
+
13
+ * Fix Ruby 2.6 deprecations (#72)
14
+
15
+ # Version 1.1.5
16
+
17
+ * Rails 6 support (#70, #71)
18
+
3
19
  # Version 1.1.4
4
20
 
5
21
  ## Changes
data/active_data.gemspec CHANGED
@@ -14,6 +14,7 @@ Gem::Specification.new do |gem|
14
14
  gem.require_paths = ['lib']
15
15
  gem.version = ActiveData::VERSION
16
16
 
17
+ gem.add_development_dependency 'actionpack', '>= 4.0'
17
18
  gem.add_development_dependency 'activerecord', '>= 4.0'
18
19
  gem.add_development_dependency 'appraisal'
19
20
  gem.add_development_dependency 'database_cleaner'
@@ -21,7 +22,6 @@ Gem::Specification.new do |gem|
21
22
  gem.add_development_dependency 'rspec', '~> 3.7.0'
22
23
  gem.add_development_dependency 'rspec-its'
23
24
  gem.add_development_dependency 'rubocop', '0.52.1'
24
- gem.add_development_dependency 'rubysl', '~> 2.0' if RUBY_ENGINE == 'rbx'
25
25
  gem.add_development_dependency 'sqlite3'
26
26
  gem.add_development_dependency 'uuidtools'
27
27
 
@@ -5,6 +5,7 @@ source "https://rubygems.org"
5
5
  gem "activesupport", "~> 4.2.0"
6
6
  gem "activemodel", "~> 4.2.0"
7
7
  gem "activerecord", "~> 4.2.0"
8
+ gem "sqlite3", "~> 1.3.6"
8
9
 
9
10
  group :test do
10
11
  gem "guard"
@@ -5,6 +5,7 @@ source "https://rubygems.org"
5
5
  gem "activesupport", "~> 5.0.0"
6
6
  gem "activemodel", "~> 5.0.0"
7
7
  gem "activerecord", "~> 5.0.0"
8
+ gem "sqlite3", "~> 1.3.6"
8
9
 
9
10
  group :test do
10
11
  gem "guard"
@@ -5,6 +5,7 @@ source "https://rubygems.org"
5
5
  gem "activesupport", "~> 5.1.0"
6
6
  gem "activemodel", "~> 5.1.0"
7
7
  gem "activerecord", "~> 5.1.0"
8
+ gem "sqlite3", "~> 1.3.6"
8
9
 
9
10
  group :test do
10
11
  gem "guard"
@@ -5,6 +5,7 @@ source "https://rubygems.org"
5
5
  gem "activesupport", "~> 5.2.0"
6
6
  gem "activemodel", "~> 5.2.0"
7
7
  gem "activerecord", "~> 5.2.0"
8
+ gem "sqlite3", "~> 1.3.6"
8
9
 
9
10
  group :test do
10
11
  gem "guard"
@@ -2,9 +2,9 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activesupport", "~> 4.0.0"
6
- gem "activemodel", "~> 4.0.0"
7
- gem "activerecord", "~> 4.0.0"
5
+ gem "activesupport", "~> 6.0.0"
6
+ gem "activemodel", "~> 6.0.0"
7
+ gem "activerecord", "~> 6.0.0"
8
8
 
9
9
  group :test do
10
10
  gem "guard"
@@ -2,9 +2,9 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activesupport", "~> 4.1.0"
6
- gem "activemodel", "~> 4.1.0"
7
- gem "activerecord", "~> 4.1.0"
5
+ gem "activesupport", "~> 6.1.0"
6
+ gem "activemodel", "~> 6.1.0"
7
+ gem "activerecord", "~> 6.1.0"
8
8
 
9
9
  group :test do
10
10
  gem "guard"
@@ -0,0 +1,14 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 7.0.0"
6
+ gem "activemodel", "~> 7.0.0"
7
+ gem "activerecord", "~> 7.0.0"
8
+
9
+ group :test do
10
+ gem "guard"
11
+ gem "guard-rspec"
12
+ end
13
+
14
+ gemspec path: "../"
@@ -81,8 +81,13 @@ module ActiveData
81
81
  pollute = owner.class.dirty? && !owner.send(:attribute_changed?, name)
82
82
 
83
83
  if pollute
84
- previous_value = read
84
+ previous_value = owner.__send__(name)
85
+ owner.send("#{name}_will_change!")
86
+
85
87
  result = yield
88
+
89
+ owner.__send__(:clear_attribute_changes, [name]) if owner.__send__(name) == previous_value
90
+
86
91
  if previous_value != read || (
87
92
  read.respond_to?(:changed?) &&
88
93
  read.changed?
@@ -1,3 +1,4 @@
1
+ require 'active_model/version'
1
2
  require 'active_data/model/attributes/reflections/represents'
2
3
  require 'active_data/model/attributes/represents'
3
4
 
@@ -67,14 +68,24 @@ module ActiveData
67
68
  #
68
69
  def emerge_represented_attributes_errors!
69
70
  self.class.represented_attributes.each do |attribute|
70
- key = :"#{attribute.reference}.#{attribute.column}"
71
- # Rails 5 pollutes messages with an empty array on key data fetch attempt
72
- messages = errors.messages[key] if errors.messages.key?(key)
73
- if messages.present?
74
- errors[attribute.column].concat(messages)
75
- errors.delete(key)
71
+ move_errors(:"#{attribute.reference}.#{attribute.column}", attribute.column)
72
+ end
73
+ end
74
+
75
+ if ActiveModel.version >= Gem::Version.new('6.1.0')
76
+ def move_errors(from, to)
77
+ errors[from].each do |error_message|
78
+ errors.add(to, error_message)
79
+ errors.delete(from)
76
80
  end
77
81
  end
82
+ else # up to 6.0.x
83
+ def move_errors(from, to)
84
+ return unless errors.messages.key?(from) && errors.messages[from].present?
85
+
86
+ errors[to].concat(errors.messages[from])
87
+ errors.delete(from)
88
+ end
78
89
  end
79
90
  end
80
91
  end
@@ -37,16 +37,44 @@ module ActiveData
37
37
  super || self.class._scope_model.respond_to?(method)
38
38
  end
39
39
 
40
- def method_missing(method, *args, &block)
41
- with_scope do
42
- model = self.class._scope_model
43
- if model.respond_to?(method)
44
- self.class._scope_model.public_send(method, *args, &block)
45
- else
46
- super
40
+ # rubocop:disable Style/MethodMissing
41
+ # rubocop-0.52.1 doesn't understand that `#respond_to_missing?` is defined above
42
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.0.0')
43
+ def method_missing(method, *args, **kwargs, &block)
44
+ with_scope do
45
+ model = self.class._scope_model
46
+ if model.respond_to?(method)
47
+ result = model.public_send(method, *args, **kwargs, &block)
48
+ result.is_a?(ActiveData::Model::Scopes) ? result : model.scope_class.new(result)
49
+ else
50
+ super
51
+ end
52
+ end
53
+ end
54
+ elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
55
+ def method_missing(method, *args, **kwargs, &block)
56
+ with_scope do
57
+ model = self.class._scope_model
58
+ if model.respond_to?(method)
59
+ model.public_send(method, *args, **kwargs, &block)
60
+ else
61
+ super
62
+ end
63
+ end
64
+ end
65
+ else # up to 2.6.x
66
+ def method_missing(method, *args, &block)
67
+ with_scope do
68
+ model = self.class._scope_model
69
+ if model.respond_to?(method)
70
+ model.public_send(method, *args, &block)
71
+ else
72
+ super
73
+ end
47
74
  end
48
75
  end
49
76
  end
77
+ # rubocop:enable Style/MethodMissing
50
78
 
51
79
  def with_scope
52
80
  previous_scope = self.class._scope_model.current_scope
@@ -6,7 +6,7 @@ module ActiveData
6
6
  invalid_records = Array.wrap(value).reject do |r|
7
7
  r.respond_to?(:valid?) && r.valid?(record.validation_context)
8
8
  end
9
- record.errors.add(attribute, :invalid, options.merge(value: value)) if invalid_records.present?
9
+ record.errors.add(attribute, :invalid, **options.merge(value: value)) if invalid_records.present?
10
10
  end
11
11
  end
12
12
 
@@ -1,3 +1,5 @@
1
+ require 'active_model/version'
2
+
1
3
  module ActiveData
2
4
  module Model
3
5
  module Validations
@@ -5,19 +7,26 @@ module ActiveData
5
7
  def self.validate_nested(record, name, value)
6
8
  if value.is_a?(Enumerable)
7
9
  value.each.with_index do |object, i|
8
- if yield(object)
9
- object.errors.each do |key, message|
10
- key = "#{name}.#{i}.#{key}"
11
- record.errors[key] << message
12
- record.errors[key].uniq!
13
- end
14
- end
10
+ import_errors(object.errors, record.errors, "#{name}.#{i}") if yield object
11
+ end
12
+ elsif value
13
+ import_errors(value.errors, record.errors, name.to_s) if yield value
14
+ end
15
+ end
16
+
17
+ if ActiveModel.version >= Gem::Version.new('6.1.0')
18
+ def self.import_errors(from, to, prefix)
19
+ from.each do |error|
20
+ key = "#{prefix}.#{error.attribute}"
21
+ to.import(error, attribute: key) unless to.added?(key, error.type, error.options)
15
22
  end
16
- elsif value && yield(value)
17
- value.errors.each do |key, message|
18
- key = "#{name}.#{key}"
19
- record.errors[key] << message
20
- record.errors[key].uniq!
23
+ end
24
+ else # up to 6.0.x
25
+ def self.import_errors(from, to, prefix)
26
+ from.each do |key, message|
27
+ key = "#{prefix}.#{key}"
28
+ to[key] << message
29
+ to[key].uniq!
21
30
  end
22
31
  end
23
32
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveData
2
- VERSION = '1.1.4'.freeze
2
+ VERSION = '1.2.0'.freeze
3
3
  end
data/lib/active_data.rb CHANGED
@@ -61,6 +61,16 @@ module ActiveData
61
61
  value
62
62
  end
63
63
  end
64
+ ActiveSupport.on_load :action_controller do
65
+ ActiveData.typecaster('Hash') do |value|
66
+ case value
67
+ when ActionController::Parameters
68
+ value.to_h if value.permitted?
69
+ when ::Hash then
70
+ value
71
+ end
72
+ end
73
+ end
64
74
  typecaster('Date') do |value|
65
75
  begin
66
76
  value.to_date
@@ -100,7 +110,7 @@ module ActiveData
100
110
  typecaster('BigDecimal') do |value|
101
111
  next unless value
102
112
  begin
103
- ::BigDecimal.new Float(value).to_s
113
+ BigDecimal(Float(value).to_s)
104
114
  rescue ArgumentError, TypeError
105
115
  nil
106
116
  end
@@ -58,9 +58,48 @@ describe ActiveData::Model::Attributes::Attribute do
58
58
  end
59
59
 
60
60
  describe '#typecast' do
61
- specify { expect(attribute.typecast(:hello)).to eq(:hello) }
62
- specify { expect(attribute(type: Integer).typecast(42)).to eq(42) }
63
- specify { expect(attribute(type: Integer).typecast('42')).to eq(42) }
61
+ context 'when Object' do
62
+ specify { expect(attribute.typecast(:hello)).to eq(:hello) }
63
+ end
64
+
65
+ context 'when Integer' do
66
+ specify { expect(attribute(type: Integer).typecast(42)).to eq(42) }
67
+ specify { expect(attribute(type: Integer).typecast('42')).to eq(42) }
68
+ end
69
+
70
+ context 'when Hash' do
71
+ let(:to_h) { {'x' => {'foo' => 'bar'}, 'y' => 2} }
72
+ let(:parameters) { ActionController::Parameters.new(to_h) }
73
+
74
+ before(:all) do
75
+ @default_hash_typecaster = ActiveData.typecaster('Hash')
76
+ require 'action_controller'
77
+ Class.new(ActionController::Base)
78
+ @action_controller_hash_typecaster = ActiveData.typecaster('Hash')
79
+ end
80
+
81
+ context 'when ActionController is loaded' do
82
+ before { ActiveData.typecaster('Hash', &@action_controller_hash_typecaster) }
83
+ after { ActiveData.typecaster('Hash', &@default_hash_typecaster) }
84
+
85
+ specify { expect(attribute(type: Hash).typecast(nil)).to be_nil }
86
+ specify { expect(attribute(type: Hash).typecast(to_h)).to eq(to_h) }
87
+ specify { expect(attribute(type: Hash).typecast(parameters)).to be_nil }
88
+ specify { expect(attribute(type: Hash).typecast(parameters.permit(:y, x: [:foo]))).to eq(to_h) }
89
+ end
90
+
91
+ context 'when ActionController is not loaded' do
92
+ before { ActiveData.typecaster('Hash', &@default_hash_typecaster) }
93
+
94
+ specify { expect(attribute(type: Hash).typecast(nil)).to be_nil }
95
+ specify { expect(attribute(type: Hash).typecast(to_h)).to eq(to_h) }
96
+ if ActiveSupport.version > Gem::Version.new('4.3')
97
+ specify { expect(attribute(type: Hash).typecast(parameters.permit(:y, x: [:foo]))).to be_nil }
98
+ else
99
+ specify { expect(attribute(type: Hash).typecast(parameters.permit(:y, x: [:foo]))).to eq(to_h) }
100
+ end
101
+ end
102
+ end
64
103
  end
65
104
 
66
105
  describe '#enum' do
@@ -93,7 +93,7 @@ describe ActiveData::Model::Attributes::Localized do
93
93
  before do
94
94
  require 'i18n/backend/fallbacks'
95
95
  I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
96
- I18n.fallbacks.map(en: :ru)
96
+ I18n.fallbacks[:en] = [:ru]
97
97
  end
98
98
  after { I18n.fallbacks = false }
99
99
  its(:name) { should == 'Привет' }
@@ -71,8 +71,8 @@ describe ActiveData::Model::Dirty do
71
71
  specify { expect(Model.new(numbers: '42').changes).to eq('numbers' => [[], [42]]) }
72
72
 
73
73
  # Have no idea how should it work right now
74
- specify { expect(Model.new(title: 'Hello').changes).to eq('title' => [{}, 'Hello']) }
75
- specify { expect(Model.new(title_translations: {en: 'Hello'}).changes).to eq('title' => [{}, 'Hello']) }
74
+ specify { expect(Model.new(title: 'Hello').changes).to eq('title' => [nil, 'Hello']) }
75
+ specify { expect(Model.new(title_translations: {en: 'Hello'}).changes).to eq('title' => [nil, 'Hello']) }
76
76
 
77
77
  specify { expect(Model.new).not_to respond_to :something_changed? }
78
78
  specify { expect(Model.new).to respond_to :n_changed? }
@@ -39,11 +39,17 @@ describe ActiveData::Model::Representation do
39
39
  end
40
40
 
41
41
  context 'dirty' do
42
- before { Post.include ActiveData::Model::Dirty }
42
+ before do
43
+ Author.include ActiveData::Model::Dirty
44
+ Post.include ActiveData::Model::Dirty
45
+ end
43
46
 
44
47
  specify do
45
48
  expect(Post.new(author: author, rate: '33').changes)
46
49
  .to eq('author' => [nil, author], 'rate' => [42, 33])
50
+
51
+ expect(Post.new(author: author, rate: '33').changes)
52
+ .to eq('author' => [nil, author])
47
53
  end
48
54
  end
49
55
 
@@ -66,11 +66,11 @@ describe ActiveData::Model::Attributes do
66
66
 
67
67
  specify { expect(model.new(column: 'hello').column).to be_nil }
68
68
  specify { expect(model.new(column: '123hello').column).to be_nil }
69
- specify { expect(model.new(column: '123').column).to eq(BigDecimal.new('123.0')) }
69
+ specify { expect(model.new(column: '123').column).to eq(BigDecimal('123.0')) }
70
70
  specify { expect(model.new(column: '123.').column).to be_nil }
71
- specify { expect(model.new(column: '123.5').column).to eq(BigDecimal.new('123.5')) }
72
- specify { expect(model.new(column: 123).column).to eq(BigDecimal.new('123.0')) }
73
- specify { expect(model.new(column: 123.5).column).to eq(BigDecimal.new('123.5')) }
71
+ specify { expect(model.new(column: '123.5').column).to eq(BigDecimal('123.5')) }
72
+ specify { expect(model.new(column: 123).column).to eq(BigDecimal('123.0')) }
73
+ specify { expect(model.new(column: 123.5).column).to eq(BigDecimal('123.5')) }
74
74
  specify { expect(model.new(column: nil).column).to be_nil }
75
75
  specify { expect(model.new(column: [123.5]).column).to be_nil }
76
76
  end
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,8 @@ Bundler.require
4
4
 
5
5
  require 'rspec/its'
6
6
  require 'active_record'
7
+ require 'rack/test'
8
+ require 'action_controller/metal/strong_parameters'
7
9
  require 'database_cleaner'
8
10
 
9
11
  require 'support/model_helpers'
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_data
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - pyromaniac
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-14 00:00:00.000000000 Z
11
+ date: 2021-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: actionpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: activerecord
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -186,11 +200,11 @@ extensions: []
186
200
  extra_rdoc_files: []
187
201
  files:
188
202
  - ".codeclimate.yml"
203
+ - ".github/workflows/ci.yml"
189
204
  - ".gitignore"
190
205
  - ".rspec"
191
206
  - ".rubocop.yml"
192
207
  - ".rubocop_todo.yml"
193
- - ".travis.yml"
194
208
  - Appraisals
195
209
  - CHANGELOG.md
196
210
  - Gemfile
@@ -199,12 +213,13 @@ files:
199
213
  - README.md
200
214
  - Rakefile
201
215
  - active_data.gemspec
202
- - gemfiles/rails.4.0.gemfile
203
- - gemfiles/rails.4.1.gemfile
204
216
  - gemfiles/rails.4.2.gemfile
205
217
  - gemfiles/rails.5.0.gemfile
206
218
  - gemfiles/rails.5.1.gemfile
207
219
  - gemfiles/rails.5.2.gemfile
220
+ - gemfiles/rails.6.0.gemfile
221
+ - gemfiles/rails.6.1.gemfile
222
+ - gemfiles/rails.7.0.gemfile
208
223
  - lib/active_data.rb
209
224
  - lib/active_data/active_record/associations.rb
210
225
  - lib/active_data/active_record/nested_attributes.rb
@@ -318,7 +333,7 @@ files:
318
333
  homepage: ''
319
334
  licenses: []
320
335
  metadata: {}
321
- post_install_message:
336
+ post_install_message:
322
337
  rdoc_options: []
323
338
  require_paths:
324
339
  - lib
@@ -333,8 +348,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
333
348
  - !ruby/object:Gem::Version
334
349
  version: '0'
335
350
  requirements: []
336
- rubygems_version: 3.0.3
337
- signing_key:
351
+ rubygems_version: 3.1.4
352
+ signing_key:
338
353
  specification_version: 4
339
354
  summary: Working with hashes in AR style
340
355
  test_files:
data/.travis.yml DELETED
@@ -1,33 +0,0 @@
1
- sudo: false
2
-
3
- rvm:
4
- - 2.2.10
5
- - 2.3.7
6
- - 2.4.4
7
- - rbx
8
-
9
- gemfile:
10
- - gemfiles/rails.4.0.gemfile
11
- - gemfiles/rails.4.1.gemfile
12
- - gemfiles/rails.4.2.gemfile
13
- - gemfiles/rails.5.0.gemfile
14
- - gemfiles/rails.5.1.gemfile
15
- - gemfiles/rails.5.2.gemfile
16
-
17
- matrix:
18
- allow_failures:
19
- - rvm: rbx
20
- exclude:
21
- - rvm: 2.4.4
22
- gemfile: gemfiles/rails.4.0.gemfile
23
- - rvm: 2.4.4
24
- gemfile: gemfiles/rails.4.1.gemfile
25
- - rvm: 2.4.4
26
- gemfile: gemfiles/rails.4.2.gemfile
27
-
28
- before_install:
29
- - gem update --system --no-doc
30
-
31
- script:
32
- - bundle exec rspec
33
- - bundle exec rubocop