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
@@ -1,56 +0,0 @@
1
- module CuteKV
2
- # CuteKV automatically timestamps create and update operations if the table has fields
3
- # named created_at/created_on or updated_at/updated_on.
4
- #
5
- # Timestamping can be turned off by setting
6
- # <tt>ActiveRecord::Base.record_timestamps = false</tt>
7
- #
8
- # Timestamps are in the local timezone by default but you can use UTC by setting
9
- # <tt>CuteKV::Timestampes.default_timezone == :utc</tt>
10
- module Timestamp
11
-
12
- def self.included(base) #:nodoc:
13
- base.extend ClassMethods
14
- base.alias_method_chain :save, :timestamps
15
- end
16
-
17
-
18
-
19
- module ClassMethods
20
- def default_timezone
21
- @timezone = Timestamp::default_timezone
22
- @timezone.to_sym
23
- end
24
-
25
- def add_timestamps
26
- assign(:created_at, :updated_at) unless already_has_timestamp?
27
- end
28
-
29
- def already_has_timestamp?
30
- attrs = self.assigned_attributes
31
- attrs.include?(:created_at) && attrs.include?(:updated_at)
32
- end
33
-
34
- end
35
-
36
- private
37
-
38
- def save_with_timestamps #:nodoc:
39
- t = self.class.default_timezone == :utc ? DateTime.now.utc : DateTime.now
40
- self.created_at ||= t if self.respond_to?(:created_at)
41
- self.updated_at = t if self.respond_to?(:updated_at)
42
- save_without_timestamps
43
- end
44
-
45
-
46
- class << self
47
-
48
- def default_timezone
49
- @default_tz ||= :utc
50
- end
51
-
52
- end
53
-
54
- end
55
-
56
- end
@@ -1,68 +0,0 @@
1
- module CuteKV
2
-
3
- module Validations
4
-
5
- def self.included(base)
6
- base.extend ClassMethods
7
- base.send :include, InstanceMethods
8
- base.class_eval { alias_method :validated, :save; alias_method :save, :validating }
9
- end
10
-
11
- class Error
12
-
13
- def initialize
14
- @body = Hash.new {|h,k| h[k] = []}
15
- end
16
-
17
- def add(attr, mesg)
18
- attr = attr.to_s
19
- @body[attr] << mesg unless @body[attr].include?(mesg)
20
- end
21
-
22
- def on(attr)
23
- attr = attr.to_s
24
- @body[attr].size == 1 ? @body[attr].first : @body[attr]
25
- end
26
-
27
- def empty?
28
- @body.values.flatten.empty?
29
- end
30
-
31
- end
32
-
33
- module InstanceMethods
34
-
35
- def validating
36
- self.class.validations.each {|v| self.send v}
37
- valid? ? validated : nil
38
- end
39
-
40
- def errors
41
- @errors ||= Error.new
42
- end
43
-
44
- def valid?
45
- self.errors.empty?
46
- end
47
-
48
- def errors_message_on(attr)
49
- self.errors.on(attr)
50
- end
51
-
52
- end
53
-
54
- module ClassMethods
55
-
56
- def validate(validate_process)
57
- (@validations ||=[]) << validate_process
58
- end
59
-
60
- def validations
61
- (@validations ||=[]).dup
62
- end
63
-
64
- end
65
-
66
- end
67
-
68
- end
@@ -1,17 +0,0 @@
1
- $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
-
4
- require 'rubygems'
5
- require 'lightcloud'
6
- require 'active_support'
7
- require 'cute_kv/ext/string'
8
- require 'cute_kv/ext/symbol'
9
- require 'cute_kv/document'
10
- require 'cute_kv/validations'
11
- require 'cute_kv/connector'
12
- require 'cute_kv/associations'
13
- require 'cute_kv/indexer'
14
- require 'cute_kv/serialization'
15
- require 'cute_kv/connector'
16
- require 'cute_kv/timestamp'
17
-
@@ -1,23 +0,0 @@
1
- -
2
- Book:
3
- owner
4
- User:
5
- books
6
- -
7
- User:
8
- project
9
- Project:
10
- master
11
- -
12
- User:
13
- projects
14
- Project:
15
- members
16
- -
17
- User:
18
- icon
19
- Icon:
20
- user
21
-
22
-
23
-
@@ -1,36 +0,0 @@
1
- -
2
- Book:
3
- owner
4
- User:
5
- book
6
- plural:
7
- book
8
- singular:
9
- owner
10
- -
11
- User:
12
- projects
13
- Project:
14
- members
15
- plural:
16
- projects
17
- members
18
- -
19
- User:
20
- icons
21
- Icon:
22
- users
23
- singular:
24
- icons
25
- users
26
- -
27
- User:
28
- husband
29
- wife
30
- -
31
- User:
32
- friends
33
-
34
-
35
-
36
-
@@ -1,313 +0,0 @@
1
- require File.join(File.dirname(__FILE__),'..','helper')
2
- AA = CuteKV
3
-
4
- ModelDivider.divide "User", "Icon", "Project", "Book"
5
- Project.select_serializer(:marshal)
6
-
7
- class RubymapTest < Test::Unit::TestCase
8
-
9
- def setup
10
- clear_database
11
- @aaron = User.create(:name=>'aaron', :email=>'aaron@nonobo.com')
12
- @rita = User.create(:name=>'rita')
13
- @jack = User.create(:name=>'jack', :email=>'jack@nonobo.com')
14
- @icon = Icon.create(:name=>"aaron.jpg", :path=>'/tmp/aaron.jpg')
15
- @icon2 = Icon.create(:name=>"jack.jpg", :path=>'/tmp/jack.jpg')
16
- @book = Book.create(:name=>"Deep hole")
17
- @book2 = Book.create(:name=>"css")
18
- @book3 = Book.create(:name=>"ruby on rails")
19
- @project_nonobo = Project.create(:name=>"无书网")
20
- @project_forum = Project.create(:name=>"多论坛")
21
- end
22
-
23
- def test_relations_by_self_friends_friends
24
- CuteKV::Associations::map(User=>:friends)
25
- assert_equal @jack.friends.size, 0
26
- assert_equal @aaron.friends.size, 0
27
- @jack.friends << @aaron
28
- jack = User.find(@jack.id)
29
- assert_equal jack.friends[0].id, @aaron.id
30
- aaron = User.find(@aaron.id)
31
- assert_equal aaron.friends[0].id, jack.id
32
- end
33
-
34
- def test_relations_by_self_copy_icon
35
- CuteKV::Associations::map(Icon=>:copy)
36
- assert @icon.copy.nil?
37
- @icon.copy = @icon2
38
- icon = Icon.find(@icon.id)
39
- icon2 = Icon.find(@icon2.id)
40
- assert_equal icon.copy.id, @icon2.id
41
- assert_equal icon2.copy.id, @icon.id
42
- end
43
-
44
- def test_relations_husband_and_wife
45
- CuteKV::Associations::map(User=>[:wife, :husband])
46
- assert @aaron.wife.nil?
47
- assert @rita.husband.nil?
48
- @aaron.wife = @rita
49
- aaron = User.find(@aaron.id)
50
- rita = User.find(@rita.id)
51
- assert_equal aaron.wife.id, rita.id
52
- assert_equal rita.husband.id, aaron.id
53
- end
54
-
55
- def test_relaions_map_one_to_many
56
- AA::Associations.map(Book=>:owner, User=>:books)
57
- assert_equal @jack.books.size, 0
58
- assert_equal @aaron.books.size, 0
59
- @jack.books << @book
60
- @jack.books << @book2
61
- @jack.books << @book3
62
- jack = User.find(@jack.id)
63
- assert_equal @book.owner.id, @jack.id
64
- assert_equal @book2.owner.id, @jack.id
65
- assert_equal @book3.owner.id, @jack.id
66
- book_ids = @jack.books.map(&:id)
67
- assert book_ids.include?(@book.id)
68
- assert book_ids.include?(@book2.id)
69
- assert book_ids.include?(@book3.id)
70
- @book.owner = @aaron
71
- assert_equal @book.owner.id, @aaron.id
72
- assert_equal @aaron.books.size, 1
73
- aaron = User.find(@aaron.id)
74
- assert aaron.books.map(&:id).include?(@book.id)
75
- assert_equal @jack.books.size, 2
76
- assert !@jack.books.map(&:id).include?(@book.id)
77
- @book2.owner = @aaron
78
- assert_equal @aaron.books.size, 2
79
- assert @aaron.books.map(&:id).include?(@book2.id)
80
- assert_equal @jack.books.size, 1
81
- assert !@jack.books.map(&:id).include?(@book2.id)
82
-
83
- end
84
-
85
-
86
- def test_relations_map_one_to_one
87
- AA::Associations.map(User=>:icon, Icon=>:user)
88
- user_icon_test
89
- end
90
-
91
- def test_relations_map_one_to_one_set_singular
92
- AA::Associations.map(User=>:icons, Icon=>:users, :singular=>[:icons, :users])
93
- users_icons_test
94
- end
95
-
96
- def test_relations_map_one_to_many_set_singular_plural
97
- AA::Associations.map(Book=>:owner, User=>:books, :singular=>:owner, :plural=>:books)
98
- owner_books_test
99
- end
100
-
101
- def test_relations_map_many_to_many_set_plural
102
- AA::Associations.map(User=>:project, Project=>:member, :plural=>[:project, :member])
103
- member_project_test
104
- end
105
-
106
- def test_relations_map_one_to_many
107
- AA::Associations.map(Book=>:owner, User=>:books)
108
- owner_books_test
109
- end
110
-
111
- def test_relations_map_many_to_many
112
- AA::Associations.map(User=>:projects, Project=>:members)
113
- members_projects_test
114
- end
115
-
116
- def test_relations_map_many_to_many_set_plural
117
- AA::Associations.map(User=>:projects, Project=>:members, :plural=>[:projects, :members])
118
- members_projects_test
119
- end
120
-
121
- def owner_books_test
122
- assert_equal @aaron.books.size, 0
123
- assert_equal @book.owner, nil
124
- @aaron.books << @book
125
- aaron = User.find(@aaron.id)
126
- assert_equal @aaron.books.size, 1
127
- assert_equal aaron.books.size, 1
128
- assert_equal aaron.books[0].id, @book.id
129
- assert_equal @book.owner.id, aaron.id
130
- book = Book.find(@book.id)
131
- assert_equal book.owner.id, aaron.id
132
- aaron.books.remove(book)
133
- assert_equal aaron.books.size, 0
134
- assert_equal book.owner, nil
135
- end
136
-
137
- def user_icon_test
138
- assert @aaron.respond_to?(:icon=)
139
- @aaron.icon = @icon
140
- aaron = User.find(@aaron.id)
141
- assert_equal aaron.icon.id, @icon.id
142
- assert_equal aaron.icon.path, @icon.path
143
- assert_equal aaron.icon.name, @icon.name
144
- assert_equal @icon.user.id, aaron.id
145
- @aaron.icon.remove(@icon)
146
- assert @aaron.icon.nil?
147
- assert @icon.user.nil?
148
- @aaron.icon = @icon
149
- aaron = User.find(@aaron.id)
150
- assert_equal aaron.icon.id, @icon.id
151
- assert_equal @icon.user.id, aaron.id
152
- @aaron.icon = @icon2
153
- assert @icon.user.nil?
154
- assert_equal @icon2.user.id, aaron.id
155
- @icon2.user = @jack
156
- assert @aaron.icon.nil?
157
- end
158
-
159
- def users_icons_test
160
- assert @aaron.respond_to?(:icons=)
161
- @aaron.icons = @icon
162
- aaron = User.find(@aaron.id)
163
- assert_equal aaron.icons.id, @icon.id
164
- assert_equal @icon.users.id, aaron.id
165
- assert_equal @icon.users.name, aaron.name
166
- end
167
-
168
- def member_project_test
169
- assert_equal @aaron.project.size, 0
170
- assert_equal @project_nonobo.member.size, 0
171
- @aaron.project << @project_nonobo
172
- assert_equal @aaron.project.size, 1
173
- assert_equal @project_nonobo.member.size, 1
174
- aaron = User.find(@aaron.id)
175
- project = aaron.project.last
176
- member = @project_nonobo.member.last
177
- assert_equal member.id, aaron.id
178
- assert_equal project.id, @project_nonobo.id
179
- end
180
-
181
- def members_projects_test
182
- assert_equal @aaron.projects.size, 0
183
- assert_equal @project_nonobo.members.size, 0
184
- @aaron.projects << @project_nonobo
185
- assert_equal @aaron.projects.size, 1
186
- assert_equal @project_nonobo.members.size, 1
187
- aaron = User.find(@aaron.id)
188
- project = aaron.projects.last
189
- member = @project_nonobo.members.last
190
- assert_equal member.id, aaron.id
191
- assert_equal project.id, @project_nonobo.id
192
- aaron.projects.remove(@project_nonobo)
193
- assert_equal @project_nonobo.members.size, 0
194
- assert_equal @aaron.projects.size, 0
195
- @aaron.projects << @project_nonobo
196
- @aaron.projects << @project_forum
197
- aaron = User.find(@aaron.id)
198
- assert_equal aaron.projects.size, 2
199
- nonobo = Project.find(@project_nonobo.id)
200
- forum = Project.find(@project_forum.id)
201
- assert_equal nonobo.members.size, 1
202
- assert_equal forum.members.size, 1
203
- assert_equal nonobo.members[0].id, aaron.id
204
- assert_equal forum.members[0].id, aaron.id
205
- aaron.projects.remove(nonobo)
206
- aaron = User.find(@aaron.id)
207
- assert_equal aaron.projects.size, 1
208
- assert_equal nonobo.members.size, 0
209
- forum.members.remove(aaron)
210
- assert_equal aaron.projects.size, 0
211
- assert_equal forum.members.size, 0
212
- end
213
-
214
- def test_robust_of_many_to_many
215
- AA::Associations.map(User=>:projects, Project=>:members)
216
- robust_many_to_many_test
217
- end
218
-
219
- def robust_many_to_many_test
220
- @aaron.projects << "aadd"
221
- @aaron.projects << @jack
222
- @aaron.projects.remove("bbbbbb")
223
- @aaron.projects.remove(@jack)
224
- assert @aaron.projects.empty?
225
- @aaron.projects << @project_nonobo
226
- assert_equal @aaron.projects.size, 1
227
- assert @project_nonobo.destroy
228
- assert_equal @aaron.projects.size, 0
229
- end
230
-
231
- def test_Associations_map_from_yml
232
- yml_path = "#{File.dirname(__FILE__)}/../asso.yml"
233
- assert AA::Associations.map(yml_path)
234
- robust_many_to_many_test
235
- setup
236
- members_projects_test
237
- setup
238
- user_icon_test
239
- setup
240
- owner_books_test
241
- setup
242
- project_master_test
243
- end
244
-
245
- def project_master_test
246
- assert @jack.projects.size==0
247
- @jack.projects << @project_nonobo
248
- assert_equal @jack.projects.size, 1
249
- assert @project_nonobo.master.nil?
250
- @project_nonobo.master = @aaron
251
- assert_equal @aaron.project.id, @project_nonobo.id
252
- assert_equal @aaron.projects.size, 0
253
- assert_equal @project_nonobo.master.id, @aaron.id
254
- end
255
-
256
- def test_Associations_map_from_yml_sin_plural
257
- yml_path = "#{File.dirname(__FILE__)}/../asso_sin_plural.yml"
258
- assert AA::Associations.map(yml_path)
259
- robust_many_to_many_test
260
- setup
261
- members_projects_test
262
- setup
263
- users_icons_test
264
- setup
265
- owner_book_test
266
- setup
267
- husband_wife_test
268
- end
269
-
270
- def husband_wife_test
271
- assert @aaron.wife.nil?
272
- assert @rita.husband.nil?
273
- @aaron.wife = @rita
274
- aaron = User.find(@aaron.id)
275
- assert_equal aaron.wife.id, @rita.id
276
- rita = User.find(@rita.id)
277
- assert_equal @aaron.wife.id, rita.id
278
- @lucy = User.create(:name=>"lucy")
279
- assert @lucy.husband.nil?
280
- @aaron.wife = @lucy
281
- assert_equal @aaron.wife.name, "lucy"
282
- assert_equal @aaron.wife.id, @lucy.id
283
- assert @rita.husband.nil?
284
- assert @lucy.husband.id==@aaron.id
285
- end
286
-
287
-
288
- def clear_database
289
- User.clear
290
- Icon.clear
291
- Project.clear
292
- Book.clear
293
- end
294
-
295
- def owner_book_test
296
- #User.select_serializer(:marshal)
297
- #Book.select_serializer(:json)
298
- assert_equal @aaron.book.size, 0
299
- assert_equal @book.owner, nil
300
- @aaron.book << @book
301
- aaron = User.find(@aaron.id)
302
- assert_equal @aaron.book.size, 1
303
- assert_equal aaron.book.size, 1
304
- assert_equal aaron.book[0].id, @book.id
305
- assert_equal @book.owner.id, aaron.id
306
- book = Book.find(@book.id)
307
- assert_equal book.owner.id, aaron.id
308
- aaron.book.remove(book)
309
- assert_equal aaron.book.size, 0
310
- assert_equal book.owner, nil
311
- end
312
-
313
- end