composite_primary_keys 10.0.3 → 10.0.4
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.
- checksums.yaml +4 -4
 - data/History.rdoc +6 -0
 - data/lib/composite_primary_keys.rb +0 -2
 - data/lib/composite_primary_keys/associations/preloader/association.rb +2 -0
 - data/lib/composite_primary_keys/attribute_methods/primary_key.rb +1 -1
 - data/lib/composite_primary_keys/connection_adapters/abstract_adapter.rb +10 -10
 - data/lib/composite_primary_keys/locking/optimistic.rb +21 -31
 - data/lib/composite_primary_keys/relation.rb +14 -3
 - data/lib/composite_primary_keys/version.rb +1 -1
 - data/scripts/console.rb +48 -48
 - data/scripts/txt2html +76 -76
 - data/scripts/txt2js +65 -65
 - data/tasks/website.rake +18 -18
 - data/test/README_tests.rdoc +56 -56
 - data/test/connections/databases.yml +40 -30
 - data/test/db_test.rb +52 -52
 - data/test/fixtures/articles.yml +6 -6
 - data/test/fixtures/capitol.rb +3 -3
 - data/test/fixtures/capitols.yml +16 -16
 - data/test/fixtures/comments.yml +15 -15
 - data/test/fixtures/department.rb +5 -5
 - data/test/fixtures/departments.yml +15 -15
 - data/test/fixtures/dorms.yml +4 -4
 - data/test/fixtures/group.rb +2 -2
 - data/test/fixtures/groups.yml +6 -6
 - data/test/fixtures/hack.rb +4 -4
 - data/test/fixtures/hacks.yml +2 -2
 - data/test/fixtures/membership_status.rb +2 -2
 - data/test/fixtures/product.rb +9 -9
 - data/test/fixtures/product_tariff.rb +5 -5
 - data/test/fixtures/products.yml +11 -11
 - data/test/fixtures/reading.rb +4 -4
 - data/test/fixtures/readings.yml +10 -10
 - data/test/fixtures/reference_code_using_composite_key_alias.rb +8 -8
 - data/test/fixtures/reference_code_using_simple_key_alias.rb +8 -8
 - data/test/fixtures/reference_codes.yml +28 -28
 - data/test/fixtures/reference_types.yml +9 -9
 - data/test/fixtures/restaurant.rb +9 -9
 - data/test/fixtures/restaurants.yml +14 -14
 - data/test/fixtures/restaurants_suburbs.yml +10 -10
 - data/test/fixtures/room.rb +11 -11
 - data/test/fixtures/room_assignment.rb +13 -13
 - data/test/fixtures/room_assignments.yml +24 -24
 - data/test/fixtures/room_attribute.rb +2 -2
 - data/test/fixtures/room_attribute_assignment.rb +4 -4
 - data/test/fixtures/room_attribute_assignments.yml +4 -4
 - data/test/fixtures/room_attributes.yml +2 -2
 - data/test/fixtures/rooms.yml +12 -12
 - data/test/fixtures/seat.rb +5 -5
 - data/test/fixtures/seats.yml +8 -8
 - data/test/fixtures/street.rb +2 -2
 - data/test/fixtures/streets.yml +16 -16
 - data/test/fixtures/student.rb +3 -3
 - data/test/fixtures/students.yml +15 -15
 - data/test/fixtures/suburbs.yml +14 -14
 - data/test/plugins/pagination.rb +405 -405
 - data/test/plugins/pagination_helper.rb +135 -135
 - data/test/setup.rb +50 -50
 - data/test/test_aliases.rb +18 -18
 - data/test/test_composite_arrays.rb +24 -24
 - data/test/test_counter_cache.rb +30 -30
 - data/test/test_dup.rb +37 -37
 - data/test/test_exists.rb +39 -39
 - data/test/test_miscellaneous.rb +32 -32
 - data/test/test_pagination.rb +35 -35
 - data/test/test_preload.rb +7 -0
 - data/test/test_validations.rb +13 -13
 - metadata +5 -6
 - data/lib/composite_primary_keys/attribute_set/builder.rb +0 -22
 
    
        data/scripts/txt2js
    CHANGED
    
    | 
         @@ -1,65 +1,65 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #!/usr/bin/env ruby
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require 'rubygems'
         
     | 
