og 0.31.0 → 0.40.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/doc/{AUTHORS → CONTRIBUTORS} +26 -10
- data/doc/LICENSE +2 -3
- data/doc/RELEASES +56 -7
- data/doc/tutorial.txt +15 -15
- data/lib/glue/cacheable.rb +2 -5
- data/lib/glue/hierarchical.rb +1 -4
- data/lib/glue/optimistic_locking.rb +0 -2
- data/lib/glue/orderable.rb +79 -75
- data/lib/glue/revisable.rb +19 -24
- data/lib/glue/searchable.rb +0 -2
- data/lib/glue/taggable.rb +31 -29
- data/lib/glue/timestamped.rb +4 -2
- data/lib/og.rb +50 -29
- data/lib/og/adapter.rb +19 -0
- data/lib/og/adapter/mysql.rb +212 -0
- data/lib/og/adapter/mysql/override.rb +34 -0
- data/lib/og/adapter/mysql/script.rb +15 -0
- data/lib/og/adapter/mysql/utils.rb +40 -0
- data/lib/og/adapter/postgresql.rb +231 -0
- data/lib/og/adapter/postgresql/override.rb +117 -0
- data/lib/og/adapter/postgresql/script.rb +15 -0
- data/lib/og/adapter/postgresql/utils.rb +35 -0
- data/lib/og/adapter/sqlite.rb +132 -0
- data/lib/og/adapter/sqlite/override.rb +33 -0
- data/lib/og/adapter/sqlite/script.rb +15 -0
- data/lib/og/collection.rb +35 -7
- data/lib/og/{evolution.rb → dump.rb} +4 -5
- data/lib/og/entity.rb +102 -173
- data/lib/og/entity/clone.rb +119 -0
- data/lib/og/errors.rb +0 -2
- data/lib/og/manager.rb +85 -37
- data/lib/og/relation.rb +52 -34
- data/lib/og/relation/belongs_to.rb +0 -2
- data/lib/og/relation/has_many.rb +27 -4
- data/lib/og/relation/joins_many.rb +41 -14
- data/lib/og/relation/many_to_many.rb +10 -0
- data/lib/og/relation/refers_to.rb +22 -5
- data/lib/og/store.rb +80 -86
- data/lib/og/store/sql.rb +710 -713
- data/lib/og/store/sql/evolution.rb +119 -0
- data/lib/og/store/sql/join.rb +155 -0
- data/lib/og/store/sql/utils.rb +149 -0
- data/lib/og/test/assertions.rb +1 -3
- data/lib/og/test/testcase.rb +0 -2
- data/lib/og/types.rb +2 -5
- data/lib/og/validation.rb +6 -9
- data/test/{og/mixin → glue}/tc_hierarchical.rb +3 -13
- data/test/glue/tc_og_paginate.rb +47 -0
- data/test/{og/mixin → glue}/tc_optimistic_locking.rb +2 -12
- data/test/{og/mixin → glue}/tc_orderable.rb +15 -23
- data/test/glue/tc_orderable2.rb +47 -0
- data/test/glue/tc_revisable.rb +3 -3
- data/test/{og/mixin → glue}/tc_taggable.rb +20 -10
- data/test/{og/mixin → glue}/tc_timestamped.rb +2 -12
- data/test/glue/tc_webfile.rb +36 -0
- data/test/og/CONFIG.rb +8 -11
- data/test/og/multi_validations_model.rb +14 -0
- data/test/og/store/tc_filesys.rb +3 -1
- data/test/og/store/tc_kirby.rb +16 -13
- data/test/og/store/tc_sti.rb +11 -11
- data/test/og/store/tc_sti2.rb +79 -0
- data/test/og/tc_build.rb +41 -0
- data/test/og/tc_cacheable.rb +3 -2
- data/test/og/tc_has_many.rb +96 -0
- data/test/og/tc_inheritance.rb +6 -4
- data/test/og/tc_joins_many.rb +93 -0
- data/test/og/tc_multi_validations.rb +5 -7
- data/test/og/tc_multiple.rb +7 -6
- data/test/og/tc_override.rb +13 -7
- data/test/og/tc_primary_key.rb +30 -0
- data/test/og/tc_relation.rb +8 -14
- data/test/og/tc_reldelete.rb +163 -0
- data/test/og/tc_reverse.rb +17 -14
- data/test/og/tc_scoped.rb +3 -11
- data/test/og/tc_setup.rb +13 -11
- data/test/og/tc_store.rb +21 -28
- data/test/og/tc_validation2.rb +2 -2
- data/test/og/tc_validation_loop.rb +17 -15
- metadata +109 -103
- data/INSTALL +0 -91
- data/ProjectInfo +0 -51
- data/README +0 -177
- data/doc/config.txt +0 -28
- data/examples/README +0 -23
- data/examples/mysql_to_psql.rb +0 -71
- data/examples/run.rb +0 -271
- data/lib/glue/tree.rb +0 -218
- data/lib/og/store/alpha/filesys.rb +0 -110
- data/lib/og/store/alpha/memory.rb +0 -295
- data/lib/og/store/alpha/sqlserver.rb +0 -256
- data/lib/og/store/kirby.rb +0 -490
- data/lib/og/store/mysql.rb +0 -415
- data/lib/og/store/psql.rb +0 -875
- data/lib/og/store/sqlite.rb +0 -348
- data/lib/og/store/sqlite2.rb +0 -241
- data/setup.rb +0 -1585
- data/test/og/tc_sti_find.rb +0 -35
| @@ -1,8 +1,22 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), 'CONFIG.rb')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'test/unit'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require 'glue'
         | 
