appoxy-simple_record 1.0.10

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/README.txt ADDED
@@ -0,0 +1,52 @@
1
+ = simple_record
2
+
3
+ http://code.google.com/p/simple-record/
4
+
5
+ == DESCRIPTION:
6
+
7
+ An ActiveRecord interface for SimpleDB that takes care of offsets and padding, etc.
8
+ Can be used as a drop in replacement for ActiveRecord in rails.
9
+
10
+ Special thanks to Garrett Cox for creating Activerecord2sdb which SimpleRecord is based on:
11
+ http://activrecord2sdb.rubyforge.org/
12
+
13
+ == FEATURES/PROBLEMS:
14
+
15
+ * FIX (list of features or problems)
16
+
17
+ == SYNOPSIS:
18
+
19
+ FIX (code sample of usage)
20
+
21
+ == REQUIREMENTS:
22
+
23
+ * FIX (list of requirements)
24
+
25
+ == INSTALL:
26
+
27
+ sudo gem install activesupport right_aws local_cache
28
+
29
+ == LICENSE:
30
+
31
+ (The MIT License)
32
+
33
+ Copyright (c) 2009 FIX
34
+
35
+ Permission is hereby granted, free of charge, to any person obtaining
36
+ a copy of this software and associated documentation files (the
37
+ 'Software'), to deal in the Software without restriction, including
38
+ without limitation the rights to use, copy, modify, merge, publish,
39
+ distribute, sublicense, and/or sell copies of the Software, and to
40
+ permit persons to whom the Software is furnished to do so, subject to
41
+ the following conditions:
42
+
43
+ The above copyright notice and this permission notice shall be
44
+ included in all copies or substantial portions of the Software.
45
+
46
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
47
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
48
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
49
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
50
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
51
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
52
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/bin/simple_record ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ abort "you need to write me"
@@ -0,0 +1,6 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/simple_record")
2
+
3
+ class MyChildModel < SimpleRecord::Base
4
+ belongs_to :my_model
5
+ has_attributes :name
6
+ end
data/test/my_model.rb ADDED
@@ -0,0 +1,11 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/simple_record")
2
+
3
+ class MyModel < SimpleRecord::Base
4
+
5
+ has_attributes :created, :updated, :name, :age, :cool, :birthday
6
+ are_ints :age
7
+ are_booleans :cool
8
+ are_dates :created, :updated, :birthday
9
+
10
+
11
+ end
data/test/temp_test.rb ADDED
@@ -0,0 +1,63 @@
1
+ # rubymine won't run 1.9 tests
2
+
3
+ require 'minitest/unit'
4
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/simple_record")
5
+ require "yaml"
6
+ require 'right_aws'
7
+ require 'my_model'
8
+ require 'my_child_model'
9
+
10
+
11
+ def setup
12
+ @config = YAML::load(File.read('test-config.yml'))
13
+ puts 'akey=' + @config['amazon']['access_key']
14
+ puts 'skey=' + @config['amazon']['secret_key']
15
+ RightAws::ActiveSdb.establish_connection(@config['amazon']['access_key'], @config['amazon']['secret_key'], :port=>80, :protocol=>"http")
16
+ SimpleRecord::Base.set_domain_prefix("simplerecord_tests_")
17
+ end
18
+
19
+ def teardown
20
+ RightAws::ActiveSdb.close_connection()
21
+ end
22
+
23
+ def test_dates
24
+ mm = MyModel.new
25
+ mm.name = "Travis"
26
+ mm.age = 32
27
+ mm.cool = true
28
+ mm.created = DateTime.now - 10
29
+ mm.updated = DateTime.now
30
+ mm.birthday = Time.now - (3600 * 24 * 365 * 10)
31
+ puts 'before save=' + mm.inspect
32
+ mm.save
33
+ puts 'after save=' + mm.inspect
34
+
35
+ mms = MyModel.find(:all, :conditions => ["created > ?", DateTime.now - 1])
36
+ puts 'mms=' + mms.inspect
37
+
38
+ end
39
+
40
+ def test_date_comparisons
41
+
42
+ t = SimpleRecord::Base.pad_and_offset(Time.now)
43
+ puts t
44
+ dt = SimpleRecord::Base.pad_and_offset(DateTime.now)
45
+ puts dt
46
+ dt_tomorrow = SimpleRecord::Base.pad_and_offset(DateTime.now + 1)
47
+
48
+
49
+ puts 'compare=' + (t <=> dt).to_s
50
+ puts 'compare=' + (t <=> dt_tomorrow).to_s
51
+
52
+ dts = DateTime.parse(dt_tomorrow)
53
+ puts dts.to_s
54
+ ts = Time.parse(dt)
55
+ puts ts.to_s
56
+ end
57
+
58
+ setup
59
+
60
+ #test_dates
61
+ test_date_comparisons
62
+
63
+ teardown
@@ -0,0 +1,120 @@
1
+ require 'minitest/unit'
2
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/simple_record")
3
+ require "yaml"
4
+ require 'right_aws'
5
+ require 'my_model'
6
+ require 'my_child_model'
7
+
8
+ class TestSimpleRecord < Test::Unit::TestCase
9
+
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'], :port=>80, :protocol=>"http")
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_bad_query
40
+ mm2 = MyModel.find(:all, :conditions=>["name =4?", "1"])
41
+ end
42
+
43
+ def test_batch_save
44
+ items = []
45
+ mm = MyModel.new
46
+ mm.name = "Travis"
47
+ mm.age = 32
48
+ mm.cool = true
49
+ items << mm
50
+ mm = MyModel.new
51
+ mm.name = "Tritt"
52
+ mm.age = 44
53
+ mm.cool = false
54
+ items << mm
55
+ MyModel.batch_save(items)
56
+ items.each do |item|
57
+ puts 'id=' + item.id
58
+ new_item = MyModel.find(item.id)
59
+ puts 'new=' + new_item.inspect
60
+ assert item.id == new_item.id
61
+ assert item.name == new_item.name
62
+ assert item.cool == new_item.cool
63
+ end
64
+ end
65
+
66
+ # Testing getting the association ID without materializing the obejct
67
+ def test_get_belongs_to_id
68
+ mm = MyModel.new
69
+ mm.name = "Parent"
70
+ mm.age = 55
71
+ mm.cool = true
72
+ mm.save
73
+
74
+ child = MyChildModel.new
75
+ child.name = "Child"
76
+ child.my_model = mm
77
+ child.save
78
+
79
+ child = MyChildModel.find(child.id)
80
+ puts child.my_model_id
81
+ assert child.my_model_id == mm.id
82
+ end
83
+
84
+ def test_callbacks
85
+ # these DO NOT work right now, all objects get all callbacks
86
+ # I tried like this, seem to be getting somewhere.
87
+ #
88
+ # class << self;
89
+ # @@callbacks.each do |callback|
90
+ # #we first have to make an initialized array for each of the callbacks, to prevent problems if they are not called
91
+ # puts 'setting callback ' + callback.to_s + ' on ' + self.inspect
92
+ # eval %{
93
+ #
94
+ # # add the methods to the class
95
+ # def #{callback}(*args)
96
+ # args.each do |arg|
97
+ # cb_names = self.instance_variable_get(:@#{callback}_names)
98
+ # cb_names = [] if cb_names.nil?
99
+ # cb_names << arg.to_s if cb_names.index(arg.to_s).nil?
100
+ # self.instance_variable_set(:@#{callback}_names, cb_names)
101
+ # end
102
+ ## asdf @@#{callback}_names=args.map{|arg| arg.to_s}
103
+ # end
104
+ #
105
+ # # now we run the methods in the callback array for this class
106
+ #send :define_method, "run_#{callback}" do
107
+ ## def run_#{callback}
108
+ # cb_names = self.instance_variable_get(:@#{callback}_names)
109
+ # cb_names.each { |name|
110
+ # unless eval(name)
111
+ # return false
112
+ # end
113
+ # }
114
+ # return true
115
+ # end
116
+ # }
117
+ # end
118
+ # end
119
+ end
120
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: appoxy-simple_record
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.10
5
+ platform: ruby
6
+ authors:
7
+ - Travis Reeder
8
+ - RightScale
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-06-06 00:00:00 -07:00
14
+ default_executable: simple_record
15
+ dependencies: []
16
+
17
+ description: Drop in replacement for ActiveRecord to Amazon SimpleDB instead.
18
+ email: travis@appoxy.com
19
+ executables:
20
+ - simple_record
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - README.txt
25
+ files:
26
+ - README.txt
27
+ has_rdoc: true
28
+ homepage: http://github.com/appoxy/simple_record/
29
+ post_install_message:
30
+ rdoc_options:
31
+ - --charset=UTF-8
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: "0"
39
+ version:
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ version:
46
+ requirements: []
47
+
48
+ rubyforge_project:
49
+ rubygems_version: 1.2.0
50
+ signing_key:
51
+ specification_version: 2
52
+ summary: Drop in replacement for ActiveRecord to Amazon SimpleDB instead.
53
+ test_files:
54
+ - test/my_child_model.rb
55
+ - test/my_model.rb
56
+ - test/temp_test.rb
57
+ - test/test_simple_record.rb