activerecord 1.1.0 → 1.2.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.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- data/CHANGELOG +250 -0
 - data/README +17 -9
 - data/dev-utils/eval_debugger.rb +1 -1
 - data/install.rb +3 -1
 - data/lib/active_record.rb +9 -2
 - data/lib/active_record/acts/list.rb +178 -0
 - data/lib/active_record/acts/tree.rb +44 -0
 - data/lib/active_record/associations.rb +45 -8
 - data/lib/active_record/associations/association_collection.rb +18 -9
 - data/lib/active_record/associations/has_and_belongs_to_many_association.rb +14 -13
 - data/lib/active_record/associations/has_many_association.rb +21 -12
 - data/lib/active_record/base.rb +137 -37
 - data/lib/active_record/callbacks.rb +30 -25
 - data/lib/active_record/connection_adapters/abstract_adapter.rb +57 -33
 - data/lib/active_record/connection_adapters/mysql_adapter.rb +4 -0
 - data/lib/active_record/connection_adapters/sqlite_adapter.rb +3 -2
 - data/lib/active_record/connection_adapters/sqlserver_adapter.rb +298 -0
 - data/lib/active_record/fixtures.rb +241 -147
 - data/lib/active_record/support/class_inheritable_attributes.rb +5 -2
 - data/lib/active_record/support/inflector.rb +13 -12
 - data/lib/active_record/support/misc.rb +6 -0
 - data/lib/active_record/timestamp.rb +33 -0
 - data/lib/active_record/transactions.rb +1 -1
 - data/lib/active_record/validations.rb +294 -16
 - data/rakefile +3 -7
 - data/test/abstract_unit.rb +1 -4
 - data/test/associations_test.rb +17 -4
 - data/test/base_test.rb +37 -5
 - data/test/connections/native_sqlserver/connection.rb +15 -0
 - data/test/deprecated_associations_test.rb +40 -38
 - data/test/finder_test.rb +82 -4
 - data/test/fixtures/accounts.yml +8 -0
 - data/test/fixtures/company.rb +6 -0
 - data/test/fixtures/company_in_module.rb +1 -1
 - data/test/fixtures/db_definitions/mysql.sql +13 -0
 - data/test/fixtures/db_definitions/postgresql.sql +13 -0
 - data/test/fixtures/db_definitions/sqlite.sql +14 -0
 - data/test/fixtures/db_definitions/sqlserver.sql +110 -0
 - data/test/fixtures/db_definitions/sqlserver2.sql +4 -0
 - data/test/fixtures/developer.rb +2 -2
 - data/test/fixtures/developers.yml +13 -0
 - data/test/fixtures/fixture_database.sqlite +0 -0
 - data/test/fixtures/fixture_database_2.sqlite +0 -0
 - data/test/fixtures/mixin.rb +17 -0
 - data/test/fixtures/mixins.yml +14 -0
 - data/test/fixtures/naked/csv/accounts.csv +1 -0
 - data/test/fixtures/naked/yml/accounts.yml +1 -0
 - data/test/fixtures/naked/yml/companies.yml +1 -0
 - data/test/fixtures/naked/yml/courses.yml +1 -0
 - data/test/fixtures/project.rb +6 -0
 - data/test/fixtures/reply.rb +14 -1
 - data/test/fixtures/topic.rb +2 -2
 - data/test/fixtures/topics/first +1 -0
 - data/test/fixtures_test.rb +42 -12
 - data/test/inflector_test.rb +2 -1
 - data/test/inheritance_test.rb +22 -12
 - data/test/mixin_test.rb +138 -0
 - data/test/pk_test.rb +4 -2
 - data/test/reflection_test.rb +3 -3
 - data/test/transactions_test.rb +15 -0
 - data/test/validations_test.rb +229 -4
 - metadata +24 -10
 - data/lib/active_record/associations.rb.orig +0 -555
 - data/test/deprecated_associations_test.rb.orig +0 -334
 - data/test/fixtures/accounts/signals37 +0 -3
 - data/test/fixtures/accounts/unknown +0 -2
 - data/test/fixtures/developers/david +0 -2
 - data/test/fixtures/developers/jamis +0 -2
 