| 
       4 
     | 
    
         
            -
            require 'redcloth'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'syntax/convertors/html'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'erb'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'active_support'
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            version_path = File.join(File.dirname(__FILE__), '..', 'lib', 'composite_primary_keys', 'version.rb')
         
     | 
| 
       10 
     | 
    
         
            -
            require File.expand_path(version_path)
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
            version  = CompositePrimaryKeys::VERSION::STRING
         
     | 
| 
       13 
     | 
    
         
            -
            download = 'http://rubygems.org/gems/composite_primary_keys'
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            class Fixnum
         
     | 
| 
       16 
     | 
    
         
            -
              def ordinal
         
     | 
| 
       17 
     | 
    
         
            -
                # teens
         
     | 
| 
       18 
     | 
    
         
            -
                return 'th' if (10..19).include?(self % 100)
         
     | 
| 
       19 
     | 
    
         
            -
                # others
         
     | 
| 
       20 
     | 
    
         
            -
                case self % 10
         
     | 
| 
       21 
     | 
    
         
            -
                when 1
         
     | 
| 
       22 
     | 
    
         
            -
                  return 'st'
         
     | 
| 
       23 
     | 
    
         
            -
                when 2
         
     | 
| 
       24 
     | 
    
         
            -
                  return 'nd'
         
     | 
| 
       25 
     | 
    
         
            -
                when 3
         
     | 
| 
       26 
     | 
    
         
            -
                  return 'rd'
         
     | 
| 
       27 
     | 
    
         
            -
                else
         
     | 
| 
       28 
     | 
    
         
            -
                  return 'th'
         
     | 
| 
       29 
     | 
    
         
            -
                end
         
     | 
| 
       30 
     | 
    
         
            -
              end
         
     | 
| 
       31 
     | 
    
         
            -
            end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
            class Time
         
     | 
| 
       34 
     | 
    
         
            -
              def pretty
         
     | 
| 
       35 
     | 
    
         
            -
                return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
         
     | 
| 
       36 
     | 
    
         
            -
              end
         
     | 
| 
       37 
     | 
    
         
            -
            end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
            def convert_syntax(syntax, source)
         
     | 
| 
       40 
     | 
    
         
            -
              return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
         
     | 
| 
       41 
     | 
    
         
            -
            end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
            if ARGV.length >= 1
         
     | 
| 
       44 
     | 
    
         
            -
              src, template = ARGV
         
     | 
| 
       45 
     | 
    
         
            -
              template ||= File.dirname(__FILE__) + '/../website/template.js'
         
     | 
| 
       46 
     | 
    
         
            -
            else
         
     | 
| 
       47 
     | 
    
         
            -
              puts("Usage: #{File.split($0).last} source.txt [template.js] > output.html")
         
     | 
| 
       48 
     | 
    
         
            -
              exit!
         
     | 
| 
       49 
     | 
    
         
            -
            end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
            template = ERB.new(File.open(template).read)
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
            title = nil
         
     | 
| 
       54 
     | 
    
         
            -
            body = nil
         
     | 
| 
       55 
     | 
    
         
            -
            File.open(src) do |fsrc|
         
     | 
| 
       56 
     | 
    
         
            -
              title_text = fsrc.readline
         
     | 
| 
       57 
     | 
    
         
            -
              body_text = fsrc.read
         
     | 
| 
       58 
     | 
    
         
            -
              title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
         
     | 
| 
       59 
     | 
    
         
            -
              body = RedCloth.new(body_text)
         
     | 
| 
       60 
     | 
    
         
            -
            end
         
     | 
| 
       61 
     | 
    
         
            -
            stat = File.stat(src)
         
     | 
| 
       62 
     | 
    
         
            -
            created = stat.ctime
         
     | 
| 
       63 
     | 
    
         
            -
            modified = stat.mtime
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
            $stdout << template.result(binding)
         
     | 
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'redcloth'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'syntax/convertors/html'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'erb'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'active_support'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            version_path = File.join(File.dirname(__FILE__), '..', 'lib', 'composite_primary_keys', 'version.rb')
         
     | 
| 
      
 10 
     | 
    
         
            +
            require File.expand_path(version_path)
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            version  = CompositePrimaryKeys::VERSION::STRING
         
     | 
| 
      
 13 
     | 
    
         
            +
            download = 'http://rubygems.org/gems/composite_primary_keys'
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            class Fixnum
         
     | 
