zeng 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/README.md +67 -0
  2. data/Rakefile +21 -19
  3. data/book.rb +23 -0
  4. data/{init.rb → lib/zeng.rb} +5 -1
  5. data/lib/{cute_kv → zeng}/adapters/tokyo_cabinet.rb +7 -6
  6. data/lib/zeng/adapters/tokyo_tyrant.rb +30 -0
  7. data/lib/zeng/connector.rb +28 -0
  8. data/lib/{cute_kv → zeng}/document.rb +7 -12
  9. data/lib/{cute_kv → zeng}/indexer.rb +2 -2
  10. data/spec/case/document_test.rb +174 -174
  11. data/spec/case/indexer_test.rb +31 -31
  12. data/spec/helper.rb +12 -14
  13. data/spec/model/Account.rb +3 -3
  14. data/spec/model/Book.rb +2 -2
  15. data/spec/model/Friend.rb +3 -3
  16. data/spec/model/Icon.rb +3 -3
  17. data/spec/model/Project.rb +2 -2
  18. data/spec/model/User.rb +3 -4
  19. metadata +26 -49
  20. data/README.rdoc +0 -89
  21. data/lib/cute_kv/adapters/light_cloud.rb +0 -22
  22. data/lib/cute_kv/adapters/tokyo_tyrant.rb +0 -22
  23. data/lib/cute_kv/associations.rb +0 -285
  24. data/lib/cute_kv/connector.rb +0 -27
  25. data/lib/cute_kv/ext/string.rb +0 -34
  26. data/lib/cute_kv/ext/symbol.rb +0 -9
  27. data/lib/cute_kv/serialization.rb +0 -95
  28. data/lib/cute_kv/serializers/json_serializer.rb +0 -75
  29. data/lib/cute_kv/serializers/xml_serializer.rb +0 -325
  30. data/lib/cute_kv/timestamp.rb +0 -56
  31. data/lib/cute_kv/validations.rb +0 -68
  32. data/lib/cutekv.rb +0 -17
  33. data/spec/asso.yml +0 -23
  34. data/spec/asso_sin_plural.yml +0 -36
  35. data/spec/case/associations_test.rb +0 -313
  36. data/spec/case/document_docking_test.rb +0 -103
  37. data/spec/case/serialization_test.rb +0 -78
  38. data/spec/case/sin_plu_dic_test.rb +0 -29
  39. data/spec/case/symmetry_test.rb +0 -80
  40. data/spec/case/timestamp_test.rb +0 -65
  41. data/spec/case/validations_test.rb +0 -74
  42. data/spec/light_cloud.yml +0 -9
  43. data/spec/model/Topic.rb +0 -26
  44. data/tags +0 -322
@@ -0,0 +1,67 @@
1
+ Zeng -- a data mapper tool for nosql database
2
+ ==============================================
3
+
4
+ Main features
5
+ -------------
6
+
7
+ - **Install**
8
+
9
+ sudo gem install zeng
10
+
11
+ - **Independent Object Storage**
12
+
13
+ Through backend_configure to appoint storage location
14
+
15
+ class User
16
+ include Zeng::Document
17
+ backend_configure :TT,"127.0.0.1:1987"
18
+ end
19
+
20
+ - **Customize define persistent properties**
21
+
22
+ You can assign persitent properties by **assign** method,and set default value for each property.
23
+
24
+ class User
25
+ include Zeng::Document
26
+ backend_configure :TT,"127.0.0.1:1987"
27
+ assign :name, :email, :gender=>'male', :age=>25
28
+ end
29
+
30
+
31
+ Index
32
+ -----
33
+
34
+ class User
35
+ include Zeng::Document
36
+ backend_configure :TT,"127.0.0.1:1987"
37
+ assign :name,:email, :gender=>'male', :age=>25
38
+ end
39
+
40
+ @jim = User.create(:name=>"jim", :email=>"jim@nonobo.com")
41
+ @aaron = User.create(:name=>"aaron", :email=>"aaron@nonobo.com")
42
+ @jack= User.create(:name=>"jack", :email=>"jack@nonbo.com")
43
+ @lucy = User.create(:name=>"lucy", :email=>"lucy@nonobo.com")
44
+
45
+ Using **Zeng::Indexer** module, you can build index for object, just like:
46
+
47
+ Zeng::Indexer::map(User=>[:name, :email, :age])
48
+
49
+ then,
50
+
51
+
52
+ User.indexes << @jim
53
+ User.indexes << @aaron
54
+ User.indexes << @lucy
55
+ User.find_all_by_name("jim") #=>@jim
56
+ User.find_all_by_age(25) #=>@jim, @aaron, @lucy, @jack
57
+
58
+ Supoort multiple database
59
+ ------------------------
60
+ Zeng using adapter to connect database backend, now support **TokyoCabinet**/**TokyoTyrant**。
61
+
62
+
63
+ Using in rails
64
+ --------------
65
+ in environment.rb, you will add
66
+
67
+ require 'zeng
data/Rakefile CHANGED
@@ -1,13 +1,14 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require 'rake'
2
3
  require 'rake/testtask'
3
4
  require 'rake/rdoctask'
4
5
 
5
6
  task :default=>:test
6
7
 
7
- task :test do
8
- Dir['spec/case/**/*'].each {|test|
9
- sh "ruby #{test}" if test =~ /(_test\.rb)$/
10
- }
8
+ task :test do
9
+ Dir['spec/case/**/*'].each {|test|
10
+ sh "ruby #{test}" if test =~ /(_test\.rb)$/
11
+ }
11
12
  end