| 
         @@ -1,334 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'abstract_unit'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'fixtures/developer'
         
     | 
| 
       3 
     | 
    
         
            -
            require 'fixtures/project'
         
     | 
| 
       4 
     | 
    
         
            -
            require 'fixtures/company'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'fixtures/topic'
         
     | 
| 
       6 
     | 
    
         
            -
            # require File.dirname(__FILE__) + '/../dev-utils/eval_debugger'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'fixtures/reply'
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            # Can't declare new classes in test case methods, so tests before that
         
     | 
| 
       10 
     | 
    
         
            -
            bad_collection_keys = false
         
     | 
| 
       11 
     | 
    
         
            -
            begin
         
     | 
| 
       12 
     | 
    
         
            -
              class Car < ActiveRecord::Base; has_many :wheels, :name => "wheels"; end
         
     | 
| 
       13 
     | 
    
         
            -
            rescue ActiveRecord::ActiveRecordError
         
     | 
| 
       14 
     | 
    
         
            -
              bad_collection_keys = true
         
     | 
| 
       15 
     | 
    
         
            -
            end
         
     | 
| 
       16 
     | 
    
         
            -
            raise "ActiveRecord should have barked on bad collection keys" unless bad_collection_keys
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
            class DeprecatedAssociationsTest < Test::Unit::TestCase
         
     | 
| 
       20 
     | 
    
         
            -
              def setup
         
     | 
| 
       21 
     | 
    
         
            -
                create_fixtures "accounts", "companies", "accounts", "developers", "projects", "developers_projects", "topics"
         
     | 
| 
       22 
     | 
    
         
            -
                @signals37 = Firm.find(1)
         
     | 
| 
       23 
     | 
    
         
            -
              end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
              def test_has_many_find
         
     | 
| 
       26 
     | 
    
         
            -
                assert_equal 2, Firm.find_first.clients.length
         
     | 
| 
       27 
     | 
    
         
            -
              end
         
     | 
| 
       28 
     | 
    
         
            -
              
         
     | 
| 
       29 
     | 
    
         
            -
              def test_has_many_orders
         
     | 
| 
       30 
     | 
    
         
            -
                assert_equal "Summit", Firm.find_first.clients.first.name
         
     | 
| 
       31 
     | 
    
         
            -
              end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
              def test_has_many_class_name
         
     | 
| 
       34 
     | 
    
         
            -
                assert_equal "Microsoft", Firm.find_first.clients_sorted_desc.first.name
         
     | 
| 
       35 
     | 
    
         
            -
              end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
              def test_has_many_foreign_key
         
     | 
| 
       38 
     | 
    
         
            -
                assert_equal "Microsoft", Firm.find_first.clients_of_firm.first.name
         
     | 
| 
       39 
     | 
    
         
            -
              end
         
     | 
| 
       40 
     | 
    
         
            -
              
         
     | 
| 
       41 
     | 
    
         
            -
              def test_has_many_conditions
         
     | 
| 
       42 
     | 
    
         
            -
                assert_equal "Microsoft", Firm.find_first.clients_like_ms.first.name
         
     | 
| 
       43 
     | 
    
         
            -
              end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
              def test_has_many_sql
         
     | 
| 
       46 
     | 
    
         
            -
                firm = Firm.find_first
         
     | 
| 
       47 
     | 
    
         
            -
                assert_equal "Microsoft", firm.clients_using_sql.first.name
         
     | 
| 
       48 
     | 
    
         
            -
                assert_equal 1, firm.clients_using_sql_count
         
     | 
| 
       49 
     | 
    
         
            -
                assert_equal 1, Firm.find_first.clients_using_sql_count
         
     | 
| 
       50 
     | 
    
         
            -
              end
         
     | 
| 
       51 
     | 
    
         
            -
              
         
     | 
| 
       52 
     | 
    
         
            -
              def test_has_many_queries
         
     | 
| 
       53 
     | 
    
         
            -
                assert Firm.find_first.has_clients?
         
     | 
| 
       54 
     | 
    
         
            -
                firm = Firm.find_first
         
     | 
| 
       55 
     | 
    
         
            -
                assert_equal 2, firm.clients_count # tests using class count
         
     | 
