og 0.27.0 → 0.28.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/ProjectInfo +2 -2
  2. data/README +8 -4
  3. data/Rakefile +1 -1
  4. data/doc/AUTHORS +1 -1
  5. data/doc/RELEASES +81 -0
  6. data/examples/README +7 -0
  7. data/lib/glue/cacheable.rb +152 -0
  8. data/lib/glue/hierarchical.rb +5 -4
  9. data/lib/glue/optimistic_locking.rb +0 -1
  10. data/lib/glue/orderable.rb +46 -44
  11. data/lib/glue/taggable.rb +7 -4
  12. data/lib/glue/timestamped.rb +1 -1
  13. data/lib/og.rb +13 -6
  14. data/lib/og/entity.rb +226 -9
  15. data/lib/og/evolution.rb +2 -2
  16. data/lib/og/ez/clause.rb +147 -0
  17. data/lib/og/ez/condition.rb +181 -0
  18. data/lib/og/manager.rb +31 -30
  19. data/lib/og/relation.rb +5 -5
  20. data/lib/og/relation/has_many.rb +3 -1
  21. data/lib/og/relation/joins_many.rb +1 -1
  22. data/lib/og/store.rb +6 -3
  23. data/lib/og/store/kirby.rb +3 -5
  24. data/lib/og/store/mysql.rb +0 -1
  25. data/lib/og/store/sql.rb +43 -7
  26. data/lib/og/store/sqlite.rb +97 -11
  27. data/lib/og/store/sqlite2.rb +231 -0
  28. data/lib/og/test/testcase.rb +1 -1
  29. data/lib/og/vendor/mysql.rb +103 -25
  30. data/test/glue/tc_revisable.rb +11 -11
  31. data/test/og/CONFIG.rb +20 -8
  32. data/test/og/mixin/tc_hierarchical.rb +5 -3
  33. data/test/og/mixin/tc_optimistic_locking.rb +6 -4
  34. data/test/og/mixin/tc_orderable.rb +22 -22
  35. data/test/og/mixin/tc_taggable.rb +15 -11
  36. data/test/og/mixin/tc_timestamped.rb +4 -2
  37. data/test/og/multi_validations_model.rb +8 -0
  38. data/test/og/store/tc_filesys.rb +15 -12
  39. data/test/og/store/tc_kirby.rb +14 -11
  40. data/test/og/tc_accumulator.rb +1 -3
  41. data/test/og/tc_cacheable.rb +58 -0
  42. data/test/og/tc_delete_all.rb +13 -16
  43. data/test/og/tc_ez.rb +33 -0
  44. data/test/og/tc_finder.rb +2 -4
  45. data/test/og/tc_inheritance.rb +3 -3
  46. data/test/og/tc_inheritance2.rb +2 -3
  47. data/test/og/tc_join.rb +3 -2
  48. data/test/og/tc_multi_validations.rb +3 -3
  49. data/test/og/tc_multiple.rb +3 -6
  50. data/test/og/tc_override.rb +19 -13
  51. data/test/og/tc_polymorphic.rb +1 -3
  52. data/test/og/tc_resolve.rb +32 -0
  53. data/test/og/tc_reverse.rb +27 -28
  54. data/test/og/tc_scoped.rb +2 -4
  55. data/test/og/tc_select.rb +1 -3
  56. data/test/og/tc_store.rb +3 -8
  57. data/test/og/tc_validation.rb +2 -2
  58. data/test/og/tc_validation2.rb +56 -58
  59. data/test/og/tc_validation_loop.rb +2 -5
  60. metadata +15 -7
  61. data/lib/og/vendor/mysql411.rb +0 -306
@@ -5,19 +5,19 @@ require 'test/unit'
5
5
  require 'og'
6
6
  require 'glue/revisable'
7
7
 
8
- class Article
9
- is Revisable
10
- property :body, String, :revisable => true
11
- property :title, String
12
-
13
- def initialize(t, b)
14
- @title, @body = t, b
15
- end
16
- end
8
+ class TestOgRevisable < Test::Unit::TestCase # :nodoc: all
17
9
 
18
- $og = Og.setup($og_config)
10
+ class Article
11
+ is Revisable
12
+ property :body, String, :revisable => true
13
+ property :title, String
14
+
15
+ def initialize(t, b)
16
+ @title, @body = t, b
17
+ end
18
+ end
19
19
 
20
- class TestOgRevisable < Test::Unit::TestCase # :nodoc: all
20
+ $og1.manage_classes(Article)
21
21
 
22
22
  def test_all
23
23
  a = Article.create('hello', 'world')
@@ -15,7 +15,7 @@ configB = :mysql
15
15
 
16
16
  # SET THIS TO true TO ENABLE EXTRA DEBUG CODE