| 6 | 
            +
            require 'glue/validation'
         | 
| 7 | 
            +
            require 'og/validation'
         | 
| 8 | 
            +
             | 
| 1 9 | 
             
            class TC_MultiValidation < Test::Unit::TestCase # :nodoc: all
         | 
| 2 10 | 
             
              class User
         | 
| 11 | 
            +
                include Glue::Validation
         | 
| 12 | 
            +
                
         | 
| 3 13 | 
             
                property :name
         | 
| 4 14 |  | 
| 5 15 | 
             
                validate_value :name
         | 
| 6 16 | 
             
                validate_unique :name
         | 
| 7 17 | 
             
              end
         | 
| 18 | 
            +
              
         | 
| 19 | 
            +
              def test_empty
         | 
| 20 | 
            +
                assert TC_MultiValidation.const_defined?('User')
         | 
| 21 | 
            +
              end
         | 
| 8 22 | 
             
            end
         | 
    
        data/test/og/store/tc_filesys.rb
    CHANGED
    
    | @@ -1,10 +1,11 @@ | |
| 1 | 
            +
            =begin FileSys is currently not available.
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require File.join(File.dirname(__FILE__), '..', 'CONFIG.rb')
         | 
| 2 4 | 
             
            require 'rubygems'
         | 
| 3 5 | 
             
            require 'facets'
         | 
| 4 6 | 
             
            require 'test/unit'
         | 
| 5 7 | 
             
            require 'og'
         | 
| 6 8 |  | 
| 7 | 
            -
            =begin FileSys is currently inaccessible through Og.setup?
         | 
| 8 9 | 
             
            class TestCaseOgFilesys < Test::Unit::TestCase # :nodoc: all
         | 
| 9 10 | 
             
              include Og
         | 
| 10 11 |  | 
| @@ -72,4 +73,5 @@ class TestCaseOgFilesys < Test::Unit::TestCase # :nodoc: all | |
| 72 73 | 
             
              end
         | 
| 73 74 |  | 
| 74 75 | 
             
            end
         | 
| 76 | 
            +
             | 
| 75 77 | 
             
            =end
         | 
    
        data/test/og/store/tc_kirby.rb
    CHANGED
    
    | @@ -1,22 +1,22 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            require 'facets'
         | 
| 3 | 
            -
            require 'test/unit'
         | 
| 4 | 
            -
            require 'og'
         | 
| 1 | 
            +
            =begin KirbyBase is currently not available.
         | 
| 5 2 |  | 
| 6 | 
            -
             | 
| 3 | 
            +
            require File.join(File.dirname(__FILE__), '..', 'CONFIG.rb')
         | 