| 
       56 
     | 
    
         
            -
                firm.clients
         
     | 
| 
       57 
     | 
    
         
            -
                assert firm.has_clients?
         
     | 
| 
       58 
     | 
    
         
            -
                assert_equal 2, firm.clients_count # tests using collection length
         
     | 
| 
       59 
     | 
    
         
            -
              end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
              def test_has_many_dependence
         
     | 
| 
       62 
     | 
    
         
            -
                assert_equal 2, Client.find_all.length
         
     | 
| 
       63 
     | 
    
         
            -
                Firm.find_first.destroy
         
     | 
| 
       64 
     | 
    
         
            -
                assert_equal 0, Client.find_all.length
         
     | 
| 
       65 
     | 
    
         
            -
              end
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
              def test_has_many_dependence_with_transaction_support_on_failure
         
     | 
| 
       68 
     | 
    
         
            -
                assert_equal 2, Client.find_all.length
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
                firm = Firm.find_first
         
     | 
| 
       71 
     | 
    
         
            -
                clients = firm.clients
         
     | 
| 
       72 
     | 
    
         
            -
                clients.last.instance_eval { def before_destroy() raise "Trigger rollback" end }
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                firm.destroy rescue "do nothing"
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                assert_equal 2, Client.find_all.length
         
     | 
| 
       77 
     | 
    
         
            -
              end
         
     | 
| 
       78 
     | 
    
         
            -
              
         
     | 
| 
       79 
     | 
    
         
            -
              def test_has_one_dependence
         
     | 
| 
       80 
     | 
    
         
            -
                firm = Firm.find(1)
         
     | 
| 
       81 
     | 
    
         
            -
                assert firm.has_account?
         
     | 
| 
       82 
     | 
    
         
            -
                firm.destroy
         
     | 
| 
       83 
     | 
    
         
            -
                assert_equal 1, Account.find_all.length
         
     | 
| 
       84 
     | 
    
         
            -
              end
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
              def test_has_one_dependence_with_missing_association
         
     | 
| 
       87 
     | 
    
         
            -
                Account.destroy_all
         
     | 
| 
       88 
     | 
    
         
            -
                firm = Firm.find(1)
         
     | 
| 
       89 
     | 
    
         
            -
                assert !firm.has_account?
         
     | 
| 
       90 
     | 
    
         
            -
                firm.destroy
         
     | 
| 
       91 
     | 
    
         
            -
              end
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
              def test_belongs_to
         
     | 
| 
       94 
     | 
    
         
            -
                assert_equal @signals37.name, Client.find(3).firm.name
         
     | 
| 
       95 
     | 
    
         
            -
                assert Client.find(3).has_firm?, "Microsoft should have a firm"
         
     | 
| 
       96 
     | 
    
         
            -
                # assert !Company.find(1).has_firm?, "37signals shouldn't have a firm"
         
     | 
| 
       97 
     | 
    
         
            -
              end
         
     | 
| 
       98 
     | 
    
         
            -
              
         
     | 
| 
       99 
     | 
    
         
            -
              def test_belongs_to_with_different_class_name
         
     | 
| 
       100 
     | 
    
         
            -
                assert_equal Company.find(1).name, Company.find(3).firm_with_other_name.name
         
     | 
| 
       101 
     | 
    
         
            -
                assert Company.find(3).has_firm_with_other_name?, "Microsoft should have a firm"
         
     | 
| 
       102 
     | 
    
         
            -
              end
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
              def test_belongs_to_with_condition
         
     | 
| 
       105 
     | 
    
         
            -
                assert_equal Company.find(1).name, Company.find(3).firm_with_condition.name
         
     | 
| 
       106 
     | 
    
         
            -
                assert Company.find(3).has_firm_with_condition?, "Microsoft should have a firm"
         
     | 
| 
       107 
     | 
    
         
            -
              end
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
              
         
     | 
| 
       110 
     | 
    
         
            -
              def test_belongs_to_equality
         
     | 
| 
       111 
     | 
    
         
            -
                assert Company.find(3).firm?(Company.find(1)), "Microsoft should have 37signals as firm"
         
     | 
| 
       112 
     | 
    
         
            -
                assert_raises(RuntimeError) { !Company.find(3).firm?(Company.find(3)) } # "Summit shouldn't have itself as firm"
         
     | 
