simple_record 1.1.64 → 1.1.65
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/simple_record/attributes.rb +30 -33
- data/lib/simple_record/translations.rb +1 -1
- data/lib/simple_record.rb +11 -11
- data/test/test_simple_record.rb +8 -0
- metadata +1 -1
|
@@ -46,23 +46,27 @@ module SimpleRecord
|
|
|
46
46
|
set(arg, value)
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
@dirty.has_key?(sdb_att_name(arg_s))
|
|
53
|
-
end
|
|
49
|
+
define_dirty_methods(arg_s)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
54
52
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
def define_dirty_methods(arg_s)
|
|
54
|
+
# Now for dirty methods: http://api.rubyonrails.org/classes/ActiveRecord/Dirty.html
|
|
55
|
+
# define changed? method
|
|
56
|
+
send(:define_method, arg_s + "_changed?") do
|
|
57
|
+
@dirty.has_key?(sdb_att_name(arg_s))
|
|
58
|
+
end
|
|
60
59
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
60
|
+
# define change method
|
|
61
|
+
send(:define_method, arg_s + "_change") do
|
|
62
|
+
old_val = @dirty[sdb_att_name(arg_s)]
|
|
63
|
+
[old_val, get_attribute(arg_s)]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# define was method
|
|
67
|
+
send(:define_method, arg_s + "_was") do
|
|
68
|
+
old_val = @dirty[sdb_att_name(arg_s)]
|
|
69
|
+
old_val
|
|
66
70
|
end
|
|
67
71
|
end
|
|
68
72
|
|
|
@@ -132,7 +136,7 @@ module SimpleRecord
|
|
|
132
136
|
|
|
133
137
|
# Define reader method
|
|
134
138
|
send(:define_method, arg) do
|
|
135
|
-
|
|
139
|
+
return get_attribute(arg)
|
|
136
140
|
end
|
|
137
141
|
|
|
138
142
|
|
|
@@ -144,27 +148,18 @@ module SimpleRecord
|
|
|
144
148
|
|
|
145
149
|
# Define ID reader method for reading the associated objects id without getting the entire object
|
|
146
150
|
send(:define_method, arg_id) do
|
|
147
|
-
|
|
148
|
-
if val1
|
|
149
|
-
if val1.is_a?(Array)
|
|
150
|
-
if val1.size > 0 && val1[0].present?
|
|
151
|
-
return val1[0]
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
else
|
|
155
|
-
return val1
|
|
156
|
-
end
|
|
157
|
-
end
|
|
158
|
-
return nil
|
|
151
|
+
get_attribute_sdb(arg_s)
|
|
159
152
|
end
|
|
160
153
|
|
|
161
154
|
# Define writer method for setting the _id directly without the associated object
|
|
162
155
|
send(:define_method, arg_id + "=") do |value|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
self[arg_id] =
|
|
167
|
-
|
|
156
|
+
# rb_att_name = arg_s # n2 = name.to_s[0, name.length-3]
|
|
157
|
+
set(arg_id, value)
|
|
158
|
+
# if value.nil?
|
|
159
|
+
# self[arg_id] = nil unless self[arg_id].nil? # if it went from something to nil, then we have to remember and remove attribute on save
|
|
160
|
+
# else
|
|
161
|
+
# self[arg_id] = value
|
|
162
|
+
# end
|
|
168
163
|
end
|
|
169
164
|
|
|
170
165
|
send(:define_method, "create_"+arg.to_s) do |*params|
|
|
@@ -173,6 +168,8 @@ module SimpleRecord
|
|
|
173
168
|
arg_id = arg.to_s + '_id'
|
|
174
169
|
self[arg_id]=newsubrecord.id
|
|
175
170
|
end
|
|
171
|
+
|
|
172
|
+
define_dirty_methods(arg_s)
|
|
176
173
|
end
|
|
177
174
|
|
|
178
175
|
def has_many(*args)
|
|
@@ -44,7 +44,7 @@ module SimpleRecord
|
|
|
44
44
|
|
|
45
45
|
# Convert value from SimpleDB String version to real ruby value.
|
|
46
46
|
def sdb_to_ruby(name, value)
|
|
47
|
-
puts 'sdb_to_ruby arg=' + name.inspect + ' - ' + name.class.name + ' - value=' + value.to_s
|
|
47
|
+
# puts 'sdb_to_ruby arg=' + name.inspect + ' - ' + name.class.name + ' - value=' + value.to_s
|
|
48
48
|
return nil if value.nil?
|
|
49
49
|
att_meta = defined_attributes_local[name.to_sym]
|
|
50
50
|
|
data/lib/simple_record.rb
CHANGED
|
@@ -218,14 +218,14 @@ module SimpleRecord
|
|
|
218
218
|
sdb_att_name = sdb_att_name(arg)
|
|
219
219
|
arg = arg.to_s
|
|
220
220
|
|
|
221
|
-
puts "Marking #{arg} dirty with #{value}"
|
|
221
|
+
# puts "Marking #{arg} dirty with #{value}"
|
|
222
222
|
if @dirty.include?(sdb_att_name)
|
|
223
223
|
old = @dirty[sdb_att_name]
|
|
224
224
|
# puts "Was already dirty #{old}"
|
|
225
225
|
@dirty.delete(sdb_att_name) if value == old
|
|
226
226
|
else
|
|
227
227
|
old = get_attribute_sdb(arg)
|
|
228
|
-
puts "dirtifying old=#{old} to new=#{value}"
|
|
228
|
+
# puts "dirtifying old=#{old} to new=#{value}"
|
|
229
229
|
@dirty[sdb_att_name] = old if value != old
|
|
230
230
|
end
|
|
231
231
|
end
|
|
@@ -324,7 +324,7 @@ module SimpleRecord
|
|
|
324
324
|
clear_errors
|
|
325
325
|
# todo: decide whether this should go before pre_save or after pre_save? pre_save dirties "updated" and perhaps other items due to callbacks
|
|
326
326
|
if options[:dirty]
|
|
327
|
-
puts '@dirtyA=' + @dirty.inspect
|
|
327
|
+
# puts '@dirtyA=' + @dirty.inspect
|
|
328
328
|
return true if @dirty.size == 0 # Nothing to save so skip it
|
|
329
329
|
end
|
|
330
330
|
is_create = self[:id].nil?
|
|
@@ -332,7 +332,7 @@ module SimpleRecord
|
|
|
332
332
|
if ok
|
|
333
333
|
begin
|
|
334
334
|
if options[:dirty]
|
|
335
|
-
puts '@dirty=' + @dirty.inspect
|
|
335
|
+
# puts '@dirty=' + @dirty.inspect
|
|
336
336
|
return true if @dirty.size == 0 # This should probably never happen because after pre_save, created/updated dates are changed
|
|
337
337
|
options[:dirty_atts] = @dirty
|
|
338
338
|
end
|
|
@@ -522,7 +522,7 @@ module SimpleRecord
|
|
|
522
522
|
# Since SimpleDB supports multiple attributes per value, the values are an array.
|
|
523
523
|
# This method will return the value unwrapped if it's the only, otherwise it will return the array.
|
|
524
524
|
def get_attribute(arg)
|
|
525
|
-
puts "GET #{arg}"
|
|
525
|
+
# puts "GET #{arg}"
|
|
526
526
|
# Check if this arg is already converted
|
|
527
527
|
arg_s = arg.to_s
|
|
528
528
|
# instance_var = ("@" + arg_s)
|
|
@@ -531,13 +531,13 @@ module SimpleRecord
|
|
|
531
531
|
# puts "attribute #{instance_var} is defined"
|
|
532
532
|
@attributes_rb = {} unless @attributes_rb # was getting errors after upgrade.
|
|
533
533
|
ret = @attributes_rb[arg_s] # instance_variable_get(instance_var)
|
|
534
|
-
puts 'ret from rb=' + ret.inspect
|
|
534
|
+
# puts 'ret from rb=' + ret.inspect
|
|
535
535
|
return ret if !ret.nil?
|
|
536
536
|
# end
|
|
537
537
|
ret = get_attribute_sdb(arg)
|
|
538
|
-
puts 'ret from atts=' + ret.inspect
|
|
538
|
+
# puts 'ret from atts=' + ret.inspect
|
|
539
539
|
ret = sdb_to_ruby(arg, ret)
|
|
540
|
-
puts 'ret from atts to rb=' + ret.inspect
|
|
540
|
+
# puts 'ret from atts to rb=' + ret.inspect
|
|
541
541
|
# puts "Setting instance var #{arg_s} to #{ret}"
|
|
542
542
|
# instance_variable_set(instance_var, ret)
|
|
543
543
|
@attributes_rb[arg_s] = ret
|
|
@@ -545,8 +545,8 @@ module SimpleRecord
|
|
|
545
545
|
end
|
|
546
546
|
|
|
547
547
|
def set(name, value, dirtify=true)
|
|
548
|
-
puts "SET #{name}=#{value.inspect}"
|
|
549
|
-
puts "self=" + self.inspect
|
|
548
|
+
# puts "SET #{name}=#{value.inspect}"
|
|
549
|
+
# puts "self=" + self.inspect
|
|
550
550
|
att_meta = defined_attributes_local[name.to_sym]
|
|
551
551
|
if att_meta.nil?
|
|
552
552
|
# check if it ends with id and see if att_meta is there
|
|
@@ -573,7 +573,7 @@ module SimpleRecord
|
|
|
573
573
|
end
|
|
574
574
|
attvalue = strip_array(attvalue)
|
|
575
575
|
make_dirty(name, attvalue) if dirtify
|
|
576
|
-
puts "ARG=#{attname.to_s} setting to #{attvalue}"
|
|
576
|
+
# puts "ARG=#{attname.to_s} setting to #{attvalue}"
|
|
577
577
|
sdb_val = ruby_to_sdb(name, attvalue)
|
|
578
578
|
# puts "sdb_val=" + sdb_val.to_s
|
|
579
579
|
@attributes[attname] = sdb_val
|
data/test/test_simple_record.rb
CHANGED
|
@@ -187,6 +187,7 @@ class TestSimpleRecord < TestBase
|
|
|
187
187
|
assert mmc2.my_model == nil, "my_model not nil? #{mmc2.my_model.inspect}"
|
|
188
188
|
|
|
189
189
|
mmc3 = MyChildModel.find(mmc.id)
|
|
190
|
+
puts "mmc3 1 =" + mmc3.inspect
|
|
190
191
|
assert mmc3.my_model_id == nil, "my_model_id not nil? #{mmc3.my_model_id.inspect}"
|
|
191
192
|
assert mmc3.my_model == nil
|
|
192
193
|
|
|
@@ -194,6 +195,7 @@ class TestSimpleRecord < TestBase
|
|
|
194
195
|
assert mm3.save
|
|
195
196
|
|
|
196
197
|
mmc3.my_model = mm3
|
|
198
|
+
assert mmc3.my_model_changed?
|
|
197
199
|
assert mmc3.save(:dirty=>true)
|
|
198
200
|
|
|
199
201
|
assert mmc3.my_model_id == mm3.id
|
|
@@ -204,6 +206,12 @@ class TestSimpleRecord < TestBase
|
|
|
204
206
|
assert mmc3.my_model_id == mm3.id, "my_model_id=#{mmc3.my_model_id.inspect} mm3.id=#{mm3.id.inspect}"
|
|
205
207
|
assert mmc3.my_model.id == mm3.id
|
|
206
208
|
|
|
209
|
+
mmc3 = MyChildModel.find(mmc3.id)
|
|
210
|
+
mmc3.my_model_id = mm2.id
|
|
211
|
+
assert mmc3.my_model_id == mm2.id
|
|
212
|
+
assert mmc3.changed?
|
|
213
|
+
assert mmc3.my_model_changed?
|
|
214
|
+
assert mmc3.my_model.id = mm2.id
|
|
207
215
|
|
|
208
216
|
end
|
|
209
217
|
|