property_sets 3.5.1 → 3.6.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/lib/property_sets/active_record_extension.rb +33 -2
- data/lib/property_sets/delegator.rb +33 -2
- data/lib/property_sets/version.rb +1 -1
- metadata +5 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83bde37b6c1a385dc5372f75424eda44a32211093219e2aa793dc6a42e8a40b6
|
4
|
+
data.tar.gz: 33689e9a2946082c6acf3681de60101cd0c1c8e728500fa891adfa91347c6257
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5937f372c44d22aee6647680c98be68a1506720e7115b49be0b29e8bdaf85f3f0e80afa2ee3d246875fe2cf076283255101a5d3bc9e34f6aed8643259f9a725
|
7
|
+
data.tar.gz: a477ec210da5626275ca6eca932f56d382f68c3f3aca1a74082522cd6614afb48b113cf822948a11c52008f643edca24e71f01c6f34fdc8f5682ed718a8e79de
|
@@ -163,15 +163,17 @@ module PropertySets
|
|
163
163
|
end
|
164
164
|
|
165
165
|
module InstanceMethods
|
166
|
-
def
|
166
|
+
def update(attributes)
|
167
167
|
update_property_set_attributes(attributes)
|
168
168
|
super
|
169
169
|
end
|
170
|
+
alias update_attributes update
|
170
171
|
|
171
|
-
def
|
172
|
+
def update!(attributes)
|
172
173
|
update_property_set_attributes(attributes)
|
173
174
|
super
|
174
175
|
end
|
176
|
+
alias update_attributes! update!
|
175
177
|
|
176
178
|
def update_property_set_attributes(attributes)
|
177
179
|
if attributes && self.class.property_set_index.any?
|
@@ -182,6 +184,35 @@ module PropertySets
|
|
182
184
|
end
|
183
185
|
end
|
184
186
|
end
|
187
|
+
|
188
|
+
def update_columns(attributes)
|
189
|
+
if delegated_property_sets?
|
190
|
+
attributes = attributes.reject{|k,_| self.class.delegated_property_set_attributes.include?(k.to_s) }
|
191
|
+
end
|
192
|
+
|
193
|
+
super attributes
|
194
|
+
end
|
195
|
+
|
196
|
+
private
|
197
|
+
|
198
|
+
def delegated_property_sets?
|
199
|
+
self.class.respond_to?(:delegated_property_set_attributes)
|
200
|
+
end
|
201
|
+
|
202
|
+
def attributes_for_create(attribute_names)
|
203
|
+
super filter_delegated_property_set_attributes(attribute_names)
|
204
|
+
end
|
205
|
+
|
206
|
+
def attributes_for_update(attribute_names)
|
207
|
+
super filter_delegated_property_set_attributes(attribute_names)
|
208
|
+
end
|
209
|
+
|
210
|
+
def filter_delegated_property_set_attributes(attribute_names)
|
211
|
+
if delegated_property_sets?
|
212
|
+
return attribute_names - self.class.delegated_property_set_attributes.to_a
|
213
|
+
end
|
214
|
+
attribute_names
|
215
|
+
end
|
185
216
|
end
|
186
217
|
|
187
218
|
end
|
@@ -20,11 +20,36 @@ module PropertySets
|
|
20
20
|
def delegate_to_property_set(setname, mappings)
|
21
21
|
raise "Second argument must be a Hash" unless mappings.is_a?(Hash)
|
22
22
|
|
23
|
+
unless respond_to?(:delegated_property_set_attributes)
|
24
|
+
class_attribute :delegated_property_set_attributes
|
25
|
+
end
|
26
|
+
self.delegated_property_set_attributes ||= []
|
27
|
+
|
23
28
|
mappings.each do |old_attr, new_attr|
|
24
|
-
|
29
|
+
self.delegated_property_set_attributes << old_attr.to_s
|
30
|
+
if ActiveRecord.version < Gem::Version.new("5.0")
|
31
|
+
attribute old_attr, ActiveRecord::Type::Value.new
|
32
|
+
else
|
33
|
+
attribute old_attr, ActiveModel::Type::Value.new
|
34
|
+
end
|
35
|
+
define_method(old_attr) {
|
36
|
+
association = send(setname)
|
37
|
+
type = association.association_class.type(new_attr)
|
38
|
+
association.lookup_value(type, new_attr)
|
39
|
+
}
|
25
40
|
alias_method "#{old_attr}_before_type_cast", old_attr
|
26
41
|
define_method("#{old_attr}?") { send(setname).send("#{new_attr}?") }
|
27
|
-
define_method("#{old_attr}=")
|
42
|
+
define_method("#{old_attr}=") do |value|
|
43
|
+
if send(old_attr) != value
|
44
|
+
send("#{old_attr}_will_change!")
|
45
|
+
end
|
46
|
+
send(setname).send("#{new_attr}=", value)
|
47
|
+
super(value) if defined?(super) # Rails 4 does not define this
|
48
|
+
end
|
49
|
+
|
50
|
+
define_method("#{old_attr}_will_change!") do
|
51
|
+
attribute_will_change!(old_attr)
|
52
|
+
end
|
28
53
|
|
29
54
|
define_method("#{old_attr}_changed?") do
|
30
55
|
collection_proxy = send(setname)
|
@@ -40,6 +65,12 @@ module PropertySets
|
|
40
65
|
end
|
41
66
|
end
|
42
67
|
end
|
68
|
+
|
69
|
+
# These are not database columns and should not be included in queries but
|
70
|
+
# using the attributes API is the only way to track changes in the main model
|
71
|
+
if respond_to?(:user_provided_columns)
|
72
|
+
self.user_provided_columns.reject!{|k,_| delegated_property_set_attributes.include?(k.to_s) }
|
73
|
+
end
|
43
74
|
end
|
44
75
|
end
|
45
76
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: property_sets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Morten Primdahl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '4.2'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '6.
|
22
|
+
version: '6.2'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: '4.2'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '6.
|
32
|
+
version: '6.2'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: json
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,20 +100,6 @@ dependencies:
|
|
100
100
|
- - ">="
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: wwtd
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - ">="
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 0.5.3
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - ">="
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: 0.5.3
|
117
103
|
- !ruby/object:Gem::Dependency
|
118
104
|
name: byebug
|
119
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -161,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
147
|
- !ruby/object:Gem::Version
|
162
148
|
version: '0'
|
163
149
|
requirements: []
|
164
|
-
rubygems_version: 3.
|
150
|
+
rubygems_version: 3.1.4
|
165
151
|
signing_key:
|
166
152
|
specification_version: 4
|
167
153
|
summary: Property sets for ActiveRecord.
|