| 
       113 
     | 
    
         
            -
              end
         
     | 
| 
       114 
     | 
    
         
            -
              
         
     | 
| 
       115 
     | 
    
         
            -
              def test_has_one
         
     | 
| 
       116 
     | 
    
         
            -
                assert @signals37.account?(Account.find(1))
         
     | 
| 
       117 
     | 
    
         
            -
                assert_equal Account.find(1).credit_limit, @signals37.account.credit_limit
         
     | 
| 
       118 
     | 
    
         
            -
                assert @signals37.has_account?, "37signals should have an account"
         
     | 
| 
       119 
     | 
    
         
            -
                assert Account.find(1).firm?(@signals37), "37signals account should be able to backtrack"
         
     | 
| 
       120 
     | 
    
         
            -
                assert Account.find(1).has_firm?, "37signals account should be able to backtrack"
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
                assert !Account.find(2).has_firm?, "Unknown isn't linked"
         
     | 
| 
       123 
     | 
    
         
            -
                assert !Account.find(2).firm?(@signals37), "Unknown isn't linked"
         
     | 
| 
       124 
     | 
    
         
            -
              end
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
              def test_has_many_dependence_on_account
         
     | 
| 
       127 
     | 
    
         
            -
                assert_equal 2, Account.find_all.length
         
     | 
| 
       128 
     | 
    
         
            -
                @signals37.destroy
         
     | 
| 
       129 
     | 
    
         
            -
                assert_equal 1, Account.find_all.length
         
     | 
| 
       130 
     | 
    
         
            -
              end
         
     | 
| 
       131 
     | 
    
         
            -
              
         
     | 
| 
       132 
     | 
    
         
            -
              def test_find_in
         
     | 
| 
       133 
     | 
    
         
            -
                assert_equal Client.find(2).name, @signals37.find_in_clients(2).name
         
     | 
| 
       134 
     | 
    
         
            -
                assert_raises(ActiveRecord::RecordNotFound) { @signals37.find_in_clients(6) }
         
     | 
| 
       135 
     | 
    
         
            -
              end
         
     | 
| 
       136 
     | 
    
         
            -
              
         
     | 
| 
       137 
     | 
    
         
            -
              def test_force_reload
         
     | 
| 
       138 
     | 
    
         
            -
                firm = Firm.new
         
     | 
| 
       139 
     | 
    
         
            -
                firm.save
         
     | 
| 
       140 
     | 
    
         
            -
                firm.clients.each {|c|} # forcing to load all clients
         
     | 
| 
       141 
     | 
    
         
            -
                assert firm.clients.empty?, "New firm shouldn't have client objects"
         
     | 
| 
       142 
     | 
    
         
            -
                assert !firm.has_clients?, "New firm shouldn't have clients"
         
     | 
| 
       143 
     | 
    
         
            -
                assert_equal 0, firm.clients_count, "New firm should have 0 clients"
         
     | 
| 
       144 
     | 
    
         
            -
                
         
     | 
| 
       145 
     | 
    
         
            -
                client = Client.new("firm_id" => firm.id)
         
     | 
| 
       146 
     | 
    
         
            -
                client.save
         
     | 
| 
       147 
     | 
    
         
            -
             
     | 
| 
       148 
     | 
    
         
            -
                assert firm.clients.empty?, "New firm should have cached no client objects"
         
     | 
| 
       149 
     | 
    
         
            -
                assert !firm.has_clients?, "New firm should have cached a no-clients response"
         
     | 
| 
       150 
     | 
    
         
            -
                assert_equal 0, firm.clients_count, "New firm should have cached 0 clients count"
         
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
       152 
     | 
    
         
            -
                assert !firm.clients(true).empty?, "New firm should have reloaded client objects"
         
     | 
| 
       153 
     | 
    
         
            -
                assert firm.has_clients?(true), "New firm should have reloaded with a have-clients response"
         
     | 
| 
       154 
     | 
    
         
            -
                assert_equal 1, firm.clients_count(true), "New firm should have reloaded clients count"
         
     | 
| 
       155 
     | 
    
         
            -
              end
         
     | 
