zeng 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +67 -0
- data/Rakefile +21 -19
- data/book.rb +23 -0
- data/{init.rb → lib/zeng.rb} +5 -1
- data/lib/{cute_kv → zeng}/adapters/tokyo_cabinet.rb +7 -6
- data/lib/zeng/adapters/tokyo_tyrant.rb +30 -0
- data/lib/zeng/connector.rb +28 -0
- data/lib/{cute_kv → zeng}/document.rb +7 -12
- data/lib/{cute_kv → zeng}/indexer.rb +2 -2
- data/spec/case/document_test.rb +174 -174
- data/spec/case/indexer_test.rb +31 -31
- data/spec/helper.rb +12 -14
- data/spec/model/Account.rb +3 -3
- data/spec/model/Book.rb +2 -2
- data/spec/model/Friend.rb +3 -3
- data/spec/model/Icon.rb +3 -3
- data/spec/model/Project.rb +2 -2
- data/spec/model/User.rb +3 -4
- metadata +26 -49
- data/README.rdoc +0 -89
- data/lib/cute_kv/adapters/light_cloud.rb +0 -22
- data/lib/cute_kv/adapters/tokyo_tyrant.rb +0 -22
- data/lib/cute_kv/associations.rb +0 -285
- data/lib/cute_kv/connector.rb +0 -27
- data/lib/cute_kv/ext/string.rb +0 -34
- data/lib/cute_kv/ext/symbol.rb +0 -9
- data/lib/cute_kv/serialization.rb +0 -95
- data/lib/cute_kv/serializers/json_serializer.rb +0 -75
- data/lib/cute_kv/serializers/xml_serializer.rb +0 -325
- data/lib/cute_kv/timestamp.rb +0 -56
- data/lib/cute_kv/validations.rb +0 -68
- data/lib/cutekv.rb +0 -17
- data/spec/asso.yml +0 -23
- data/spec/asso_sin_plural.yml +0 -36
- data/spec/case/associations_test.rb +0 -313
- data/spec/case/document_docking_test.rb +0 -103
- data/spec/case/serialization_test.rb +0 -78
- data/spec/case/sin_plu_dic_test.rb +0 -29
- data/spec/case/symmetry_test.rb +0 -80
- data/spec/case/timestamp_test.rb +0 -65
- data/spec/case/validations_test.rb +0 -74
- data/spec/light_cloud.yml +0 -9
- data/spec/model/Topic.rb +0 -26
- data/tags +0 -322
data/README.md
ADDED
@@ -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
|
-
|
9
|
-
|
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
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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
|
-
|
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
|
+
|
data/{init.rb → lib/zeng.rb}
RENAMED
@@ -1,15 +1,16 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
# 访问TokyoCabinet的加载模块
|
3
|
-
require '
|
4
|
-
module
|
5
|
-
module
|
3
|
+
require 'tokyocabinet'
|
4
|
+
module Zeng
|
5
|
+
module Adapter
|
6
6
|
module TokyoCabinet
|
7
|
+
|
7
8
|
def put(key, value)
|
8
|
-
@db
|
9
|
+
@db.put(key, value)
|
9
10
|
end
|
10
11
|
|
11
12
|
def get(key)
|
12
|
-
@db
|
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 =
|
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
|
8
|
-
class CuteKVError < StandardError;end
|
9
|
-
class ObjectNotSaved < CuteKVError; end
|
7
|
+
module Zeng
|
10
8
|
|
11
|
-
#
|
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
|
-
#
|
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
|
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
|
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
|
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
|
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
|
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
|
data/spec/case/document_test.rb
CHANGED
@@ -3,182 +3,182 @@ ModelDivider.divide "User", "Account"
|
|
3
3
|
|
4
4
|
class DocumentTest < Test::Unit::TestCase
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
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
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
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
|
-
|
178
|
+
end
|
179
179
|
|
180
|
-
|
181
|
-
|
182
|
-
|
180
|
+
def test_fresh_object
|
181
|
+
lili = User.new(:name=>'lili')
|
182
|
+
end
|
183
183
|
|
184
184
|
end
|