og 0.23.0 → 0.24.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/ProjectInfo +58 -0
  2. data/README +5 -4
  3. data/Rakefile +2 -2
  4. data/doc/AUTHORS +10 -7
  5. data/doc/RELEASES +108 -0
  6. data/lib/og.rb +1 -3
  7. data/lib/og/collection.rb +4 -4
  8. data/lib/og/entity.rb +96 -27
  9. data/lib/og/evolution.rb +78 -0
  10. data/lib/og/manager.rb +29 -32
  11. data/lib/og/mixin/hierarchical.rb +1 -1
  12. data/lib/og/mixin/optimistic_locking.rb +5 -8
  13. data/lib/og/mixin/orderable.rb +15 -2
  14. data/lib/og/mixin/schema_inheritance_base.rb +12 -0
  15. data/lib/og/mixin/taggable.rb +29 -25
  16. data/lib/og/mixin/timestamped.rb +4 -2
  17. data/lib/og/mixin/tree.rb +0 -1
  18. data/lib/og/relation.rb +161 -116
  19. data/lib/og/relation/all.rb +6 -0
  20. data/lib/og/relation/belongs_to.rb +4 -1
  21. data/lib/og/relation/has_many.rb +6 -5
  22. data/lib/og/relation/joins_many.rb +13 -12
  23. data/lib/og/relation/refers_to.rb +3 -3
  24. data/lib/og/store.rb +9 -9
  25. data/lib/og/store/{filesys.rb → alpha/filesys.rb} +0 -0
  26. data/lib/og/store/alpha/kirby.rb +284 -0
  27. data/lib/og/store/{memory.rb → alpha/memory.rb} +2 -0
  28. data/lib/og/store/{sqlserver.rb → alpha/sqlserver.rb} +6 -6
  29. data/lib/og/store/kirby.rb +145 -162
  30. data/lib/og/store/mysql.rb +58 -27
  31. data/lib/og/store/psql.rb +15 -13
  32. data/lib/og/store/sql.rb +136 -135
  33. data/lib/og/store/sqlite.rb +13 -12
  34. data/lib/og/validation.rb +2 -2
  35. data/lib/vendor/kbserver.rb +20 -0
  36. data/lib/vendor/kirbybase.rb +2790 -1601
  37. data/test/og/CONFIG.rb +79 -0
  38. data/test/og/mixin/tc_hierarchical.rb +1 -1
  39. data/test/og/mixin/tc_optimistic_locking.rb +1 -3
  40. data/test/og/mixin/tc_orderable.rb +42 -1
  41. data/test/og/mixin/tc_taggable.rb +1 -1
  42. data/test/og/mixin/tc_timestamped.rb +1 -1
  43. data/test/og/store/tc_filesys.rb +1 -2
  44. data/test/og/tc_delete_all.rb +45 -0
  45. data/test/og/tc_inheritance.rb +10 -38
  46. data/test/og/tc_join.rb +2 -11
  47. data/test/og/tc_multiple.rb +3 -16
  48. data/test/og/tc_override.rb +3 -3
  49. data/test/og/tc_polymorphic.rb +3 -13
  50. data/test/og/tc_relation.rb +8 -6
  51. data/test/og/tc_reverse.rb +2 -11
  52. data/test/og/tc_select.rb +2 -15
  53. data/test/og/tc_store.rb +4 -63
  54. data/test/og/tc_types.rb +1 -2
  55. metadata +80 -77
