ibm_db 2.5.9-x86-mswin32-60 → 2.5.10-x86-mswin32-60
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/CHANGES +7 -0
 - data/README +79 -141
 - data/ext/extconf.rb +74 -13
 - data/ext/ibm_db.c +20 -5
 - data/lib/active_record/connection_adapters/ibm_db_adapter.rb +45 -8
 - data/lib/mswin32/rb18x/ibm_db.so +0 -0
 - data/lib/mswin32/rb19x/ibm_db.so +0 -0
 - data/test/cases/adapter_test.rb +162 -160
 - data/test/cases/associations/belongs_to_associations_test.rb +23 -0
 - data/test/cases/associations/cascaded_eager_loading_test.rb +3 -7
 - data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +40 -10
 - data/test/cases/associations/join_model_test.rb +4 -4
 - data/test/cases/attribute_methods_test.rb +169 -33
 - data/test/cases/base_test.rb +302 -77
 - data/test/cases/calculations_test.rb +37 -1
 - data/test/cases/migration_test.rb +183 -115
 - data/test/cases/persistence_test.rb +17 -11
 - data/test/cases/query_cache_test.rb +18 -3
 - data/test/cases/relations_test.rb +178 -15
 - data/test/cases/schema_dumper_test.rb +5 -1
 - data/test/cases/transaction_callbacks_test.rb +2 -2
 - data/test/cases/xml_serialization_test.rb +133 -1
 - data/test/schema/schema.rb +22 -3
 - metadata +2 -2
 
| 
         @@ -17,15 +17,16 @@ require 'rexml/document' 
     | 
|
| 
       17 
17 
     | 
    
         
             
            require 'active_support/core_ext/exception'
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
            class PersistencesTest < ActiveRecord::TestCase
         
     | 
| 
      
 20 
     | 
    
         
            +
              fixtures :topics, :companies, :developers, :projects, :computers, :accounts, :minimalistics,
         
     | 
| 
      
 21 
     | 
    
         
            +
                'warehouse_things', :authors, :categorizations, :categories, :posts, :minivans
         
     | 
| 
       20 
22 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
               
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
              # Oracle UPDATE does not support ORDER BY
         
     | 
| 
       24 
     | 
    
         
            -
              unless current_adapter?(:OracleAdapter)
         
     | 
| 
      
 23 
     | 
    
         
            +
              # Skip databases that don't support UPDATE + ORDER BY
         
     | 
| 
      
 24 
     | 
    
         
            +
              unless current_adapter?(:OracleAdapter, :PostgreSQLAdapter)
         
     | 
| 
       25 
25 
     | 
    
         
             
                def test_update_all_ignores_order_without_limit_from_association
         
     | 
| 
       26 
26 
     | 
    
         
             
                  author = authors(:david)
         
     | 
| 
       27 
27 
     | 
    
         
             
                  assert_nothing_raised do
         
     | 
| 
       28 
     | 
    
         
            -
                    assert_equal author.posts_with_comments_and_categories.length, 
     | 
| 
      
 28 
     | 
    
         
            +
                    assert_equal author.posts_with_comments_and_categories.length,
         
     | 
| 
      
 29 
     | 
    
         
            +
                      author.posts_with_comments_and_categories.update_all([ "body = ?", "bulk update!" ])
         
     | 
| 
       29 
30 
     | 
    
         
             
                  end
         
     | 
| 
       30 
31 
     | 
    
         
             
                end
         
     | 
| 
       31 
32 
     | 
    
         | 
| 
         @@ -203,9 +204,12 @@ class PersistencesTest < ActiveRecord::TestCase 
     | 
|
| 
       203 
204 
     | 
    
         
             
              end
         
     | 
| 
       204 
205 
     | 
    
         | 
| 
       205 
206 
     | 
    
         
             
              def test_create_columns_not_equal_attributes
         
     | 
| 
       206 
     | 
    
         
            -
                topic = Topic. 
     | 
| 
       207 
     | 
    
         
            -
             
     | 
| 
       208 
     | 
    
         
            -
             
     | 
| 
      
 207 
     | 
    
         
            +
                topic = Topic.allocate.init_with(
         
     | 
| 
      
 208 
     | 
    
         
            +
                  'attributes' => {
         
     | 
| 
      
 209 
     | 
    
         
            +
                    'title'          => 'Another New Topic',
         
     | 
| 
      
 210 
     | 
    
         
            +
                    'does_not_exist' => 'test'
         
     | 
| 
      
 211 
     | 
    
         
            +
                  }
         
     | 
| 
      
 212 
     | 
    
         
            +
                )
         
     | 
| 
       209 
213 
     | 
    
         
             
                assert_nothing_raised { topic.save }
         
     | 
| 
       210 
214 
     | 
    
         
             
              end
         
     | 
| 
       211 
215 
     | 
    
         | 
| 
         @@ -250,9 +254,11 @@ class PersistencesTest < ActiveRecord::TestCase 
     | 
|
| 
       250 
254 
     | 
    
         
             
                topic.title = "Still another topic"
         
     | 
| 
       251 
255 
     | 
    
         
             
                topic.save
         
     | 
| 
       252 
256 
     | 
    
         | 
| 
       253 
     | 
    
         
            -
                topicReloaded = Topic. 
     | 
| 
       254 
     | 
    
         
            -
                topicReloaded. 
     | 
| 
       255 
     | 
    
         
            -
             
     | 
| 
      
 257 
     | 
    
         
            +
                topicReloaded = Topic.allocate
         
     | 
| 
      
 258 
     | 
    
         
            +
                topicReloaded.init_with(
         
     | 
| 
      
 259 
     | 
    
         
            +
                  'attributes' => topic.attributes.merge('does_not_exist' => 'test')
         
     | 
| 
      
 260 
     | 
    
         
            +
                )
         
     | 
| 
      
 261 
     | 
    
         
            +
                topicReloaded.title = 'A New Topic'
         
     | 
| 
       256 
262 
     | 
    
         
             
                assert_nothing_raised { topicReloaded.save }
         
     | 
| 
       257 
263 
     | 
    
         
             
              end
         
     | 
| 
       258 
264 
     | 
    
         | 
| 
         @@ -147,13 +147,16 @@ class QueryCacheTest < ActiveRecord::TestCase 
     | 
|
| 
       147 
147 
     | 
    
         
             
              end
         
     | 
| 
       148 
148 
     | 
    
         | 
| 
       149 
149 
     | 
    
         
             
              def test_cache_does_not_wrap_string_results_in_arrays
         
     | 
| 
       150 
     | 
    
         
            -
                 
     | 
| 
      
 150 
     | 
    
         
            +
                if current_adapter?(:SQLite3Adapter)
         
     | 
