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