| 
      
 16 
     | 
    
         
            +
              def ordinal
         
     | 
| 
      
 17 
     | 
    
         
            +
                # teens
         
     | 
| 
      
 18 
     | 
    
         
            +
                return 'th' if (10..19).include?(self % 100)
         
     | 
| 
      
 19 
     | 
    
         
            +
                # others
         
     | 
| 
      
 20 
     | 
    
         
            +
                case self % 10
         
     | 
| 
      
 21 
     | 
    
         
            +
                when 1
         
     | 
| 
      
 22 
     | 
    
         
            +
                  return 'st'
         
     | 
| 
      
 23 
     | 
    
         
            +
                when 2
         
     | 
| 
      
 24 
     | 
    
         
            +
                  return 'nd'
         
     | 
| 
      
 25 
     | 
    
         
            +
                when 3
         
     | 
| 
      
 26 
     | 
    
         
            +
                  return 'rd'
         
     | 
| 
      
 27 
     | 
    
         
            +
                else
         
     | 
| 
      
 28 
     | 
    
         
            +
                  return 'th'
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            class Time
         
     | 
| 
      
 34 
     | 
    
         
            +
              def pretty
         
     | 
| 
      
 35 
     | 
    
         
            +
                return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            def convert_syntax(syntax, source)
         
     | 
| 
      
 40 
     | 
    
         
            +
              return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            if ARGV.length >= 1
         
     | 
| 
      
 44 
     | 
    
         
            +
              src, template = ARGV
         
     | 
| 
      
 45 
     | 
    
         
            +
              template ||= File.dirname(__FILE__) + '/../website/template.js'
         
     | 
| 
      
 46 
     | 
    
         
            +
            else
         
     | 
| 
      
 47 
     | 
    
         
            +
              puts("Usage: #{File.split($0).last} source.txt [template.js] > output.html")
         
     | 
| 
      
 48 
     | 
    
         
            +
              exit!
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            template = ERB.new(File.open(template).read)
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            title = nil
         
     | 
| 
      
 54 
     | 
    
         
            +
            body = nil
         
     | 
| 
      
 55 
     | 
    
         
            +
            File.open(src) do |fsrc|
         
     | 
| 
      
 56 
     | 
    
         
            +
              title_text = fsrc.readline
         
     | 
| 
      
 57 
     | 
    
         
            +
              body_text = fsrc.read
         
     | 
| 
      
 58 
     | 
    
         
            +
              title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
         
     | 
| 
      
 59 
     | 
    
         
            +
              body = RedCloth.new(body_text)
         
     | 
| 
      
 60 
     | 
    
         
            +
            end
         
     | 
| 
      
 61 
     | 
    
         
            +
            stat = File.stat(src)
         
     | 
| 
      
 62 
     | 
    
         
            +
            created = stat.ctime
         
     | 
| 
      
 63 
     | 
    
         
            +
            modified = stat.mtime
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            $stdout << template.result(binding)
         
     | 
    
        data/tasks/website.rake
    CHANGED
    
    | 
         @@ -1,18 +1,18 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            desc 'Generate website files'
         
     | 
| 
       2 
     | 
    
         
            -
            task :website_generate do
         
     | 
| 
       3 
     | 
    
         
            -
              sh %{ ruby scripts/txt2html website/index.txt > website/index.html }
         
     | 
| 
       4 
     | 
    
         
            -
              sh %{ ruby scripts/txt2js website/version.txt > website/version.js }
         
     | 
| 
       5 
     | 
    
         
            -
              sh %{ ruby scripts/txt2js website/version-raw.txt > website/version-raw.js }
         
     | 
| 
       6 
     | 
    
         
            -
            end
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            desc 'Upload website files to rubyforge'
         
     | 
| 
       9 
     | 
    
         
            -
            task :website_upload do
         
     | 
| 
       10 
     | 
    
         
            -
              config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
         
     | 
| 
       11 
     | 
    
         
            -
              host = "#{config["username"]}@rubyforge.org"
         
     | 
| 
       12 
     | 
    
         
            -
              remote_dir = "/var/www/gforge-projects/compositekeys/"
         
     | 
| 
       13 
     | 
    
         
            -
              local_dir = 'website'
         
     | 