| 
      
 151 
     | 
    
         
            +
                  require 'sqlite3/version'
         
     | 
| 
      
 152 
     | 
    
         
            +
                  sqlite3_version = RUBY_PLATFORM =~ /java/ ? Jdbc::SQLite3::VERSION : SQLite3::VERSION
         
     | 
| 
      
 153 
     | 
    
         
            +
                end
         
     | 
| 
       151 
154 
     | 
    
         | 
| 
       152 
155 
     | 
    
         
             
                Task.cache do
         
     | 
| 
       153 
156 
     | 
    
         
             
                  # Oracle adapter returns count() as Fixnum or Float
         
     | 
| 
       154 
157 
     | 
    
         
             
                  if current_adapter?(:OracleAdapter,:IBM_DBAdapter)
         
     | 
| 
       155 
158 
     | 
    
         
             
                    assert_kind_of Numeric, Task.connection.select_value("SELECT count(*) AS count_all FROM tasks")
         
     | 
| 
       156 
     | 
    
         
            -
                  elsif current_adapter?(:SQLite3Adapter) &&  
     | 
| 
      
 159 
     | 
    
         
            +
                  elsif current_adapter?(:SQLite3Adapter) && sqlite3_version > '1.2.5' || current_adapter?(:Mysql2Adapter) || current_adapter?(:MysqlAdapter)
         
     | 
| 
       157 
160 
     | 
    
         
             
                    # Future versions of the sqlite3 adapter will return numeric
         
     | 
| 
       158 
161 
     | 
    
         
             
                    assert_instance_of Fixnum,
         
     | 
| 
       159 
162 
     | 
    
         
             
                     Task.connection.select_value("SELECT count(*) AS count_all FROM tasks")
         
     | 
| 
         @@ -167,6 +170,18 @@ end 
     | 
|
| 
       167 
170 
     | 
    
         
             
            class QueryCacheExpiryTest < ActiveRecord::TestCase
         
     | 
| 
       168 
171 
     | 
    
         
             
              fixtures :tasks, :posts, :categories, :categories_posts
         
     | 
| 
       169 
172 
     | 
    
         | 
| 
      
 173 
     | 
    
         
            +
              def test_cache_gets_cleared_after_migration
         
     | 
| 
      
 174 
     | 
    
         
            +
                # warm the cache
         
     | 
| 
      
 175 
     | 
    
         
            +
                Post.find(1)
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
                # change the column definition
         
     | 
| 
      
 178 
     | 
    
         
            +
                Post.connection.change_column :posts, :title, :string, :limit => 80
         
     | 
| 
      
 179 
     | 
    
         
            +
                assert_nothing_raised { Post.find(1) }
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
                # restore the old definition
         
     | 
| 
      
 182 
     | 
    
         
            +
                Post.connection.change_column :posts, :title, :string
         
     | 
| 
      
 183 
     | 
    
         
            +
              end
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
       170 
185 
     | 
    
         
             
              def test_find
         
     | 
| 
       171 
186 
     | 
    
         
             
                Task.connection.expects(:clear_query_cache).times(1)
         
     | 
| 
       172 
187 
     | 
    
         | 
| 
         @@ -234,7 +249,7 @@ class QueryCacheBodyProxyTest < ActiveRecord::TestCase 
     | 
|
| 
       234 
249 
     | 
    
         | 
| 
       235 
250 
     | 
    
         
             
              test "is polite to it's body and responds to it" do
         
     | 
| 
       236 
251 
     | 
    
         
             
                body = Class.new(String) { def to_path; "/path"; end }.new
         
     | 
| 
       237 
     | 
    
         
            -
                proxy = ActiveRecord::QueryCache::BodyProxy.new(nil, body)
         
     | 
| 
      
 252 
     | 
    
         
            +
                proxy = ActiveRecord::QueryCache::BodyProxy.new(nil, body, ActiveRecord::Base.connection_id)
         
     | 
| 
       238 
253 
     | 
    
         
             
                assert proxy.respond_to?(:to_path)
         
     | 
| 
       239 
254 
     | 
    
         
             
                assert_equal proxy.to_path, "/path"
         
     | 
| 
       240 
255 
     | 
    
         
             
              end
         
     | 
| 
         @@ -391,6 +391,15 @@ class RelationTest < ActiveRecord::TestCase 
     | 
|
| 
       391 
391 
     | 
    
         
             
                assert_equal Post.find(1).last_comment, post.last_comment
         
     | 
| 
       392 
392 
     | 
    
         
             
              end
         
     | 
| 
       393 
393 
     | 
    
         | 
| 
      
 394 
     | 
    
         
            +
              def test_dynamic_find_by_attributes_should_yield_found_object
         
     | 
| 
      
 395 
     | 
    
         
            +
                david = authors(:david)
         
     | 
| 
      
 396 
     | 
    
         
            +
                yielded_value = nil
         
     | 
| 
      
 397 
     | 
    
         
            +
                Author.find_by_name(david.name) do |author|
         
     | 
| 
      
 398 
     | 
    
         
            +
                  yielded_value = author
         
     | 
| 
      
 399 
     | 
    
         
            +
                end
         
     | 
| 
      
 400 
     | 
    
         
            +
                assert_equal david, yielded_value
         
     | 
| 
      
 401 
     | 
    
         
            +
              end
         
     | 
| 
      
 402 
     | 
    
         
            +
             
     | 
| 
       394 
403 
     | 
    
         
             
              def test_dynamic_find_by_attributes
         
     | 
| 
       395 
404 
     | 
    
         
             
                david = authors(:david)
         
     | 
| 
       396 
405 
     | 
    
         
             
                author = Author.preload(:taggings).find_by_id(david.id)
         
     | 
| 
         @@ -440,6 +449,18 @@ class RelationTest < ActiveRecord::TestCase 
     | 
|
| 
       440 
449 
     | 
    
         
             
                assert_equal authors(:david), authors.find_or_create_by_name(:name => 'David')
         
     | 
| 
       441 
450 
     | 
    
         
             
              end
         
     | 
| 
       442 
451 
     | 
    
         | 
| 
      
 452 
     | 
    
         
            +
              def test_dynamic_find_or_create_by_attributes_bang
         
     | 
| 
      
 453 
     | 
    
         
            +
                authors = Author.scoped
         
     | 
| 
      
 454 
     | 
    
         
            +
             
     | 
| 
      
 455 
     | 
    
         
            +
                assert_raises(ActiveRecord::RecordInvalid) { authors.find_or_create_by_name!('') }
         
     | 
| 
      
 456 
     | 
    
         
            +
             
     | 
| 
      
 457 
     | 
    
         
            +
                lifo = authors.find_or_create_by_name!('Lifo')
         
     | 