| 
       156 
     | 
    
         
            -
                
         
     | 
| 
       157 
     | 
    
         
            -
              def test_included_in_collection
         
     | 
| 
       158 
     | 
    
         
            -
                assert @signals37.clients.include?(Client.find(2))
         
     | 
| 
       159 
     | 
    
         
            -
              end
         
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
              def test_build_to_collection
         
     | 
| 
       162 
     | 
    
         
            -
                assert_equal 1, @signals37.clients_of_firm_count
         
     | 
| 
       163 
     | 
    
         
            -
                new_client = @signals37.build_to_clients_of_firm("name" => "Another Client")
         
     | 
| 
       164 
     | 
    
         
            -
                assert_equal "Another Client", new_client.name
         
     | 
| 
       165 
     | 
    
         
            -
                assert new_client.save
         
     | 
| 
       166 
     | 
    
         
            -
             
     | 
| 
       167 
     | 
    
         
            -
                assert new_client.firm?(@signals37)
         
     | 
| 
       168 
     | 
    
         
            -
                assert_equal 2, @signals37.clients_of_firm_count(true)
         
     | 
| 
       169 
     | 
    
         
            -
              end
         
     | 
| 
       170 
     | 
    
         
            -
              
         
     | 
| 
       171 
     | 
    
         
            -
              def test_create_in_collection
         
     | 
| 
       172 
     | 
    
         
            -
                assert_equal @signals37.create_in_clients_of_firm("name" => "Another Client"), @signals37.clients_of_firm(true).last
         
     | 
| 
       173 
     | 
    
         
            -
              end
         
     | 
| 
       174 
     | 
    
         
            -
              
         
     | 
| 
       175 
     | 
    
         
            -
              def test_succesful_build_association
         
     | 
| 
       176 
     | 
    
         
            -
                firm = Firm.new("name" => "GlobalMegaCorp")
         
     | 
| 
       177 
     | 
    
         
            -
                firm.save
         
     | 
| 
       178 
     | 
    
         
            -
                
         
     | 
| 
       179 
     | 
    
         
            -
                account = firm.build_account("credit_limit" => 1000)
         
     | 
| 
       180 
     | 
    
         
            -
                assert account.save
         
     | 
| 
       181 
     | 
    
         
            -
                assert_equal account, firm.account
         
     | 
| 
       182 
     | 
    
         
            -
              end
         
     | 
| 
       183 
     | 
    
         
            -
              
         
     | 
| 
       184 
     | 
    
         
            -
              def test_failing_build_association
         
     | 
| 
       185 
     | 
    
         
            -
                firm = Firm.new("name" => "GlobalMegaCorp")
         
     | 
| 
       186 
     | 
    
         
            -
                firm.save
         
     | 
| 
       187 
     | 
    
         
            -
                
         
     | 
| 
       188 
     | 
    
         
            -
                account = firm.build_account
         
     | 
| 
       189 
     | 
    
         
            -
                assert !account.save
         
     | 
| 
       190 
     | 
    
         
            -
                assert_equal "can't be empty", account.errors.on("credit_limit")
         
     | 
| 
       191 
     | 
    
         
            -
              end
         
     | 
| 
       192 
     | 
    
         
            -
              
         
     | 
| 
       193 
     | 
    
         
            -
              def test_create_association
         
     | 
| 
       194 
     | 
    
         
            -
                firm = Firm.new("name" => "GlobalMegaCorp")
         
     | 
| 
       195 
     | 
    
         
            -
                firm.save
         
     | 
| 
       196 
     | 
    
         
            -
                assert_equal firm.create_account("credit_limit" => 1000), firm.account
         
     | 
| 
       197 
     | 
    
         
            -
              end
         
     | 
| 
       198 
     | 
    
         
            -
              
         
     | 
| 
       199 
     | 
    
         
            -
              def test_has_and_belongs_to_many
         
     | 
| 
       200 
     | 
    
         
            -
                david = Developer.find(1)
         
     | 
| 
       201 
     | 
    
         
            -
                assert david.has_projects?
         
     | 
| 
       202 
     | 
    
         
            -
                assert_equal 2, david.projects_count
         
     | 
| 
       203 
     | 
    
         
            -
             
     | 