| 7 4 |  | 
| 8 | 
            -
             | 
| 9 | 
            -
            class TC_Kirby < Test::Unit::TestCase # :nodoc: all
         | 
| 5 | 
            +
            require 'test/unit'
         | 
| 10 6 |  | 
| 11 | 
            -
             | 
| 7 | 
            +
            begin
         | 
| 12 8 |  | 
| 9 | 
            +
            og = Og.setup( :destroy => true, :store => :kirby, :manual_management => true)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            class TC_Kirby < Test::Unit::TestCase # :nodoc: all
         | 
| 12 | 
            +
              
         | 
| 13 13 | 
             
              class Track
         | 
| 14 | 
            -
                 | 
| 14 | 
            +
                attr_accessor :name, String
         | 
| 15 15 | 
             
                belongs_to Disc
         | 
| 16 16 | 
             
              end
         | 
| 17 17 |  | 
| 18 18 | 
             
              class Disc
         | 
| 19 | 
            -
                 | 
| 19 | 
            +
                attr_accessor :name, String
         | 
| 20 20 | 
             
                has_many Track
         | 
| 21 21 | 
             
              end
         | 
| 22 22 |  | 
| @@ -26,11 +26,14 @@ class TC_Kirby < Test::Unit::TestCase # :nodoc: all | |
| 26 26 | 
             
                d = Disc.create
         | 
| 27 27 | 
             
                t = Track.create
         | 
| 28 28 | 
             
                d.tracks << t
         | 
| 29 | 
            -
             | 
| 29 | 
            +
             | 
| 30 30 | 
             
                assert_equal 1, d.tracks.size
         | 
| 31 31 | 
             
              end
         | 
| 32 32 |  | 
| 33 33 | 
             
            end
         | 
| 34 | 
            -
            =end
         | 
| 35 34 |  | 
| 36 | 
            -
             | 
| 35 | 
            +
            rescue LoadError => e
         | 
| 36 | 
            +
              puts 'Skipping Kirby test, adapter not found.'
         | 
| 37 | 
            +
            end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            =end
         | 
    
        data/test/og/store/tc_sti.rb
    CHANGED
    
    | @@ -7,20 +7,20 @@ require 'og/store/sql' | |
| 7 7 |  | 
| 8 8 | 
             
            class TC_Sti < Test::Unit::TestCase
         | 
| 9 9 | 
             
              class StiParent
         | 
| 10 | 
            -
                 | 
| 11 | 
            -
                 | 
| 12 | 
            -
             | 
| 13 | 
            -
                 | 
| 10 | 
            +
                is Og::SchemaInheritanceBase
         | 
| 11 | 
            +
                
         | 
| 12 | 
            +
                property :one, String
         | 
| 13 | 
            +
                property :two, String
         | 
| 14 14 | 
             
              end
         | 
| 15 15 |  | 
| 16 16 | 
             
              class StiChild < StiParent
         | 
| 17 | 
            -
                property :three
         | 
| 17 | 
            +
                property :three, String
         | 
| 18 18 | 
             
              end
         | 
| 19 19 |  | 
| 20 20 | 
             
              $og1.manage_classes(StiParent, StiChild)
         | 
| 21 21 |  | 
| 22 22 | 
             
              def setup
         | 
| 23 | 
            -
                @store =  | 
| 23 | 
            +
                @store = $og1.store
         | 
| 24 24 | 
             
              end
         | 
| 25 25 |  | 
| 26 26 | 
             
              def teardown
         | 
| @@ -56,9 +56,9 @@ end | |
| 56 56 |  | 
| 57 57 | 
             
            class TC_Sti_OgType < Test::Unit::TestCase
         | 
| 58 58 | 
             
              class Human
         | 
| 59 | 
            -
                 | 
| 60 | 
            -
             | 
| 61 | 
            -
                 | 
| 59 | 
            +
                is Og::SchemaInheritanceBase
         | 
| 60 | 
            +
                
         | 
| 61 | 
            +
                property :name, String
         | 
| 62 62 |  | 
| 63 63 | 
             
                def initialize(name)
         | 
