@@ -31,14 +31,12 @@ class ScroogedAttributes < Hash
31
31
# Hash container for attributes with scrooge monitoring of attribute access
32
32
#
33
33
34
- attr_accessor :callsite_signature , :scrooge_columns , : fully_fetched, :klass , :updateable_result_set
34
+ attr_accessor :fully_fetched , :klass , :updateable_result_set
35
35
36
- def self . setup ( record , scrooge_columns , klass , callsite_signature , updateable_result_set )
36
+ def self . setup ( record , klass , updateable_result_set )
37
37
hash = new . replace ( record )
38
- hash . scrooge_columns = scrooge_columns . dup
39
38
hash . fully_fetched = false
40
39
hash . klass = klass
41
- hash . callsite_signature = callsite_signature
42
40
hash . updateable_result_set = updateable_result_set
43
41
hash
44
42
end
@@ -65,7 +63,7 @@ def [](attr_name)
65
63
if interesting_for_scrooge? ( attr_name )
66
64
augment_callsite! ( attr_name )
67
65
fetch_remaining
68
- @scrooge_columns << attr_name
66
+ add_to_scrooge_columns ( attr_name )
69
67
end
70
68
super
71
69
end
@@ -76,7 +74,7 @@ def fetch(*args, &block)
76
74
end
77
75
78
76
def []=( attr_name , value )
79
- @scrooge_columns << attr_name
77
+ add_to_scrooge_columns ( attr_name )
80
78
super
81
79
end
82
80
@@ -110,35 +108,50 @@ def update(hash)
110
108
111
109
def fetch_remaining
112
110
unless @fully_fetched
113
- columns_to_fetch = @klass . column_names - @ scrooge_columns. to_a
111
+ columns_to_fetch = @klass . column_names - scrooge_columns . to_a
114
112
unless columns_to_fetch . empty?
115
113
fetch_remaining! ( columns_to_fetch )
116
114
end
117
115
@fully_fetched = true
118
116
end
119
117
end
120
-
118
+
119
+ def callsite_signature
120
+ @updateable_result_set . callsite_signature
121
+ end
122
+
123
+ def scrooge_columns
124
+ @scrooge_columns || @updateable_result_set . scrooge_columns
125
+ end
126
+
121
127
protected
122
128
123
129
def fetch_remaining! ( columns_to_fetch )
124
130
@updateable_result_set . updaters_attributes = self # for after_initialize & after_find
125
131
@updateable_result_set . reload_columns! ( columns_to_fetch )
126
132
end
127
133
128
- def interesting_for_scrooge? ( attr_s )
129
- @klass . columns_hash . has_key? ( attr_s ) && !@scrooge_columns . include? ( attr_s )
134
+ def interesting_for_scrooge? ( attr_name )
135
+ @klass . columns_hash . has_key? ( attr_name ) && !scrooge_columns . include? ( attr_name )
136
+ end
137
+
138
+ def augment_callsite! ( attr_name )
139
+ @klass . scrooge_seen_column! ( callsite_signature , attr_name )
130
140
end
131
141
132
- def augment_callsite! ( attr_s )
133
- @klass . scrooge_seen_column! ( callsite_signature , attr_s )
142
+ def add_to_scrooge_columns ( attr_name )
143
+ unless frozen?
144
+ @scrooge_columns ||= @updateable_result_set . scrooge_columns . dup
145
+ @scrooge_columns << attr_name
146
+ end
134
147
end
135
148
136
149
def primary_key_name
137
150
@klass . primary_key
138
151
end
139
152
140
153
def dup_self
141
- @scrooge_columns = @scrooge_columns . dup
154
+ @scrooge_columns = @scrooge_columns . dup if @scrooge_columns
142
155
self
143
156
end
144
157
end
0 commit comments