12
13
 
13
14
  desc "start test for given file"
@@ -17,21 +18,22 @@ end
17
18
 
18
19
  desc "创建gemspec文件"
19
20
  task :gemspec do
20
- spec = Gem::Specification.new do |s|
21
- s.name = %{zeng}
22
- s.version = '0.0.1'
23
- s.summary = 'A chinese fishing tool'
24
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
21
+ spec = Gem::Specification.new do |s|
22
+ s.name = %{zeng}
23
+ s.version = '0.0.2'
24
+ s.summary = 'Zeng -- a data mapper tool for nosql database'
25
+ s.homepage = 'https://github.com/baya/zeng'
26
+ s.description = <<-EOF
27
+ Zeng(罾) is a fishing tool, it is target to capture data in nosql database。
28
+ EOF
29
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
30
+ s.email = ["kayak.jiang@gmail.com"]
31
+ s.authors = "Guimin Jiang"
32
+ s.files = Dir["./**/*"].delete_if {|path| path =~ /.gem$/}
33
+ s.require_paths = ["lib"]
34
+ s.add_dependency(%q<json>)
35
+ end
25
36
 
26
- s.email = ["kayak.jiang@gmail.com"]
27
- s.authors = "Guimin Jiang"
28
- s.files = Dir["./**/*"].delete_if {|path| path =~ /.gem$/}
29
- s.require_paths = ["lib"]
30
- s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
31
- s.rubygems_version = %q{1.3.4}
32
- s.add_dependency(%q<ffi>)
33
- end
34
-
35
- File.open("zeng.gemspec", "w") {|f| f << spec.to_ruby }
37
+ File.open("zeng.gemspec", "w") {|f| f << spec.to_ruby }
36
38
  end
37
39
 
data/book.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'zeng'
3
+
4
+ class Book
5
+ include Zeng::Document
6
+ backend_configure(:TT, '127.0.0.1:1988')
7
+ assign :name, :price
8
+ end
9
+
10
+ Zeng::Indexer::map(Book => [:name])
11
+
12
+ book = Book.create(:name => "ruby book", :price => 12.0)
13
+ Book.indexes << book
14
+
15
+ book = Book.find(book.id)
16
+ puts book.inspect
17
+ puts book.name
18
+ puts book.price.class
19
+ puts book.price
20
+
21
+ books = Book.find_all_by_name("ruby book")
22
+ puts books.inspect
23
+
@@ -1,4 +1,8 @@
1
1
  $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
- require 'cutekv'
4
+ require 'rubygems'
5
+ require 'zeng/document'
6
+ require 'zeng/connector'
7
+ require 'zeng/indexer'
8
+
@@ -1,15 +1,16 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # 访问TokyoCabinet的加载模块
3
- require 'rufus/tokyo'
4
- module CuteKV
5
- module Adapters
3
+ require 'tokyocabinet'
4
+ module Zeng
5
+ module Adapter
6
6
  module TokyoCabinet