| 
      
 458 
     | 
    
         
            +
                assert_equal "Lifo", lifo.name
         
     | 
| 
      
 459 
     | 
    
         
            +
                assert lifo.persisted?
         
     | 
| 
      
 460 
     | 
    
         
            +
             
     | 
| 
      
 461 
     | 
    
         
            +
                assert_equal authors(:david), authors.find_or_create_by_name!(:name => 'David')
         
     | 
| 
      
 462 
     | 
    
         
            +
              end
         
     | 
| 
      
 463 
     | 
    
         
            +
             
     | 
| 
       443 
464 
     | 
    
         
             
              def test_find_id
         
     | 
| 
       444 
465 
     | 
    
         
             
                authors = Author.scoped
         
     | 
| 
       445 
466 
     | 
    
         | 
| 
         @@ -653,7 +674,7 @@ class RelationTest < ActiveRecord::TestCase 
     | 
|
| 
       653 
674 
     | 
    
         
             
              def test_relation_merging_with_preload
         
     | 
| 
       654 
675 
     | 
    
         
             
                ActiveRecord::IdentityMap.without do
         
     | 
| 
       655 
676 
     | 
    
         
             
                  [Post.scoped.merge(Post.preload(:author)), Post.preload(:author).merge(Post.scoped)].each do |posts|
         
     | 
| 
       656 
     | 
    
         
            -
                    assert_queries(2) { assert posts.first.author }
         
     | 
| 
      
 677 
     | 
    
         
            +
                    assert_queries(2) { assert posts.order(:id).first.author }
         
     | 
| 
       657 
678 
     | 
    
         
             
                  end
         
     | 
| 
       658 
679 
     | 
    
         
             
                end
         
     | 
| 
       659 
680 
     | 
    
         
             
              end
         
     | 
| 
         @@ -854,6 +875,128 @@ class RelationTest < ActiveRecord::TestCase 
     | 
|
| 
       854 
875 
     | 
    
         
             
                assert_equal 'hen', hen.name
         
     | 
| 
       855 
876 
     | 
    
         
             
              end
         
     | 
| 
       856 
877 
     | 
    
         | 
| 
      
 878 
     | 
    
         
            +
              def test_first_or_create
         
     | 
| 
      
 879 
     | 
    
         
            +
                parrot = Bird.where(:color => 'green').first_or_create(:name => 'parrot')
         
     | 
| 
      
 880 
     | 
    
         
            +
                assert_kind_of Bird, parrot
         
     | 
| 
      
 881 
     | 
    
         
            +
                assert parrot.persisted?
         
     | 
| 
      
 882 
     | 
    
         
            +
                assert_equal 'parrot', parrot.name
         
     | 
| 
      
 883 
     | 
    
         
            +
                assert_equal 'green', parrot.color
         
     | 
| 
      
 884 
     | 
    
         
            +
             
     | 
| 
      
 885 
     | 
    
         
            +
                same_parrot = Bird.where(:color => 'green').first_or_create(:name => 'parakeet')
         
     | 
| 
      
 886 
     | 
    
         
            +
                assert_kind_of Bird, same_parrot
         
     | 
| 
      
 887 
     | 
    
         
            +
                assert same_parrot.persisted?
         
     | 
| 
      
 888 
     | 
    
         
            +
                assert_equal parrot, same_parrot
         
     | 
| 
      
 889 
     | 
    
         
            +
              end
         
     | 
| 
      
 890 
     | 
    
         
            +
             
     | 
| 
      
 891 
     | 
    
         
            +
              def test_first_or_create_with_no_parameters
         
     | 
| 
      
 892 
     | 
    
         
            +
                parrot = Bird.where(:color => 'green').first_or_create
         
     | 
| 
      
 893 
     | 
    
         
            +
                assert_kind_of Bird, parrot
         
     | 
| 
      
 894 
     | 
    
         
            +
                assert !parrot.persisted?
         
     | 
| 
      
 895 
     | 
    
         
            +
                assert_equal 'green', parrot.color
         
     | 
| 
      
 896 
     | 
    
         
            +
              end
         
     | 
| 
      
 897 
     | 
    
         
            +
             
     | 
| 
      
 898 
     | 
    
         
            +
              def test_first_or_create_with_block
         
     | 
| 
      
 899 
     | 
    
         
            +
                parrot = Bird.where(:color => 'green').first_or_create { |bird| bird.name = 'parrot' }
         
     | 
| 
      
 900 
     | 
    
         
            +
                assert_kind_of Bird, parrot
         
     | 
| 
      
 901 
     | 
    
         
            +
                assert parrot.persisted?
         
     | 
| 
      
 902 
     | 
    
         
            +
                assert_equal 'green', parrot.color
         
     | 
| 
      
 903 
     | 
    
         
            +
                assert_equal 'parrot', parrot.name
         
     | 
| 
      
 904 
     | 
    
         
            +
             
     | 
| 
      
 905 
     | 
    
         
            +
                same_parrot = Bird.where(:color => 'green').first_or_create { |bird| bird.name = 'parakeet' }
         
     | 
| 
      
 906 
     | 
    
         
            +
                assert_equal parrot, same_parrot
         
     | 
| 
      
 907 
     | 
    
         
            +
              end
         
     | 
| 
      
 908 
     | 
    
         
            +
             
     | 
| 
      
 909 
     | 
    
         
            +
              def test_first_or_create_with_array
         
     | 
| 
      
 910 
     | 
    
         
            +
                several_green_birds = Bird.where(:color => 'green').first_or_create([{:name => 'parrot'}, {:name => 'parakeet'}])
         
     | 
| 
      
 911 
     | 
    
         
            +
                assert_kind_of Array, several_green_birds
         
     | 
| 
      
 912 
     | 
    
         
            +
                several_green_birds.each { |bird| assert bird.persisted? }
         
     | 
| 
      
 913 
     | 
    
         
            +
             
     | 
| 
      
 914 
     | 
    
         
            +
                same_parrot = Bird.where(:color => 'green').first_or_create([{:name => 'hummingbird'}, {:name => 'macaw'}])
         
     | 
| 
      
 915 
     | 
    
         
            +
                assert_kind_of Bird, same_parrot
         
     | 
| 
      
 916 
     | 
    
         
            +
                assert_equal several_green_birds.first, same_parrot
         
     | 
| 
      
 917 
     | 
    
         
            +
              end
         
     | 
| 
      
 918 
     | 
    
         
            +
             
     | 
| 
      
 919 
     | 
    
         
            +
              def test_first_or_create_bang_with_valid_options
         
     | 
| 
      
 920 
     | 
    
         
            +
                parrot = Bird.where(:color => 'green').first_or_create!(:name => 'parrot')
         
     | 
| 
      
 921 
     | 
    
         
            +
                assert_kind_of Bird, parrot
         
     | 