| 64 64 | 
             
                  @name = name
         | 
| @@ -66,11 +66,11 @@ class TC_Sti_OgType < Test::Unit::TestCase | |
| 66 66 | 
             
              end
         | 
| 67 67 |  | 
| 68 68 | 
             
              class Parent < Human
         | 
| 69 | 
            -
                property :job
         | 
| 69 | 
            +
                property :job, String
         | 
| 70 70 | 
             
              end
         | 
| 71 71 |  | 
| 72 72 | 
             
              class Child < Human
         | 
| 73 | 
            -
                property :toys
         | 
| 73 | 
            +
                property :toys, String
         | 
| 74 74 | 
             
              end
         | 
| 75 75 |  | 
| 76 76 | 
             
              $og1.manage_classes(Human, Parent, Child)
         | 
| @@ -0,0 +1,79 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), '..', 'CONFIG.rb')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'rubygems'
         | 
| 4 | 
            +
            require 'test/unit'
         | 
| 5 | 
            +
            require 'ostruct'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            require 'og'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            class TC_STI2 < Test::Unit::TestCase
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              class User
         | 
| 12 | 
            +
                is Og::SchemaInheritanceBase
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                property :name, String
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                has_one Login
         | 
| 17 | 
            +
                
         | 
| 18 | 
            +
                # This triggered a bug when called from a subclass
         | 
| 19 | 
            +
                has_many :pets, Pet#, :foreign_name => 'user'
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              class Admin < User
         | 
| 23 | 
            +
                property :admin_praise, String
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              class Login
         | 
| 27 | 
            +
                property :pass, String
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                belongs_to User
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
              
         | 
| 32 | 
            +
              class Pet
         | 
| 33 | 
            +
                property :name, String
         | 
| 34 | 
            +
                
         | 
| 35 | 
            +
                belongs_to User
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
              
         | 
| 38 | 
            +
              def request
         | 
| 39 | 
            +
                o = OpenStruct.new
         | 
| 40 | 
            +
                o.params = {:name => 'George', :pass => 'Secret'}
         | 
| 41 | 
            +
                return o
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
              
         | 
| 44 | 
            +
              $og1.manage_classes User, Login, Admin, Pet
         | 
| 45 | 
            +
              
         | 
| 46 | 
            +
              def setup
         | 
| 47 | 
            +
                @user = Admin.create_with(request.params)
         | 
| 48 | 
            +
                @login = Login.create_with(request.params)
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
              
         | 
| 51 | 
            +
              def teardown
         | 
| 52 | 
            +
                [User, Login, Pet].map {|x| x.delete_all}
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
              
         | 
| 55 | 
            +
              def test_setup
         | 
| 56 | 
            +
                assert_equal 1, User.count
         | 
| 57 | 
            +
                assert_equal 1, Login.count
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
              
         | 
| 60 | 
            +
              def test_assign
         | 
| 61 | 
            +
                @user.login = @login
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
              
         | 
| 64 | 
            +
              def test_has_many
         | 
| 65 | 
            +
                pets = nil
         | 
| 66 | 
            +
                assert_nothing_raised do
         | 
| 67 | 
            +
                  pets = @user.pets.size
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
                
         | 
| 70 | 
            +
                assert_equal 0, pets
         | 
| 71 | 
            +
                
         | 
| 72 | 
            +
                p1 = Pet.create_with(:name => 'Ziza')
         | 
| 73 | 
            +
                
         | 
| 74 | 
            +
                @user.pets << p1
         | 
| 75 | 
            +
                
         | 
| 76 | 
            +
                assert_equal 1, @user.pets(:reload => true).size
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
              
         | 
| 79 | 
            +
            end
         | 
    
        data/test/og/tc_build.rb
    ADDED
    
    | @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), 'CONFIG.rb')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'rubygems'
         | 
| 4 | 
            +
            require 'facets'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            require 'test/unit'
         | 
| 7 | 
            +
            require 'og'
         | 
| 8 | 
            +
            require 'glue/timestamped'
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            class TC_OgAggrCalc < Test::Unit::TestCase # :nodoc: all
         | 
