active_data 1.1.4 → 1.2.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
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