| 
       14 
     | 
    
         
            -
              sh %{scp -r #{local_dir}/* #{host}:#{remote_dir}}
         
     | 
| 
       15 
     | 
    
         
            -
            end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            desc 'Generate and upload website files'
         
     | 
| 
       18 
     | 
    
         
            -
            task :website => [:website_generate, :website_upload]
         
     | 
| 
      
 1 
     | 
    
         
            +
            desc 'Generate website files'
         
     | 
| 
      
 2 
     | 
    
         
            +
            task :website_generate do
         
     | 
| 
      
 3 
     | 
    
         
            +
              sh %{ ruby scripts/txt2html website/index.txt > website/index.html }
         
     | 
| 
      
 4 
     | 
    
         
            +
              sh %{ ruby scripts/txt2js website/version.txt > website/version.js }
         
     | 
| 
      
 5 
     | 
    
         
            +
              sh %{ ruby scripts/txt2js website/version-raw.txt > website/version-raw.js }
         
     | 
| 
      
 6 
     | 
    
         
            +
            end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            desc 'Upload website files to rubyforge'
         
     | 
| 
      
 9 
     | 
    
         
            +
            task :website_upload do
         
     | 
| 
      
 10 
     | 
    
         
            +
              config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
         
     | 
| 
      
 11 
     | 
    
         
            +
              host = "#{config["username"]}@rubyforge.org"
         
     | 
| 
      
 12 
     | 
    
         
            +
              remote_dir = "/var/www/gforge-projects/compositekeys/"
         
     | 
| 
      
 13 
     | 
    
         
            +
              local_dir = 'website'
         
     | 
| 
      
 14 
     | 
    
         
            +
              sh %{scp -r #{local_dir}/* #{host}:#{remote_dir}}
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            desc 'Generate and upload website files'
         
     | 
| 
      
 18 
     | 
    
         
            +
            task :website => [:website_generate, :website_upload]
         
     | 
    
        data/test/README_tests.rdoc
    CHANGED
    
    | 
         @@ -1,56 +1,56 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            = Composite Primary Keys - Testing Readme
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            == Testing an adapter
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            There are tests available for the following adapters:
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            * ibmdb
         
     | 
| 
       8 
     | 
    
         
            -
            * mysql
         
     | 
| 
       9 
     | 
    
         
            -
            * oracle
         
     | 
| 
       10 
     | 
    
         
            -
            * oracle_enhanced
         
     | 
| 
       11 
     | 
    
         
            -
            * postgresql
         
     | 
| 
       12 
     | 
    
         
            -
            * sqlite3
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
            To run the tests for one of the adapters follow these steps (using mysql in the example):
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
            * You will need the following gems:
         
     | 
| 
       17 
     | 
    
         
            -
                - rake
         
     | 
| 
       18 
     | 
    
         
            -
                - activerecord (3.1.0.rc5 or later)
         
     | 
| 
       19 
     | 
    
         
            -
                - mysql (or the adapter of your choice)
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            * Put your database connection settings in test/connections/databases.yml.
         
     | 
| 
       22 
     | 
    
         
            -
              Look at databases.example.yml for examples.
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                mysql:
         
     | 
| 
       25 
     | 
    
         
            -
                  adapter: mysql
         
     | 
| 
       26 
     | 
    
         
            -
                  username: root
         
     | 
| 
       27 
     | 
    
         
            -
                  database: composite_primary_keys_unittest
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
            * rake -T mysql
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                rake mysql:build_database         # Build the MySQL test databases
         
     | 
| 
       32 
     | 
    
         
            -
                rake mysql:drop_database          # Drop the MySQL test databases
         
     | 
| 
       33 
     | 
    
         
            -
                rake mysql:rebuild_database       # Rebuild the MySQL test databases
         
     | 
| 
       34 
     | 
    
         
            -
                rake mysql:test                    # Run tests using the mysql adapter
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
            * rake mysql:build_database
         
     | 
| 
       37 
     | 
    
         
            -
            * rake mysql:test
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
            == Running tests individually
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
            You can specify which test you'd like to run on the command line:
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
            * rake mysql:test TEST=test/test_equal.rb
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
            If you want to run closer to the metal you can cd into the test/
         
     | 
| 
       46 
     | 
    
         
            -
            directory and run the tests like so:
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
            * ADAPTER=mysql ruby test_equal.rb
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
            == Logging
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
            By default, ActiveRecord's log messages are sent to standard out when
         
     | 
| 
       53 
     | 
    
         
            -
            running the tests. If you would prefer to send them to a file, specify
         
     | 
| 
       54 
     | 
    
         
            -
            it as the environment variable CPK_LOGFILE:
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
            * CPK_LOGFILE=cpk_test.log rake mysql:test
         
     | 
| 
      
 1 
     | 
    
         
            +
            = Composite Primary Keys - Testing Readme
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            == Testing an adapter
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            There are tests available for the following adapters:
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            * ibmdb
         
     | 
| 
      
 8 
     | 
    
         
            +
            * mysql
         
     | 
| 
      
 9 
     | 
    
         
            +
            * oracle
         
     | 
| 
      
 10 
     | 
    
         
            +
            * oracle_enhanced
         
     | 
| 
      
 11 
     | 
    
         
            +
            * postgresql
         
     | 
| 
      
 12 
     | 
    
         
            +
            * sqlite3
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            To run the tests for one of the adapters follow these steps (using mysql in the example):
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            * You will need the following gems:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - rake
         
     | 
| 
      
 18 
     | 
    
         
            +
                - activerecord (3.1.0.rc5 or later)
         
     | 
| 
      
 19 
     | 
    
         
            +
                - mysql (or the adapter of your choice)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            * Put your database connection settings in test/connections/databases.yml.
         
     | 
| 
      
 22 
     | 
    
         
            +
              Look at databases.example.yml for examples.
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                mysql:
         
     | 
| 
      
 25 
     | 
    
         
            +
                  adapter: mysql
         
     | 
| 
      
 26 
     | 
    
         
            +
                  username: root
         
     | 
| 
      
 27 
     | 
    
         
            +
                  database: composite_primary_keys_unittest
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            * rake -T mysql
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                rake mysql:build_database         # Build the MySQL test databases
         
     | 
| 
      
 32 
     | 
    
         
            +
                rake mysql:drop_database          # Drop the MySQL test databases
         
     | 
| 
      
 33 
     | 
    
         
            +
                rake mysql:rebuild_database       # Rebuild the MySQL test databases
         
     | 
| 
      
 34 
     | 
    
         
            +
                rake mysql:test                    # Run tests using the mysql adapter
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            * rake mysql:build_database
         
     | 
| 
      
 37 
     | 
    
         
            +
            * rake mysql:test
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            == Running tests individually
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            You can specify which test you'd like to run on the command line:
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            * rake mysql:test TEST=test/test_equal.rb
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            If you want to run closer to the metal you can cd into the test/
         
     | 
| 
      
 46 
     | 
    
         
            +
            directory and run the tests like so:
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            * ADAPTER=mysql ruby test_equal.rb
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            == Logging
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            By default, ActiveRecord's log messages are sent to standard out when
         
     | 
| 
      
 53 
     | 
    
         
            +
            running the tests. If you would prefer to send them to a file, specify
         
     | 
| 
      
 54 
     | 
    
         
            +
            it as the environment variable CPK_LOGFILE:
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            * CPK_LOGFILE=cpk_test.log rake mysql:test
         
     | 
| 
         @@ -1,30 +1,40 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
               
     | 
| 
       3 
     | 
    
         
            -
               
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
               
     | 
| 
       9 
     | 
    
         
            -
               
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
               
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
               
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
               
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
               
     | 
| 
       22 
     | 
    
         
            -
               
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
              adapter:  
     | 
| 
       26 
     | 
    
         
            -
               
     | 
| 
       27 
     | 
    
         
            -
               
     | 
| 
       28 
     | 
    
         
            -
               
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            # To run tests:
         
     | 
| 
      
 2 
     | 
    
         
            +
            #  1. Copy this file to test/connections/databases.yml.
         
     | 
| 
      
 3 
     | 
    
         
            +
            #  2. Update to match the databases you want to test against.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ibm_db:
         
     | 
| 
      
 6 
     | 
    
         
            +
              database: ocdpdev
         
     | 
| 
      
 7 
     | 
    
         
            +
              username: db2inst1
         
     | 
| 
      
 8 
     | 
    
         
            +
              password: password
         
     | 
| 
      
 9 
     | 
    
         
            +
              host: localhost
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            mysql:
         
     | 
| 
      
 12 
     | 
    
         
            +
              adapter: mysql2
         
     | 
| 
      
 13 
     | 
    
         
            +
              username: root
         
     | 
| 
      
 14 
     | 
    
         
            +
              password: mysql
         
     | 
| 
      
 15 
     | 
    
         
            +
              database: composite_primary_keys_unittest
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            oracle:
         
     | 
| 
      
 18 
     | 
    
         
            +
              adapter: oracle_enhanced
         
     | 
| 
      
 19 
     | 
    
         
            +
              database: xe
         
     | 
| 
      
 20 
     | 
    
         
            +
              username: SYSTEM
         
     | 
| 
      
 21 
     | 
    
         
            +
              password: oracle
         
     | 
| 
      
 22 
     | 
    
         
            +
              host: localhost
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            postgresql:
         
     | 
| 
      
 25 
     | 
    
         
            +
              adapter: postgresql
         
     | 
| 
      
 26 
     | 
    
         
            +
              database: composite_primary_keys_unittest
         
     | 
| 
      
 27 
     | 
    
         
            +
              username: postgres
         
     | 
| 
      
 28 
     | 
    
         
            +
              host: localhost
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            sqlite:
         
     | 
| 
      
 31 
     | 
    
         
            +
              adapter: sqlite3
         
     | 
| 
      
 32 
     | 
    
         
            +
              database: <%= File.join(project_root, 'db', 'composite_primary_keys_unittest.sqlite') %>
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            sqlserver:
         
     | 
| 
      
 35 
     | 
    
         
            +
              adapter: sqlserver
         
     | 
| 
      
 36 
     | 
    
         
            +
              username: cpk
         
     | 
| 
      
 37 
     | 
    
         
            +
              password: cpk
         
     | 
| 
      
 38 
     | 
    
         
            +
              database: composite_primary_keys_unittest
         
     | 
| 
      
 39 
     | 
    
         
            +
              host: localhost
         
     | 
| 
      
 40 
     | 
    
         
            +
              port: 1433
         
     | 
    
        data/test/db_test.rb
    CHANGED
    
    | 
         @@ -1,53 +1,53 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # assoc_test.rb
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            path = File.expand_path(File.join(File.basename(__FILE__), "..", "lib", "composite_primary_keys"))
         
     | 
| 
       4 
     | 
    
         
            -
            puts path
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            require File.join(path)
         
     | 
| 
       7 
     | 
    
         
            -
            require 'active_record'
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            $configuration = {
         
     | 
| 
       10 
     | 
    
         
            -
              :adapter  => 'postgresql',
         
     | 
| 
       11 
     | 
    
         
            -
              :database => 'cpk_test',
         
     | 
| 
       12 
     | 
    
         
            -
              :username => 'postgres'
         
     | 
| 
       13 
     | 
    
         
            -
            }
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            ActiveRecord::Base.establish_connection($configuration) unless ActiveRecord::Base.connected?
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            module GlobePG
         
     | 
| 
       18 
     | 
    
         
            -
              class PGBase < ActiveRecord::Base
         
     | 
| 
       19 
     | 
    
         
            -
                self.abstract_class = true
         
     | 
| 
       20 
     | 
    
         
            -
               # establish_connection($configuration) unless connected?
         
     | 
| 
       21 
     | 
    
         
            -
              end
         
     | 
| 
       22 
     | 
    
         
            -
            end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
            module GlobePG
         
     | 
| 
       25 
     | 
    
         
            -
              class TeacherToSchool < PGBase
         
     | 
| 
       26 
     | 
    
         
            -
                set_table_name 'teacher_to_school'
         
     | 
| 
       27 
     | 
    
         
            -
                self.primary_keys = ['teacherid', 'schoolid']
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                belongs_to :globe_teacher, :foreign_key => 'teacherid'
         
     | 
| 
       30 
     | 
    
         
            -
                belongs_to :globe_school, :foreign_key => 'schoolid'
         
     | 
| 
       31 
     | 
    
         
            -
              end
         
     | 
| 
       32 
     | 
    
         
            -
            end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
            module GlobePG
         
     | 
| 
       35 
     | 
    
         
            -
              class GlobeSchool < PGBase
         
     | 
| 
       36 
     | 
    
         
            -
                set_table_name 'globe_school'
         
     | 
| 
       37 
     | 
    
         
            -
                self.primary_key = 'schoolid'
         
     | 
| 
       38 
     | 
    
         
            -
                has_many :teacher_to_schools, :foreign_key => :schoolid
         
     | 
| 
       39 
     | 
    
         
            -
                has_many :globe_teachers, :through => :teacher_to_schools
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
     | 
    
         
            -
            end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
            module GlobePG
         
     | 
| 
       44 
     | 
    
         
            -
              class GlobeTeacher < PGBase
         
     | 
| 
       45 
     | 
    
         
            -
                set_table_name 'globe_teacher'
         
     | 
| 
       46 
     | 
    
         
            -
                self.primary_key = 'teacherid'
         
     | 
| 
       47 
     | 
    
         
            -
                has_many :teacher_to_schools, :foreign_key => :teacherid
         
     | 
| 
       48 
     | 
    
         
            -
                has_many :globe_schools, :through => :teacher_to_schools
         
     | 
| 
       49 
     | 
    
         
            -
              end
         
     | 
| 
       50 
     | 
    
         
            -
            end
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
            teacher = GlobePG::GlobeTeacher.find_by_teacherid('ZZGLOBEY')
         
     | 
| 
      
 1 
     | 
    
         
            +
            # assoc_test.rb
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            path = File.expand_path(File.join(File.basename(__FILE__), "..", "lib", "composite_primary_keys"))
         
     | 
| 
      
 4 
     | 
    
         
            +
            puts path
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require File.join(path)
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'active_record'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            $configuration = {
         
     | 
| 
      
 10 
     | 
    
         
            +
              :adapter  => 'postgresql',
         
     | 
| 
      
 11 
     | 
    
         
            +
              :database => 'cpk_test',
         
     | 
| 
      
 12 
     | 
    
         
            +
              :username => 'postgres'
         
     | 
| 
      
 13 
     | 
    
         
            +
            }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            ActiveRecord::Base.establish_connection($configuration) unless ActiveRecord::Base.connected?
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            module GlobePG
         
     | 
| 
      
 18 
     | 
    
         
            +
              class PGBase < ActiveRecord::Base
         
     | 
| 
      
 19 
     | 
    
         
            +
                self.abstract_class = true
         
     | 
| 
      
 20 
     | 
    
         
            +
               # establish_connection($configuration) unless connected?
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            module GlobePG
         
     | 
| 
      
 25 
     | 
    
         
            +
              class TeacherToSchool < PGBase
         
     | 
| 
      
 26 
     | 
    
         
            +
                set_table_name 'teacher_to_school'
         
     | 
| 
      
 27 
     | 
    
         
            +
                self.primary_keys = ['teacherid', 'schoolid']
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                belongs_to :globe_teacher, :foreign_key => 'teacherid'
         
     | 
| 
      
 30 
     | 
    
         
            +
                belongs_to :globe_school, :foreign_key => 'schoolid'
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            module GlobePG
         
     | 
| 
      
 35 
     | 
    
         
            +
              class GlobeSchool < PGBase
         
     | 
| 
      
 36 
     | 
    
         
            +
                set_table_name 'globe_school'
         
     | 
| 
      
 37 
     | 
    
         
            +
                self.primary_key = 'schoolid'
         
     | 
| 
      
 38 
     | 
    
         
            +
                has_many :teacher_to_schools, :foreign_key => :schoolid
         
     | 
| 
      
 39 
     | 
    
         
            +
                has_many :globe_teachers, :through => :teacher_to_schools
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            module GlobePG
         
     | 
| 
      
 44 
     | 
    
         
            +
              class GlobeTeacher < PGBase
         
     | 
| 
      
 45 
     | 
    
         
            +
                set_table_name 'globe_teacher'
         
     | 
| 
      
 46 
     | 
    
         
            +
                self.primary_key = 'teacherid'
         
     | 
| 
      
 47 
     | 
    
         
            +
                has_many :teacher_to_schools, :foreign_key => :teacherid
         
     | 
| 
      
 48 
     | 
    
         
            +
                has_many :globe_schools, :through => :teacher_to_schools
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
            end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            teacher = GlobePG::GlobeTeacher.find_by_teacherid('ZZGLOBEY')
         
     | 
| 
       53 
53 
     | 
    
         
             
            p teacher.globe_schools 
         
     |