7
+
7
8
  def put(key, value)
8
- @db[key] = value
9
+ @db.put(key, value)
9
10
  end
10
11
 
11
12
  def get(key)
12
- @db[key]
13
+ @db.get(key)
13
14
  end
14
15
 
15
16
  def delete(key)
@@ -26,7 +27,7 @@ module CuteKV
26
27
 
27
28
  private
28
29
  def establish(conf)
29
- @db = Rufus::Tokyo::Cabinet.new(conf)
30
+ @db = HDB::new(conf)
30
31
  end
31
32
  end
32
33
  end
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+ # 访问TokyoTyrant的加载模块
3
+ require 'tokyotyrant'
4
+ require 'zeng/adapters/tokyo_cabinet'
5
+ include TokyoTyrant
6
+
7
+ module Zeng
8
+ module Adapter
9
+ module TokyoTyrant
10
+ include Adapter::TokyoCabinet
11
+
12
+ private
13
+ def establish(conf)
14
+ if conf.is_a? Hash
15
+ @host = conf[:host] || conf["host"]
16
+ @port = (conf[:port] || conf["port"]).to_i
17
+ else
18
+ conf = conf.split(':')
19
+ @host = conf[0]
20
+ @port = conf[1].to_i
21
+ end
22
+ @db = ::RDB.new
23
+ if !@db.open(@host, @port)
24
+ ecode = @db.ecode
25
+ raise @db.errmsg(ecode)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Zeng
3
+ class Connector
4
+ def self.config(adapter)
5
+ case adapter.to_sym
6
+ when :TC
7
+ require 'zeng/adapters/tokyo_cabinet'
8
+ include Adapter::TokyoCabinet
9
+ when :TT
10
+ require 'zeng/adapters/tokyo_tyrant'
11
+ include Adapter::TokyoTyrant
12
+ when :LC
13
+ require 'zeng/adapters/light_cloud'
14
+ include Adapter::TokyoCloud
15
+ else
16
+ raise ConfigError,'没有指定数据库类型!'
17
+ end
18
+ end
19
+
20
+ def initialize(adapter, conf)
21
+ @adapter = adapter
22
+ self.class.config(adapter)
23
+ establish(conf)
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -4,17 +4,15 @@ require 'uuid'
4
4
  require 'json'
5
5
  require 'json/add/core'
6
6
 
7
- module CuteKV
8
- class CuteKVError < StandardError;end
9
- class ObjectNotSaved < CuteKVError; end
7
+ module Zeng
10
8
 
11
- # CuteKV's built-in attribute id is the <t>key</t> to access <t>value</t>, and id is formated by uuid.
9
+ # Zeng's built-in attribute id is the <t>key</t> to access <t>value</t>, and id is formated by uuid.
12
10
  # ==
13
- # CuteKV provide a Document module to persistence class's attributes, when a class include Document module,
11
+ # Zeng provide a Document module to persistence class's attributes, when a class include Document module,
14
12
  # then it can <t>assign</t> attributes needed to persistence.
15
13
  #
16
14
  # class User
17
- # include CuteKV::Document
15
+ # include Zeng::Document
18
16
  # assign :name,:age=>25,:gender=>"male"
19
17
  # end
20
18
  #
@@ -27,7 +25,7 @@ module CuteKV
27
25
  # Every object has a default +id+, if you want to set primary key, you can use <t>primary_key</t> to set up.
28
26
  #
29
27
  # class Account < ActiveObject::Base
30
- # include CuteKV::Document
28
+ # include Zeng::Document
31
29
  # assign :name,:email,:encrypt_password
32
30
  # primary_key :email
33
31
  # end
@@ -65,11 +63,8 @@ module CuteKV
65
63
 
66
64
  def self.included(base)
67
65
  base.extend ClassMethods
68
- # select serializers, exmaple "json", ",marshal", default is "json"
69
66
  base.select_serializer(:json)
70
67
  base.send :include, InstanceMethods
71
- base.send :include, Serialization
72
- base.send :include, Timestamp
73
68
  add_client(base) unless clients.include?(base)
74
69
  end