| 
       204 
     | 
    
         
            -
                active_record = Project.find(1)
         
     | 
| 
       205 
     | 
    
         
            -
                assert active_record.has_developers?
         
     | 
| 
       206 
     | 
    
         
            -
                assert_equal 2, active_record.developers_count
         
     | 
| 
       207 
     | 
    
         
            -
                assert_equal david.name, active_record.developers.first.name
         
     | 
| 
       208 
     | 
    
         
            -
              end
         
     | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
       210 
     | 
    
         
            -
              def test_has_and_belongs_to_many_removing
         
     | 
| 
       211 
     | 
    
         
            -
                david = Developer.find(1)
         
     | 
| 
       212 
     | 
    
         
            -
                active_record = Project.find(1)
         
     | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
       214 
     | 
    
         
            -
                david.remove_projects(active_record)
         
     | 
| 
       215 
     | 
    
         
            -
                
         
     | 
| 
       216 
     | 
    
         
            -
                assert_equal 1, david.projects_count
         
     | 
| 
       217 
     | 
    
         
            -
                assert_equal 1, active_record.developers_count    
         
     | 
| 
       218 
     | 
    
         
            -
              end
         
     | 
| 
       219 
     | 
    
         
            -
             
     | 
| 
       220 
     | 
    
         
            -
              def test_has_and_belongs_to_many_zero
         
     | 
| 
       221 
     | 
    
         
            -
                david = Developer.find(1)
         
     | 
| 
       222 
     | 
    
         
            -
                david.remove_projects(Project.find_all)
         
     | 
| 
       223 
     | 
    
         
            -
                
         
     | 
| 
       224 
     | 
    
         
            -
                assert_equal 0, david.projects_count
         
     | 
| 
       225 
     | 
    
         
            -
                assert !david.has_projects?
         
     | 
| 
       226 
     | 
    
         
            -
              end
         
     | 
| 
       227 
     | 
    
         
            -
             
     | 
| 
       228 
     | 
    
         
            -
              def test_has_and_belongs_to_many_adding
         
     | 
| 
       229 
     | 
    
         
            -
                jamis = Developer.find(2)
         
     | 
| 
       230 
     | 
    
         
            -
                action_controller = Project.find(2)
         
     | 
| 
       231 
     | 
    
         
            -
             
     | 
| 
       232 
     | 
    
         
            -
                jamis.add_projects(action_controller)
         
     | 
| 
       233 
     | 
    
         
            -
                
         
     | 
| 
       234 
     | 
    
         
            -
                assert_equal 2, jamis.projects_count
         
     | 
| 
       235 
     | 
    
         
            -
                assert_equal 2, action_controller.developers_count    
         
     | 
| 
       236 
     | 
    
         
            -
              end
         
     | 
| 
       237 
     | 
    
         
            -
             
     | 
| 
       238 
     | 
    
         
            -
              def test_has_and_belongs_to_many_adding_from_the_project
         
     | 
| 
       239 
     | 
    
         
            -
                jamis = Developer.find(2)
         
     | 
| 
       240 
     | 
    
         
            -
                action_controller = Project.find(2)
         
     | 
| 
       241 
     | 
    
         
            -
             
     | 
| 
       242 
     | 
    
         
            -
                action_controller.add_developers(jamis)
         
     | 
| 
       243 
     | 
    
         
            -
                
         
     | 
| 
       244 
     | 
    
         
            -
                assert_equal 2, jamis.projects_count
         
     | 
| 
       245 
     | 
    
         
            -
                assert_equal 2, action_controller.developers_count
         
     | 
| 
       246 
     | 
    
         
            -
              end
         
     | 
| 
       247 
     | 
    
         
            -
              
         
     | 
| 
       248 
     | 
    
         
            -
              def test_has_and_belongs_to_many_adding_a_collection
         
     | 
| 
       249 
     | 
    
         
            -
                aridridel = Developer.new("name" => "Aridridel")
         
     | 
| 
       250 
     | 
    
         
            -
                aridridel.save
         
     | 
| 
       251 
     | 
    
         
            -
                
         
     | 
| 
       252 
     | 
    
         
            -
                aridridel.add_projects([ Project.find(1), Project.find(2) ])
         
     | 