| 
      
 922 
     | 
    
         
            +
                assert parrot.persisted?
         
     | 
| 
      
 923 
     | 
    
         
            +
                assert_equal 'parrot', parrot.name
         
     | 
| 
      
 924 
     | 
    
         
            +
                assert_equal 'green', parrot.color
         
     | 
| 
      
 925 
     | 
    
         
            +
             
     | 
| 
      
 926 
     | 
    
         
            +
                same_parrot = Bird.where(:color => 'green').first_or_create!(:name => 'parakeet')
         
     | 
| 
      
 927 
     | 
    
         
            +
                assert_kind_of Bird, same_parrot
         
     | 
| 
      
 928 
     | 
    
         
            +
                assert same_parrot.persisted?
         
     | 
| 
      
 929 
     | 
    
         
            +
                assert_equal parrot, same_parrot
         
     | 
| 
      
 930 
     | 
    
         
            +
              end
         
     | 
| 
      
 931 
     | 
    
         
            +
             
     | 
| 
      
 932 
     | 
    
         
            +
              def test_first_or_create_bang_with_invalid_options
         
     | 
| 
      
 933 
     | 
    
         
            +
                assert_raises(ActiveRecord::RecordInvalid) { Bird.where(:color => 'green').first_or_create!(:pirate_id => 1) }
         
     | 
| 
      
 934 
     | 
    
         
            +
              end
         
     | 
| 
      
 935 
     | 
    
         
            +
             
     | 
| 
      
 936 
     | 
    
         
            +
              def test_first_or_create_bang_with_no_parameters
         
     | 
| 
      
 937 
     | 
    
         
            +
                assert_raises(ActiveRecord::RecordInvalid) { Bird.where(:color => 'green').first_or_create! }
         
     | 
| 
      
 938 
     | 
    
         
            +
              end
         
     | 
| 
      
 939 
     | 
    
         
            +
             
     | 
| 
      
 940 
     | 
    
         
            +
              def test_first_or_create_bang_with_valid_block
         
     | 
| 
      
 941 
     | 
    
         
            +
                parrot = Bird.where(:color => 'green').first_or_create! { |bird| bird.name = 'parrot' }
         
     | 
| 
      
 942 
     | 
    
         
            +
                assert_kind_of Bird, parrot
         
     | 
| 
      
 943 
     | 
    
         
            +
                assert parrot.persisted?
         
     | 
| 
      
 944 
     | 
    
         
            +
                assert_equal 'green', parrot.color
         
     | 
| 
      
 945 
     | 
    
         
            +
                assert_equal 'parrot', parrot.name
         
     | 
| 
      
 946 
     | 
    
         
            +
             
     | 
| 
      
 947 
     | 
    
         
            +
                same_parrot = Bird.where(:color => 'green').first_or_create! { |bird| bird.name = 'parakeet' }
         
     | 
| 
      
 948 
     | 
    
         
            +
                assert_equal parrot, same_parrot
         
     | 
| 
      
 949 
     | 
    
         
            +
              end
         
     | 
| 
      
 950 
     | 
    
         
            +
             
     | 
| 
      
 951 
     | 
    
         
            +
              def test_first_or_create_bang_with_invalid_block
         
     | 
| 
      
 952 
     | 
    
         
            +
                assert_raise(ActiveRecord::RecordInvalid) do
         
     | 
| 
      
 953 
     | 
    
         
            +
                  Bird.where(:color => 'green').first_or_create! { |bird| bird.pirate_id = 1 }
         
     | 
| 
      
 954 
     | 
    
         
            +
                end
         
     | 
| 
      
 955 
     | 
    
         
            +
              end
         
     | 
| 
      
 956 
     | 
    
         
            +
             
     | 
| 
      
 957 
     | 
    
         
            +
              def test_first_or_create_with_valid_array
         
     | 
| 
      
 958 
     | 
    
         
            +
                several_green_birds = Bird.where(:color => 'green').first_or_create!([{:name => 'parrot'}, {:name => 'parakeet'}])
         
     | 
| 
      
 959 
     | 
    
         
            +
                assert_kind_of Array, several_green_birds
         
     | 
| 
      
 960 
     | 
    
         
            +
                several_green_birds.each { |bird| assert bird.persisted? }
         
     | 
| 
      
 961 
     | 
    
         
            +
             
     | 
| 
      
 962 
     | 
    
         
            +
                same_parrot = Bird.where(:color => 'green').first_or_create!([{:name => 'hummingbird'}, {:name => 'macaw'}])
         
     | 
| 
      
 963 
     | 
    
         
            +
                assert_kind_of Bird, same_parrot
         
     | 
| 
      
 964 
     | 
    
         
            +
                assert_equal several_green_birds.first, same_parrot
         
     | 
| 
      
 965 
     | 
    
         
            +
              end
         
     | 
| 
      
 966 
     | 
    
         
            +
             
     | 
| 
      
 967 
     | 
    
         
            +
              def test_first_or_create_with_invalid_array
         
     | 
| 
      
 968 
     | 
    
         
            +
                assert_raises(ActiveRecord::RecordInvalid) { Bird.where(:color => 'green').first_or_create!([ {:name => 'parrot'}, {:pirate_id => 1} ]) }
         
     | 
| 
      
 969 
     | 
    
         
            +
              end
         
     | 
| 
      
 970 
     | 
    
         
            +
             
     | 
| 
      
 971 
     | 
    
         
            +
              def test_first_or_initialize
         
     | 
| 
      
 972 
     | 
    
         
            +
                parrot = Bird.where(:color => 'green').first_or_initialize(:name => 'parrot')
         
     | 
| 
      
 973 
     | 
    
         
            +
                assert_kind_of Bird, parrot
         
     | 
| 
      
 974 
     | 
    
         
            +
                assert !parrot.persisted?
         
     | 
| 
      
 975 
     | 
    
         
            +
                assert parrot.valid?
         
     | 
| 
      
 976 
     | 
    
         
            +
                assert parrot.new_record?
         
     | 
| 
      
 977 
     | 
    
         
            +
                assert_equal 'parrot', parrot.name
         
     | 
| 
      
 978 
     | 
    
         
            +
                assert_equal 'green', parrot.color
         
     | 
| 
      
 979 
     | 
    
         
            +
              end
         
     | 
| 
      
 980 
     | 
    
         
            +
             
     | 
| 
      
 981 
     | 
    
         
            +
              def test_first_or_initialize_with_no_parameters
         
     | 
| 
      
 982 
     | 
    
         
            +
                parrot = Bird.where(:color => 'green').first_or_initialize
         
     | 
| 
      
 983 
     | 
    
         
            +
                assert_kind_of Bird, parrot
         
     | 
