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.
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
@@ -25,9 +25,7 @@ class TC_OgPolymorphic < Test::Unit::TestCase # :nodoc: all
25
25
  belongs_to Bar
26
26
  end
27
27
 
28
- def setup
29
- @og = Og.setup($og_config)
30
- end
28
+ $og1.manage_classes(Foo, Bar, Foobar)
31
29
 
32
30
  def test_all
33
31
  2.times{|i|
@@ -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
@@ -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 Playlist
12
- property :name, String
13
- has_many :tracks
14
- end
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
- class OgDeleteAll < Test::Unit::TestCase
27
- def setup
28
- Og.setup($og_config)
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|
@@ -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
@@ -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
- def setup
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')
@@ -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
 
@@ -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
@@ -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($0), 'multi_validations_model.rb')
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
@@ -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?(Og::MysqlStore)
40
- assert User.ogmanager.store.is_a?(Og::PsqlStore)
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')
@@ -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
- class Person
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 setup
28
- Og.table_prefix = nil
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>
@@ -39,9 +39,7 @@ class TC_OgPolymorphic < Test::Unit::TestCase # :nodoc: all
39
39
  end
40
40
  end
41
41
 
42
- def setup
43
- @og = Og.setup($og_config)
44
- end
42
+ $og1.manage_classes(Comment, Article, User)
45
43
 
46
44
  def test_all
47
45
  u = User.create('gmosx')
@@ -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
@@ -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
- $og.store.exec "create table my_users (thename VARCHAR(32) PRIMARY KEY, password TEXT, age3 INTEGER);"
17
- $og.store.exec "create table my_comments (cid MEDIUMINT NOT NULL AUTO_INCREMENT, body TEXT, user VARCHAR(32), PRIMARY KEY(cid));"
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 User
20
- property :name, String, :field => :thename, :uniq => true
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
- def initialize(name, password, age)
28
- @name, @password, @age = name, password, age
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
- property :cid, Fixnum
34
- property :body, String
35
- belongs_to User, :field => :user
36
- set_table :my_comments
37
- set_primary_key :cid
38
-
39
- def initialize(body)
40
- @body = body
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
- $og.manage_classes
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.find_by_age(25).first
58
+ helen = User.find_all_by_age(25).first
60
59
  assert_equal 'Helen', helen.name
61
60
 
62
61
  c = Comment.new('hello')
@@ -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
- def setup
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')