75
70
 
@@ -136,7 +131,7 @@ module CuteKV
136
131
  # Assigning attributs needed to persistence
137
132
  # Example:
138
133
  # class User
139
- # include CuteKV::Document
134
+ # include Zeng::Document
140
135
  # assign :name, :country=>"China", :gender=>"male"
141
136
  # end
142
137
  def assign(*attributes)
@@ -175,7 +170,7 @@ module CuteKV
175
170
  end
176
171
 
177
172
 
178
- # Configure CuteKV's Back-end database,now support LightCloud/TokyoTyrant/TokyoCabinet.
173
+ # Configure Zeng's Back-end database,now support LightCloud/TokyoTyrant/TokyoCabinet.
179
174
  # +adapter+ specify what database to use
180
175
  # :TC => TokyoCabinet (few to use :TC in our practice projects)
181
176
  # :TT => TokyoTyrant
@@ -1,4 +1,4 @@
1
- module CuteKV
1
+ module Zeng
2
2
  module Indexer
3
3
  Map = Class.new
4
4
  Collection = Class.new(Array)
@@ -12,7 +12,6 @@ module CuteKV
12
12
  attr_reader :key, :values
13
13
  attr_accessor :index_attrs
14
14
 
15
-
16
15
  def initialize(key, value)
17
16
  @key = key
18
17
  @values = JSON.parse value
@@ -99,4 +98,5 @@ module CuteKV
99
98
  end
100
99
 
101
100
  end
101
+
102
102
  end
@@ -3,182 +3,182 @@ ModelDivider.divide "User", "Account"
3
3
 
4
4
  class DocumentTest < Test::Unit::TestCase
5
5
 