| 
      
 984 
     | 
    
         
            +
                assert !parrot.persisted?
         
     | 
| 
      
 985 
     | 
    
         
            +
                assert !parrot.valid?
         
     | 
| 
      
 986 
     | 
    
         
            +
                assert parrot.new_record?
         
     | 
| 
      
 987 
     | 
    
         
            +
                assert_equal 'green', parrot.color
         
     | 
| 
      
 988 
     | 
    
         
            +
              end
         
     | 
| 
      
 989 
     | 
    
         
            +
             
     | 
| 
      
 990 
     | 
    
         
            +
              def test_first_or_initialize_with_block
         
     | 
| 
      
 991 
     | 
    
         
            +
                parrot = Bird.where(:color => 'green').first_or_initialize { |bird| bird.name = 'parrot' }
         
     | 
| 
      
 992 
     | 
    
         
            +
                assert_kind_of Bird, parrot
         
     | 
| 
      
 993 
     | 
    
         
            +
                assert !parrot.persisted?
         
     | 
| 
      
 994 
     | 
    
         
            +
                assert parrot.valid?
         
     | 
| 
      
 995 
     | 
    
         
            +
                assert parrot.new_record?
         
     | 
| 
      
 996 
     | 
    
         
            +
                assert_equal 'green', parrot.color
         
     | 
| 
      
 997 
     | 
    
         
            +
                assert_equal 'parrot', parrot.name
         
     | 
| 
      
 998 
     | 
    
         
            +
              end
         
     | 
| 
      
 999 
     | 
    
         
            +
             
     | 
| 
       857 
1000 
     | 
    
         
             
              def test_explicit_create_scope
         
     | 
| 
       858 
1001 
     | 
    
         
             
                hens = Bird.where(:name => 'hen')
         
     | 
| 
       859 
1002 
     | 
    
         
             
                assert_equal 'hen', hens.new.name
         
     | 
| 
         @@ -976,6 +1119,10 @@ class RelationTest < ActiveRecord::TestCase 
     | 
|
| 
       976 
1119 
     | 
    
         
             
                assert scope.eager_loading?
         
     | 
| 
       977 
1120 
     | 
    
         
             
              end
         
     | 
| 
       978 
1121 
     | 
    
         | 
| 
      
 1122 
     | 
    
         
            +
              def test_ordering_with_extra_spaces
         
     | 
| 
      
 1123 
     | 
    
         
            +
                assert_equal authors(:david), Author.order('id DESC , name DESC').last
         
     | 
| 
      
 1124 
     | 
    
         
            +
              end
         
     | 
| 
      
 1125 
     | 
    
         
            +
             
     | 
| 
       979 
1126 
     | 
    
         
             
              def test_update_all_with_joins
         
     | 
| 
       980 
1127 
     | 
    
         
             
                comments = Comment.joins(:post).where('posts.id' => posts(:welcome).id)
         
     | 
| 
       981 
1128 
     | 
    
         
             
                count    = comments.count
         
     | 
| 
         @@ -996,24 +1143,40 @@ class RelationTest < ActiveRecord::TestCase 
     | 
|
| 
       996 
1143 
     | 
    
         
             
                assert_equal posts(:welcome),  comments(:more_greetings).post
         
     | 
| 
       997 
1144 
     | 
    
         
             
              end
         
     | 
| 
       998 
1145 
     | 
    
         | 
| 
       999 
     | 
    
         
            -
             
     | 
| 
      
 1146 
     | 
    
         
            +
            unless current_adapter?(:IBM_DBAdapter)
         
     | 
| 
       1000 
1147 
     | 
    
         
             
                #IBM_DB does not support offset on subselect of the update statement
         
     | 
| 
       1001 
     | 
    
         
            -
             
     | 
| 
       1002 
     | 
    
         
            -
             
     | 
| 
       1003 
     | 
    
         
            -
             
     | 
| 
       1004 
     | 
    
         
            -
             
     | 
| 
      
 1148 
     | 
    
         
            +
              def test_update_all_with_joins_and_offset
         
     | 
| 
      
 1149 
     | 
    
         
            +
                all_comments = Comment.joins(:post).where('posts.id' => posts(:welcome).id)
         
     | 
| 
      
 1150 
     | 
    
         
            +
                count        = all_comments.count
         
     | 
| 
      
 1151 
     | 
    
         
            +
                comments     = all_comments.offset(1)
         
     | 
| 
       1005 
1152 
     | 
    
         | 
| 
       1006 
     | 
    
         
            -
             
     | 
| 
       1007 
     | 
    
         
            -
             
     | 
| 
      
 1153 
     | 
    
         
            +
                assert_equal count - 1, comments.update_all(:post_id => posts(:thinking).id)
         
     | 
| 
      
 1154 
     | 
    
         
            +
              end
         
     | 
| 
      
 1155 
     | 
    
         
            +
             
     | 
| 
      
 1156 
     | 
    
         
            +
              def test_update_all_with_joins_and_offset_and_order
         
     | 
| 
      
 1157 
     | 
    
         
            +
                all_comments = Comment.joins(:post).where('posts.id' => posts(:welcome).id).order('posts.id', 'comments.id')
         
     | 
| 
      
 1158 
     | 
    
         
            +
                count        = all_comments.count
         
     | 
| 
      
 1159 
     | 
    
         
            +
                comments     = all_comments.offset(1)
         
     | 
| 
       1008 
1160 
     | 
    
         | 
| 
       1009 
     | 
    
         
            -
                 
     | 
| 
       1010 
     | 
    
         
            -
             
     | 
| 
       1011 
     | 
    
         
            -
             
     | 
| 
       1012 
     | 
    
         
            -
             
     | 
| 
      
 1161 
     | 
    
         
            +
                assert_equal count - 1, comments.update_all(:post_id => posts(:thinking).id)
         
     | 
| 
      
 1162 
     | 
    
         
            +
                assert_equal posts(:thinking), comments(:more_greetings).post
         
     | 
| 
      
 1163 
     | 
    
         
            +
                assert_equal posts(:welcome),  comments(:greetings).post
         
     | 
| 
      
 1164 
     | 
    
         
            +
              end
         
     | 
| 
      
 1165 
     | 
    
         
            +
            end
         
     | 
| 
       1013 
1166 
     | 
    
         | 
| 
       1014 
     | 
    
         
            -
             
     | 
| 
       1015 
     | 
    
         
            -
             
     | 
| 
       1016 
     | 
    
         
            -
             
     | 
| 
      
 1167 
     | 
    
         
            +
              def test_uniq
         
     | 
| 
      
 1168 
     | 
    
         
            +
                tag1 = Tag.create(:name => 'Foo')
         
     | 
| 
      
 1169 
     | 
    
         
            +
                tag2 = Tag.create(:name => 'Foo')
         
     | 
