serialized_attr_accessors 0.0.5 → 0.0.6
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.
- data/lib/serialized_attr_accessors.rb +28 -1
- metadata +2 -2
@@ -1,4 +1,5 @@
|
|
1
1
|
module SerializedAttrAccessors
|
2
|
+
|
2
3
|
def self.included(base)
|
3
4
|
base.extend(ClassMethods)
|
4
5
|
|
@@ -13,7 +14,13 @@ module SerializedAttrAccessors
|
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
17
|
+
#Re-sets sattr_change_set
|
18
|
+
def reset_sattr_change_set
|
19
|
+
self.sattr_change_set.clear
|
20
|
+
end
|
21
|
+
|
16
22
|
base.send(:before_validation, :populate_serialized_attributes)
|
23
|
+
base.send(:after_save, :reset_sattr_change_set)
|
17
24
|
end
|
18
25
|
|
19
26
|
module ClassMethods
|
@@ -57,6 +64,11 @@ module SerializedAttrAccessors
|
|
57
64
|
#If attributes are not serialized then here is serialization done
|
58
65
|
self.serialize(current_serialized_attr) unless self.serialized_attributes.keys.include?(current_serialized_attr.to_s)
|
59
66
|
|
67
|
+
#Book keeping of any value changed for any sattr
|
68
|
+
define_method :sattr_change_set do
|
69
|
+
@attr_change_set ||= {}
|
70
|
+
end
|
71
|
+
|
60
72
|
#Defining method to fetch serialzed parent attribute (gives last found)
|
61
73
|
define_method :fetch_parent_attribute do |filed_name|
|
62
74
|
parent_attr = nil
|
@@ -69,7 +81,11 @@ module SerializedAttrAccessors
|
|
69
81
|
|
70
82
|
define_method field_name do
|
71
83
|
field_value = unserialized_options(fetch_parent_attribute(field_name))[field_name]
|
72
|
-
(field_value.nil? ? default_value : field_value)
|
84
|
+
final_value = (field_value.nil? ? default_value : field_value)
|
85
|
+
|
86
|
+
#Updates sattr_change_set if field_name is not already present in it
|
87
|
+
send(:sattr_change_set)[field_name.to_s] = final_value unless send(:sattr_change_set).include?(field_name.to_s)
|
88
|
+
final_value
|
73
89
|
end
|
74
90
|
|
75
91
|
define_method "#{field_name.to_s}=" do |field_value|
|
@@ -101,6 +117,17 @@ module SerializedAttrAccessors
|
|
101
117
|
end
|
102
118
|
end
|
103
119
|
end
|
120
|
+
|
121
|
+
#Recording sattr value if it is able to respond to ActiveModel::Dirty's changed_attributes
|
122
|
+
if send("respond_to?", "changed_attributes")
|
123
|
+
send(field_name)
|
124
|
+
if send(:sattr_change_set)[field_name.to_s] == field_value
|
125
|
+
changed_attributes.delete(field_name.to_s)
|
126
|
+
else
|
127
|
+
changed_attributes[field_name.to_s] = send(:sattr_change_set)[field_name.to_s]
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
104
131
|
unserialized_options(fetch_parent_attribute(field_name)).merge!(field_name => field_value)
|
105
132
|
field_value
|
106
133
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serialized_attr_accessors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-12 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: attribute accessor generator using sattr_accessor (with default field
|
15
15
|
:serialized_options) or a different serialized field using for_serialized_field
|