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,103 +0,0 @@
1
- require File.join(File.dirname(__FILE__),'..','helper')
2
-
3
- module Validation
4
- def self.included(base)
5
- base.extend ClassMethods
6
- base.send :include, InstanceMethods
7
- end
8
-
9
- module InstanceMethods
10
- def valid
11
- "instance valid"
12
- end
13
- end
14
-
15
- module ClassMethods
16
- def valid
17
- "class valid"
18
- end
19
- end
20
- end
21
-
22
- module Observer
23
- def self.included(base)
24
- base.extend ClassMethods
25
- base.send :include, InstanceMethods
26
- end
27
- module InstanceMethods
28
- def observe
29
- "instance observe"
30
- end
31
- end
32
-
33
- module ClassMethods
34
- def observe
35
- "class observe"
36
- end
37
- end
38
-
39
- end
40
-
41
- ModelDivider.divide "User", "Icon", "Project", "Book"
42
-
43
-
44
- class DockingTest < Test::Unit::TestCase
45
-
46
- def setup
47
- @jim = User.create(:name=>"jim")
48
- @icon = Icon.create(:name=>"flower")
49
- @project = Project.create(:name=>"nonobo")
50
- @book = Book.create(:name=>"ruby")
51
- end
52
-
53
- def test_docking_module
54
- assert CuteKV::Document.respond_to?(:docking)
55
- respond_test(false)
56
- CuteKV::Document::docking(Validation)
57
- CuteKV::Document::docking(Observer)
58
- clients = CuteKV::Document::clients
59
- CuteKV::Document::docking(Validation)
60
- CuteKV::Document::docking(Observer)
61
- assert_equal CuteKV::Document::clients, clients
62
- respond_test(true)
63
-
64
- assert_equal @jim.valid, "instance valid"
65
- assert_equal @icon.valid, "instance valid"
66
- assert_equal @project.valid, "instance valid"
67
- assert_equal @book.valid, "instance valid"
68
- assert_equal User.valid, "class valid"
69
- assert_equal Icon.valid, "class valid"
70
- assert_equal Project.valid, "class valid"
71
- assert_equal Book.valid, "class valid"
72
- assert_equal @jim.observe, "instance observe"
73
- assert_equal @icon.observe, "instance observe"
74
- assert_equal @project.observe, "instance observe"
75
- assert_equal @book.observe, "instance observe"
76
- assert_equal User.observe, "class observe"
77
- assert_equal Icon.observe, "class observe"
78
- assert_equal Project.observe, "class observe"
79
- assert_equal Book.observe, "class observe"
80
- end
81
-
82
- def respond_test(opt=false)
83
- assert_equal User.respond_to?(:observe),opt
84
- assert_equal User.respond_to?(:valid), opt
85
- assert_equal Icon.respond_to?(:observe), opt
86
- assert_equal Icon.respond_to?(:valid), opt
87
- assert_equal Project.respond_to?(:observe), opt
88
- assert_equal Project.respond_to?(:valid), opt
89
- assert_equal Book.respond_to?(:observe), opt
90
- assert_equal Book.respond_to?(:valid), opt
91
- assert_equal @jim.respond_to?(:observe), opt
92
- assert_equal @jim.respond_to?(:valid), opt
93
- assert_equal @icon.respond_to?(:observe), opt
94
- assert_equal @icon.respond_to?(:valid), opt
95
- assert_equal @project.respond_to?(:observe), opt
96
- assert_equal @project.respond_to?(:valid), opt
97
- assert_equal @book.respond_to?(:observe), opt
98
- assert_equal @book.respond_to?(:valid), opt
99
- end
100
-
101
- end
102
-
103
-
@@ -1,78 +0,0 @@
1
- require File.join(File.dirname(__FILE__),'..','helper')
2
- ModelDivider.divide "User"
3
- User.assign(:name, :email, :gender=>"male", :age=>25)
4
- User.add_timestamps
5
-
6
- CuteKV::Associations::map(User=>:friends)
7
- CuteKV::Associations::map(User=>[:wife,:husband])
8
-
9
- class SerializationTest < Test::Unit::TestCase
10
- def setup
11
- User.clear
12
- @jim = User.create(:name=>"jim")
13
- @jack = User.create(:name=>"jack")
14
- @kame = User.create(:name=>"kame")
15
- @nacy = User.create(:name=>"nancy")
16
- @aaron = User.create(:name=>"aaron")
17
- @rita = User.create(:name=>"rita")
18
- end
19
-
20
- def test_to_json
21
- jim = User.new(:name=>"jim")
22
- assert jim.to_json =~ /"name":"jim"/
23
- end
24
-
25
-
26
- def test_to_json_include_has_many
27
-
28
- @jim.friends << @jack
29
- @jim.friends << @kame
30
- @jim.friends << @nancy
31
-
32
- assert_equal @jim.to_json(:include=>:friends).grep(/kame/).empty?,false
33
- assert_equal @kame.to_json(:include=>:friends).grep(/jim/).empty?,false
34
- assert_equal @jack.to_json(:include=>:friends).grep(/jim/).empty?,false
35
- assert_equal @jim.to_json(:only=>:name),{"name"=>@jim.name}.to_json
36
- assert_equal @jim.to_json(:except=>[:name,:email] ),{"gender"=>@jim.gender, "age"=>@jim.age, "id"=>@jim.id, "created_at"=>@jim.created_at, "updated_at"=>@jim.updated_at}.to_json
37
- end
38
-
39
- def test_array_to_json_include_has_many_this_test_has_some_problem
40
- @jim.friends << @kame
41
- @jim.friends << @jack
42
- @jack.friends << @kame
43
- assert_nothing_raised do
44
- @jim.friends.to_json(:include=>:friends)
45
- end
46
- end
47
-
48
- def test_to_json_include_has_one
49
-
50
- @aaron.wife = @rita
51
-
52
- assert_equal @aaron.to_json(:include=>:wife).grep(/rita/).empty?,false
53
- end
54
-
55
-
56
-
57
-
58
- def test_to_xml
59
- assert @aaron.to_xml
60
- end
61
-
62
- def test_to_xml_include_has_many
63
- @jim.friends << @jack
64
- @jim.friends << @kame
65
- assert_equal @jim.to_xml(:include=>:friends).grep(/jack/).empty?,false
66
- assert_equal @jim.to_xml(:include=>:friends).grep(/kame/).empty?,false
67
- assert_equal @jack.to_xml(:include=>:friends).grep(/jim/).empty?,false
68
- assert_equal @kame.to_xml(:include=>:friends).grep(/jim/).empty?,false
69
- end
70
-
71
- def test_to_xml_include_has_one
72
-
73
- @aaron.wife = @rita
74
- assert_equal @aaron.to_xml(:include=>:wife).grep(/rita/).empty?,false
75
- assert_equal @rita.to_xml(:include=>:husband).grep(/rita/).empty?,false
76
- end
77
-
78
- end
@@ -1,29 +0,0 @@
1
- require File.join(File.dirname(__FILE__),'..','helper')
2
-
3
- class SinguPluralDic < Test::Unit::TestCase
4
-
5
- def setup
6
- end
7
-
8
- def test_singu_plural
9
- assert "books".plural?
10
- assert !"books".singular?
11
- assert "book".singular?
12
- assert !"book".plural?
13
- Dic::SIN_WORDS.add("books")
14
- assert "books".singular?
15
- assert !"books".plural?
16
- Dic::PLU_WORDS.add("books")
17
- assert !"books".singular?
18
- assert "books".plural?
19
- Dic::PLU_WORDS.add("book")
20
- assert !"book".singular?
21
- assert "book".plural?
22
- Dic::SIN_WORDS.add(["book", "dogs"])
23
- assert !"book".plural?
24
- assert "book".singular?
25
- assert "dogs".singular?
26
- assert !"dogs".plural?
27
- end
28
-
29
- end
@@ -1,80 +0,0 @@
1
- require File.join(File.dirname(__FILE__),'..','helper')
2
- ModelDivider.divide "User", "Icon", "Friend", "Project"
3
-
4
- class Symmetry
5
- attr_reader :assos
6
-
7
- def initialize(asso={})
8
- @asso_string = parse(asso)
9
- @assos = @asso_string.split("#")
10
- end
11
-
12
- def mirror(object)
13
- m_o = @assos[@assos.size - 1 - @assos.index(object.to_s)]
14
- m_o = m_o.constantize if object.is_a? Class
15
- m_o = m_o.to_sym if object.is_a? Symbol
16
- m_o
17
- end
18
-
19
- def each
20
- asso = [[@assos[0].constantize, @assos[1].to_sym ],[@assos[-1].constantize, @assos[-2].to_sym]].uniq
21
- asso.each {|a| yield a[0], a[-1]}
22
- end
23
-
24
- private
25
- def parse(asso={})
26
- keys = asso.keys
27
- values = asso.values.flatten
28
- "#{keys[0]}##{values[0]}##{values[-1]}##{keys[-1]}"
29
- end
30
- end
31
-
32
- class SymmetryTest < Test::Unit::TestCase
33
-
34
- def setup
35
- end
36
-
37
- def test_a_new_symmetry
38
- assert wh = Symmetry.new(User=>[:wife, :husband])
39
- assert f = Symmetry.new(User=>:friends)
40
- assert ui = Symmetry.new(User=>:icon, Icon=>:user)
41
- assert up = Symmetry.new(User=>:projects, Project=>:members)
42
- assert_equal wh.mirror(User), User
43
- assert_equal wh.mirror(:wife), :husband
44
- assert_equal wh.mirror(:husband), :wife
45
- assert_equal f.mirror(User), User
46
- assert_equal f.mirror(:friends), :friends
47
- assert_equal ui.mirror(User), Icon
48
- assert_equal ui.mirror(Icon), User
49
- assert_equal ui.mirror(:icon), :user
50
- assert_equal ui.mirror(:user), :icon
51
- assert_equal up.mirror(User), Project
52
- assert_equal up.mirror(Project), User
53
- assert_equal up.mirror(:projects), :members
54
- assert_equal up.mirror(:members), :projects
55
- end
56
-
57
- def test_symmetry_each
58
- assert wh = Symmetry.new(User=>[:wife, :husband])
59
- wh.each {|c, m|
60
- assert_equal c, User
61
- assert [:wife, :husband].include?(m)
62
- }
63
- assert f = Symmetry.new(User=>:friends)
64
- f.each {|c, m|
65
- assert_equal c, User
66
- assert_equal m, :friends
67
- }
68
- assert ui = Symmetry.new(User=>:icon, Icon=>:user)
69
- ui.each {|c, m|
70
- }
71
- assert up = Symmetry.new(User=>:projects, Project=>:members)
72
- up.each {|c, m|
73
- }
74
- end
75
-
76
- end
77
-
78
-
79
-
80
-
@@ -1,65 +0,0 @@
1
- require File.join(File.dirname(__FILE__),'..','helper')
2
- ModelDivider.divide "User", "Icon", "Project", "Book"
3
- User.add_timestamps
4
- Icon.add_timestamps
5
- Project.add_timestamps
6
-
7
- class TimestampTest < Test::Unit::TestCase
8
- def setup
9
- User.clear
10
- Icon.clear
11
- Project.clear
12
- Book.clear
13
- @jim = User.create(:name=>"jim")
14
- @icon = Icon.create(:name=>"flower")
15
- @nonobo = Project.create(:name=>"nonobo")
16
- @ruby = Book.create(:name=>"Ruby")
17
- end
18
-
19
- def test_time_zone
20
- assert_equal User.default_timezone, :utc
21
- assert_equal Icon.default_timezone, :utc
22
- assert_equal Project.default_timezone, :utc
23
- end
24
-
25
- def test_no_timestamp
26
- assert_equal @ruby.respond_to?(:created_at), false
27
- assert_equal @ruby.respond_to?(:updated_at), false
28
- Book.add_timestamps
29
- assert_equal @ruby.respond_to?(:created_at), true
30
- assert_equal @ruby.respond_to?(:updated_at), true
31
- @ruby.save
32
- assert_equal @ruby.created_at.class, DateTime
33
- assert_equal @ruby.updated_at.class, DateTime
34
- end
35
-
36
- def test_created_at
37
- assert_equal @jim.created_at.class, DateTime
38
- assert_equal @icon.created_at.class, DateTime
39
- assert_equal @nonobo.created_at.class, DateTime
40
- jim_created_at = @jim.created_at
41
- jim_updated_at = @jim.updated_at
42
- object_time_test(@jim)
43
- object_time_test(@icon)
44
- object_time_test(@nonobo)
45
- end
46
-
47
-
48
- def object_time_test(object)
49
- created_at = object.send :created_at
50
- updated_at = object.send :updated_at
51
- assert_equal created_at, updated_at
52
- object.save
53
- sleep 2
54
- updated_at2 = object.send :updated_at
55
- created_at2 = object.send :created_at
56
- assert (updated_at2 > updated_at)
57
- assert_equal created_at2, updated_at
58
- assert_equal created_at2, created_at
59
- end
60
-
61
- def test_no_timestamps
62
- end
63
-
64
- end
65
-
@@ -1,74 +0,0 @@
1
- require File.join(File.dirname(__FILE__),'..','helper')
2
- ModelDivider.divide "User", "Account", "Project"
3
- CuteKV::Document::docking(CuteKV::Validations)
4
-
5
- class ValidationsTest < Test::Unit::TestCase
6
-
7
- def setup
8
- User.clear
9
- Account.clear
10
- Project.clear
11
- end
12
-
13
- def test_validates
14
- assert User.respond_to?(:validate)
15
- assert Account.respond_to?(:validate)
16
- assert Project.respond_to?(:validate)
17
- end
18
-
19
- def test_validates_presences
20
- User.class_eval {
21
- validate :name_presences
22
-
23
- def name_presences
24
- self.errors.add(:name, "name not blank") if self.name.blank?
25
- end
26
- }
27
-
28
- @wumin = User.create()
29
- assert @wumin.save.nil?
30
- assert User.find(@wumin.id).nil?
31
- assert_equal @wumin.errors.on(:name), "name not blank"
32
-
33
- end
34
-
35
- def test_validates_uniq
36
- CuteKV::Indexer::map(Account=>:email)
37
- Account.class_eval {
38
- validate :account_should_uniq
39
-
40
- def account_should_uniq
41
- a = Account.find_all_by_email(self.email).first
42
- self.errors.add(:email, "this email has been registered") if a && a.id != self.id
43
- end
44
- }
45
- @jim = Account.new(:name=>'jim', :email=>'jim@nonobo.com')
46
- assert @jim.save
47
- Account.indexes << @jim
48
- assert @jim.save
49
- @jack = Account.new(:name=>'jack', :email=>'jim@nonobo.com')
50
- assert @jack.save.nil?
51
- assert @jack.errors_message_on(:email) == "this email has been registered"
52
- assert Account.find(@jack.id).nil?
53
- end
54
-
55
- def test_validates_length
56
- Project.class_eval {
57
- validate :project_name_should_long_than_8
58
-
59
- def project_name_should_long_than_8
60
- errors.add(:name, "project name is too short") if self.name.length < 8
61
- end
62
- }
63
- nonobo_book = Project.create(:name=>"nonobo book")
64
- assert nonobo_book.save
65
- assert Project.find(nonobo_book.id)
66
- nonobo = Project.create(:name=>"nonobo")
67
- assert nonobo.save.nil?
68
- assert Project.find(nonobo.id).nil?
69
- assert_equal nonobo.errors_message_on(:name), "project name is too short"
70
- end
71
-
72
- end
73
-
74
-
@@ -1,9 +0,0 @@
1
- # LightCloud的配置文件,用于初始化LightCloud
2
-
3
- user:
4
- lookup_one:
5
- - 127.0.0.1:30001
6
- - 127.0.0.1:33001
7
- storage_one:
8
- - 127.0.0.1:20001
9
- - 127.0.0.1:24001
@@ -1,26 +0,0 @@
1
- class Topic < ActiveObject::Base
2
- attribute :title,:content,:create_time,:user_key,:posts
3
-
4
- before_create do |object|
5
- object.create_time = Time.now
6
- end
7
-
8
- validates_presence_of :title,:content
9
-
10
- validate_on_create :title_is_wrong_create
11
-
12
-
13
- def validate_on_create
14
- if content == "Mismatch"
15
- errors.add("title", "is Content Mismatch")
16
- end
17
- end
18
-
19
- def title_is_wrong_create
20
- errors.add("title", "is Wrong Create") if title == "Wrong Create"
21
- end
22
-
23
- def validate_on_update
24
- errors.add("title", "is Wrong Update") if title == "Wrong Update"
25
- end
26
- end