17
17
 
18
- debug = true
18
+ debug = false
19
19
 
20
20
  # TO TEST AGAINST AN INSTALLATION OF OG INSTEAD THIS LOCAL
21
21
  # DISTRIBUTION, SET THE FOLLOWING TO true.
@@ -32,7 +32,7 @@ end
32
32
 
33
33
  $DBG = debug
34
34
 
35
- $og_mysql = {
35
+ og_mysql = {
36
36
  :destroy => true,
37
37
  :store => :mysql,
38
38
  :user => 'root',
@@ -41,7 +41,7 @@ $og_mysql = {
41
41
  # :socket => '/var/run/mysqld/mysqld.sock'
42
42
  }
43
43
 
44
- $og_psql = {
44
+ og_psql = {
45
45
  :destroy => true,
46
46
  :store => :psql,
47
47
  :user => 'postgres',
@@ -49,20 +49,20 @@ $og_psql = {
49
49
  :name => 'test'
50
50
  }
51
51
 
52
- $og_sqlite = {
52
+ og_sqlite = {
53
53
  :destroy => true,
54
54
  :store => :sqlite,
55
55
  :name => 'test'
56
56
  }
57
57
 
58
- $og_kirby = {
58
+ og_kirby = {
59
59
  :destroy => true,
60
60
  :store => :kirby,
61
61
  :name => 'test',
62
62
  :embedded => true
63
63
  }
64
64
 
65
- $og_memory = {
65
+ og_memory = {
66
66
  :store => :memory,
67
67
  :name => :test,
68
68
  :destroy => true
@@ -71,9 +71,21 @@ $og_memory = {
71
71
  # This sets the common global vars to be used by the tests.
72
72
 
73
73
  eval %{
74
- $og_config1 = $og_config = $og_#{configA}
75
- $og_config2 = $og_#{configB}
74
+ @og_config1 = og_config = og_#{configA}
75
+ @og_config2 = og_#{configB}
76
76
  }
77
77
 
78
+ require 'stringio'
79
+ require 'glue'
80
+ require 'glue/logger'
81
+ require 'og'
82
+
83
+ Logger.set(Logger.new(StringIO.new)) unless $DBG
84
+
85
+ Og.thread_safe = false
86
+
87
+ $og1 ||= Og.setup(@og_config1)
88
+ $og2 ||= Og.setup(@og_config2)
89
+
78
90
  # * Tom Sawyer <transfire@gmail.com>
79
91
  # * George Moschovitis <gm@navel.gr>
@@ -8,6 +8,7 @@ require 'ostruct'
8
8
  require 'og'
9
9
  require 'glue/hierarchical'
10
10
 
11
+ =begin
11
12
  $og = Og.setup(
12
13
  :store => 'mysql',
13
14
  :name => 'test',
@@ -15,6 +16,7 @@ $og = Og.setup(
15
16
  :password => 'navelrulez',
16
17
  :destroy => true
17
18
  )
19
+ =end
18
20
 
19
21
  class TC_OgHierarchical < Test::Unit::TestCase # :nodoc: all
20
22
 
@@ -22,7 +24,7 @@ class TC_OgHierarchical < Test::Unit::TestCase # :nodoc: all
22
24
  property :body, String
23
25
  property :create_time, Time
24
26
 
25
- include Og::NestedSets
27
+ include Glue::NestedSets
26
28
 
27
29
  def initialize(body = nil)
28
30
  @body = body
@@ -34,9 +36,9 @@ class TC_OgHierarchical < Test::Unit::TestCase # :nodoc: all
34
36
  end
35
37
  end
36
38
 
37
- def test_all
38
- $og.manage_classes
39
+ $og1.manage_classes Comment
39
40
 
41
+ def test_all
40
42
  root = Comment.create('root')
41
43
  c1 = Comment.new('1')
42
44
  root.add_comment c1
@@ -7,6 +7,7 @@ require 'test/unit'
7
7
  require 'og'
8
8
  require 'glue/optimistic_locking'
9
9
 
10
+ =begin
10
11
  $og = Og.setup(
11
12
  :store => 'psql',
12
13
  :name => 'test',
@@ -14,22 +15,23 @@ $og = Og.setup(
14
15
  :password => 'navelrulez',
15
16
  :destroy => true
16
17
  )
18
+ =end
17
19
 
18
20
  class TC_OgLocking < Test::Unit::TestCase # :nodoc: all
19
21
  include Og
20
22
 
21
23
  class Article
22
24
  property :body, String
23
- include Og::Locking
25
+ include Glue::Locking
24
26
 
25
27
  def initialize(body)
26
28
  @body = body
27
29
  end
28
30
  end
29
31
 
30
- def test_all
31
- $og.manage_classes
32
+ $og1.manage_classes Article
32
33
 
34
+ def test_all
33
35
  Article.create('test')
34
36
 
35
37
  a = Article[1]
@@ -42,7 +44,7 @@ class TC_OgLocking < Test::Unit::TestCase # :nodoc: all
42
44
  end
43
45
 
44
46
  b.body = 'Ooops'
45
- assert_raise(Og::StaleObjectError) do
47
+ assert_raise(Glue::StaleObjectError) do
46
48
  b.update
47
49
  end
48
50
 
@@ -8,23 +8,7 @@ require 'ostruct'
8
8
  require 'og'
9
9
  require 'glue/orderable'
10
10
 
11
- class Playlist
12
- prop :name, String
13
- has_many Track
14
- end
15
-
16
- class Track
17
- include Og::Orderable, :scope => :playlist
18
-
19
- belongs_to Playlist
20
- prop :name, String
21
-
22
- def initialize(name, playlist)
23
- @name = name
24
- self.playlist = playlist
25
- end
26
- end
27
-
11
+ =begin
28
12
  $og = Og.setup(
29
13
  :store => 'psql',
30
14
  # :store => :memory,
@@ -33,11 +17,10 @@ $og = Og.setup(
33
17
  :password => 'navelrulez',
34
18
  :destroy => true
35
19
  )
20
+ =end
36
21
 
37
22
  class TestCaseOgOrderable < Test::Unit::TestCase # :nodoc: all
38
23
 
39
- class Comment; end
40
-
41
24
  class Article
42
25
  property :title, :body, String
43
26
  has_many :comments, Comment, :list => true, :order => 'position DESC'
@@ -51,16 +34,33 @@ class TestCaseOgOrderable < Test::Unit::TestCase # :nodoc: all
51
34
  property :body, String
52
35
  belongs_to :article, Article
53
36
 
54
- include Og::Orderable #, :scope => :article
37
+ is Orderable, :scope => :article
55
38
 
56
39
  def initialize(body = nil)
57
40
  @body = body
58
41
  end
59
42
  end
60
43
 
61
- def test_all
62
- $og.manage_classes
44
+ class Playlist
45
+ prop :name, String
46
+ has_many Track
47
+ end
48
+
49
+ class Track
50
+ prop :name, String
51
+ is Orderable, :scope => :playlist
52
+
53
+ belongs_to Playlist
54
+
55
+ def initialize(name, playlist)
56
+ @name = name
57
+ self.playlist = playlist
58
+ end
59
+ end
63
60
 
61
+ $og1.manage_classes(Article, Comment, Playlist, Track)
62
+
63
+ def test_all
64
64
  a = Article.create('article')
65
65
  a.save
66
66
 
@@ -8,15 +8,7 @@ require 'ostruct'
8
8
  require 'og'
9
9
  require 'glue/taggable'
10
10
 
11
- class Article
12
- property :title, :body, String
13
- is Taggable
14
-
15
- def initialize(title = nil)
16
- @title = title
17
- end
18
- end
19
-
11
+ =begin
20
12
  $og = Og.setup(
21
13
  :store => 'mysql',
22
14
  :name => 'test',
@@ -24,20 +16,32 @@ $og = Og.setup(
24
16
  :password => 'navelrulez',
25
17
  :destroy => true
26
18
  )
19
+ =end
27
20
 
28
21
  class TestOgTaggable < Test::Unit::TestCase # :nodoc: all
29
22
 
23
+ class Article
24
+ property :title, :body, String
25
+ is Taggable
26
+
27
+ def initialize(title = nil)
28
+ @title = title
29
+ end
30
+ end
31
+
32
+ $og1.manage_classes(Article)
33
+
30
34
  def test_all
31
35
  a1 = Article.create('Hello')
32
36
  a1.tag('navel gmosx sexy')
33
37
  a1.save
34
38
 
35
39
  a2 = Article.create('Other')
36
- a2.tag('gmosx', 'rain')
40
+ a2.tag('gmosx rain')
37
41
  a2.save
38
42
 
39
43
  a3 = Article.create('George')
40
- a3.tag('phd', 'name')
44
+ a3.tag('phd name')
41
45
  a3.save
42
46
 
43
47
  assert_equal 3, a1.tags.size
@@ -8,6 +8,7 @@ require 'ostruct'
8
8
  require 'og'
9
9
  require 'glue/timestamped'
10
10
 
11
+ =begin
11
12
  $og = Og.setup(
12
13
  :store => 'psql',
13
14
  :name => 'test',
@@ -15,6 +16,7 @@ $og = Og.setup(
15
16
  :password => 'navelrulez',
16
17
  :destroy => true
17
18
  )
19
+ =end
18
20
 
19
21
  class TestCaseOgTimestamped < Test::Unit::TestCase # :nodoc: all
20
22
 
@@ -27,9 +29,9 @@ class TestCaseOgTimestamped < Test::Unit::TestCase # :nodoc: all
27
29
  end
28
30
  end
29
31
 
30
- def test_all
31
- $og.manage_classes
32
+ $og1.manage_classes Article
32
33
 
34
+ def test_all
33
35
  a = Article.create('article')
34
36
  a.save
35
37
 
@@ -0,0 +1,8 @@
1
+ class TC_MultiValidation < Test::Unit::TestCase # :nodoc: all
2
+ class User
3
+ property :name
4
+
5
+ validate_value :name
6
+ validate_unique :name
7
+ end
8
+ end
@@ -1,14 +1,14 @@
1
-
2
1
  require File.join(File.dirname(__FILE__), '..', 'CONFIG.rb')
3
2
  require 'rubygems'
4
3
  require 'facets'
5
4
  require 'test/unit'
6
5
  require 'og'
7
6
 
7
+ =begin FileSys is currently inaccessible through Og.setup?
8
8
  class TestCaseOgFilesys < Test::Unit::TestCase # :nodoc: all
9
9
  include Og
10
10
 
11
- class Comment; end
11
+ @og = Og.setup(:store => :filesys, :name => 'test')
12
12
 
13
13
  class Article
14
14
  property :body, String
@@ -32,12 +32,14 @@ class TestCaseOgFilesys < Test::Unit::TestCase # :nodoc: all
32
32
  property :name, :name_key => true
33
33
  end
34
34
 
35
- def setup
36
- @og = Og.setup(:store => 'filesys', :name => 'test')
35
+ @og.manage_classes(Article, Comment, User)
36
+
37
+ def self.og
38
+ @og
37
39
  end
38
40
 
39
- def teardown
40
- @og = nil
41
+ def og
42
+ self.class.og
41
43
  end
42
44
 
43
45
  def test_all
@@ -45,19 +47,19 @@ class TestCaseOgFilesys < Test::Unit::TestCase # :nodoc: all
45
47
  # p Article.metadata
46
48
 
47
49
  a1 = Article.new('Article 1')
48
- @og.store.save(a1)
50
+ og.store.save(a1)
49
51
 
50
- a2 = @og.store.load(1, Article)
52
+ a2 = og.store.load(1, Article)
51
53
 
52
54
  assert_equal a1.body, a2.body
53
55
 
54
56
  a3 = Article.new('Article 3')
55
57
  a3.save
56
58
 
57
- @og.store.delete(a3)
59
+ og.store.delete(a3)
58
60
 
59
- assert @og.store.load(1, Article)
60
- assert !@og.store.load(2, Article)
61
+ assert og.store.load(1, Article)
62
+ assert !og.store.load(2, Article)
61
63
 
62
64
  a2.delete
63
65
 
@@ -65,8 +67,9 @@ class TestCaseOgFilesys < Test::Unit::TestCase # :nodoc: all
65
67
  # a.save
66
68
  # a = Article[1]
67
69
 
68
- @og.store.close
70
+ og.store.close
69
71
  # @og.store.class.destroy(@og.options)
70
72
  end
71
73
 
72
74
  end
75
+ =end
@@ -3,22 +3,24 @@ require 'facets'
3
3
  require 'test/unit'
4
4
  require 'og'
5
5
 
6
- $DBG = true
6
+ # $DBG = true
7
7
 
8
- class Track
9
- prop_accessor :name, String
10
- belongs_to Disc
11
- end
8
+ =begin
9
+ class TC_Kirby < Test::Unit::TestCase # :nodoc: all
12
10
 
13
- class Disc
14
- prop_accessor :name, String
15
- has_many Track
16
- end
11
+ og = Og.setup( :destroy => true, :store => :kirby, :manual_management => true)
17
12
 
18
- Og.setup( :destroy => true, :store => :kirby )
13
+ class Track
14
+ prop_accessor :name, String
15
+ belongs_to Disc
16
+ end
19
17
 
18
+ class Disc
19
+ prop_accessor :name, String
20
+ has_many Track
21
+ end
20
22
 
21
- class TC_Kirby < Test::Unit::TestCase # :nodoc: all
23
+ og.manage_classes(Track, Disc)
22
24
 
23
25
  def test_all
24
26
  d = Disc.create
@@ -29,5 +31,6 @@ class TC_Kirby < Test::Unit::TestCase # :nodoc: all
29
31
  end
30
32
 
31
33
  end
34
+ =end
32
35
 
33
36
  # * Guillaume Pierronnet <guillaume.pierronnet@gmail.com>