active_record-acts_as 3.1.0 → 5.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 +4 -4
- data/.travis.yml +6 -8
- data/Appraisals +6 -10
- data/CHANGELOG.md +76 -32
- data/README.md +7 -8
- data/active_record-acts_as.gemspec +9 -8
- data/gemfiles/{rails_4.2.gemfile → rails_6.0.gemfile} +1 -1
- data/gemfiles/{rails_5.0.gemfile → rails_6.1.gemfile} +1 -1
- data/gemfiles/{rails_5.1.gemfile → rails_master.gemfile} +1 -1
- data/lib/active_record/acts_as/instance_methods.rb +13 -5
- data/lib/active_record/acts_as/migration.rb +4 -4
- data/lib/active_record/acts_as/querying.rb +5 -4
- data/lib/active_record/acts_as/relation.rb +8 -8
- data/lib/active_record/acts_as/version.rb +1 -1
- data/spec/acts_as_spec.rb +21 -19
- data/spec/find_or_initialize_by_spec.rb +23 -0
- metadata +27 -37
- data/gemfiles/rails_5.2.gemfile +0 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5bfaa5ca9169073f3896b1aeb86e905e604630d82c41a94ab3686f32da5b6dd7
|
|
4
|
+
data.tar.gz: e7be68ef37b33ff53696b87fa340ba7cd824219907db046f0be8b34631c7b3af
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 340035e0b4f8d725a9789e59c54f104c154dc3a142a3e0ba3e32d70ecf7742dfebb5fd8027360451f3e0b63295014ddc231f38d61e7b6e599ece65f39ae4cb19
|
|
7
|
+
data.tar.gz: 7c0ec150bc1d2a64eb2831208919b146f51a35c8397fbf3cd5069353e0ae67f41d28be2afd7da9268f4d65c1489a505d311791c0af037425370d77efbbbc20f7
|
data/.travis.yml
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
sudo: false
|
|
3
3
|
rvm:
|
|
4
|
-
- 2.
|
|
5
|
-
- 2.
|
|
6
|
-
-
|
|
4
|
+
- 2.6
|
|
5
|
+
- 2.7
|
|
6
|
+
- 3.0
|
|
7
7
|
before_install:
|
|
8
8
|
- gem update --system
|
|
9
|
-
- gem update bundler
|
|
10
9
|
gemfile:
|
|
11
|
-
- gemfiles/
|
|
12
|
-
- gemfiles/
|
|
13
|
-
- gemfiles/
|
|
14
|
-
- gemfiles/rails_5.2.gemfile
|
|
10
|
+
- gemfiles/rails_6.0.gemfile
|
|
11
|
+
- gemfiles/rails_6.1.gemfile
|
|
12
|
+
- gemfiles/rails_master.gemfile
|
data/Appraisals
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
appraise
|
|
2
|
-
gem 'rails', '~>
|
|
1
|
+
appraise "rails-6.0" do
|
|
2
|
+
gem 'rails', '~> 6.0'
|
|
3
3
|
end
|
|
4
4
|
|
|
5
|
-
appraise
|
|
6
|
-
gem 'rails', '~>
|
|
5
|
+
appraise "rails-6.1" do
|
|
6
|
+
gem 'rails', '~> 6.1'
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
appraise
|
|
10
|
-
gem 'rails',
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
appraise 'rails-5.2' do
|
|
14
|
-
gem 'rails', '~> 5.2.0.rc1'
|
|
9
|
+
appraise "rails-master" do
|
|
10
|
+
gem 'rails', github: 'rails/rails'
|
|
15
11
|
end
|
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,44 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [Unreleased] -
|
|
8
|
+
|
|
9
|
+
## [5.0.0] - 2019-12-29 by @chaadow
|
|
10
|
+
### Added
|
|
11
|
+
- Add support for rails 6 and 6.1 while removing rails 4.x and 5.x
|
|
12
|
+
from the travis matrix.
|
|
13
|
+
- Remove last ruby 3 warnings and make the gem **totally compatible with
|
|
14
|
+
ruby 3**
|
|
15
|
+
- Add support for rails master ( aka rails 6.2) to catch any upcoming
|
|
16
|
+
breaking change up front.
|
|
17
|
+
- bump minimum ruby version to 2.5
|
|
18
|
+
- Update test coverage
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
- Fix `#touch` API to match rails 5/6 API and make it ruby 3 compatible
|
|
22
|
+
- collection methods such as `<<` work now under rails 6.1
|
|
23
|
+
- Prepare for Rails 6.2 breaking change by updating how errors
|
|
24
|
+
are accessed and removing warning. They are now ruby objects.
|
|
25
|
+
see [this](https://api.rubyonrails.org/v6.1.0/classes/ActiveModel/Errors.html)
|
|
26
|
+
|
|
27
|
+
### Removed
|
|
28
|
+
- Remove support for rails 4.x and 5.x
|
|
29
|
+
|
|
30
|
+
## [4.0.0] - 2019-01-09
|
|
31
|
+
|
|
32
|
+
## [3.1.0] - 2018-12-13
|
|
33
|
+
|
|
34
|
+
## [3.0.2] - 2018-08-12
|
|
35
|
+
|
|
36
|
+
## [3.0.1] - 2018-04-25
|
|
37
|
+
|
|
38
|
+
## [3.0.0] - 2019-02-21
|
|
39
|
+
|
|
40
|
+
## [2.5.0] - 2017-07-29
|
|
41
|
+
### Changed
|
|
42
|
+
- Drop support for Rails >= 5.0
|
|
43
|
+
- Remove warnings occurring in Rails 5.1
|
|
44
|
+
|
|
7
45
|
## [2.4.2] - 2017-04-20
|
|
8
46
|
### Fixed
|
|
9
47
|
- Fix querying for conditions with hashes.
|
|
@@ -22,10 +60,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
|
22
60
|
|
|
23
61
|
## [2.3.0] - 2017-04-12
|
|
24
62
|
### Fixed
|
|
25
|
-
- Prevent duplicate validation errors (fixes https://github.com/
|
|
63
|
+
- Prevent duplicate validation errors (fixes https://github.com/chaadow/active_record-acts_as/issues/2)
|
|
26
64
|
|
|
27
65
|
### Added
|
|
28
|
-
- Added support for touching submodel attributes (https://github.com/
|
|
66
|
+
- Added support for touching submodel attributes (https://github.com/chaadow/active_record-acts_as/pull/3, thanks to [dezmathio](https://github.com/dezmathio)!)
|
|
29
67
|
|
|
30
68
|
## [2.2.1] - 2017-04-08
|
|
31
69
|
### Fixed
|
|
@@ -92,33 +130,39 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
|
92
130
|
### Fixed
|
|
93
131
|
- Fixed `remove_actable` migration helper (https://github.com/hzamani/active_record-acts_as/pull/71, thanks to [nuclearpidgeon](https://github.com/nuclearpidgeon)!)
|
|
94
132
|
|
|
95
|
-
[Unreleased]: https://github.com/
|
|
96
|
-
[
|
|
97
|
-
[
|
|
98
|
-
[
|
|
99
|
-
[
|
|
100
|
-
[
|
|
101
|
-
[2.
|
|
102
|
-
[2.2
|
|
103
|
-
[2.
|
|
104
|
-
[2.
|
|
105
|
-
[2.
|
|
106
|
-
[2.0
|
|
107
|
-
[2.
|
|
108
|
-
[2.0
|
|
109
|
-
[2.
|
|
110
|
-
[2.0
|
|
111
|
-
[2.0.
|
|
112
|
-
[2.0.
|
|
113
|
-
[2.0.
|
|
114
|
-
[2.0.
|
|
115
|
-
[
|
|
116
|
-
[
|
|
117
|
-
[
|
|
118
|
-
[
|
|
119
|
-
[
|
|
120
|
-
[
|
|
121
|
-
[1.0.
|
|
122
|
-
[1.0.
|
|
123
|
-
[1.0.
|
|
124
|
-
[1.0.
|
|
133
|
+
[Unreleased]: https://github.com/chaadow/active_record-acts_as/compare/v5.0.0...HEAD
|
|
134
|
+
[5.0.0]: https://github.com/chaadow/active_record-acts_as/compare/v4.0.0...v5.0.0
|
|
135
|
+
[3.1.0]: https://github.com/chaadow/active_record-acts_as/compare/v3.1.0...v4.0.0
|
|
136
|
+
[3.0.2]: https://github.com/chaadow/active_record-acts_as/compare/v3.0.1...v3.0.2
|
|
137
|
+
[3.0.1]: https://github.com/chaadow/active_record-acts_as/compare/v3.0.0...v3.0.1
|
|
138
|
+
[3.0.0]: https://github.com/chaadow/active_record-acts_as/compare/v2.5.0...v3.0.0
|
|
139
|
+
[2.5.0]: https://github.com/chaadow/active_record-acts_as/compare/v2.4.2...v2.5.0
|
|
140
|
+
[2.4.2]: https://github.com/chaadow/active_record-acts_as/compare/v2.4.1...v2.4.2
|
|
141
|
+
[2.4.1]: https://github.com/chaadow/active_record-acts_as/compare/v2.4.0...v2.4.1
|
|
142
|
+
[2.4.0]: https://github.com/chaadow/active_record-acts_as/compare/v2.3.1...v2.4.0
|
|
143
|
+
[2.3.1]: https://github.com/chaadow/active_record-acts_as/compare/v2.3.0...v2.3.1
|
|
144
|
+
[2.3.0]: https://github.com/chaadow/active_record-acts_as/compare/v2.2.1...v2.3.0
|
|
145
|
+
[2.2.1]: https://github.com/chaadow/active_record-acts_as/compare/v2.2.0...v2.2.1
|
|
146
|
+
[2.2.0]: https://github.com/chaadow/active_record-acts_as/compare/v2.1.1...v2.2.0
|
|
147
|
+
[2.1.1]: https://github.com/chaadow/active_record-acts_as/compare/v2.1.0...v2.1.1
|
|
148
|
+
[2.1.0]: https://github.com/chaadow/active_record-acts_as/compare/v2.0.9...v2.1.0
|
|
149
|
+
[2.0.9]: https://github.com/chaadow/active_record-acts_as/compare/v2.0.8...v2.0.9
|
|
150
|
+
[2.0.8]: https://github.com/chaadow/active_record-acts_as/compare/v2.0.7...v2.0.8
|
|
151
|
+
[2.0.7]: https://github.com/chaadow/active_record-acts_as/compare/v2.0.6...v2.0.7
|
|
152
|
+
[2.0.6]: https://github.com/chaadow/active_record-acts_as/compare/v2.0.5...v2.0.6
|
|
153
|
+
[2.0.5]: https://github.com/chaadow/active_record-acts_as/compare/v2.0.4...v2.0.5
|
|
154
|
+
[2.0.4]: https://github.com/chaadow/active_record-acts_as/compare/v2.0.3...v2.0.4
|
|
155
|
+
[2.0.3]: https://github.com/chaadow/active_record-acts_as/compare/v2.0.2...v2.0.3
|
|
156
|
+
[2.0.2]: https://github.com/chaadow/active_record-acts_as/compare/v2.0.1...v2.0.2
|
|
157
|
+
[2.0.1]: https://github.com/chaadow/active_record-acts_as/compare/v2.0.0...v2.0.1
|
|
158
|
+
[2.0.0]: https://github.com/chaadow/active_record-acts_as/compare/v1.0.8...v2.0.0
|
|
159
|
+
[1.0.8]: https://github.com/chaadow/active_record-acts_as/compare/v1.0.7...v1.0.8
|
|
160
|
+
[1.0.7]: https://github.com/chaadow/active_record-acts_as/compare/v1.0.6...v1.0.7
|
|
161
|
+
[1.0.6]: https://github.com/chaadow/active_record-acts_as/compare/v1.0.5...v1.0.6
|
|
162
|
+
[1.0.5]: https://github.com/chaadow/active_record-acts_as/compare/v1.0.4...v1.0.5
|
|
163
|
+
[1.0.4]: https://github.com/chaadow/active_record-acts_as/compare/v1.0.3...v1.0.4
|
|
164
|
+
[1.0.3]: https://github.com/chaadow/active_record-acts_as/compare/v1.0.2...v1.0.3
|
|
165
|
+
[1.0.2]: https://github.com/chaadow/active_record-acts_as/compare/v1.0.1...v1.0.2
|
|
166
|
+
[1.0.1]: https://github.com/chaadow/active_record-acts_as/compare/v1.0.0...v1.0.1
|
|
167
|
+
[1.0.0]: https://github.com/chaadow/active_record-acts_as/compare/v1.0.0.rc...v1.0.0
|
|
168
|
+
[1.0.0.rc]: https://github.com/chaadow/active_record-acts_as/compare/v1.0.0.pre...v1.0.0.rc
|
data/README.md
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
[](http://badge.fury.io/rb/active_record-acts_as)
|
|
2
|
-
[](https://codeclimate.com/github/krautcomputing/active_record-acts_as)
|
|
4
|
-
[](https://coveralls.io/r/krautcomputing/active_record-acts_as)
|
|
5
|
-
[](https://gemnasium.com/krautcomputing/active_record-acts_as)
|
|
2
|
+
[](https://travis-ci.org/chaadow/active_record-acts_as)
|
|
6
3
|
|
|
7
4
|
# ActiveRecord::ActsAs
|
|
8
5
|
|
|
@@ -21,9 +18,11 @@ a separate table for each product type, i.e. a `pens` table with `color` column.
|
|
|
21
18
|
|
|
22
19
|
## Requirements
|
|
23
20
|
|
|
24
|
-
* Ruby >= 2.
|
|
25
|
-
* ActiveSupport >=
|
|
26
|
-
* ActiveRecord >=
|
|
21
|
+
* Ruby >= `2.5`
|
|
22
|
+
* ActiveSupport >= `6.0`
|
|
23
|
+
* ActiveRecord >= `6.0`
|
|
24
|
+
* Regarding ActiveRecord `5.2.x` please use version `4.0.3` of this gem. If you encounter any bug you can open an issue.
|
|
25
|
+
Maintenance will be stopped after the release of ActiveRecord `6.2`
|
|
27
26
|
|
|
28
27
|
## Installation
|
|
29
28
|
|
|
@@ -220,7 +219,7 @@ end
|
|
|
220
219
|
|
|
221
220
|
## Contributing
|
|
222
221
|
|
|
223
|
-
1. Fork it (
|
|
222
|
+
1. Fork it (https://github.com/chaadow/active_record-acts_as/fork)
|
|
224
223
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
225
224
|
3. Test changes don't break anything (`rspec`)
|
|
226
225
|
4. Add specs for your new feature
|
|
@@ -6,11 +6,11 @@ require 'active_record/acts_as/version'
|
|
|
6
6
|
Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "active_record-acts_as"
|
|
8
8
|
spec.version = ActiveRecord::ActsAs::VERSION
|
|
9
|
-
spec.authors = ["Hassan Zamani", "Manuel Meurer"]
|
|
10
|
-
spec.email = ["hsn.zamani@gmail.com", "manuel@krautcomputing.com"]
|
|
9
|
+
spec.authors = ["Hassan Zamani", "Manuel Meurer", "Chedli Bourguiba"]
|
|
10
|
+
spec.email = ["hsn.zamani@gmail.com", "manuel@krautcomputing.com", "bourguiba.chedli@gmail.com"]
|
|
11
11
|
spec.summary = %q{Simulate multi-table inheritance for activerecord models}
|
|
12
12
|
spec.description = %q{Simulate multi-table inheritance for activerecord models using a polymorphic association}
|
|
13
|
-
spec.homepage = "http://github.com/
|
|
13
|
+
spec.homepage = "http://github.com/chaadow/active_record-acts_as"
|
|
14
14
|
spec.license = "MIT"
|
|
15
15
|
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
|
@@ -18,15 +18,16 @@ 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.required_ruby_version = ">= 2.
|
|
21
|
+
spec.required_ruby_version = ">= 2.5"
|
|
22
22
|
|
|
23
|
-
spec.add_development_dependency "sqlite3"
|
|
24
|
-
spec.add_development_dependency "bundler"
|
|
23
|
+
spec.add_development_dependency "sqlite3"
|
|
24
|
+
spec.add_development_dependency "bundler"
|
|
25
25
|
spec.add_development_dependency "rspec", "~> 3"
|
|
26
26
|
spec.add_development_dependency "rake", "~> 10"
|
|
27
27
|
spec.add_development_dependency "appraisal", "~> 2.1"
|
|
28
28
|
spec.add_development_dependency "guard-rspec", "~> 4.7"
|
|
29
29
|
|
|
30
|
-
spec.add_dependency "activesupport", ">=
|
|
31
|
-
spec.add_dependency "activerecord", ">=
|
|
30
|
+
spec.add_dependency "activesupport", ">= 6.0"
|
|
31
|
+
spec.add_dependency "activerecord", ">= 6.0"
|
|
32
|
+
|
|
32
33
|
end
|
|
@@ -19,8 +19,8 @@ module ActiveRecord
|
|
|
19
19
|
|
|
20
20
|
def actable_must_be_valid
|
|
21
21
|
unless acting_as.valid?
|
|
22
|
-
acting_as.errors.each do |
|
|
23
|
-
errors.add(attribute, message) unless errors[attribute].include?(message)
|
|
22
|
+
acting_as.errors.each do |error|
|
|
23
|
+
errors.add(error.attribute, error.message) unless errors[error.attribute].include?(error.message)
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
end
|
|
@@ -42,6 +42,14 @@ module ActiveRecord
|
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
+
def _write_attribute(attr_name, value, *args, &block)
|
|
46
|
+
if attribute_method?(attr_name.to_s)
|
|
47
|
+
super
|
|
48
|
+
else
|
|
49
|
+
acting_as.send(:_write_attribute, attr_name, value, *args, &block)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
45
53
|
def read_store_attribute(store_attribute, key)
|
|
46
54
|
if attribute_method?(store_attribute.to_s)
|
|
47
55
|
super
|
|
@@ -83,10 +91,10 @@ module ActiveRecord
|
|
|
83
91
|
end
|
|
84
92
|
end
|
|
85
93
|
|
|
86
|
-
def touch(*args)
|
|
94
|
+
def touch(*args, time: nil)
|
|
87
95
|
self_args, acting_as_args = args.partition { |arg| has_attribute?(arg, true) }
|
|
88
|
-
super(*self_args) if self_args.any?
|
|
89
|
-
acting_as.touch(*acting_as_args) if acting_as.persisted?
|
|
96
|
+
super(*self_args, time: time) if self_args.any?
|
|
97
|
+
acting_as.touch(*acting_as_args, time: time) if acting_as.persisted?
|
|
90
98
|
end
|
|
91
99
|
|
|
92
100
|
def respond_to?(name, include_private = false, as_original_class = false)
|
|
@@ -2,20 +2,20 @@ module ActiveRecord
|
|
|
2
2
|
module ActsAs
|
|
3
3
|
module Migration
|
|
4
4
|
module TableDefinition
|
|
5
|
-
def actable(options
|
|
5
|
+
def actable(**options)
|
|
6
6
|
name = options.delete(:as) || :actable
|
|
7
7
|
options[:polymorphic] = true
|
|
8
|
-
references(name, options)
|
|
8
|
+
references(name, **options)
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
module Table
|
|
13
13
|
include TableDefinition
|
|
14
14
|
|
|
15
|
-
def remove_actable(options
|
|
15
|
+
def remove_actable(**options)
|
|
16
16
|
name = options.delete(:as) || :actable
|
|
17
17
|
options[:polymorphic] = true
|
|
18
|
-
@base.remove_reference(@name, name, options)
|
|
18
|
+
@base.remove_reference(@name, name, **options)
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
end
|
|
@@ -28,10 +28,11 @@ module ActiveRecord
|
|
|
28
28
|
|
|
29
29
|
module ScopeForCreate
|
|
30
30
|
def scope_for_create(attributes = nil)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
return super() unless acting_as?
|
|
32
|
+
|
|
33
|
+
scope = respond_to?(:values_for_create) ? values_for_create(attributes) : where_values_hash
|
|
34
|
+
scope.merge!(where_values_hash(acting_as_model.table_name))
|
|
35
|
+
scope.merge!(attributes) if attributes
|
|
35
36
|
scope.merge(create_with_value)
|
|
36
37
|
end
|
|
37
38
|
end
|
|
@@ -14,7 +14,7 @@ module ActiveRecord
|
|
|
14
14
|
|
|
15
15
|
options = options.reverse_merge(as: as, validate: false, autosave: true, inverse_of: as)
|
|
16
16
|
|
|
17
|
-
reflections = has_one(name, scope, options)
|
|
17
|
+
reflections = has_one(name, scope, **options)
|
|
18
18
|
default_scope -> {
|
|
19
19
|
case association_method
|
|
20
20
|
when :eager_load
|
|
@@ -28,11 +28,11 @@ module ActiveRecord
|
|
|
28
28
|
validate :actable_must_be_valid if validates_actable
|
|
29
29
|
|
|
30
30
|
unless touch == false
|
|
31
|
-
after_update :touch, if:
|
|
31
|
+
after_update :touch, if: :saved_changes?
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
before_save do
|
|
35
|
-
@_acting_as_changed =
|
|
35
|
+
@_acting_as_changed = acting_as.has_changes_to_save?
|
|
36
36
|
true
|
|
37
37
|
end
|
|
38
38
|
after_commit do
|
|
@@ -79,11 +79,11 @@ module ActiveRecord
|
|
|
79
79
|
def actable(scope = nil, **options)
|
|
80
80
|
name = options.delete(:as) || :actable
|
|
81
81
|
|
|
82
|
-
reflections = belongs_to(name, scope, options.reverse_merge(validate: false,
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
reflections = belongs_to(name, scope, **options.reverse_merge(validate: false,
|
|
83
|
+
polymorphic: true,
|
|
84
|
+
dependent: :destroy,
|
|
85
|
+
autosave: true,
|
|
86
|
+
inverse_of: to_s.underscore))
|
|
87
87
|
|
|
88
88
|
cattr_reader(:actable_reflection) { reflections.stringify_keys[name.to_s] }
|
|
89
89
|
|
data/spec/acts_as_spec.rb
CHANGED
|
@@ -221,10 +221,11 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
|
221
221
|
|
|
222
222
|
context 'touching' do
|
|
223
223
|
describe '#touch with arguments' do
|
|
224
|
-
it "forwards supermodel arguments
|
|
224
|
+
it "forwards supermodel arguments to the supermodel" do
|
|
225
|
+
now = Time.current
|
|
225
226
|
pen.save!
|
|
226
|
-
expect(pen.product).to receive(:touch).with(:updated_at)
|
|
227
|
-
pen.touch(:updated_at, :
|
|
227
|
+
expect(pen.product).to receive(:touch).with(:updated_at, {time: now})
|
|
228
|
+
pen.touch(:updated_at, time: now)
|
|
228
229
|
end
|
|
229
230
|
|
|
230
231
|
it "updates submodel arguments" do
|
|
@@ -236,7 +237,7 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
|
236
237
|
describe '#touch without arguments' do
|
|
237
238
|
it "touches the supermodel" do
|
|
238
239
|
pen.save!
|
|
239
|
-
expect(pen.product).to receive(:touch).with(
|
|
240
|
+
expect(pen.product).to receive(:touch).with(time: nil)
|
|
240
241
|
pen.touch
|
|
241
242
|
end
|
|
242
243
|
end
|
|
@@ -299,21 +300,21 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
|
299
300
|
it "combines supermodel and submodel errors" do
|
|
300
301
|
pen = Pen.new
|
|
301
302
|
expect(pen).to be_invalid
|
|
302
|
-
expect(pen.errors.
|
|
303
|
-
name: "can't be blank",
|
|
304
|
-
price: "can't be blank",
|
|
305
|
-
color: "can't be blank"
|
|
303
|
+
expect(pen.errors.to_hash).to eq(
|
|
304
|
+
name: ["can't be blank"],
|
|
305
|
+
price: ["can't be blank"],
|
|
306
|
+
color: ["can't be blank"]
|
|
306
307
|
)
|
|
307
308
|
pen.name = 'testing'
|
|
308
309
|
expect(pen).to be_invalid
|
|
309
|
-
expect(pen.errors.
|
|
310
|
-
price: "can't be blank",
|
|
311
|
-
color: "can't be blank"
|
|
310
|
+
expect(pen.errors.to_hash).to eq(
|
|
311
|
+
price: ["can't be blank"],
|
|
312
|
+
color: ["can't be blank"]
|
|
312
313
|
)
|
|
313
314
|
pen.color = 'red'
|
|
314
315
|
expect(pen).to be_invalid
|
|
315
|
-
expect(pen.errors.
|
|
316
|
-
price: "can't be blank"
|
|
316
|
+
expect(pen.errors.to_hash).to eq(
|
|
317
|
+
price: ["can't be blank"]
|
|
317
318
|
)
|
|
318
319
|
pen.price = 0.8
|
|
319
320
|
expect(pen).to be_valid
|
|
@@ -324,8 +325,8 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
|
324
325
|
it "unless validates_actable is set to false" do
|
|
325
326
|
pen = IsolatedPen.new
|
|
326
327
|
expect(pen).to be_invalid
|
|
327
|
-
expect(pen.errors.
|
|
328
|
-
color: "can't be blank"
|
|
328
|
+
expect(pen.errors.to_hash).to eq(
|
|
329
|
+
color: ["can't be blank"]
|
|
329
330
|
)
|
|
330
331
|
pen.color = 'red'
|
|
331
332
|
expect(pen).to be_valid
|
|
@@ -402,7 +403,7 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
|
402
403
|
it "returns a query for the actable records" do
|
|
403
404
|
red_pen = Pen.create!(name: 'red pen', price: 0.8, color: 'red')
|
|
404
405
|
blue_pen = Pen.create!(name: 'blue pen', price: 0.8, color: 'blue')
|
|
405
|
-
|
|
406
|
+
_black_pen = Pen.create!(name: 'black pen', price: 0.9, color: 'black')
|
|
406
407
|
|
|
407
408
|
actables = Pen.where(price: 0.8).actables
|
|
408
409
|
|
|
@@ -438,7 +439,7 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
|
438
439
|
|
|
439
440
|
context 'when they are defined via `scope`' do
|
|
440
441
|
it 'can be called from the submodel' do
|
|
441
|
-
|
|
442
|
+
_cheap_pen = Pen.create!(name: 'cheap pen', price: 0.5, color: 'blue')
|
|
442
443
|
expensive_pen = Pen.create!(name: 'expensive pen', price: 1, color: 'red')
|
|
443
444
|
|
|
444
445
|
expect(Product.with_price_higher_than(0.5).to_a).to eq([expensive_pen.acting_as])
|
|
@@ -528,6 +529,7 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
|
528
529
|
describe '.scope_for_create' do
|
|
529
530
|
it 'includes supermodel attributes' do
|
|
530
531
|
relation = Pen.where(name: 'new name', price: 1.4, color: 'red')
|
|
532
|
+
|
|
531
533
|
expect(relation.scope_for_create).to include('name')
|
|
532
534
|
expect(relation.scope_for_create['name']).to eq('new name')
|
|
533
535
|
end
|
|
@@ -562,7 +564,7 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
|
562
564
|
Object.send(:remove_const, :Pen)
|
|
563
565
|
end
|
|
564
566
|
|
|
565
|
-
it "should
|
|
567
|
+
it "should include the selected attribute when associating using 'eager_load'" do
|
|
566
568
|
class Pen < ActiveRecord::Base
|
|
567
569
|
acts_as :product , {association_method: :eager_load}
|
|
568
570
|
store_accessor :settings, :option1
|
|
@@ -570,7 +572,7 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
|
570
572
|
end
|
|
571
573
|
Pen.create pen_attributes
|
|
572
574
|
|
|
573
|
-
expect(Pen.select("'something' as thing").first['thing']).to
|
|
575
|
+
expect(Pen.select("'something' as thing").first['thing']).to eq 'something'
|
|
574
576
|
end
|
|
575
577
|
|
|
576
578
|
it "should include the selected attribute in the model when associating using 'includes'" do
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'models'
|
|
2
|
+
|
|
3
|
+
RSpec.describe 'Model Initialization' do
|
|
4
|
+
subject { Pen }
|
|
5
|
+
|
|
6
|
+
let(:pen_attributes) { { name: 'pen', color: 'red' } }
|
|
7
|
+
|
|
8
|
+
before(:each) { clear_database }
|
|
9
|
+
|
|
10
|
+
it 'find_or_initialize_by works' do
|
|
11
|
+
pen = subject.find_or_initialize_by(pen_attributes)
|
|
12
|
+
expect(pen.persisted?).to be false
|
|
13
|
+
expect(pen.name).to eq(pen_attributes[:name])
|
|
14
|
+
expect(pen.color).to eq(pen_attributes[:color])
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'where.first_or_initialize works' do
|
|
18
|
+
pen = subject.where(pen_attributes).first_or_initialize
|
|
19
|
+
expect(pen.persisted?).to be false
|
|
20
|
+
expect(pen.name).to eq(pen_attributes[:name])
|
|
21
|
+
expect(pen.color).to eq(pen_attributes[:color])
|
|
22
|
+
end
|
|
23
|
+
end
|
metadata
CHANGED
|
@@ -1,44 +1,45 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: active_record-acts_as
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 5.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hassan Zamani
|
|
8
8
|
- Manuel Meurer
|
|
9
|
-
|
|
9
|
+
- Chedli Bourguiba
|
|
10
|
+
autorequire:
|
|
10
11
|
bindir: bin
|
|
11
12
|
cert_chain: []
|
|
12
|
-
date:
|
|
13
|
+
date: 2020-12-29 00:00:00.000000000 Z
|
|
13
14
|
dependencies:
|
|
14
15
|
- !ruby/object:Gem::Dependency
|
|
15
16
|
name: sqlite3
|
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
|
17
18
|
requirements:
|
|
18
|
-
- - "
|
|
19
|
+
- - ">="
|
|
19
20
|
- !ruby/object:Gem::Version
|
|
20
|
-
version: '
|
|
21
|
+
version: '0'
|
|
21
22
|
type: :development
|
|
22
23
|
prerelease: false
|
|
23
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
25
|
requirements:
|
|
25
|
-
- - "
|
|
26
|
+
- - ">="
|
|
26
27
|
- !ruby/object:Gem::Version
|
|
27
|
-
version: '
|
|
28
|
+
version: '0'
|
|
28
29
|
- !ruby/object:Gem::Dependency
|
|
29
30
|
name: bundler
|
|
30
31
|
requirement: !ruby/object:Gem::Requirement
|
|
31
32
|
requirements:
|
|
32
|
-
- - "
|
|
33
|
+
- - ">="
|
|
33
34
|
- !ruby/object:Gem::Version
|
|
34
|
-
version: '
|
|
35
|
+
version: '0'
|
|
35
36
|
type: :development
|
|
36
37
|
prerelease: false
|
|
37
38
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
39
|
requirements:
|
|
39
|
-
- - "
|
|
40
|
+
- - ">="
|
|
40
41
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: '
|
|
42
|
+
version: '0'
|
|
42
43
|
- !ruby/object:Gem::Dependency
|
|
43
44
|
name: rspec
|
|
44
45
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -101,45 +102,34 @@ dependencies:
|
|
|
101
102
|
requirements:
|
|
102
103
|
- - ">="
|
|
103
104
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: '
|
|
105
|
-
- - "<"
|
|
106
|
-
- !ruby/object:Gem::Version
|
|
107
|
-
version: 5.2.2.rc1
|
|
105
|
+
version: '6.0'
|
|
108
106
|
type: :runtime
|
|
109
107
|
prerelease: false
|
|
110
108
|
version_requirements: !ruby/object:Gem::Requirement
|
|
111
109
|
requirements:
|
|
112
110
|
- - ">="
|
|
113
111
|
- !ruby/object:Gem::Version
|
|
114
|
-
version: '
|
|
115
|
-
- - "<"
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: 5.2.2.rc1
|
|
112
|
+
version: '6.0'
|
|
118
113
|
- !ruby/object:Gem::Dependency
|
|
119
114
|
name: activerecord
|
|
120
115
|
requirement: !ruby/object:Gem::Requirement
|
|
121
116
|
requirements:
|
|
122
117
|
- - ">="
|
|
123
118
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '
|
|
125
|
-
- - "<"
|
|
126
|
-
- !ruby/object:Gem::Version
|
|
127
|
-
version: 5.2.2.rc1
|
|
119
|
+
version: '6.0'
|
|
128
120
|
type: :runtime
|
|
129
121
|
prerelease: false
|
|
130
122
|
version_requirements: !ruby/object:Gem::Requirement
|
|
131
123
|
requirements:
|
|
132
124
|
- - ">="
|
|
133
125
|
- !ruby/object:Gem::Version
|
|
134
|
-
version: '
|
|
135
|
-
- - "<"
|
|
136
|
-
- !ruby/object:Gem::Version
|
|
137
|
-
version: 5.2.2.rc1
|
|
126
|
+
version: '6.0'
|
|
138
127
|
description: Simulate multi-table inheritance for activerecord models using a polymorphic
|
|
139
128
|
association
|
|
140
129
|
email:
|
|
141
130
|
- hsn.zamani@gmail.com
|
|
142
131
|
- manuel@krautcomputing.com
|
|
132
|
+
- bourguiba.chedli@gmail.com
|
|
143
133
|
executables:
|
|
144
134
|
- console
|
|
145
135
|
extensions: []
|
|
@@ -158,10 +148,9 @@ files:
|
|
|
158
148
|
- _config.yml
|
|
159
149
|
- active_record-acts_as.gemspec
|
|
160
150
|
- bin/console
|
|
161
|
-
- gemfiles/
|
|
162
|
-
- gemfiles/
|
|
163
|
-
- gemfiles/
|
|
164
|
-
- gemfiles/rails_5.2.gemfile
|
|
151
|
+
- gemfiles/rails_6.0.gemfile
|
|
152
|
+
- gemfiles/rails_6.1.gemfile
|
|
153
|
+
- gemfiles/rails_master.gemfile
|
|
165
154
|
- lib/active_record/acts_as.rb
|
|
166
155
|
- lib/active_record/acts_as/class_methods.rb
|
|
167
156
|
- lib/active_record/acts_as/instance_methods.rb
|
|
@@ -174,15 +163,16 @@ files:
|
|
|
174
163
|
- spec/active_record_spec.rb
|
|
175
164
|
- spec/acts_as_spec.rb
|
|
176
165
|
- spec/database_helper.rb
|
|
166
|
+
- spec/find_or_initialize_by_spec.rb
|
|
177
167
|
- spec/migrations_spec.rb
|
|
178
168
|
- spec/models.rb
|
|
179
169
|
- spec/rspec_matchers_spec.rb
|
|
180
170
|
- spec/spec_helper.rb
|
|
181
|
-
homepage: http://github.com/
|
|
171
|
+
homepage: http://github.com/chaadow/active_record-acts_as
|
|
182
172
|
licenses:
|
|
183
173
|
- MIT
|
|
184
174
|
metadata: {}
|
|
185
|
-
post_install_message:
|
|
175
|
+
post_install_message:
|
|
186
176
|
rdoc_options: []
|
|
187
177
|
require_paths:
|
|
188
178
|
- lib
|
|
@@ -190,16 +180,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
190
180
|
requirements:
|
|
191
181
|
- - ">="
|
|
192
182
|
- !ruby/object:Gem::Version
|
|
193
|
-
version: '2.
|
|
183
|
+
version: '2.5'
|
|
194
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
185
|
requirements:
|
|
196
186
|
- - ">="
|
|
197
187
|
- !ruby/object:Gem::Version
|
|
198
188
|
version: '0'
|
|
199
189
|
requirements: []
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
signing_key:
|
|
190
|
+
rubygems_version: 3.2.3
|
|
191
|
+
signing_key:
|
|
203
192
|
specification_version: 4
|
|
204
193
|
summary: Simulate multi-table inheritance for activerecord models
|
|
205
194
|
test_files:
|
|
@@ -207,6 +196,7 @@ test_files:
|
|
|
207
196
|
- spec/active_record_spec.rb
|
|
208
197
|
- spec/acts_as_spec.rb
|
|
209
198
|
- spec/database_helper.rb
|
|
199
|
+
- spec/find_or_initialize_by_spec.rb
|
|
210
200
|
- spec/migrations_spec.rb
|
|
211
201
|
- spec/models.rb
|
|
212
202
|
- spec/rspec_matchers_spec.rb
|