@@ -0,0 +1,79 @@
1
+ # This file contains og initialization code for all tests.
2
+ # This way you only change the parameters in one file in
3
+ # order to run all the tests for many stores.
4
+ #
5
+ # Current store choices are
6
+ # :mysql :psql :sqlite :kirby :memory
7
+
8
+ # CHANGE THIS TO SETUP MOST TESTS
9
+
10
+ configA = :sqlite
11
+
12
+ # FOR MULTI-TESTS
13
+
14
+ configB = :mysql
15
+
16
+ # SET THIS TO true TO ENABLE EXTRA DEBUG CODE
17
+
18
+ debug = true
19
+
20
+ # TO TEST AGAINST AN INSTALLATION OF OG INSTEAD THIS LOCAL
21
+ # DISTRIBUTION, SET THE FOLLOWING TO true.
22
+
23
+ test_against_installation = false
24
+
25
+
26
+ #--------------------------------------------------------------
27
+ # DO NOT CHANGE ANYTHING BELOW THIS LINE
28
+
29
+ unless test_against_installation
30
+ $:.unshift File.expand_path( File.join( File.dirname(__FILE__), '..', '..', 'lib' ) )
31
+ end
32
+
33
+ $DBG = debug
34
+
35
+ $og_mysql = {
36
+ :destroy => true,
37
+ :store => :mysql,
38
+ :user => 'root',
39
+ :name => 'test',
40
+ # :password => 'navelrulez',
41
+ :socket => '/var/run/mysqld/mysqld.sock'
42
+ }
43
+
44
+ $og_psql = {
45
+ :destroy => true,
46
+ :store => :psql,
47
+ :user => 'postgres',
48
+ :password => 'postgres',
49
+ :name => 'test'
50
+ }
51
+
52
+ $og_sqlite = {
53
+ :destroy => true,
54
+ :store => :sqlite,
55
+ :name => 'test'
56
+ }
57
+
58
+ $og_kirby = {
59
+ :destroy => true,
60
+ :store => :kirby,
61
+ :name => 'test',
62
+ :embedded => true
63
+ }
64
+
65
+ $og_memory = {
66
+ :store => :memory,
67
+ :name => :test,
68
+ :destroy => true
69
+ }
70
+
71
+ # This sets the common global vars to be used by the tests.
72
+
73
+ eval %{
74
+ $og_config1 = $og_config = $og_#{configA}
75
+ $og_config2 = $og_#{configB}
76
+ }
77
+
78
+ # * Tom Sawyer <transfire@gmail.com>
79
+ # * George Moschovitis <gm@navel.gr>
@@ -1,4 +1,4 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
1
+ require File.join(File.dirname(__FILE__), '..', 'CONFIG.rb')
2
2
 
3
3
  require 'test/unit'
4
4
  require 'ostruct'
@@ -1,6 +1,4 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
-
3
- $DBG = true
1
+ require File.join(File.dirname(__FILE__), '..', 'CONFIG.rb')
4
2
 
5
3
  require 'test/unit'
6
4
 
@@ -1,4 +1,4 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
1
+ require File.join(File.dirname(__FILE__), '..', 'CONFIG.rb')
2
2
 
3
3
  require 'test/unit'
4
4
  require 'ostruct'
@@ -6,6 +6,23 @@ require 'ostruct'
6
6
  require 'og'
7
7
  require 'og/mixin/orderable'
8
8
 