| 11 | 
            +
              include Og
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              class Category
         | 
| 14 | 
            +
                attr_accessor :name, String
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
              
         | 
| 17 | 
            +
              class User
         | 
| 18 | 
            +
                attr_accessor :name, String
         | 
| 19 | 
            +
                joins_many Category
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                def initialize name
         | 
| 22 | 
            +
                  @name = name
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              $og1.manage_classes(User, Category)
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              def test_all
         | 
| 29 | 
            +
                c1 = Category.create_with :name => 'one'
         | 
| 30 | 
            +
                c2 = Category.create_with :name => 'two'
         | 
| 31 | 
            +
                
         | 
| 32 | 
            +
                u = User.new 'gmosx'
         | 
| 33 | 
            +
                u.categories << c1
         | 
| 34 | 
            +
                u.categories << c2
         | 
| 35 | 
            +
                u.save
         | 
| 36 | 
            +
                
         | 
| 37 | 
            +
                g = User[1]
         | 
| 38 | 
            +
                assert_equal 2, g.categories.size
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
              
         | 
| 41 | 
            +
            end
         | 
    
        data/test/og/tc_cacheable.rb
    CHANGED
    
    | @@ -191,7 +191,8 @@ begin | |
| 191 191 | 
             
                  end
         | 
| 192 192 | 
             
                end
         | 
| 193 193 | 
             
              end
         | 
| 194 | 
            -
            rescue  | 
| 195 | 
            -
               | 
| 194 | 
            +
            rescue Errno::ECONNREFUSED => ex # FIXME: Lookup Win32/Linux/BSD error
         | 
| 195 | 
            +
              Logger.warn "skipping memcached test: server not running"
         | 
| 196 | 
            +
              #Logger.warn ex.class # FIXME: remove when all error types listed above
         | 
| 196 197 | 
             
            end
         | 
| 197 198 |  | 
| @@ -0,0 +1,96 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), 'CONFIG.rb')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'rubygems'
         | 
| 4 | 
            +
            require 'facets'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            require 'test/unit'
         | 
| 7 | 
            +
            require 'og'
         | 
| 8 | 
            +
            require 'glue/timestamped'
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            class TC_JoinsMany < Test::Unit::TestCase # :nodoc: all
         | 
| 11 | 
            +
              include Og
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              class Item
         | 
| 14 | 
            +
                property :name, String
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                has_many Tag
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              class Tag
         | 
| 20 | 
            +
                property :name, String
         | 
| 21 | 
            +
                
         | 
| 22 | 
            +
                belongs_to Item
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
              
         | 
| 25 | 
            +
              $og1.manage_classes(Item, Tag)
         | 
| 26 | 
            +
              
         | 
| 27 | 
            +
              def setup
         | 
| 28 | 
            +
                @conn = $og1.conn
         | 
| 29 | 
            +
                
         | 
| 30 | 
            +
                @name = 'George'
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
              
         | 
| 33 | 
            +
              def teardown
         | 
| 34 | 
            +
                Item.delete_all
         | 
| 35 | 
            +
                Tag.delete_all
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
              
         | 
| 38 | 
            +
              def test_assign_with_name
         | 
| 39 | 
            +
                i = Item.create_with(:name => @name)
         | 
| 40 | 
            +
                
         | 
| 41 | 
            +
                assert_equal @name, i.name
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
              
         | 
| 44 | 
            +
              def test_concat
         | 
| 45 | 
            +
                tag = Tag.create_with(:name => 'Nitro')
         | 
| 46 | 
            +
                i = Item.create_with(:name => @name)
         | 
| 47 | 
            +
                
         | 
| 48 | 
            +
                i.tags << tag
         | 
| 49 | 
            +
                
         | 
| 50 | 
            +
                assert_equal 1, i.tags.size
         | 
| 51 | 
            +
                assert_equal tag, i.tags.first
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
              
         | 
| 54 | 
            +
              def test_add
         | 
| 55 | 
            +
                tag = Tag.create_with(:name => 'Facets')
         | 
| 56 | 
            +
                i = Item.create_with(:name => @name)
         | 
| 57 | 
            +
                
         | 