6
- def setup
7
- User.backend_configure(:TT, '127.0.0.1:1985')
8
- Account.backend_configure(:TT, :host=>'127.0.0.1', "port"=>1984)
9
- User.assign(:name, :age=>25, :gender=>"male")
10
- Account.assign(:email, :password, :country=>"China")
11
- User.clear
12
- Account.clear
13
- @jim = User.new(:name=>"jim")
14
- @a_jim = Account.new(:email=>"jim@nonobo.com")
15
- @attrs_group = [{:name=>"jim"}, {:name=>"jack"}, {:name=>"nancy"}, {:name=>"kame"}]
16
- end
17
-
18
- def test_assign_attributes_to_persistence
19
- assert User.assign(:name, :age=>25, :gender=>[])
20
- assert Account.assign(:email, :password, :country=>{})
21
- @jim = User.new(:name=>"jim")
22
- assert_equal @jim.name, "jim"
23
- assert_equal @jim.age, 25
24
- assert_equal @jim.gender, []
25
- @jack = User.new(:name=>"jack"){|u| u.gender="female"; u.age=36}
26
- assert_equal @jack.name, "jack"
27
- assert_equal @jack.age, 36
28
- assert_equal @jack.gender, "female"
29
- @account_jim = Account.new(:email=>"jim@nonobo.com")
30
- assert_equal @account_jim.email, "jim@nonobo.com"
31
- assert_equal @account_jim.country, {}
32
- end
33
-
34
- def test_set_backend
35
- assert User.backend_configure(:TT, '127.0.0.1:1985')
36
- assert Account.backend_configure(:TT, :host=>'127.0.0.1', "port"=>1984)
37
- assert User.clear
38
- assert Account.clear
39
- end
40
-
41
- def test_persistence_assigned_attributes_and_id
42
- assert @jim.save
43
- assert @a_jim.save
44
- jim = User.find(@jim.id)
45
- a_jim = Account.find(@a_jim.id)
46
- assert_equal jim.id, @jim.id
47
- assert_equal jim.name, @jim.name
48
- assert_equal jim.gender, @jim.gender
49
- jim.age = 30
50
- jim.save
51
- j = User.find(@jim.id)
52
- assert_equal j.id, @jim.id
53
- assert_equal j.age, 30
54
- end
55
-
56
- def test_create_single_object
57
- jack = User.create(:name=>"jack")
58
- assert_equal jack.name, "jack"
59
- assert_equal jack.gender, "male"
60
- assert_equal jack.age, 25
61
- jim = User.create(:name=>'jim') {|u| u.age=55; u.gender="female" }
62
- assert_equal jim.age, 55
63
- assert_equal jim.gender, 'female'
64
- jm = User.find(jim.id)
65
- assert_equal jm.id, jim.id
66
- assert_equal jm.age, 55
67
- assert_equal jm.gender, 'female'
68
- end
69
-
70
-
71
- def test_destroy_object
72
- jim = User.create(:name=>"jim")
73
- a_jim = Account.create(:email=>"jim@nonobo.com")
74
- assert_equal jim.name, "jim"
75
- assert_equal a_jim.email, "jim@nonobo.com"
76
- assert User.destroy(jim)
77
- assert_equal User.destroy(a_jim), nil
78
- jm = User.find(jim.id)
79
- assert jm.nil?
80
- end
81
-
82
- def test_update_object
83
- jim = User.create(:name=>'jim')
84
- assert_equal jim.age, 25
85
- assert_equal jim.gender, 'male'
86
- jim.update(:age=>52, :gender=>'female')
87
- assert_equal jim.age, 52
88
- assert_equal jim.gender, 'female'
89
- jm = User.find(jim.id)
90
- assert_equal jm.age, 25
91
- assert_equal jm.gender, 'male'
92
- jim.save
93
- jm = User.find(jim.id)
94
- assert_equal jm.age, 52
95
- assert_equal jm.gender, 'female'
96
- end
97
-
98
- def test_reload_object
99
- jim = User.new(:name=>'jim')
100
- jim_id = jim.id
101
- assert jim.name == 'jim'
102
- assert jim.age == 25
103
- assert jim.reload.nil?
104
- jim.save
105
- jm = User.find(jim.id)
106
- jm.age = 59
107
- jm.save
108
- assert_equal jim.age, 25
109
- assert_equal jm.age, 59
110
- assert jim.reload
111
- assert_equal jim.age, 59
112
- assert_equal jim.id, jim_id
113
- end
114
-
115
- def test_class_method_save
116
- jim = User.new(:name=>"jim")
117
- a_jim = Account.new(:email=>"jim@nonobo.com")
118
- assert_equal jim.age, 25
119
- assert jim.id
120
- assert User.find(jim.id).nil?
121
- assert User.save(jim)
122
- assert User.find(jim.id)
123
- assert User.save("jim").nil?
124
- assert User.save(a_jim).nil?
125
- end
126
-
127
- def test_class_method_update
128
- jim = User.new(:name=>"jim")
129
- a_jim = Account.new(:email=>"jim@nonobo.com")
130
- assert User.update(jim, :age=>36, :gender=>'female')
131
- assert_equal jim.age, 36
132
- assert_equal jim.gender, 'female'
133
- assert User.update(jim, :age=>45)
134
- assert_equal jim.age, 45
135
- assert User.update(jim)
136
- assert_equal jim.age, 45
137
- assert_equal jim.gender, 'female'
138
- assert User.update(a_jim).nil?
139
- end
140
-
141
- def test_class_reload
142
- jim = User.new(:name=>"jim")
143
- a_jim = Account.new(:email=>"jim@nonobo.com")
144
- assert_equal jim.age, 25
145
- assert_equal jim.gender, 'male'
146
- jim.update(:age=>58, :gender=>'female')
147
- jim.save
148
- jim_id = jim.id
149
- assert User.reload(jim)
150
- assert_equal jim.id, jim_id
151
- assert jim.age, 58
152
- assert jim.gender, 'female'
153
- assert User.reload(a_jim).nil?
154
- end
155
-
156
- def test_select_serializers
157
- assert User.select_serializer(:json)
158
- assert Account.select_serializer(:marshal)
159
- assert User.serializer_type=="json"
160
- assert Account.serializer_type=="marshal"
161
- a_jim = Account.create(:email=>"jim@nonobo.com")
162
- a_j = Account.find(a_jim.id)
163
- assert_equal a_jim.email, "jim@nonobo.com"
164
- assert_equal a_j.email, "jim@nonobo.com"
165
- assert Account.select_serializer(:marshal)
166
- assert Account.serializer_type=="marshal"
167
- a_jack = Account.create(:email=>"jack@nonobo.com")
168
- a_jk = Account.find(a_jack.id)
169
- assert_equal a_jk.email, "jack@nonobo.com"
170
- assert_equal a_jk.id, a_jack.id
171
- end
172
-
173
- def test_backend_configurations
174
- assert User.backend_configure(:TT, '127.0.0.1:1984')
175
- assert Account.backend_configure(:TT, '127.0.0.1:1985')
6
+ def setup
7
+ User.backend_configure(:TT, '127.0.0.1:1985')
8
+ Account.backend_configure(:TT, :host=>'127.0.0.1', "port"=>1984)
9
+ User.assign(:name, :age=>25, :gender=>"male")
10
+ Account.assign(:email, :password, :country=>"China")
11
+ User.clear
12
+ Account.clear
13
+ @jim = User.new(:name=>"jim")
14
+ @a_jim = Account.new(:email=>"jim@nonobo.com")
15
+ @attrs_group = [{:name=>"jim"}, {:name=>"jack"}, {:name=>"nancy"}, {:name=>"kame"}]
16
+ end
17
+
18
+ def test_assign_attributes_to_persistence
19
+ assert User.assign(:name, :age=>25, :gender=>[])
20
+ assert Account.assign(:email, :password, :country=>{})
21
+ @jim = User.new(:name=>"jim")
22
+ assert_equal @jim.name, "jim"
23
+ assert_equal @jim.age, 25
24
+ assert_equal @jim.gender, []
25
+ @jack = User.new(:name=>"jack"){|u| u.gender="female"; u.age=36}
26
+ assert_equal @jack.name, "jack"
27
+ assert_equal @jack.age, 36
28
+ assert_equal @jack.gender, "female"
29
+ @account_jim = Account.new(:email=>"jim@nonobo.com")
30
+ assert_equal @account_jim.email, "jim@nonobo.com"
31
+ assert_equal @account_jim.country, {}
32
+ end
33
+
34
+ def test_set_backend
35
+ assert User.backend_configure(:TT, '127.0.0.1:1985')
36
+ assert Account.backend_configure(:TT, :host=>'127.0.0.1', "port"=>1984)
37
+ assert User.clear
38
+ assert Account.clear
39
+ end
40
+
41
+ def test_persistence_assigned_attributes_and_id
42
+ assert @jim.save
43
+ assert @a_jim.save
44
+ jim = User.find(@jim.id)
45
+ a_jim = Account.find(@a_jim.id)
46
+ assert_equal jim.id, @jim.id
47
+ assert_equal jim.name, @jim.name
48
+ assert_equal jim.gender, @jim.gender
49
+ jim.age = 30
50
+ jim.save
51
+ j = User.find(@jim.id)
52
+ assert_equal j.id, @jim.id
53
+ assert_equal j.age, 30
54
+ end
55
+
56
+ def test_create_single_object
57
+ jack = User.create(:name=>"jack")
58
+ assert_equal jack.name, "jack"
59
+ assert_equal jack.gender, "male"
60
+ assert_equal jack.age, 25
61
+ jim = User.create(:name=>'jim') {|u| u.age=55; u.gender="female" }
62
+ assert_equal jim.age, 55
63
+ assert_equal jim.gender, 'female'
64
+ jm = User.find(jim.id)
65
+ assert_equal jm.id, jim.id
66
+ assert_equal jm.age, 55
67
+ assert_equal jm.gender, 'female'
68
+ end
69
+
70
+
71
+ def test_destroy_object
72
+ jim = User.create(:name=>"jim")
73
+ a_jim = Account.create(:email=>"jim@nonobo.com")
74
+ assert_equal jim.name, "jim"
75
+ assert_equal a_jim.email, "jim@nonobo.com"
76
+ assert User.destroy(jim)
77
+ assert_equal User.destroy(a_jim), nil
78
+ jm = User.find(jim.id)
79
+ assert jm.nil?
80
+ end
81
+
82
+ def test_update_object
83
+ jim = User.create(:name=>'jim')
84
+ assert_equal jim.age, 25
85
+ assert_equal jim.gender, 'male'
86
+ jim.update(:age=>52, :gender=>'female')
87
+ assert_equal jim.age, 52
88
+ assert_equal jim.gender, 'female'
89
+ jm = User.find(jim.id)
90
+ assert_equal jm.age, 25
91
+ assert_equal jm.gender, 'male'
92
+ jim.save
93
+ jm = User.find(jim.id)
94
+ assert_equal jm.age, 52
95
+ assert_equal jm.gender, 'female'
96
+ end
97
+
98
+ def test_reload_object
99
+ jim = User.new(:name=>'jim')
100
+ jim_id = jim.id
101
+ assert jim.name == 'jim'
102
+ assert jim.age == 25
103
+ assert jim.reload.nil?
104
+ jim.save
105
+ jm = User.find(jim.id)
106
+ jm.age = 59
107
+ jm.save
108
+ assert_equal jim.age, 25
109
+ assert_equal jm.age, 59
110
+ assert jim.reload
111
+ assert_equal jim.age, 59
112
+ assert_equal jim.id, jim_id
113
+ end
114
+
115
+ def test_class_method_save
116
+ jim = User.new(:name=>"jim")
117
+ a_jim = Account.new(:email=>"jim@nonobo.com")
118
+ assert_equal jim.age, 25
119
+ assert jim.id
120
+ assert User.find(jim.id).nil?
121
+ assert User.save(jim)
122
+ assert User.find(jim.id)
123
+ assert User.save("jim").nil?
124
+ assert User.save(a_jim).nil?
125
+ end
126
+
127
+ def test_class_method_update
128
+ jim = User.new(:name=>"jim")
129
+ a_jim = Account.new(:email=>"jim@nonobo.com")
130
+ assert User.update(jim, :age=>36, :gender=>'female')
131
+ assert_equal jim.age, 36
132
+ assert_equal jim.gender, 'female'
133
+ assert User.update(jim, :age=>45)
134
+ assert_equal jim.age, 45
135
+ assert User.update(jim)
136
+ assert_equal jim.age, 45
137
+ assert_equal jim.gender, 'female'
138
+ assert User.update(a_jim).nil?
139
+ end
140
+
141
+ def test_class_reload
142
+ jim = User.new(:name=>"jim")
143
+ a_jim = Account.new(:email=>"jim@nonobo.com")
144
+ assert_equal jim.age, 25
145
+ assert_equal jim.gender, 'male'
146
+ jim.update(:age=>58, :gender=>'female')
147
+ jim.save
148
+ jim_id = jim.id
149
+ assert User.reload(jim)
150
+ assert_equal jim.id, jim_id
151
+ assert jim.age, 58
152
+ assert jim.gender, 'female'
153
+ assert User.reload(a_jim).nil?
154
+ end
155
+
156
+ def test_select_serializers
157
+ assert User.select_serializer(:json)
158
+ assert Account.select_serializer(:marshal)
159
+ assert User.serializer_type=="json"
160
+ assert Account.serializer_type=="marshal"
161
+ a_jim = Account.create(:email=>"jim@nonobo.com")
162
+ a_j = Account.find(a_jim.id)
163
+ assert_equal a_jim.email, "jim@nonobo.com"
164
+ assert_equal a_j.email, "jim@nonobo.com"
165
+ assert Account.select_serializer(:marshal)
166
+ assert Account.serializer_type=="marshal"
167
+ a_jack = Account.create(:email=>"jack@nonobo.com")
168
+ a_jk = Account.find(a_jack.id)
169
+ assert_equal a_jk.email, "jack@nonobo.com"
170
+ assert_equal a_jk.id, a_jack.id
171
+ end
172
+
173
+ def test_backend_configurations
174
+ assert User.backend_configure(:TT, '127.0.0.1:1984')
175
+ assert Account.backend_configure(:TT, '127.0.0.1:1985')
176
176
  assert_equal User.backend_configurations, {:adapter=>:TT, :host=>'127.0.0.1', :port=>1984}
177
177
  assert_equal Account.backend_configurations, {:adapter=>:TT, :host=>'127.0.0.1', :port=>1985}
178
- end
178
+ end
179
179
 
180
- def test_fresh_object
181
- lili = User.new(:name=>'lili')
182
- end
180
+ def test_fresh_object
181
+ lili = User.new(:name=>'lili')
182
+ end
183
183
 
184
184
  end