active_type 1.2.1 → 1.3.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 +37 -16
- data/CHANGELOG.md +36 -1
- data/Gemfile.3.2.mysql2.lock +2 -2
- data/Gemfile.3.2.sqlite3.lock +2 -2
- data/Gemfile.4.2.mysql2.lock +2 -2
- data/Gemfile.4.2.pg.lock +2 -2
- data/Gemfile.4.2.sqlite3.lock +2 -2
- data/Gemfile.5.2.mysql2.lock +2 -2
- data/Gemfile.5.2.pg.lock +2 -2
- data/Gemfile.5.2.sqlite3.lock +2 -2
- data/Gemfile.6.0.pg +1 -1
- data/Gemfile.6.0.pg.lock +11 -11
- data/lib/active_type/record_extension/inheritance.rb +37 -2
- data/lib/active_type/version.rb +1 -1
- data/lib/active_type/virtual_attributes.rb +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5e4919b7989f9d2ce9468d47196b1142270e6b3c2cce7e01945c20c36f4d2b8
|
4
|
+
data.tar.gz: 258bdcde75ea6cbe3c5ef9fb55cd6b0a140a0a8e251745b6d00a0ec7af1834d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ccdd4e34bfbee28b18560bc03a615f52ea4b13ee8a0ba5a33fd19552a2324142108746898159f9ff81ec30cdb420c4380d72c0b695067a7c83a58450be246645
|
7
|
+
data.tar.gz: 8a91a6d3e6587f22c1dc18129f1fb35821431057d44b0732a7ab25e6f02132edcdc134b7d26735d1efbb5ae8015b33d6d055c2a6336914107b17b0f52209b0b2
|
data/.travis.yml
CHANGED
@@ -4,8 +4,9 @@ services:
|
|
4
4
|
- postgresql
|
5
5
|
rvm:
|
6
6
|
- "2.3.8"
|
7
|
-
- "2.4.
|
8
|
-
- "2.5.
|
7
|
+
- "2.4.6"
|
8
|
+
- "2.5.5"
|
9
|
+
- "2.6.3"
|
9
10
|
gemfile:
|
10
11
|
- Gemfile.3.2.mysql2
|
11
12
|
- Gemfile.3.2.sqlite3
|
@@ -22,30 +23,50 @@ before_script:
|
|
22
23
|
script: bundle exec rake spec
|
23
24
|
sudo: false
|
24
25
|
cache: bundler
|
25
|
-
notifications:
|
26
|
-
email:
|
27
|
-
- fail@makandra.de
|
28
26
|
matrix:
|
29
27
|
exclude:
|
30
|
-
- rvm: "2.
|
28
|
+
- rvm: "2.3.8"
|
29
|
+
gemfile: Gemfile.6.0.pg
|
30
|
+
- rvm: "2.4.6"
|
31
31
|
gemfile: Gemfile.3.2.mysql2
|
32
|
-
- rvm: "2.4.
|
32
|
+
- rvm: "2.4.6"
|
33
33
|
gemfile: Gemfile.3.2.sqlite3
|
34
|
-
- rvm: "2.
|
34
|
+
- rvm: "2.4.6"
|
35
|
+
gemfile: Gemfile.4.2.mysql2
|
36
|
+
- rvm: "2.4.6"
|
37
|
+
gemfile: Gemfile.4.2.pg
|
38
|
+
- rvm: "2.4.6"
|
39
|
+
gemfile: Gemfile.5.2.mysql2
|
40
|
+
- rvm: "2.4.6"
|
41
|
+
gemfile: Gemfile.5.2.pg
|
42
|
+
- rvm: "2.4.6"
|
43
|
+
gemfile: Gemfile.6.0.pg
|
44
|
+
- rvm: "2.5.5"
|
35
45
|
gemfile: Gemfile.3.2.mysql2
|
36
|
-
- rvm: "2.5.
|
46
|
+
- rvm: "2.5.5"
|
37
47
|
gemfile: Gemfile.3.2.sqlite3
|
38
|
-
- rvm: "2.5.
|
48
|
+
- rvm: "2.5.5"
|
39
49
|
gemfile: Gemfile.4.2.mysql2
|
40
|
-
- rvm: "2.5.
|
50
|
+
- rvm: "2.5.5"
|
41
51
|
gemfile: Gemfile.4.2.pg
|
42
|
-
- rvm: "2.5.
|
52
|
+
- rvm: "2.5.5"
|
53
|
+
gemfile: Gemfile.4.2.sqlite3
|
54
|
+
- rvm: "2.5.5"
|
55
|
+
gemfile: Gemfile.5.2.mysql2
|
56
|
+
- rvm: "2.5.5"
|
57
|
+
gemfile: Gemfile.5.2.pg
|
58
|
+
- rvm: "2.6.3"
|
59
|
+
gemfile: Gemfile.3.2.mysql2
|
60
|
+
- rvm: "2.6.3"
|
61
|
+
gemfile: Gemfile.3.2.sqlite3
|
62
|
+
- rvm: "2.6.3"
|
63
|
+
gemfile: Gemfile.4.2.mysql2
|
64
|
+
- rvm: "2.6.3"
|
65
|
+
gemfile: Gemfile.4.2.pg
|
66
|
+
- rvm: "2.6.3"
|
43
67
|
gemfile: Gemfile.4.2.sqlite3
|
44
|
-
- rvm: "2.3.8"
|
45
|
-
gemfile: Gemfile.6.0.pg
|
46
|
-
- rvm: "2.4.5"
|
47
|
-
gemfile: Gemfile.6.0.pg
|
48
68
|
install:
|
69
|
+
- gem install bundler:2.0.2
|
49
70
|
- bundle install --no-deployment --jobs=3 --retry=3 --path=${BUNDLE_PATH:-vendor/bundle}
|
50
71
|
addons:
|
51
72
|
postgresql: 9.3
|
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,42 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
-
## Unreleased
|
5
|
+
## Unreleased changes
|
6
|
+
|
7
|
+
|
8
|
+
## 1.3.0 (2019-09-26)
|
9
|
+
|
10
|
+
* Fixed: Do not override Rails internal methods when definining an attribute called `:attribute`.
|
11
|
+
* Fixed: Fix .find for extended records, when a record had a `#type` column that was not used for
|
12
|
+
single table inheritance. Thanks to @fsateler.
|
13
|
+
* Changed: When extending a single table inheritance base class, `.find` no longer crashes, but
|
14
|
+
returns records derived from the extended class.
|
15
|
+
|
16
|
+
This means, that given the following class hierarchy:
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
class Parent < ActiveRecord::Base
|
20
|
+
end
|
21
|
+
|
22
|
+
class ExtendedParent < ActiveType::Record[Parent]
|
23
|
+
end
|
24
|
+
|
25
|
+
class Child < Parent
|
26
|
+
end
|
27
|
+
```
|
28
|
+
|
29
|
+
queriying
|
30
|
+
|
31
|
+
```
|
32
|
+
ExtendedParent.all
|
33
|
+
```
|
34
|
+
|
35
|
+
will no longer crash, but always return records of type `ExtendedParent` (*even if they
|
36
|
+
would normally of type `Child`*). You should probably avoid this weird situation and not
|
37
|
+
extend STI Parent classes.
|
38
|
+
|
39
|
+
Thanks to @fsateler.
|
40
|
+
|
6
41
|
|
7
42
|
## 1.2.1 (2019-07-03)
|
8
43
|
* Fixed: Eager loading in Rails 6 no longer crashes trying to load `ActiveType::Object`s.
|
data/Gemfile.3.2.mysql2.lock
CHANGED
data/Gemfile.3.2.sqlite3.lock
CHANGED
data/Gemfile.4.2.mysql2.lock
CHANGED
data/Gemfile.4.2.pg.lock
CHANGED
data/Gemfile.4.2.sqlite3.lock
CHANGED
data/Gemfile.5.2.mysql2.lock
CHANGED
data/Gemfile.5.2.pg.lock
CHANGED
data/Gemfile.5.2.sqlite3.lock
CHANGED
data/Gemfile.6.0.pg
CHANGED
data/Gemfile.6.0.pg.lock
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
active_type (1.
|
4
|
+
active_type (1.3.0)
|
5
5
|
activerecord (>= 3.2)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activemodel (6.0.0
|
11
|
-
activesupport (= 6.0.0
|
12
|
-
activerecord (6.0.0
|
13
|
-
activemodel (= 6.0.0
|
14
|
-
activesupport (= 6.0.0
|
15
|
-
activesupport (6.0.0
|
10
|
+
activemodel (6.0.0)
|
11
|
+
activesupport (= 6.0.0)
|
12
|
+
activerecord (6.0.0)
|
13
|
+
activemodel (= 6.0.0)
|
14
|
+
activesupport (= 6.0.0)
|
15
|
+
activesupport (6.0.0)
|
16
16
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
17
|
i18n (>= 0.7, < 2)
|
18
18
|
minitest (~> 5.1)
|
19
19
|
tzinfo (~> 1.1)
|
20
|
-
zeitwerk (~> 1
|
20
|
+
zeitwerk (~> 2.1, >= 2.1.8)
|
21
21
|
concurrent-ruby (1.1.5)
|
22
22
|
diff-lcs (1.3)
|
23
23
|
gemika (0.3.4)
|
@@ -42,18 +42,18 @@ GEM
|
|
42
42
|
thread_safe (0.3.6)
|
43
43
|
tzinfo (1.2.5)
|
44
44
|
thread_safe (~> 0.1)
|
45
|
-
zeitwerk (1.
|
45
|
+
zeitwerk (2.1.9)
|
46
46
|
|
47
47
|
PLATFORMS
|
48
48
|
ruby
|
49
49
|
|
50
50
|
DEPENDENCIES
|
51
51
|
active_type!
|
52
|
-
activerecord (~> 6.0.
|
52
|
+
activerecord (~> 6.0.0)
|
53
53
|
gemika
|
54
54
|
pg
|
55
55
|
rake
|
56
56
|
rspec (~> 3.4)
|
57
57
|
|
58
58
|
BUNDLED WITH
|
59
|
-
|
59
|
+
2.0.2
|
@@ -35,6 +35,10 @@ module ActiveType
|
|
35
35
|
extended_record_base_class.sti_name
|
36
36
|
end
|
37
37
|
|
38
|
+
def descends_from_active_record?
|
39
|
+
extended_record_base_class.descends_from_active_record?
|
40
|
+
end
|
41
|
+
|
38
42
|
def has_many(name, *args, &extension)
|
39
43
|
super(name, *Inheritance.add_foreign_key_option(extended_record_base_class, *args), &extension)
|
40
44
|
end
|
@@ -49,7 +53,23 @@ module ActiveType
|
|
49
53
|
|
50
54
|
def find_sti_class(type_name)
|
51
55
|
sti_class = super
|
52
|
-
|
56
|
+
|
57
|
+
# Consider this class hierarchy
|
58
|
+
# class Parent < ActiveRecord::Base; end
|
59
|
+
# class Child < Parent; end
|
60
|
+
# class ExtendedParent < ActiveType::Record[Parent]; end
|
61
|
+
# class ExtendedChild < ActiveType::Record[Child]; end
|
62
|
+
if self < sti_class
|
63
|
+
# i.e. ExtendendChild.find(child.id)
|
64
|
+
# => self = ExtendedChild; sti_class = Child
|
65
|
+
# instantiate as ExtendedChild
|
66
|
+
self
|
67
|
+
elsif sti_class < extended_record_base_class
|
68
|
+
# i.e. ExtendedParent.find(child.id)
|
69
|
+
# => sti_class = Child; self = ExtendedParent; extended_record_base_class = Parent
|
70
|
+
# There is no really good solution here, since we cannot instantiate as both ExtendedParent
|
71
|
+
# and Child. We opt to instantiate as ExtendedParent, since the other option can be
|
72
|
+
# achieved by using Parent.find(child.id)
|
53
73
|
self
|
54
74
|
else
|
55
75
|
sti_class
|
@@ -77,7 +97,22 @@ module ActiveType
|
|
77
97
|
"or overwrite #{name}.inheritance_column to use another column for that information."
|
78
98
|
end
|
79
99
|
#### our code starts here
|
80
|
-
|
100
|
+
# Consider this class hierarchy
|
101
|
+
# class Parent < ActiveRecord::Base; end
|
102
|
+
# class Child < Parent; end
|
103
|
+
# class ExtendedParent < ActiveType::Record[Parent]; end
|
104
|
+
# class ExtendedChild < ActiveType::Record[Child]; end
|
105
|
+
if self < subclass
|
106
|
+
# i.e. ExtendendChild.find(child.id)
|
107
|
+
# => self = ExtendedChild; subclass = Child
|
108
|
+
# instantiate as ExtendedChild
|
109
|
+
subclass = self
|
110
|
+
elsif subclass < extended_record_base_class
|
111
|
+
# i.e. ExtendedParent.find(child.id)
|
112
|
+
# => subclass = Child; self = ExtendedParent; extended_record_base_class = Parent
|
113
|
+
# There is no really good solution here, since we cannot instantiate as both ExtendedParent
|
114
|
+
# and Child. We opt to instantiate as ExtendedParent, since the other option can be
|
115
|
+
# achieved by using Parent.find(child.id)
|
81
116
|
subclass = self
|
82
117
|
end
|
83
118
|
#### our code ends here
|
data/lib/active_type/version.rb
CHANGED
@@ -73,6 +73,8 @@ module ActiveType
|
|
73
73
|
|
74
74
|
# Methods for compatibility with gems expecting the ActiveModel::Dirty API.
|
75
75
|
def build_dirty_tracking_methods(name)
|
76
|
+
return if name.to_s == 'attribute' # clashes with internal methods
|
77
|
+
|
76
78
|
@module.module_eval <<-BODY, __FILE__, __LINE__ + 1
|
77
79
|
def #{name}_was
|
78
80
|
virtual_attributes_were["#{name}"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_type
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Kraze
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-09-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|