og 0.27.0 → 0.28.0
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/ProjectInfo +2 -2
- data/README +8 -4
- data/Rakefile +1 -1
- data/doc/AUTHORS +1 -1
- data/doc/RELEASES +81 -0
- data/examples/README +7 -0
- data/lib/glue/cacheable.rb +152 -0
- data/lib/glue/hierarchical.rb +5 -4
- data/lib/glue/optimistic_locking.rb +0 -1
- data/lib/glue/orderable.rb +46 -44
- data/lib/glue/taggable.rb +7 -4
- data/lib/glue/timestamped.rb +1 -1
- data/lib/og.rb +13 -6
- data/lib/og/entity.rb +226 -9
- data/lib/og/evolution.rb +2 -2
- data/lib/og/ez/clause.rb +147 -0
- data/lib/og/ez/condition.rb +181 -0
- data/lib/og/manager.rb +31 -30
- data/lib/og/relation.rb +5 -5
- data/lib/og/relation/has_many.rb +3 -1
- data/lib/og/relation/joins_many.rb +1 -1
- data/lib/og/store.rb +6 -3
- data/lib/og/store/kirby.rb +3 -5
- data/lib/og/store/mysql.rb +0 -1
- data/lib/og/store/sql.rb +43 -7
- data/lib/og/store/sqlite.rb +97 -11
- data/lib/og/store/sqlite2.rb +231 -0
- data/lib/og/test/testcase.rb +1 -1
- data/lib/og/vendor/mysql.rb +103 -25
- data/test/glue/tc_revisable.rb +11 -11
- data/test/og/CONFIG.rb +20 -8
- data/test/og/mixin/tc_hierarchical.rb +5 -3
- data/test/og/mixin/tc_optimistic_locking.rb +6 -4
- data/test/og/mixin/tc_orderable.rb +22 -22
- data/test/og/mixin/tc_taggable.rb +15 -11
- data/test/og/mixin/tc_timestamped.rb +4 -2
- data/test/og/multi_validations_model.rb +8 -0
- data/test/og/store/tc_filesys.rb +15 -12
- data/test/og/store/tc_kirby.rb +14 -11
- data/test/og/tc_accumulator.rb +1 -3
- data/test/og/tc_cacheable.rb +58 -0
- data/test/og/tc_delete_all.rb +13 -16
- data/test/og/tc_ez.rb +33 -0
- data/test/og/tc_finder.rb +2 -4
- data/test/og/tc_inheritance.rb +3 -3
- data/test/og/tc_inheritance2.rb +2 -3
- data/test/og/tc_join.rb +3 -2
- data/test/og/tc_multi_validations.rb +3 -3
- data/test/og/tc_multiple.rb +3 -6
- data/test/og/tc_override.rb +19 -13
- data/test/og/tc_polymorphic.rb +1 -3
- data/test/og/tc_resolve.rb +32 -0
- data/test/og/tc_reverse.rb +27 -28
- data/test/og/tc_scoped.rb +2 -4
- data/test/og/tc_select.rb +1 -3
- data/test/og/tc_store.rb +3 -8
- data/test/og/tc_validation.rb +2 -2
- data/test/og/tc_validation2.rb +56 -58
- data/test/og/tc_validation_loop.rb +2 -5
- metadata +15 -7
- data/lib/og/vendor/mysql411.rb +0 -306
data/test/glue/tc_revisable.rb
CHANGED
@@ -5,19 +5,19 @@ require 'test/unit'
|
|
5
5
|
require 'og'
|
6
6
|
require 'glue/revisable'
|
7
7
|
|
8
|
-
class
|
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
|
-
|
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
|
-
|
20
|
+
$og1.manage_classes(Article)
|
21
21
|
|
22
22
|
def test_all
|
23
23
|
a = Article.create('hello', 'world')
|
data/test/og/CONFIG.rb
CHANGED
@@ -15,7 +15,7 @@ configB = :mysql
|
|
15
15
|
|
16
16
|
# SET THIS TO true TO ENABLE EXTRA DEBUG CODE
|
17
17
|
|
18
|
-
debug =
|
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
|
-
|
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
|
-
|
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
|
-
|
52
|
+
og_sqlite = {
|
53
53
|
:destroy => true,
|
54
54
|
:store => :sqlite,
|
55
55
|
:name => 'test'
|
56
56
|
}
|
57
57
|
|
58
|
-
|
58
|
+
og_kirby = {
|
59
59
|
:destroy => true,
|
60
60
|
:store => :kirby,
|
61
61
|
:name => 'test',
|
62
62
|
:embedded => true
|
63
63
|
}
|
64
64
|
|
65
|
-
|
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
|
-
|
75
|
-
|
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
|
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
|
-
|
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
|
25
|
+
include Glue::Locking
|
24
26
|
|
25
27
|
def initialize(body)
|
26
28
|
@body = body
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
30
|
-
|
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(
|
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
|
-
|
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
|
-
|
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
|
-
|
62
|
-
|
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
|
-
|
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
|
40
|
+
a2.tag('gmosx rain')
|
37
41
|
a2.save
|
38
42
|
|
39
43
|
a3 = Article.create('George')
|
40
|
-
a3.tag('phd
|
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
|
-
|
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
|
|
data/test/og/store/tc_filesys.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
36
|
-
|
35
|
+
@og.manage_classes(Article, Comment, User)
|
36
|
+
|
37
|
+
def self.og
|
38
|
+
@og
|
37
39
|
end
|
38
40
|
|
39
|
-
def
|
40
|
-
|
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
|
-
|
50
|
+
og.store.save(a1)
|
49
51
|
|
50
|
-
a2 =
|
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
|
-
|
59
|
+
og.store.delete(a3)
|
58
60
|
|
59
|
-
assert
|
60
|
-
assert
|
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
|
-
|
70
|
+
og.store.close
|
69
71
|
# @og.store.class.destroy(@og.options)
|
70
72
|
end
|
71
73
|
|
72
74
|
end
|
75
|
+
=end
|
data/test/og/store/tc_kirby.rb
CHANGED
@@ -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
|
-
|
9
|
-
|
10
|
-
belongs_to Disc
|
11
|
-
end
|
8
|
+
=begin
|
9
|
+
class TC_Kirby < Test::Unit::TestCase # :nodoc: all
|
12
10
|
|
13
|
-
|
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
|
-
|
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
|
-
|
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>
|