| 58 | 
            +
                i.add_tag tag
         | 
| 59 | 
            +
                
         | 
| 60 | 
            +
                assert_equal 1, i.tags.size
         | 
| 61 | 
            +
                assert_equal tag, i.tags.first
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
              
         | 
| 64 | 
            +
              def test_assign_with_tag
         | 
| 65 | 
            +
                tag = Tag.create_with(:name => 'Nitro')
         | 
| 66 | 
            +
                
         | 
| 67 | 
            +
                assert_not_nil tag.saved?
         | 
| 68 | 
            +
                
         | 
| 69 | 
            +
                i = Item.create_with(:name => @name, :tags => tag)
         | 
| 70 | 
            +
                
         | 
| 71 | 
            +
                assert_not_nil i.saved?
         | 
| 72 | 
            +
                assert_equal tag, i.tags.first
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
              
         | 
| 75 | 
            +
              def test_assign_with_tags
         | 
| 76 | 
            +
                tags = [Tag.create_with(:name => 'Glue'), Tag.create_with(:name => 'Og')]
         | 
| 77 | 
            +
                i = Item.create_with(:name => @name, :tags => tags)
         | 
| 78 | 
            +
                
         | 
| 79 | 
            +
                assert_equal tags, i.tags.to_ary
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
              
         | 
| 82 | 
            +
              def test_assign_with_collection
         | 
| 83 | 
            +
                coll = HasManyCollection.new(
         | 
| 84 | 
            +
                  Item, 
         | 
| 85 | 
            +
                  Tag,
         | 
| 86 | 
            +
                  :add_tag,
         | 
| 87 | 
            +
                  :remove_tag,
         | 
| 88 | 
            +
                  :find_tags,
         | 
| 89 | 
            +
                  :count_tags
         | 
| 90 | 
            +
                )
         | 
| 91 | 
            +
                i = Item.create_with(:name => @name, :tags => coll)
         | 
| 92 | 
            +
                
         | 
| 93 | 
            +
                assert_equal coll, i.instance_variable_get("@tags")
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
              
         | 
| 96 | 
            +
            end
         | 
    
        data/test/og/tc_inheritance.rb
    CHANGED
    
    | @@ -37,7 +37,7 @@ class TC_OgInheritance < Test::Unit::TestCase # :nodoc: all | |
| 37 37 | 
             
              end
         | 
| 38 38 |  | 
| 39 39 | 
             
              class Car
         | 
| 40 | 
            -
                property :name
         | 
| 40 | 
            +
                property :name, String
         | 
| 41 41 | 
             
                belongs_to :admin
         | 
| 42 42 | 
             
              end
         | 
| 43 43 |  | 
| @@ -49,7 +49,7 @@ class TC_OgInheritance < Test::Unit::TestCase # :nodoc: all | |
| 49 49 |  | 
| 50 50 | 
             
              class Admin < User
         | 
| 51 51 | 
             
                property :password, String
         | 
| 52 | 
            -
                has_one Car
         | 
| 52 | 
            +
                #has_one Car
         | 
| 53 53 | 
             
              end
         | 
| 54 54 |  | 
| 55 55 | 
             
              $og1.manage_classes(Document, Article, Document, Photo, Car, User, Admin)
         | 
| @@ -102,7 +102,9 @@ class TC_OgInheritance < Test::Unit::TestCase # :nodoc: all | |
| 102 102 | 
             
                assert_equal 2, articles.size
         | 
| 103 103 |  | 
| 104 104 | 
             
                # Bug report.
         | 
| 105 | 
            -
                Admin | 
| 106 | 
            -
                 | 
| 105 | 
            +
                # This happens when creating a has_one Car in Admin, which is wrong 
         | 
| 106 | 
            +
                # because it overrides the joins_many from User.
         | 
| 107 | 
            +
                #Admin.create
         | 
| 108 | 
            +
                #Admin.create.car
         | 
| 107 109 | 
             
              end
         | 
| 108 110 | 
             
            end
         | 
| @@ -0,0 +1,93 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), 'CONFIG.rb')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'rubygems'
         | 
| 4 | 
            +
            require 'facets'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            require 'test/unit'
         | 
