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
@@ -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')