| 
       253 
     | 
    
         
            -
                assert_equal 2, aridridel.projects_count
         
     | 
| 
       254 
     | 
    
         
            -
              end
         
     | 
| 
       255 
     | 
    
         
            -
              
         
     | 
| 
       256 
     | 
    
         
            -
              def test_belongs_to_counter
         
     | 
| 
       257 
     | 
    
         
            -
                topic = Topic.create("title" => "Apple", "content" => "hello world")
         
     | 
| 
       258 
     | 
    
         
            -
                assert_equal 0, topic.send(:read_attribute, "replies_count"), "No replies yet"
         
     | 
| 
       259 
     | 
    
         
            -
             
     | 
| 
       260 
     | 
    
         
            -
                reply = topic.create_in_replies("title" => "I'm saying no!", "content" => "over here")
         
     | 
| 
       261 
     | 
    
         
            -
                assert_equal 1, Topic.find(topic.id).send(:read_attribute, "replies_count"), "First reply created"
         
     | 
| 
       262 
     | 
    
         
            -
             
     | 
| 
       263 
     | 
    
         
            -
                reply.destroy
         
     | 
| 
       264 
     | 
    
         
            -
                assert_equal 0, Topic.find(topic.id).send(:read_attribute, "replies_count"), "First reply deleted"
         
     | 
| 
       265 
     | 
    
         
            -
              end
         
     | 
| 
       266 
     | 
    
         
            -
              
         
     | 
| 
       267 
     | 
    
         
            -
              def test_natural_assignment_of_has_one
         
     | 
| 
       268 
     | 
    
         
            -
                apple = Firm.create("name" => "Apple")
         
     | 
| 
       269 
     | 
    
         
            -
                citibank = Account.create("credit_limit" => 10)
         
     | 
| 
       270 
     | 
    
         
            -
                apple.account = citibank
         
     | 
| 
       271 
     | 
    
         
            -
                assert_equal apple.id, citibank.firm_id
         
     | 
| 
       272 
     | 
    
         
            -
              end
         
     | 
| 
       273 
     | 
    
         
            -
              
         
     | 
| 
       274 
     | 
    
         
            -
              def test_natural_assignment_of_belongs_to
         
     | 
| 
       275 
     | 
    
         
            -
                apple = Firm.create("name" => "Apple")
         
     | 
| 
       276 
     | 
    
         
            -
                citibank = Account.create("credit_limit" => 10)
         
     | 
| 
       277 
     | 
    
         
            -
                citibank.firm = apple
         
     | 
| 
       278 
     | 
    
         
            -
                assert_equal apple.id, citibank.firm_id
         
     | 
| 
       279 
     | 
    
         
            -
              end
         
     | 
| 
       280 
     | 
    
         
            -
             
     | 
| 
       281 
     | 
    
         
            -
              def test_natural_assignment_of_has_many
         
     | 
| 
       282 
     | 
    
         
            -
                apple = Firm.create("name" => "Apple")
         
     | 
| 
       283 
     | 
    
         
            -
                natural = Client.new("name" => "Natural Company")
         
     | 
| 
       284 
     | 
    
         
            -
                apple.clients << natural
         
     | 
| 
       285 
     | 
    
         
            -
                assert_equal apple.id, natural.firm_id
         
     | 
| 
       286 
     | 
    
         
            -
                assert_equal Client.find(natural.id), Firm.find(apple.id).clients.find { |c| c.id == natural.id }
         
     | 
| 
       287 
     | 
    
         
            -
                apple.clients.delete natural
         
     | 
| 
       288 
     | 
    
         
            -
                assert_nil Firm.find(apple.id).clients.find { |c| c.id == natural.id }
         
     | 
| 
       289 
     | 
    
         
            -
              end
         
     | 
| 
       290 
     | 
    
         
            -
             
     | 
| 
       291 
     | 
    
         
            -
               
         
     | 
| 
       292 
     | 
    
         
            -
              def test_natural_adding_of_has_and_belongs_to_many
         
     | 
| 
       293 
     | 
    
         
            -
                rails = Project.create("name" => "Rails")
         
     | 
| 
       294 
     | 
    
         
            -
                ap = Project.create("name" => "Action Pack")
         
     | 