| 
      
 1170 
     | 
    
         
            +
             
     | 
| 
      
 1171 
     | 
    
         
            +
                query = Tag.select(:name).where(:id => [tag1.id, tag2.id])
         
     | 
| 
      
 1172 
     | 
    
         
            +
             
     | 
| 
      
 1173 
     | 
    
         
            +
                assert_equal ['Foo', 'Foo'], query.map(&:name)
         
     | 
| 
      
 1174 
     | 
    
         
            +
                assert_sql(/DISTINCT/) do
         
     | 
| 
      
 1175 
     | 
    
         
            +
                  assert_equal ['Foo'], query.uniq.map(&:name)
         
     | 
| 
      
 1176 
     | 
    
         
            +
                end
         
     | 
| 
      
 1177 
     | 
    
         
            +
                assert_sql(/DISTINCT/) do
         
     | 
| 
      
 1178 
     | 
    
         
            +
                  assert_equal ['Foo'], query.uniq(true).map(&:name)
         
     | 
| 
       1017 
1179 
     | 
    
         
             
                end
         
     | 
| 
      
 1180 
     | 
    
         
            +
                assert_equal ['Foo', 'Foo'], query.uniq(true).uniq(false).map(&:name)
         
     | 
| 
       1018 
1181 
     | 
    
         
             
              end
         
     | 
| 
       1019 
1182 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,5 +1,4 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require "cases/helper"
         
     | 
| 
       2 
     | 
    
         
            -
            require 'active_support/core_ext/string/encoding'
         
     | 
| 
       3 
2 
     | 
    
         | 
| 
       4 
3 
     | 
    
         | 
| 
       5 
4 
     | 
    
         
             
            class SchemaDumperTest < ActiveRecord::TestCase
         
     | 
| 
         @@ -249,4 +248,9 @@ class SchemaDumperTest < ActiveRecord::TestCase 
     | 
|
| 
       249 
248 
     | 
    
         
             
                assert_match %r(:id => false), match[1], "no table id not preserved"
         
     | 
| 
       250 
249 
     | 
    
         
             
                assert_match %r{t.string[[:space:]]+"id",[[:space:]]+:null => false$}, match[2], "non-primary key id column not preserved"
         
     | 
| 
       251 
250 
     | 
    
         
             
              end
         
     | 
| 
      
 251 
     | 
    
         
            +
             
     | 
| 
      
 252 
     | 
    
         
            +
              def test_schema_dump_keeps_id_false_when_id_is_false_and_unique_not_null_column_added
         
     | 
| 
      
 253 
     | 
    
         
            +
                output = standard_dump
         
     | 
| 
      
 254 
     | 
    
         
            +
                assert_match %r{create_table "subscribers", :id => false}, output
         
     | 
| 
      
 255 
     | 
    
         
            +
              end
         
     | 
| 
       252 
256 
     | 
    
         
             
            end
         
     | 
| 
         @@ -6,7 +6,7 @@ class TransactionCallbacksTest < ActiveRecord::TestCase 
     | 
|
| 
       6 
6 
     | 
    
         
             
              fixtures :topics
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
              class TopicWithCallbacks < ActiveRecord::Base
         
     | 
| 
       9 
     | 
    
         
            -
                 
     | 
| 
      
 9 
     | 
    
         
            +
                self.table_name = :topics
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                after_commit{|record| record.send(:do_after_commit, nil)}
         
     | 
| 
       12 
12 
     | 
    
         
             
                after_commit(:on => :create){|record| record.send(:do_after_commit, :create)}
         
     | 
| 
         @@ -260,7 +260,7 @@ class TransactionObserverCallbacksTest < ActiveRecord::TestCase 
     | 
|
| 
       260 
260 
     | 
    
         
             
              fixtures :topics
         
     | 
| 
       261 
261 
     | 
    
         | 
| 
       262 
262 
     | 
    
         
             
              class TopicWithObserverAttached < ActiveRecord::Base
         
     | 
| 
       263 
     | 
    
         
            -
                 
     | 
| 
      
 263 
     | 
    
         
            +
                self.table_name = :topics
         
     | 
| 
       264 
264 
     | 
    
         
             
                def history
         
     | 
| 
       265 
265 
     | 
    
         
             
                  @history ||= []
         
     | 
| 
       266 
266 
     | 
    
         
             
                end
         
     | 
| 
         @@ -5,6 +5,9 @@ require 'models/author' 
     | 
|
| 
       5 
5 
     | 
    
         
             
            require 'models/comment'
         
     | 
| 
       6 
6 
     | 
    
         
             
            require 'models/company_in_module'
         
     | 
| 
       7 
7 
     | 
    
         
             
            require 'models/toy'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'models/topic'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'models/reply'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'models/company'
         
     | 
| 
       8 
11 
     | 
    
         | 
| 
       9 
12 
     | 
    
         
             
            class XmlSerializationTest < ActiveRecord::TestCase
         
     | 
| 
       10 
13 
     | 
    
         
             
              def test_should_serialize_default_root
         
     | 
| 
         @@ -50,6 +53,23 @@ class XmlSerializationTest < ActiveRecord::TestCase 
     | 
|
| 
       50 
53 
     | 
    
         
             
                end
         
     | 
| 
       51 
54 
     | 
    
         
             
                assert_match %r{<creator>David</creator>}, @xml
         
     | 
| 
       52 
55 
     | 
    
         
             
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
              def test_to_xml_with_block
         
     | 
| 
      
 58 
     | 
    
         
            +
                value = "Rockin' the block"
         
     | 
| 
      
 59 
     | 
    
         
            +
                xml = Contact.new.to_xml(:skip_instruct => true) do |_xml|
         
     | 
| 
      
 60 
     | 
    
         
            +
                  _xml.tag! "arbitrary-element", value
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
                assert_equal "<contact>", xml.first(9)
         
     | 