9
+ class Playlist
10
+ prop :name, String
11
+ has_many Track
12
+ end
13
+
14
+ class Track
15
+ include Og::Orderable, :scope => :playlist
16
+
17
+ belongs_to Playlist
18
+ prop :name, String
19
+
20
+ def initialize(name, playlist)
21
+ @name = name
22
+ self.playlist = playlist
23
+ end
24
+ end
25
+
9
26
  $og = Og.setup(
10
27
  :store => 'psql',
11
28
  # :store => :memory,
@@ -103,5 +120,29 @@ class TestCaseOgOrderable < Test::Unit::TestCase # :nodoc: all
103
120
 
104
121
  c1.delete!
105
122
  end
123
+
124
+ def track_list
125
+ Track.find(:order => "position").collect { |t| t.name }
126
+ end
127
+
128
+ def test_orderable
129
+ pl = Playlist.create
130
+
131
+ %w{one two three four five six}.each do |n|
132
+ Track.create(n, pl)
133
+ end
134
+
135
+ tr = Track.one(:condition => 'position = 1')
136
+ tr.move_to(4)
137
+ assert_equal(4, tr.position)
138
+
139
+ assert_equal(%w{two three four one five six}, track_list() )
140
+
141
+ tr = Track.one(:condition => 'position = 5')
142
+ tr.move_to(3)
143
+ assert_equal(3, tr.position)
144
+
145
+ assert_equal(%w{two three five four one six}, track_list() )
146
+ end
106
147
 
107
148
  end
@@ -1,4 +1,4 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
1
+ require File.join(File.dirname(__FILE__), '..', 'CONFIG.rb')
2
2
 
3
3
  require 'test/unit'
4
4
  require 'ostruct'
@@ -1,4 +1,4 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
1
+ require File.join(File.dirname(__FILE__), '..', 'CONFIG.rb')
2
2
 
3
3
  require 'test/unit'
4
4
  require 'ostruct'
@@ -1,7 +1,6 @@
1
- $:.unshift File.join(File.dirname(__FILE__), 'lib')
2
1
 
2
+ require File.join(File.dirname(__FILE__), '..', 'CONFIG.rb')
3
3
  require 'test/unit'
4
-
5
4
  require 'og'
6
5
 
7
6
  class TestCaseOgFilesys < Test::Unit::TestCase # :nodoc: all
@@ -0,0 +1,45 @@
1
+ require File.join(File.dirname(__FILE__), 'CONFIG.rb')
2
+
3
+ require "og"
4
+ require "pp"
5
+ require "test/unit"
6
+
7
+ $DBG = true
8
+
9
+ class Playlist
10
+ property :name, String
11
+ has_many :tracks
12
+ end
13
+
14
+ class Track
15
+ property :name, String
16
+ belongs_to Playlist
17
+
18
+ def initialize(playlist)
19
+ self.playlist = playlist
20
+ end
21
+ end
22
+
23
+
24
+ class OgDeleteAll < Test::Unit::TestCase
25
+ def setup
26
+ Og.setup($og_config)
27
+ end
28
+
29
+ def pop
30
+ @pl = Playlist.create
31
+ 5.times do |i|
32
+ Track.create(@pl)
33
+ end
34
+ end
35
+
36
+ def test1
37
+ pop()
38
+ @pl.tracks.delete_all
39
+ assert(Track.all.empty?)
40
+
41
+ pop()
42
+ @pl.tracks.each { |obj| obj.delete }
43
+ assert(Track.all.empty?)
44
+ end
45
+ end
@@ -1,4 +1,4 @@
1
- $:.unshift File.join(File.dirname(__FILE__), 'lib')
1
+ require File.join(File.dirname(__FILE__), 'CONFIG.rb')
2
2
 
3
3
  $DBG = true
4
4
 
@@ -36,6 +36,7 @@ class TC_OgInheritance < Test::Unit::TestCase # :nodoc: all
36
36
 
37
37
  class Car
38
38
  property :name
39
+ belongs_to :admin
39
40
  end
40
41
 
41
42
  class User
@@ -50,45 +51,16 @@ class TC_OgInheritance < Test::Unit::TestCase # :nodoc: all
50
51
  end
51
52
 
52
53
  def test_all
53
- =begin
54
- @og = Og.setup(
55
- :store => :memory,
56
- :name => :test
57
- )
58
- =end
59
- =begin
60
- @og = Og.setup(
61
- :destroy => true,
62
- :store => :sqlite,
63
- :name => 'test'
64
- )
65
- =end
66
- =begin
67
- @og = Og.setup(
68
- :destroy => true,
69
- :store => :psql,
70
- :name => 'test',
71
- :user => 'postgres',
72
- :password => 'navelrulez'
73
- )
74
- =end
75
- #=begin
76
- @og = Og.setup(
77
- :destroy => true,
78
- :store => :mysql,
79
- :name => 'test',
80
- :user => 'root',
81
- :password => 'navelrulez'
82
- )
83
- #=end
84
- assert_equal [Document], Photo.metadata.superclass
85
- assert_equal [Photo, Article], Document.metadata.subclasses
54
+ @og = Og.setup($og_config)
86
55
 
87
- assert Document.metadata.schema_inheritance
56
+ assert_equal Document, Photo.superclass
57
+ assert_equal [Photo, Article], Document.descendents
58
+
59
+ assert Document.ann.this.schema_inheritance
88
60
 
89
61
  # propagate schema_inheritance flag.
90
62
 
91
- assert Photo.metadata.schema_inheritance
63
+ assert Photo.ann.this.schema_inheritance
92
64
 
93
65
  # subclasses reuse the same table.
94
66
 
@@ -123,9 +95,9 @@ class TC_OgInheritance < Test::Unit::TestCase # :nodoc: all
123
95
 
124
96
  articles = Article.all(:limit => 2)
125
97
  assert_equal 2, articles.size
126
-
98
+
127
99
  # Bug report.
128
100
  Admin.create
129
- Admin.create.cars.size
101
+ Admin.create.car
130
102
  end
131
103
  end
@@ -1,4 +1,4 @@
1
- $:.unshift File.join(File.dirname(__FILE__), 'lib')
1
+ require File.join(File.dirname(__FILE__), 'CONFIG.rb')
2
2
 
3
3
  $DBG = true
4
4
 
@@ -35,16 +35,7 @@ class TC_Join < Test::Unit::TestCase # :nodoc: all
35
35
  end
36
36
 
37
37
  def setup
38
- @og = Og.setup(
39
- :destroy => true,
40
- :store => :mysql,
41
- # :store => :sqlite,
42
- # :store => :psql,
43
- # :user => 'postgres',
44
- :user => 'root',
45
- :password => 'navelrulez',
46
- :name => 'test'
47
- )
38
+ @og = Og.setup($og_config)
48
39
  end
49
40
 
50
41
  def test_all
@@ -1,4 +1,4 @@
1
- $:.unshift File.join(File.dirname(__FILE__), 'lib')
1
+ require File.join(File.dirname(__FILE__), 'CONFIG.rb')
2
2
 
3
3
  $DBG = true
4
4
 
@@ -6,21 +6,8 @@ require 'test/unit'
6
6
 
7
7
  require 'og'
8
8
 
9
- $og1 = Og.setup(
10
- :destroy => true,
11
- :store => :mysql,
12
- :user => 'root',
13
- :password => 'navelrulez',
14
- :name => 'test'
15
- )
16
-
17
- $og2 = Og.setup(
18
- :destroy => true,
19
- :store => :psql,
20
- :user => 'postgres',
21
- :password => 'navelrulez',
22
- :name => 'test'
23
- )
9
+ $og1 = Og.setup($og_config1)
10
+ $og2 = Og.setup($og_config2)
24
11
 
25
12
  class TestMultiple < Test::Unit::TestCase # :nodoc: all
26
13
  include Og
@@ -1,7 +1,7 @@
1
- $DBG = true
1
+ require File.join(File.dirname(__FILE__), 'CONFIG.rb')
2
2
 
3
- require 'og'
4
3
  require 'test/unit'
4
+ require 'og'
5
5
 
6
6
  class Book
7
7
  property :title
@@ -24,7 +24,7 @@ class TestOg < Test::Unit::TestCase
24
24
 
25
25
  def setup
26
26
  Og.table_prefix = nil
27
- og = Og.setup(:destroy => true, :store => :sqlite, :name => 'test')
27
+ og = Og.setup($og_config)
28
28
  end
29
29
  end
30
30
 
@@ -1,7 +1,7 @@
1
- $:.unshift File.join(File.dirname(__FILE__), 'lib')
2
1
 
3
- require 'test/unit'
2
+ require File.join(File.dirname(__FILE__), 'CONFIG.rb')
4
3
 
4
+ require 'test/unit'
5
5
  require 'og'
6
6
 
7
7
  class TC_OgPolymorphic < Test::Unit::TestCase # :nodoc: all
@@ -38,17 +38,7 @@ class TC_OgPolymorphic < Test::Unit::TestCase # :nodoc: all
38
38
  end
39
39
 
40
40
  def setup
41
- @og = Og.setup(
42
- =begin
43
- :destroy => true,
44
- :store => :sqlite,
45
- :name => 'test'
46
- =end
47
- :store => :mysql,
48
- :name => 'testreverse',
49
- :user => 'root',
50
- :password => 'navelrulez'
51
- )
41
+ @og = Og.setup($og_config)
52
42
  end
53
43
 
54
44
  def test_all
@@ -1,10 +1,11 @@
1
- $:.unshift File.join(File.dirname(__FILE__), 'lib')
1
+ require File.join(File.dirname(__FILE__), 'CONFIG.rb')
2
2
 
3
3
  require 'test/unit'
4
4
 
5
5
  require 'og'
6
6
  require 'og/relation'
7
7
 
8
+ =begin
8
9
  class TestCaseOgRelation < Test::Unit::TestCase # :nodoc: all
9
10
  include Og
10
11
 
@@ -25,7 +26,7 @@ class TestCaseOgRelation < Test::Unit::TestCase # :nodoc: all
25
26
  end
26
27
  end
27
28
 
28
- def test_all
29
+ def test_all
29
30
  # no-namespace case.
30
31
  rel = User.relation(:dummers)
31
32
  rel.resolve_target
@@ -38,12 +39,12 @@ class TestCaseOgRelation < Test::Unit::TestCase # :nodoc: all
38
39
 
39
40
  # bug: test the no belongs_to case in Article
40
41
 
41
- og = Og.setup(:store => :memory, :name => 'test')
42
+ og = Og.setup($og_config)
42
43
  og.manage_classes
43
44
  end
44
45
 
45
46
  def test_refers_to
46
- og = Og.setup(:store => :memory, :name => 'test')
47
+ og = Og.setup($og_config)
47
48
  og.manage_classes
48
49
 
49
50
  # test refers_to accessor is correctly updated
@@ -54,7 +55,7 @@ class TestCaseOgRelation < Test::Unit::TestCase # :nodoc: all
54
55
  a.active_user = u
55
56
  a.save!
56
57
  assert_equal(u.oid, a.active_user_oid)
57
- assert_equal(u.object_id, a.active_user.object_id)
58
+ # assert_equal(u.object_id, a.active_user.object_id)
58
59
 
59
60
  u2 = User.create("Another user")
60
61
  a.active_user = u2
@@ -71,7 +72,7 @@ class TestCaseOgRelation < Test::Unit::TestCase # :nodoc: all
71
72
 
72
73
  # But forcing enchanted accessor to reload in refers_to.rb helps!
73
74
  a.active_user(true)
74
- assert_equal(u2.object_id, a.active_user.object_id)
75
+ # assert_equal(u2.object_id, a.active_user.object_id)
75
76
  # and just to be sure oids are still correct
76
77
  assert_equal(u2.oid, a.active_user_oid)
77
78
  end
@@ -80,3 +81,4 @@ end
80
81
  class Dummer
81
82
  property :dum, String
82
83
  end
84
+ =end