| 
       295 
     | 
    
         
            -
                john = Developer.create("name" => "John")
         
     | 
| 
       296 
     | 
    
         
            -
                mike = Developer.create("name" => "Mike")
         
     | 
| 
       297 
     | 
    
         
            -
             		rails.developers << john
         
     | 
| 
       298 
     | 
    
         
            -
             		rails.developers << mike
         
     | 
| 
       299 
     | 
    
         
            -
             		
         
     | 
| 
       300 
     | 
    
         
            -
                assert_equal Developer.find(john.id), Project.find(rails.id).developers.find { |d| d.id == john.id }
         
     | 
| 
       301 
     | 
    
         
            -
                assert_equal Developer.find(mike.id), Project.find(rails.id).developers.find { |d| d.id == mike.id }
         
     | 
| 
       302 
     | 
    
         
            -
                assert_equal Project.find(rails.id), Developer.find(mike.id).projects.find { |p| p.id == rails.id }
         
     | 
| 
       303 
     | 
    
         
            -
                assert_equal Project.find(rails.id), Developer.find(john.id).projects.find { |p| p.id == rails.id }
         
     | 
| 
       304 
     | 
    
         
            -
                ap.developers << john
         
     | 
| 
       305 
     | 
    
         
            -
                assert_equal Developer.find(john.id), Project.find(ap.id).developers.find { |d| d.id == john.id }
         
     | 
| 
       306 
     | 
    
         
            -
                assert_equal Project.find(ap.id), Developer.find(john.id).projects.find { |p| p.id == ap.id }
         
     | 
| 
       307 
     | 
    
         
            -
                
         
     | 
| 
       308 
     | 
    
         
            -
                ap.developers.delete john
         
     | 
| 
       309 
     | 
    
         
            -
                assert_nil Project.find(ap.id).developers.find { |d| d.id == john.id }
         
     | 
| 
       310 
     | 
    
         
            -
            		assert_nil Developer.find(john.id).projects.find { |p| p.id == ap.id }
         
     | 
| 
       311 
     | 
    
         
            -
              end
         
     | 
| 
       312 
     | 
    
         
            -
             
     | 
| 
       313 
     | 
    
         
            -
              def test_storing_in_pstore
         
     | 
| 
       314 
     | 
    
         
            -
                require "pstore"
         
     | 
| 
       315 
     | 
    
         
            -
                apple = Firm.create("name" => "Apple")
         
     | 
| 
       316 
     | 
    
         
            -
                natural = Client.new("name" => "Natural Company")
         
     | 
| 
       317 
     | 
    
         
            -
                apple.clients << natural
         
     | 
| 
       318 
     | 
    
         
            -
             
     | 
| 
       319 
     | 
    
         
            -
                db = PStore.new("/tmp/ar-pstore-association-test")
         
     | 
| 
       320 
     | 
    
         
            -
                db.transaction do
         
     | 
| 
       321 
     | 
    
         
            -
                  db["apple"] = apple
         
     | 
| 
       322 
     | 
    
         
            -
                end
         
     | 
| 
       323 
     | 
    
         
            -
             
     | 
| 
       324 
     | 
    
         
            -
                db = PStore.new("/tmp/ar-pstore-association-test")
         
     | 
| 
       325 
     | 
    
         
            -
                db.transaction do
         
     | 
| 
       326 
     | 
    
         
            -
                  assert_equal "Natural Company", db["apple"].clients.first.name
         
     | 
| 
       327 
     | 
    
         
            -
                end
         
     | 
| 
       328 
     | 
    
         
            -
              end
         
     | 
| 
       329 
     | 
    
         
            -
             
     | 
| 
       330 
     | 
    
         
            -
              def test_has_many_find_all
         
     | 
| 
       331 
     | 
    
         
            -
                assert_equal 2, Firm.find_first.find_all_in_clients("type = 'Client'").length
         
     | 
| 
       332 
     | 
    
         
            -
                assert_equal 1, Firm.find_first.find_all_in_clients("name = 'Summit'").length
         
     | 
| 
       333 
     | 
    
         
            -
              end
         
     | 
| 
       334 
     | 
    
         
            -
            end
         
     |