| 
      
 63 
     | 
    
         
            +
                assert xml.include?(%(<arbitrary-element>#{value}</arbitrary-element>))
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
              def test_should_skip_instruct_for_included_records
         
     | 
| 
      
 67 
     | 
    
         
            +
                @contact = Contact.new
         
     | 
| 
      
 68 
     | 
    
         
            +
                @contact.alternative = Contact.new(:name => 'Copa Cabana')
         
     | 
| 
      
 69 
     | 
    
         
            +
                @xml = @contact.to_xml(:include => [ :alternative ])
         
     | 
| 
      
 70 
     | 
    
         
            +
                assert_equal @xml.index('<?xml '), 0
         
     | 
| 
      
 71 
     | 
    
         
            +
                assert_nil @xml.index('<?xml ', 1)
         
     | 
| 
      
 72 
     | 
    
         
            +
              end
         
     | 
| 
       53 
73 
     | 
    
         
             
            end
         
     | 
| 
       54 
74 
     | 
    
         | 
| 
       55 
75 
     | 
    
         
             
            class DefaultXmlSerializationTest < ActiveRecord::TestCase
         
     | 
| 
         @@ -156,7 +176,63 @@ class NilXmlSerializationTest < ActiveRecord::TestCase 
     | 
|
| 
       156 
176 
     | 
    
         
             
            end
         
     | 
| 
       157 
177 
     | 
    
         | 
| 
       158 
178 
     | 
    
         
             
            class DatabaseConnectedXmlSerializationTest < ActiveRecord::TestCase
         
     | 
| 
       159 
     | 
    
         
            -
              fixtures :authors, :posts, :projects
         
     | 
| 
      
 179 
     | 
    
         
            +
              fixtures :topics, :companies, :accounts, :authors, :posts, :projects
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
              def test_to_xml
         
     | 
| 
      
 182 
     | 
    
         
            +
                xml = REXML::Document.new(topics(:first).to_xml(:indent => 0))
         
     | 
| 
      
 183 
     | 
    
         
            +
                bonus_time_in_current_timezone = topics(:first).bonus_time.xmlschema
         
     | 
| 
      
 184 
     | 
    
         
            +
                written_on_in_current_timezone = topics(:first).written_on.xmlschema
         
     | 
| 
      
 185 
     | 
    
         
            +
                last_read_in_current_timezone = topics(:first).last_read.xmlschema
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
                assert_equal "topic", xml.root.name
         
     | 
| 
      
 188 
     | 
    
         
            +
                assert_equal "The First Topic" , xml.elements["//title"].text
         
     | 
| 
      
 189 
     | 
    
         
            +
                assert_equal "David" , xml.elements["//author-name"].text
         
     | 
| 
      
 190 
     | 
    
         
            +
                assert_match "Have a nice day", xml.elements["//content"].text
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
                assert_equal "1", xml.elements["//id"].text
         
     | 
| 
      
 193 
     | 
    
         
            +
                assert_equal "integer" , xml.elements["//id"].attributes['type']
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
                assert_equal "1", xml.elements["//replies-count"].text
         
     | 
| 
      
 196 
     | 
    
         
            +
                assert_equal "integer" , xml.elements["//replies-count"].attributes['type']
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
                assert_equal written_on_in_current_timezone, xml.elements["//written-on"].text
         
     | 
| 
      
 199 
     | 
    
         
            +
                assert_equal "datetime" , xml.elements["//written-on"].attributes['type']
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
                assert_equal "david@loudthinking.com", xml.elements["//author-email-address"].text
         
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
      
 203 
     | 
    
         
            +
                assert_equal nil, xml.elements["//parent-id"].text
         
     | 
| 
      
 204 
     | 
    
         
            +
                assert_equal "integer", xml.elements["//parent-id"].attributes['type']
         
     | 
| 
      
 205 
     | 
    
         
            +
                assert_equal "true", xml.elements["//parent-id"].attributes['nil']
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
                if current_adapter?(:SybaseAdapter)
         
     | 
| 
      
 208 
     | 
    
         
            +
                  assert_equal last_read_in_current_timezone, xml.elements["//last-read"].text
         
     | 
| 
      
 209 
     | 
    
         
            +
                  assert_equal "datetime" , xml.elements["//last-read"].attributes['type']
         
     | 
| 
      
 210 
     | 
    
         
            +
                else
         
     | 
| 
      
 211 
     | 
    
         
            +
                  # Oracle enhanced adapter allows to define Date attributes in model class (see topic.rb)
         
     | 
| 
      
 212 
     | 
    
         
            +
                  assert_equal "2004-04-15", xml.elements["//last-read"].text
         
     | 
| 
      
 213 
     | 
    
         
            +
                  assert_equal "date" , xml.elements["//last-read"].attributes['type']
         
     | 
| 
      
 214 
     | 
    
         
            +
                end
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
                # Oracle and DB2 don't have true boolean or time-only fields
         
     | 
| 
      
 217 
     | 
    
         
            +
                unless current_adapter?(:OracleAdapter, :DB2Adapter)
         
     | 
| 
      
 218 
     | 
    
         
            +
                  assert_equal "false", xml.elements["//approved"].text
         
     | 
| 
      
 219 
     | 
    
         
            +
                  assert_equal "boolean" , xml.elements["//approved"].attributes['type']
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
                  assert_equal bonus_time_in_current_timezone, xml.elements["//bonus-time"].text
         
     | 
| 
      
 222 
     | 
    
         
            +
                  assert_equal "datetime" , xml.elements["//bonus-time"].attributes['type']
         
     | 
| 
      
 223 
     | 
    
         
            +
                end
         
     | 
| 
      
 224 
     | 
    
         
            +
              end
         
     | 
| 
      
 225 
     | 
    
         
            +
             
     | 
| 
      
 226 
     | 
    
         
            +
              def test_except_option
         
     | 
| 
      
 227 
     | 
    
         
            +
                xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :except => [:title, :replies_count])
         
     | 
| 
      
 228 
     | 
    
         
            +
                assert_equal "<topic>", xml.first(7)
         
     | 
| 
      
 229 
     | 
    
         
            +
                assert !xml.include?(%(<title>The First Topic</title>))
         
     | 
| 
      
 230 
     | 
    
         
            +
                assert xml.include?(%(<author-name>David</author-name>))
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
                xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :except => [:title, :author_name, :replies_count])
         
     | 
| 
      
 233 
     | 
    
         
            +
                assert !xml.include?(%(<title>The First Topic</title>))
         
     | 
| 
      
 234 
     | 
    
         
            +
                assert !xml.include?(%(<author-name>David</author-name>))
         
     | 
| 
      
 235 
     | 
    
         
            +
              end
         
     | 
| 
       160 
236 
     | 
    
         | 
| 
       161 
237 
     | 
    
         
             
              # to_xml used to mess with the hash the user provided which
         
     | 
| 
       162 
238 
     | 
    
         
             
              # caused the builder to be reused.  This meant the document kept
         
     | 
| 
         @@ -192,6 +268,39 @@ class DatabaseConnectedXmlSerializationTest < ActiveRecord::TestCase 
     | 
|
| 
       192 
268 
     | 
    
         
             
                assert_match %r{<hello-post>}, xml
         
     | 
| 
       193 
269 
     | 
    
         
             
              end
         
     | 
| 
       194 
270 
     | 
    
         | 
| 
      
 271 
     | 
    
         
            +
              def test_including_has_many_association
         
     | 
| 
      
 272 
     | 
    
         
            +
                xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :include => :replies, :except => :replies_count)
         
     | 