| 7 | 
            +
            require 'og'
         | 
| 8 | 
            +
            require 'glue/timestamped'
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            class TC_JoinsMany < Test::Unit::TestCase # :nodoc: all
         | 
| 11 | 
            +
              include Og
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              class Item
         | 
| 14 | 
            +
                property :name, String
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                joins_many Tag
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def to_s
         | 
| 19 | 
            +
                  @name
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              class Tag
         | 
| 24 | 
            +
                property :name, String
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def to_s
         | 
| 27 | 
            +
                  @name
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
              
         | 
| 31 | 
            +
              def setup
         | 
| 32 | 
            +
                $og1.manage_classes(Item, Tag)
         | 
| 33 | 
            +
                @conn = $og1.conn
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
              
         | 
| 36 | 
            +
              def test_all
         | 
| 37 | 
            +
                (1..3).each do |n|
         | 
| 38 | 
            +
                  t = Tag.new
         | 
| 39 | 
            +
                  t.name = "Tag_#{n}"
         | 
| 40 | 
            +
                  t.save
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
                
         | 
| 43 | 
            +
                assert_equal 3, Tag.all.size
         | 
| 44 | 
            +
                
         | 
| 45 | 
            +
                # see if i can get a tag back from th db
         | 
| 46 | 
            +
                t = Tag.find_by_name("Tag_1")
         | 
| 47 | 
            +
                
         | 
| 48 | 
            +
                assert_not_nil t
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                i1 = Item.new
         | 
| 51 | 
            +
                i1.name = "Item_1"
         | 
| 52 | 
            +
                i1.save
         | 
| 53 | 
            +
                i1.add_tag(Tag.find_by_name("Tag_1"))
         | 
| 54 | 
            +
                i1.add_tag(Tag.find_by_name("Tag_2"))
         | 
| 55 | 
            +
                i1.save
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                i2 = Item.new
         | 
| 58 | 
            +
                i2.name = "Item_2"
         | 
| 59 | 
            +
                i2.save
         | 
| 60 | 
            +
                i2.add_tag(Tag.find_by_name("Tag_2"))
         | 
| 61 | 
            +
                i2.add_tag(Tag.find_by_name("Tag_3"))
         | 
| 62 | 
            +
                i2.save
         | 
| 63 | 
            +
                
         | 
| 64 | 
            +
                # count SQL, note that the join table will change when test class changes
         | 
| 65 | 
            +
                
         | 
| 66 | 
            +
                sql = 'SELECT count(*) FROM ogj_tc_joinsmany_item_tc_joinsmany_tag'
         | 
| 67 | 
            +
                
         | 
| 68 | 
            +
                # after inserting 2 tags into the each of the 2 items, 4 relations
         | 
| 69 | 
            +
                
         | 
| 70 | 
            +
                assert_equal 4, @conn.query(sql).first_value.to_i
         | 
| 71 | 
            +
                
         | 
| 72 | 
            +
                i1.delete(true)
         | 
| 73 | 
            +
                i2.delete(true)
         | 
| 74 | 
            +
                
         | 
| 75 | 
            +
                # after deleting the 2 items, the relations are invalid
         | 
| 76 | 
            +
                
         | 
| 77 | 
            +
                assert_equal 0, @conn.query(sql).first_value.to_i
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                # the following code is new and should not trigger an exception due to
         | 
| 80 | 
            +
                # existing items in the mapping table
         | 
| 81 | 
            +
                
         | 
| 82 | 
            +
                assert_nothing_raised do
         | 
| 83 | 
            +
                  i3 = Item.new
         | 
| 84 | 
            +
                  i3.name = "Item_3"
         | 
| 85 | 
            +
                  i3.save
         | 
| 86 | 
            +
                  i3.add_tag(Tag.find_by_name("Tag_1"))
         | 
| 87 | 
            +
                  i3.add_tag(Tag.find_by_name("Tag_2"))
         | 
| 88 | 
            +
                  i3.save
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
                
         | 
| 91 | 
            +
              end
         | 
| 92 | 
            +
              
         | 
| 93 | 
            +
            end
         |