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/og/tc_accumulator.rb
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'CONFIG.rb')
|
2
|
+
|
3
|
+
$DBG = true
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'facets'
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
require 'og'
|
10
|
+
require 'glue/cacheable'
|
11
|
+
require 'glue/cache/memory'
|
12
|
+
#require 'glue/cache/drb'
|
13
|
+
|
14
|
+
class TC_Cacheable < Test::Unit::TestCase # :nodoc: all
|
15
|
+
include Glue
|
16
|
+
|
17
|
+
class User
|
18
|
+
is Cacheable
|
19
|
+
|
20
|
+
property :name, String
|
21
|
+
property :age, Fixnum
|
22
|
+
end
|
23
|
+
|
24
|
+
def setup
|
25
|
+
@og = Og.start
|
26
|
+
@og.cache = MemoryCache.new
|
27
|
+
# @og.cache = DrbCache.new(:address => Og.cache_address, :port => Og.cache_port)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_all
|
31
|
+
User.create_with :name => 'George'
|
32
|
+
User.create_with :name => 'Stella'
|
33
|
+
|
34
|
+
u = User[1]
|
35
|
+
|
36
|
+
assert_equal 'George', u.name
|
37
|
+
|
38
|
+
# Comes from the cache.
|
39
|
+
|
40
|
+
u = User[1]
|
41
|
+
u = User[1]
|
42
|
+
u = User[1]
|
43
|
+
|
44
|
+
assert_equal u, @og.cache.get(u.og_cache_key)
|
45
|
+
|
46
|
+
u.name = 'Hello'
|
47
|
+
u.save
|
48
|
+
|
49
|
+
u = User[1]
|
50
|
+
u = User[1]
|
51
|
+
|
52
|
+
assert_equal u.name, @og.cache.get(u.og_cache_key).name
|
53
|
+
|
54
|
+
u.delete
|
55
|
+
User.delete(2)
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
data/test/og/tc_delete_all.rb
CHANGED
@@ -6,28 +6,25 @@ require "og"
|
|
6
6
|
require "pp"
|
7
7
|
require "test/unit"
|
8
8
|
|
9
|
-
$DBG = true
|
9
|
+
# $DBG = true
|
10
10
|
|
11
|
-
class
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
class Track
|
17
|
-
property :name, String
|
18
|
-
belongs_to Playlist
|
19
|
-
|
20
|
-
def initialize(playlist)
|
21
|
-
self.playlist = playlist
|
11
|
+
class OgDeleteAll < Test::Unit::TestCase
|
12
|
+
class Playlist
|
13
|
+
property :name, String
|
14
|
+
has_many :tracks
|
22
15
|
end
|
23
|
-
end
|
24
16
|
|
17
|
+
class Track
|
18
|
+
property :name, String
|
19
|
+
belongs_to Playlist
|
25
20
|
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
def initialize(playlist)
|
22
|
+
self.playlist = playlist
|
23
|
+
end
|
29
24
|
end
|
30
25
|
|
26
|
+
$og1.manage_classes Playlist, Track
|
27
|
+
|
31
28
|
def pop
|
32
29
|
@pl = Playlist.create
|
33
30
|
5.times do |i|
|
data/test/og/tc_ez.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'CONFIG.rb')
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
require 'og'
|
7
|
+
|
8
|
+
class TC_ResolveOptions < Test::Unit::TestCase # :nodoc: all
|
9
|
+
|
10
|
+
class User
|
11
|
+
property :name, String
|
12
|
+
property :age, Fixnum
|
13
|
+
end
|
14
|
+
|
15
|
+
$og1.manage_classes(User)
|
16
|
+
|
17
|
+
def test_all
|
18
|
+
User.create_with :name => 'George', :age => 14
|
19
|
+
User.create_with :name => 'Renos', :age => 20
|
20
|
+
User.create_with :name => 'Stella', :age => 23
|
21
|
+
|
22
|
+
users = User.find do |user|
|
23
|
+
user.age > 10
|
24
|
+
user.any {
|
25
|
+
name == 'George'
|
26
|
+
name == 'Stella'
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
assert_equal 2, users.size
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
data/test/og/tc_finder.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'CONFIG.rb')
|
2
2
|
|
3
|
-
$DBG = true
|
3
|
+
# $DBG = true
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'facets'
|
@@ -16,9 +16,7 @@ class TC_OgFinder < Test::Unit::TestCase # :nodoc: all
|
|
16
16
|
property :father, String
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
@og = Og.setup($og_config)
|
21
|
-
end
|
19
|
+
$og1.manage_classes User
|
22
20
|
|
23
21
|
def test_all
|
24
22
|
User.find_by_name('tml')
|
data/test/og/tc_inheritance.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'CONFIG.rb')
|
2
2
|
|
3
|
-
$DBG = true
|
3
|
+
# $DBG = true
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'facets'
|
@@ -52,9 +52,9 @@ class TC_OgInheritance < Test::Unit::TestCase # :nodoc: all
|
|
52
52
|
has_one Car
|
53
53
|
end
|
54
54
|
|
55
|
+
$og1.manage_classes(Document, Article, Document, Photo, Car, User, Admin)
|
56
|
+
|
55
57
|
def test_all
|
56
|
-
@og = Og.setup($og_config)
|
57
|
-
|
58
58
|
assert_equal Document, Photo.superclass
|
59
59
|
assert_equal [Photo, Article], Document.descendents
|
60
60
|
|
data/test/og/tc_inheritance2.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'CONFIG.rb')
|
2
2
|
|
3
|
-
$DBG = true
|
3
|
+
# $DBG = true
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'facets'
|
@@ -24,10 +24,9 @@ class TC_OgInheritance2 < Test::Unit::TestCase # :nodoc: all
|
|
24
24
|
property :kaka, String
|
25
25
|
end
|
26
26
|
|
27
|
+
$og1.manage_classes(Project, FProject, DProject)
|
27
28
|
|
28
29
|
def test_all
|
29
|
-
@og = Og.setup($og_config)
|
30
|
-
|
31
30
|
Project.create
|
32
31
|
FProject.create
|
33
32
|
DProject.create
|
data/test/og/tc_join.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'CONFIG.rb')
|
2
2
|
|
3
|
-
$DBG = true
|
3
|
+
# $DBG = true
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'facets'
|
@@ -36,8 +36,9 @@ class TC_Join < Test::Unit::TestCase # :nodoc: all
|
|
36
36
|
has_one Category
|
37
37
|
end
|
38
38
|
|
39
|
+
$og1.manage_classes(Category, Article, ArticleToCategory)
|
40
|
+
|
39
41
|
def setup
|
40
|
-
@og = Og.setup($og_config)
|
41
42
|
end
|
42
43
|
|
43
44
|
def test_all
|
@@ -9,11 +9,11 @@ require 'glue/validation'
|
|
9
9
|
class TC_MultiValidation < Test::Unit::TestCase # :nodoc: all
|
10
10
|
|
11
11
|
def test_all
|
12
|
-
file = File.join(File.dirname(
|
12
|
+
file = File.join(File.expand_path(File.dirname(__FILE__)), 'multi_validations_model.rb')
|
13
13
|
load file
|
14
|
-
assert_equal 2, User.validations.size
|
14
|
+
assert_equal 2, TC_MultiValidation::User.validations.size
|
15
15
|
load file
|
16
|
-
assert_equal 2, User.validations.size
|
16
|
+
assert_equal 2, TC_MultiValidation::User.validations.size
|
17
17
|
end
|
18
18
|
|
19
19
|
end
|
data/test/og/tc_multiple.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'CONFIG.rb')
|
2
2
|
|
3
|
-
$DBG = true
|
3
|
+
# $DBG = true
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'facets'
|
@@ -8,9 +8,6 @@ require 'test/unit'
|
|
8
8
|
|
9
9
|
require 'og'
|
10
10
|
|
11
|
-
$og1 = Og.setup($og_config1)
|
12
|
-
$og2 = Og.setup($og_config2)
|
13
|
-
|
14
11
|
class TestMultiple < Test::Unit::TestCase # :nodoc: all
|
15
12
|
include Og
|
16
13
|
|
@@ -36,8 +33,8 @@ class TestMultiple < Test::Unit::TestCase # :nodoc: all
|
|
36
33
|
$og1.manage_class Article
|
37
34
|
$og2.manage_class User
|
38
35
|
|
39
|
-
assert Article.ogmanager.store.is_a?(
|
40
|
-
assert User.ogmanager.store.is_a?(
|
36
|
+
assert Article.ogmanager.store.is_a?($og1.store.class)
|
37
|
+
assert User.ogmanager.store.is_a?($og2.store.class)
|
41
38
|
|
42
39
|
a1 = Article.create('hello')
|
43
40
|
a2 = Article.create('world')
|
data/test/og/tc_override.rb
CHANGED
@@ -3,31 +3,37 @@ require File.join(File.dirname(__FILE__), 'CONFIG.rb')
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'facets'
|
5
5
|
require 'test/unit'
|
6
|
-
require 'og'
|
7
|
-
|
8
|
-
class Book
|
9
|
-
property :title
|
10
|
-
belongs_to :owner, Person # this creates a problem?
|
11
|
-
end
|
12
6
|
|
13
|
-
|
14
|
-
property :name, Og::VarChar(128)
|
15
|
-
has_many :books, Book, :foreign_name => :owner
|
16
|
-
end
|
7
|
+
require 'og'
|
17
8
|
|
18
9
|
class TestOg < Test::Unit::TestCase
|
19
10
|
include Og
|
20
11
|
|
12
|
+
class Book
|
13
|
+
property :title
|
14
|
+
belongs_to :owner, Person # this creates a problem?
|
15
|
+
end
|
16
|
+
|
17
|
+
class Person
|
18
|
+
property :name, Og::VarChar(128)
|
19
|
+
has_many :books, Book, :foreign_name => :owner
|
20
|
+
end
|
21
|
+
|
22
|
+
def setup
|
23
|
+
Og.table_prefix = nil
|
24
|
+
og = Og.start
|
25
|
+
end
|
26
|
+
|
21
27
|
def test_basic
|
22
28
|
book = Book.create
|
23
29
|
person = Person.create
|
24
30
|
person.books << book
|
25
31
|
end
|
26
32
|
|
27
|
-
def
|
28
|
-
Og.table_prefix
|
29
|
-
og = Og.setup($og_config)
|
33
|
+
def test_not_an_exact_duplicate
|
34
|
+
# This is supposed to test Og.table_prefix, see setup below.
|
30
35
|
end
|
36
|
+
|
31
37
|
end
|
32
38
|
|
33
39
|
# * Kristof Jozsa <dyn@ond.vein.hu>
|
data/test/og/tc_polymorphic.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'CONFIG.rb')
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
require 'og'
|
7
|
+
|
8
|
+
class TC_ResolveOptions < Test::Unit::TestCase # :nodoc: all
|
9
|
+
|
10
|
+
class User
|
11
|
+
property :name, String
|
12
|
+
property :age, Fixnum
|
13
|
+
end
|
14
|
+
|
15
|
+
$og1.manage_classes(User)
|
16
|
+
|
17
|
+
def test_all
|
18
|
+
User.create_with :name => 'George', :age => 30
|
19
|
+
User.create_with :name => 'Gogo', :age => 10
|
20
|
+
User.create_with :name => 'Stella'
|
21
|
+
|
22
|
+
users = User.find [ "name LIKE ? AND age > ?", 'G%', 4 ]
|
23
|
+
assert_equal 2, users.size
|
24
|
+
|
25
|
+
users = User.find [ "name LIKE ? AND age > ?", 'G%', 14 ]
|
26
|
+
assert_equal 1, users.size
|
27
|
+
|
28
|
+
User.find "name LIKE 'G%' LIMIT 1"
|
29
|
+
assert_equal 1, users.size
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/test/og/tc_reverse.rb
CHANGED
@@ -9,43 +9,42 @@ require 'og'
|
|
9
9
|
# reverse engineering features allows us to map any schema
|
10
10
|
# to our objects.
|
11
11
|
|
12
|
-
$og = Og.setup($og_config)
|
13
12
|
|
14
13
|
# create a 'legacy' schema.
|
15
14
|
|
16
|
-
$
|
17
|
-
$
|
15
|
+
$og2.store.exec "create table my_users (thename VARCHAR(32) PRIMARY KEY, password TEXT, age3 INTEGER);"
|
16
|
+
$og2.store.exec "create table my_comments (cid MEDIUMINT NOT NULL AUTO_INCREMENT, body TEXT, user VARCHAR(32), PRIMARY KEY(cid));"
|
18
17
|
|
19
|
-
class
|
20
|
-
|
21
|
-
property :password, String
|
22
|
-
property :age, Fixnum, :field => :age3
|
23
|
-
has_many Comment, :foreign_field => :user
|
24
|
-
set_table :my_users
|
25
|
-
set_primary_key :name, String
|
18
|
+
class TestReverse < Test::Unit::TestCase # :nodoc: all
|
19
|
+
include Og
|
26
20
|
|
27
|
-
|
28
|
-
|
21
|
+
class User
|
22
|
+
property :name, String, :field => :thename, :uniq => true
|
23
|
+
property :password, String
|
24
|
+
property :age, Fixnum, :field => :age3
|
25
|
+
has_many Comment, :foreign_field => :user
|
26
|
+
set_table :my_users
|
27
|
+
set_primary_key :name, String
|
28
|
+
|
29
|
+
def initialize(name, password, age)
|
30
|
+
@name, @password, @age = name, password, age
|
31
|
+
end
|
29
32
|
end
|
30
|
-
end
|
31
33
|
|
32
|
-
class Comment
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
class Comment
|
35
|
+
property :cid, Fixnum
|
36
|
+
property :body, String
|
37
|
+
belongs_to User, :field => :user
|
38
|
+
set_table :my_comments
|
39
|
+
set_primary_key :cid
|
40
|
+
|
41
|
+
def initialize(body)
|
42
|
+
@body = body
|
43
|
+
end
|
41
44
|
end
|
42
|
-
end
|
43
45
|
|
44
|
-
$
|
46
|
+
$og2.manage_classes(User, Comment)
|
45
47
|
|
46
|
-
class TestReverse < Test::Unit::TestCase # :nodoc: all
|
47
|
-
include Og
|
48
|
-
|
49
48
|
def test_all
|
50
49
|
assert_equal 'my_users', User.table
|
51
50
|
assert_equal 'my_comments', Comment.table
|
@@ -56,7 +55,7 @@ class TestReverse < Test::Unit::TestCase # :nodoc: all
|
|
56
55
|
gmosx = User.find_by_name('gmosx')
|
57
56
|
assert_equal 'gmosx', gmosx.name
|
58
57
|
|
59
|
-
helen = User.
|
58
|
+
helen = User.find_all_by_age(25).first
|
60
59
|
assert_equal 'Helen', helen.name
|
61
60
|
|
62
61
|
c = Comment.new('hello')
|
data/test/og/tc_scoped.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'CONFIG.rb')
|
2
2
|
|
3
|
-
$DBG = true
|
3
|
+
# $DBG = true
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'facets'
|
@@ -28,9 +28,7 @@ class TC_OgScoped < Test::Unit::TestCase # :nodoc: all
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
@og = Og.setup($og_config)
|
33
|
-
end
|
31
|
+
$og1.manage_classes(User, Article)
|
34
32
|
|
35
33
|
def test_all
|
36
34
|
u = User.create('tml')
|