simple_record 1.0.5 → 1.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/History.txt +0 -0
- data/Manifest.txt +0 -0
- data/README.txt +0 -0
- data/Rakefile +0 -0
- data/bin/simple_record +0 -0
- data/lib/simple_record.rb +21 -59
- data/test/test_simple_record.rb +103 -84
- metadata +2 -2
data/History.txt
CHANGED
File without changes
|
data/Manifest.txt
CHANGED
File without changes
|
data/README.txt
CHANGED
File without changes
|
data/Rakefile
CHANGED
File without changes
|
data/bin/simple_record
CHANGED
File without changes
|
data/lib/simple_record.rb
CHANGED
@@ -29,7 +29,7 @@ require 'local_cache'
|
|
29
29
|
|
30
30
|
module SimpleRecord
|
31
31
|
|
32
|
-
VERSION = '1.0.
|
32
|
+
VERSION = '1.0.6'
|
33
33
|
|
34
34
|
class Base < RightAws::ActiveSdb::Base
|
35
35
|
|
@@ -69,8 +69,6 @@ module SimpleRecord
|
|
69
69
|
end
|
70
70
|
|
71
71
|
|
72
|
-
# @@domain_name_for_class = nil
|
73
|
-
|
74
72
|
def domain
|
75
73
|
super # super.domain
|
76
74
|
end
|
@@ -113,6 +111,7 @@ module SimpleRecord
|
|
113
111
|
def self.has_attributes(*args)
|
114
112
|
@@attributes = args
|
115
113
|
args.each do |arg|
|
114
|
+
# define reader method
|
116
115
|
send :define_method, arg do
|
117
116
|
ret = nil
|
118
117
|
if self[arg.to_s].class==Array
|
@@ -128,6 +127,7 @@ module SimpleRecord
|
|
128
127
|
return un_offset_if_int(arg, ret)
|
129
128
|
end
|
130
129
|
|
130
|
+
# define writer method
|
131
131
|
method_name = (arg.to_s+"=")
|
132
132
|
send(:define_method, method_name) do |value|
|
133
133
|
self[arg.to_s]=value# end
|
@@ -173,21 +173,23 @@ module SimpleRecord
|
|
173
173
|
|
174
174
|
@@belongs_to_map = {}
|
175
175
|
# One belongs_to association per call. Call multiple times if there are more than one.
|
176
|
+
#
|
177
|
+
# This method will also create an {association)_id method that will return the ID of the foreign object
|
178
|
+
# without actually materializing it.
|
176
179
|
def self.belongs_to(association_id, options = {})
|
177
180
|
@@belongs_to_map[association_id] = options
|
178
181
|
arg = association_id
|
182
|
+
arg_id = arg.to_s + '_id'
|
179
183
|
|
180
184
|
# todo: should also handle foreign_key http://74.125.95.132/search?q=cache:KqLkxuXiBBQJ:wiki.rubyonrails.org/rails/show/belongs_to+rails+belongs_to&hl=en&ct=clnk&cd=1&gl=us
|
181
185
|
# puts "arg_id=#{arg}_id"
|
182
186
|
# puts "is defined? " + eval("(defined? #{arg}_id)").to_s
|
183
187
|
# puts 'atts=' + @attributes.inspect
|
188
|
+
|
189
|
+
# Define reader method
|
184
190
|
send(:define_method, arg) do
|
185
191
|
options2 = @@belongs_to_map[arg]
|
186
192
|
class_name = options2[:class_name] || arg.to_s[0...1].capitalize + arg.to_s[1...arg.to_s.length]
|
187
|
-
# return eval("#{arg.to_s.capitalize}.find(self['#{arg}_id']) if !self['#{arg}_id'].nil?") # (defined? #{arg}_id)
|
188
|
-
# return eval("#{arg.to_s.capitalize}.find(#{arg}_id) if(defined? #{arg}_id)")
|
189
|
-
# ORIGINAL return eval("#{arg.to_s.capitalize}.find(#{arg}_id)")
|
190
|
-
|
191
193
|
# puts "attr=" + @attributes[arg_id].inspect
|
192
194
|
# puts 'val=' + @attributes[arg_id][0].inspect unless @attributes[arg_id].nil?
|
193
195
|
ret = nil
|
@@ -218,7 +220,17 @@ module SimpleRecord
|
|
218
220
|
# puts 'ret=' + ret.inspect
|
219
221
|
return ret
|
220
222
|
end
|
221
|
-
|
223
|
+
|
224
|
+
# Define reader ID method
|
225
|
+
send(:define_method, arg_id) do
|
226
|
+
if !@attributes[arg_id].nil? && @attributes[arg_id].size > 0 && @attributes[arg_id][0] != nil && @attributes[arg_id][0] != ''
|
227
|
+
return @attributes[arg_id][0]
|
228
|
+
end
|
229
|
+
return nil
|
230
|
+
end
|
231
|
+
|
232
|
+
# Define writer method
|
233
|
+
send(:define_method, arg.to_s + "=") do |value|
|
222
234
|
arg_id = arg.to_s + '_id'
|
223
235
|
if value.nil?
|
224
236
|
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
|
@@ -226,6 +238,7 @@ module SimpleRecord
|
|
226
238
|
self[arg_id]=value.id
|
227
239
|
end
|
228
240
|
end
|
241
|
+
|
229
242
|
send(:define_method, "create_"+arg.to_s) do |*params|
|
230
243
|
newsubrecord=eval(arg.to_s.classify).new(*params)
|
231
244
|
newsubrecord.save
|
@@ -234,56 +247,6 @@ module SimpleRecord
|
|
234
247
|
end
|
235
248
|
end
|
236
249
|
|
237
|
-
def self.belongs_to_OLD_and_wrong(*args)
|
238
|
-
#create the accesor functions
|
239
|
-
args.each do |arg|
|
240
|
-
# puts 'belongs_to ' + arg.to_s
|
241
|
-
send(:define_method, arg) do
|
242
|
-
# return eval("#{arg.to_s.capitalize}.find(self['#{arg}_id']) if !self['#{arg}_id'].nil?") # (defined? #{arg}_id)
|
243
|
-
# return eval("#{arg.to_s.capitalize}.find(#{arg}_id) if(defined? #{arg}_id)")
|
244
|
-
# ORIGINAL return eval("#{arg.to_s.capitalize}.find(#{arg}_id)")
|
245
|
-
puts "arg_id=#{arg}_id"
|
246
|
-
# puts "is defined? " + eval("(defined? #{arg}_id)").to_s
|
247
|
-
# puts 'atts=' + @attributes.inspect
|
248
|
-
puts "attr=" + @attributes[arg.to_s + '_id'].inspect
|
249
|
-
puts 'val=' + @attributes[arg.to_s + '_id'][0].inspect unless @attributes[arg.to_s + '_id'].nil?
|
250
|
-
to_eval = "#{arg.to_s[0...1].capitalize + arg.to_s[1...arg.to_s.length]}.find(@attributes['#{arg}_id'][0], :auto_load=>true) unless @attributes['#{arg}_id'].nil?"
|
251
|
-
puts 'to eval=' + to_eval
|
252
|
-
ret = eval(to_eval) # (defined? #{arg}_id)
|
253
|
-
puts 'ret=' + ret.inspect
|
254
|
-
ret
|
255
|
-
end
|
256
|
-
end
|
257
|
-
|
258
|
-
args.each do |arg|
|
259
|
-
send(:define_method, arg.to_s+"=") do |value|
|
260
|
-
self[arg.to_s+"_id"]=value.id
|
261
|
-
end
|
262
|
-
end
|
263
|
-
|
264
|
-
#create the build_subrecord and creat_subrecord methods
|
265
|
-
#args.each do |arg|
|
266
|
-
# send(:define_method, "build_"+arg.to_s) do |*params|
|
267
|
-
# self.arg.to_s=eval(arg.to_s.classify).new
|
268
|
-
# end
|
269
|
-
#end
|
270
|
-
|
271
|
-
args.each do |arg|
|
272
|
-
send(:define_method, "create_"+arg.to_s) do |*params|
|
273
|
-
newsubrecord=eval(arg.to_s.classify).new(*params)
|
274
|
-
newsubrecord.save
|
275
|
-
self[arg.to_s+"_id"]=newsubrecord.id
|
276
|
-
end
|
277
|
-
end
|
278
|
-
end #belongs_to
|
279
|
-
|
280
|
-
# def self.has_many(*args)
|
281
|
-
# args.each do |arg|
|
282
|
-
# send(:define_method, arg) do
|
283
|
-
# return eval(%{#{(arg.to_s).classify}.find(:all, :conditions => ["#{(self.class.name).tableize.singularize}_id = ?",id])})
|
284
|
-
# end
|
285
|
-
# end
|
286
|
-
# end
|
287
250
|
def self.has_many(*args)
|
288
251
|
args.each do |arg|
|
289
252
|
#okay, this creates an instance method with the pluralized name of the symbol passed to belongs_to
|
@@ -748,7 +711,6 @@ This is done on getters now
|
|
748
711
|
results=super(*params)
|
749
712
|
cache_results(results)
|
750
713
|
rescue RightAws::AwsError, RightAws::ActiveSdb::ActiveSdbError
|
751
|
-
puts "RESCUED: " + $!
|
752
714
|
if ($!.message().index("NoSuchDomain") != nil)
|
753
715
|
# this is ok
|
754
716
|
elsif ($!.message() =~ @@regex_no_id)
|
data/test/test_simple_record.rb
CHANGED
@@ -1,97 +1,116 @@
|
|
1
|
-
require
|
1
|
+
require 'minitest/unit'
|
2
2
|
require File.expand_path(File.dirname(__FILE__) + "/../lib/simple_record")
|
3
3
|
require "yaml"
|
4
4
|
require 'right_aws'
|
5
5
|
require 'my_model'
|
6
|
+
require 'my_child_model'
|
6
7
|
|
7
8
|
class TestSimpleRecord < Test::Unit::TestCase
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
def setup
|
11
|
+
@config = YAML::load(File.read('test-config.yml'))
|
12
|
+
puts 'akey=' + @config['amazon']['access_key']
|
13
|
+
puts 'skey=' + @config['amazon']['secret_key']
|
14
|
+
RightAws::ActiveSdb.establish_connection(@config['amazon']['access_key'], @config['amazon']['secret_key'])
|
15
|
+
SimpleRecord::Base.set_domain_prefix("simplerecord_tests_")
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
RightAws::ActiveSdb.close_connection()
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_save_get
|
23
|
+
mm = MyModel.new
|
24
|
+
mm.name = "Travis"
|
25
|
+
mm.age = 32
|
26
|
+
mm.cool = true
|
27
|
+
mm.save
|
28
|
+
id = mm.id
|
29
|
+
puts 'id=' + id.to_s
|
30
|
+
# Get the object back
|
31
|
+
mm2 = MyModel.find(id)
|
32
|
+
puts 'got=' + mm2.name + ' and he/she is ' + mm2.age.to_s + ' years old and he/she is cool? ' + mm2.cool.to_s
|
33
|
+
puts mm2.cool.class.name
|
34
|
+
assert mm2.id == mm.id
|
35
|
+
assert mm2.age == mm.age
|
36
|
+
assert mm2.cool == mm.cool
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_batch_save
|
40
|
+
items = []
|
41
|
+
mm = MyModel.new
|
42
|
+
mm.name = "Travis"
|
43
|
+
mm.age = 32
|
44
|
+
mm.cool = true
|
45
|
+
items << mm
|
46
|
+
mm = MyModel.new
|
47
|
+
mm.name = "Tritt"
|
48
|
+
mm.age = 44
|
49
|
+
mm.cool = false
|
50
|
+
items << mm
|
51
|
+
MyModel.batch_save(items)
|
52
|
+
items.each do |item|
|
53
|
+
puts 'id=' + item.id
|
54
|
+
new_item = MyModel.find(item.id)
|
55
|
+
puts 'new=' + new_item.inspect
|
56
|
+
assert item.id == new_item.id
|
57
|
+
assert item.name == new_item.name
|
58
|
+
assert item.cool == new_item.cool
|
59
|
+
end
|
60
|
+
end
|
16
61
|
|
17
|
-
|
18
|
-
|
19
|
-
|
62
|
+
# Testing getting the association ID without materializing the obejct
|
63
|
+
def test_get_belongs_to_id
|
64
|
+
mm = MyModel.new
|
65
|
+
mm.name = "Parent"
|
66
|
+
mm.age = 55
|
67
|
+
mm.cool = true
|
68
|
+
mm.save
|
20
69
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
mm.cool = true
|
26
|
-
mm.save
|
27
|
-
id = mm.id
|
28
|
-
puts 'id=' + id.to_s
|
29
|
-
# Get the object back
|
30
|
-
mm2 = MyModel.find(id)
|
31
|
-
puts 'got=' + mm2.name + ' and he/she is ' + mm2.age.to_s + ' years old and he/she is cool? ' + mm2.cool.to_s
|
32
|
-
puts mm2.cool.class.name
|
33
|
-
assert mm2.id == mm.id
|
34
|
-
assert mm2.age == mm.age
|
35
|
-
assert mm2.cool == mm.cool
|
36
|
-
end
|
70
|
+
child = MyChildModel.new
|
71
|
+
child.name = "Child"
|
72
|
+
child.my_model = mm
|
73
|
+
child.save
|
37
74
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
mm.name = "Travis"
|
42
|
-
mm.age = 32
|
43
|
-
mm.cool = true
|
44
|
-
items << mm
|
45
|
-
mm = MyModel.new
|
46
|
-
mm.name = "Tritt"
|
47
|
-
mm.age = 44
|
48
|
-
mm.cool = false
|
49
|
-
items << mm
|
50
|
-
MyModel.batch_save(items)
|
51
|
-
items.each do |item|
|
52
|
-
puts 'id=' + item.id
|
53
|
-
new_item = MyModel.find(item.id)
|
54
|
-
puts 'new=' + new_item.inspect
|
55
|
-
assert item.id == new_item.id
|
56
|
-
assert item.name == new_item.name
|
57
|
-
assert item.cool == new_item.cool
|
75
|
+
child = MyChildModel.find(child.id)
|
76
|
+
puts child.my_model_id
|
77
|
+
assert child.my_model_id == mm.id
|
58
78
|
end
|
59
|
-
end
|
60
79
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
80
|
+
def test_callbacks
|
81
|
+
# these DO NOT work right now, all objects get all callbacks
|
82
|
+
# I tried like this, seem to be getting somewhere.
|
83
|
+
#
|
84
|
+
# class << self;
|
85
|
+
# @@callbacks.each do |callback|
|
86
|
+
# #we first have to make an initialized array for each of the callbacks, to prevent problems if they are not called
|
87
|
+
# puts 'setting callback ' + callback.to_s + ' on ' + self.inspect
|
88
|
+
# eval %{
|
89
|
+
#
|
90
|
+
# # add the methods to the class
|
91
|
+
# def #{callback}(*args)
|
92
|
+
# args.each do |arg|
|
93
|
+
# cb_names = self.instance_variable_get(:@#{callback}_names)
|
94
|
+
# cb_names = [] if cb_names.nil?
|
95
|
+
# cb_names << arg.to_s if cb_names.index(arg.to_s).nil?
|
96
|
+
# self.instance_variable_set(:@#{callback}_names, cb_names)
|
97
|
+
# end
|
98
|
+
## asdf @@#{callback}_names=args.map{|arg| arg.to_s}
|
99
|
+
# end
|
100
|
+
#
|
101
|
+
# # now we run the methods in the callback array for this class
|
102
|
+
#send :define_method, "run_#{callback}" do
|
103
|
+
## def run_#{callback}
|
104
|
+
# cb_names = self.instance_variable_get(:@#{callback}_names)
|
105
|
+
# cb_names.each { |name|
|
106
|
+
# unless eval(name)
|
107
|
+
# return false
|
108
|
+
# end
|
109
|
+
# }
|
110
|
+
# return true
|
111
|
+
# end
|
112
|
+
# }
|
113
|
+
# end
|
114
|
+
# end
|
115
|
+
end
|
97
116
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Travis Reeder
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-06-01 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|