zeng 0.0.1 → 0.0.2

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.
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