secretary-rails 1.0.0.beta4 → 1.0.0.beta5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/secretary/dirty_associations.rb +2 -1
- data/lib/secretary/gem_version.rb +1 -1
- data/lib/secretary/tracks_association.rb +20 -2
- data/lib/secretary/versioned_attributes.rb +14 -3
- data/spec/internal/log/test.log +25514 -0
- data/spec/lib/secretary/versioned_attributes_spec.rb +6 -0
- data/spec/tmp/db/migrate/{20131108173046_create_versions.rb → 20131119033407_create_versions.rb} +0 -0
- metadata +26 -47
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6a3fabc2aa72279b7c65cfb1437502c7828516aa
|
4
|
+
data.tar.gz: e1a90574dfafbcc326d590658fd6a7841aebfa4b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: df71ac7242fe988ee50c01f21a83ced6c0ff2d3a3ba620ca09eee8eb3b0298aec0ef6014fd8e12fc005a9c776bfd782f3bde541e341e3851b35e66e533d46779
|
7
|
+
data.tar.gz: 029dfa9765095925a73db1c3d2d2d894878731725fc7cbaf9d1522e872bbf190ac2da8d294839a00b39aef16d33780de0269280b5fd8bf3554331abf712f0093
|
@@ -82,7 +82,8 @@ module Secretary
|
|
82
82
|
def assign_to_or_mark_for_destruction(record, *args)
|
83
83
|
name = association_name(record)
|
84
84
|
|
85
|
-
if self.class.reflect_on_association(name).collection?
|
85
|
+
if self.class.reflect_on_association(name).collection? &&
|
86
|
+
versioned_attribute?(name)
|
86
87
|
previous = changed_attributes[name]
|
87
88
|
|
88
89
|
# Assume it will change. It may not. We'll handle that scenario
|
@@ -55,7 +55,20 @@ module Secretary
|
|
55
55
|
raise NoAssociationError, name, self.name
|
56
56
|
end
|
57
57
|
|
58
|
-
|
58
|
+
# If the environment is loaded, the following line will be
|
59
|
+
# evaluated for any `tracks_association` calls. `versioned_attributes`
|
60
|
+
# calls `self.column_names`, which requires the table to exist.
|
61
|
+
#
|
62
|
+
# So the problem is that if our database or table doesn't exist,
|
63
|
+
# we can't load the environment, and the environment needs to be
|
64
|
+
# loaded in order to load in the schema.
|
65
|
+
#
|
66
|
+
# So, we rescue! And warn.
|
67
|
+
begin
|
68
|
+
self.versioned_attributes << name.to_s
|
69
|
+
rescue => e
|
70
|
+
warn "Caught an error while updating versioned attributes. #{e}"
|
71
|
+
end
|
59
72
|
|
60
73
|
define_dirty_association_methods(name, reflection)
|
61
74
|
|
@@ -75,7 +88,12 @@ module Secretary
|
|
75
88
|
|
76
89
|
def association_name(association_object)
|
77
90
|
klass = association_object.class
|
78
|
-
|
91
|
+
|
92
|
+
reflection = self.class.reflections.find do |name, reflection|
|
93
|
+
reflection.klass >= klass
|
94
|
+
end
|
95
|
+
|
96
|
+
reflection[0] if reflection
|
79
97
|
end
|
80
98
|
end
|
81
99
|
end
|
@@ -17,7 +17,10 @@ module Secretary
|
|
17
17
|
# which attributes to ignore.
|
18
18
|
#
|
19
19
|
# Each takes an array of column names *as strings*.
|
20
|
-
|
20
|
+
def versioned_attributes=(attributes)
|
21
|
+
verify_strings!(attributes)
|
22
|
+
@versioned_attributes = attributes
|
23
|
+
end
|
21
24
|
|
22
25
|
def versioned_attributes
|
23
26
|
@versioned_attributes ||=
|
@@ -26,8 +29,9 @@ module Secretary
|
|
26
29
|
unversioned_attributes
|
27
30
|
end
|
28
31
|
|
29
|
-
def unversioned_attributes=(
|
30
|
-
|
32
|
+
def unversioned_attributes=(attributes)
|
33
|
+
verify_strings!(attributes)
|
34
|
+
self.versioned_attributes -= attributes
|
31
35
|
end
|
32
36
|
|
33
37
|
private
|
@@ -35,6 +39,13 @@ module Secretary
|
|
35
39
|
def unversioned_attributes
|
36
40
|
@unversioned_attributes ||= []
|
37
41
|
end
|
42
|
+
|
43
|
+
def verify_strings!(array)
|
44
|
+
if array.any? { |e| !e.is_a?(String) }
|
45
|
+
raise ArgumentError,
|
46
|
+
"Versioned attributes must be declared as strings."
|
47
|
+
end
|
48
|
+
end
|
38
49
|
end
|
39
50
|
end
|
40
51
|
|