| 
      
 273 
     | 
    
         
            +
                assert_equal "<topic>", xml.first(7)
         
     | 
| 
      
 274 
     | 
    
         
            +
                assert xml.include?(%(<replies type="array"><reply>))
         
     | 
| 
      
 275 
     | 
    
         
            +
                assert xml.include?(%(<title>The Second Topic of the day</title>))
         
     | 
| 
      
 276 
     | 
    
         
            +
              end
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
      
 278 
     | 
    
         
            +
              def test_including_belongs_to_association
         
     | 
| 
      
 279 
     | 
    
         
            +
                xml = companies(:first_client).to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
         
     | 
| 
      
 280 
     | 
    
         
            +
                assert !xml.include?("<firm>")
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
      
 282 
     | 
    
         
            +
                xml = companies(:second_client).to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
         
     | 
| 
      
 283 
     | 
    
         
            +
                assert xml.include?("<firm>")
         
     | 
| 
      
 284 
     | 
    
         
            +
              end
         
     | 
| 
      
 285 
     | 
    
         
            +
             
     | 
| 
      
 286 
     | 
    
         
            +
              def test_including_multiple_associations
         
     | 
| 
      
 287 
     | 
    
         
            +
                xml = companies(:first_firm).to_xml(:indent => 0, :skip_instruct => true, :include => [ :clients, :account ])
         
     | 
| 
      
 288 
     | 
    
         
            +
                assert_equal "<firm>", xml.first(6)
         
     | 
| 
      
 289 
     | 
    
         
            +
                assert xml.include?(%(<account>))
         
     | 
| 
      
 290 
     | 
    
         
            +
                assert xml.include?(%(<clients type="array"><client>))
         
     | 
| 
      
 291 
     | 
    
         
            +
              end
         
     | 
| 
      
 292 
     | 
    
         
            +
             
     | 
| 
      
 293 
     | 
    
         
            +
              def test_including_association_with_options
         
     | 
| 
      
 294 
     | 
    
         
            +
                xml = companies(:first_firm).to_xml(
         
     | 
| 
      
 295 
     | 
    
         
            +
                  :indent  => 0, :skip_instruct => true,
         
     | 
| 
      
 296 
     | 
    
         
            +
                  :include => { :clients => { :only => :name } }
         
     | 
| 
      
 297 
     | 
    
         
            +
                )
         
     | 
| 
      
 298 
     | 
    
         
            +
             
     | 
| 
      
 299 
     | 
    
         
            +
                assert_equal "<firm>", xml.first(6)
         
     | 
| 
      
 300 
     | 
    
         
            +
                assert xml.include?(%(<client><name>Summit</name></client>))
         
     | 
| 
      
 301 
     | 
    
         
            +
                assert xml.include?(%(<clients type="array"><client>))
         
     | 
| 
      
 302 
     | 
    
         
            +
              end
         
     | 
| 
      
 303 
     | 
    
         
            +
             
     | 
| 
       195 
304 
     | 
    
         
             
              def test_methods_are_called_on_object
         
     | 
| 
       196 
305 
     | 
    
         
             
                xml = authors(:david).to_xml :methods => :label, :indent => 0
         
     | 
| 
       197 
306 
     | 
    
         
             
                assert_match %r{<label>.*</label>}, xml
         
     | 
| 
         @@ -273,4 +382,27 @@ class DatabaseConnectedXmlSerializationTest < ActiveRecord::TestCase 
     | 
|
| 
       273 
382 
     | 
    
         
             
                assert_equal array.size, array.select { |author| author.has_key? 'firstname' }.size
         
     | 
| 
       274 
383 
     | 
    
         
             
              end
         
     | 
| 
       275 
384 
     | 
    
         | 
| 
      
 385 
     | 
    
         
            +
              def test_array_to_xml_including_has_many_association
         
     | 
| 
      
 386 
     | 
    
         
            +
                xml = [ topics(:first), topics(:second) ].to_xml(:indent => 0, :skip_instruct => true, :include => :replies)
         
     | 
| 
      
 387 
     | 
    
         
            +
                assert xml.include?(%(<replies type="array"><reply>))
         
     | 
| 
      
 388 
     | 
    
         
            +
              end
         
     | 
| 
      
 389 
     | 
    
         
            +
             
     | 
| 
      
 390 
     | 
    
         
            +
              def test_array_to_xml_including_methods
         
     | 
| 
      
 391 
     | 
    
         
            +
                xml = [ topics(:first), topics(:second) ].to_xml(:indent => 0, :skip_instruct => true, :methods => [ :topic_id ])
         
     | 
| 
      
 392 
     | 
    
         
            +
                assert xml.include?(%(<topic-id type="integer">#{topics(:first).topic_id}</topic-id>)), xml
         
     | 
| 
      
 393 
     | 
    
         
            +
                assert xml.include?(%(<topic-id type="integer">#{topics(:second).topic_id}</topic-id>)), xml
         
     | 
| 
      
 394 
     | 
    
         
            +
              end
         
     | 
| 
      
 395 
     | 
    
         
            +
             
     | 
| 
      
 396 
     | 
    
         
            +
              def test_array_to_xml_including_has_one_association
         
     | 
| 
      
 397 
     | 
    
         
            +
                xml = [ companies(:first_firm), companies(:rails_core) ].to_xml(:indent => 0, :skip_instruct => true, :include => :account)
         
     | 
| 
      
 398 
     | 
    
         
            +
                assert xml.include?(companies(:first_firm).account.to_xml(:indent => 0, :skip_instruct => true))
         
     | 
| 
      
 399 
     | 
    
         
            +
                assert xml.include?(companies(:rails_core).account.to_xml(:indent => 0, :skip_instruct => true))
         
     | 
| 
      
 400 
     | 
    
         
            +
              end
         
     | 
| 
      
 401 
     | 
    
         
            +
             
     | 
| 
      
 402 
     | 
    
         
            +
              def test_array_to_xml_including_belongs_to_association
         
     | 
| 
      
 403 
     | 
    
         
            +
                xml = [ companies(:first_client), companies(:second_client), companies(:another_client) ].to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
         
     | 
| 
      
 404 
     | 
    
         
            +
                assert xml.include?(companies(:first_client).to_xml(:indent => 0, :skip_instruct => true))
         
     | 
| 
      
 405 
     | 
    
         
            +
                assert xml.include?(companies(:second_client).firm.to_xml(:indent => 0, :skip_instruct => true))
         
     | 
| 
      
 406 
     | 
    
         
            +
                assert xml.include?(companies(:another_client).firm.to_xml(:indent => 0, :skip_instruct => true))
         
     | 
| 
      
 407 
     | 
    
         
            +
              end
         
     | 
| 
       276 
408 
     | 
    
         
             
            end
         
     |