diff options
| author | Andrew White <pixeltrix@users.noreply.github.com> | 2016-11-11 20:05:10 +0000 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-11-11 20:05:10 +0000 | 
| commit | 6b830dc930a5d684c05b028757b06834df4d064d (patch) | |
| tree | cce822e4496b50a6bd5b121a540447f59f59e3e4 | |
| parent | e4b0a5f66ebd2b7f29e4f868d2f6b2504df091e6 (diff) | |
| parent | 9b103311d5d266fa509f5da8825ea5daecba1836 (diff) | |
| download | rails-6b830dc930a5d684c05b028757b06834df4d064d.tar.gz rails-6b830dc930a5d684c05b028757b06834df4d064d.tar.bz2 rails-6b830dc930a5d684c05b028757b06834df4d064d.zip | |
Merge pull request #26962 from rails/fix-3-2-stable-on-ruby-2-3
Fix Rails 3-2-stable on Ruby 2.3.1
35 files changed, 232 insertions, 91 deletions
| diff --git a/.travis.yml b/.travis.yml index f7259bfd3a..810ddeb65d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,39 @@  language: ruby  sudo: false -script: 'ci/travis.rb' +cache: +  bundler: true + +services: +  - memcached + +bundler_args: --without test --jobs 3 --retry 3  before_install: -  - gem install bundler +  - gem install bundler -v=1.11.2 + +before_script: +  - bundle update + +script: 'ci/travis.rb' + +env: +  matrix: +    - "GEM=railties" +    - "GEM=ap,am,amo,ares,as" +    - "GEM=ar:mysql" +    - "GEM=ar:mysql2" +    - "GEM=ar:sqlite3" +    - "GEM=ar:postgresql" +  rvm:    - 1.8.7    - 1.9.2    - 1.9.3    - 2.0.0 -  - 2.1 -  - 2.2 -env: -  - "GEM=railties" -  - "GEM=ap,am,amo,ares,as" -  - "GEM=ar:mysql" -  - "GEM=ar:mysql2" -  - "GEM=ar:sqlite3" -  - "GEM=ar:postgresql" +  - 2.1.8 +  - 2.2.5 +  - 2.3.1 +  notifications:    email: false    irc: @@ -30,11 +46,3 @@ notifications:      on_failure: always      rooms:        - secure: "YA1alef1ESHWGFNVwvmVGCkMe4cUy4j+UcNvMUESraceiAfVyRMAovlQBGs6\n9kBRm7DHYBUXYC2ABQoJbQRLDr/1B5JPf/M8+Qd7BKu8tcDC03U01SMHFLpO\naOs/HLXcDxtnnpL07tGVsm0zhMc5N8tq4/L3SHxK7Vi+TacwQzI=" -bundler_args: --path vendor/bundle - -# Railties specs on Ruby 1.8.7 are broken. -# Last recorded passing CI run is https://travis-ci.org/rails/rails/builds/48782330 -matrix: -  allow_failures: -    - rvm: 1.8.7 -      env: GEM=railties @@ -58,7 +58,7 @@ group :doc do    # to a bug, but the PR that fixes it has been there    # for some weeks unapplied. As a temporary solution    # this is our own fork with the fix. -  gem 'sdoc',  :git => 'git://github.com/fxn/sdoc.git' +  gem 'sdoc',  :git => 'https://github.com/fxn/sdoc.git'    gem 'RedCloth', '~> 4.2'    gem 'w3c_validators'  end @@ -68,11 +68,10 @@ gem 'memcache-client', '>= 1.8.5'  platforms :mri_18 do    gem 'system_timer' -  gem 'json'  end  # Add your own local bundler stuff -instance_eval File.read '.Gemfile' if File.exists? '.Gemfile' +instance_eval File.read '.Gemfile' if File.exist? '.Gemfile'  platforms :mri do    group :test do @@ -82,7 +81,12 @@ end  platforms :ruby do    gem 'yajl-ruby' -  gem 'nokogiri', '>= 1.4.5', '< 1.6' + +  if RUBY_VERSION < '1.9.3' +    gem 'nokogiri', '>= 1.4.5', '< 1.6' +  else +    gem 'nokogiri', '>= 1.6.0' +  end    # AR    gem 'sqlite3', '~> 1.3.5' @@ -90,6 +94,8 @@ platforms :ruby do    group :db do      if RUBY_VERSION < '1.9.3'        gem 'pg', '>= 0.11.0', '< 0.18' +    elsif RUBY_VERSION < '2.0.0' +      gem 'pg', '>= 0.11.0', '< 0.19'      else        gem 'pg', '>= 0.11.0'      end @@ -99,7 +105,6 @@ platforms :ruby do  end  platforms :jruby do -  gem 'json'    gem 'activerecord-jdbcsqlite3-adapter', '>= 1.2.7'    # This is needed by now to let tests work on JRuby @@ -113,6 +118,10 @@ platforms :jruby do    end  end +platforms :mri_18, :jruby do +  gem 'json' +end +  # gems that are necessary for ActiveRecord tests with Oracle database  if ENV['ORACLE_ENHANCED_PATH'] || ENV['ORACLE_ENHANCED']    platforms :ruby do @@ -121,7 +130,7 @@ if ENV['ORACLE_ENHANCED_PATH'] || ENV['ORACLE_ENHANCED']    if ENV['ORACLE_ENHANCED_PATH']      gem 'activerecord-oracle_enhanced-adapter', :path => ENV['ORACLE_ENHANCED_PATH']    else -    gem 'activerecord-oracle_enhanced-adapter', :git => 'git://github.com/rsim/oracle-enhanced.git' +    gem 'activerecord-oracle_enhanced-adapter', :git => 'https://github.com/rsim/oracle-enhanced.git'    end  end diff --git a/actionmailer/test/abstract_unit.rb b/actionmailer/test/abstract_unit.rb index 0b076e1ff9..0e35a88e9f 100644 --- a/actionmailer/test/abstract_unit.rb +++ b/actionmailer/test/abstract_unit.rb @@ -42,6 +42,9 @@ ActiveSupport::Deprecation.debug = true  ActionView::Template.register_template_handler :haml, lambda { |template| "Look its HAML!".inspect }  ActionView::Template.register_template_handler :bak, lambda { |template| "Lame backup".inspect } +# Disable available locale checks to avoid warnings running the test suite. +I18n.enforce_available_locales = false +  FIXTURE_LOAD_PATH = File.expand_path('fixtures', File.dirname(__FILE__))  ActionMailer::Base.view_paths = FIXTURE_LOAD_PATH diff --git a/actionpack/actionpack.gemspec b/actionpack/actionpack.gemspec index cd906c0cdc..c795e35ac7 100644 --- a/actionpack/actionpack.gemspec +++ b/actionpack/actionpack.gemspec @@ -22,7 +22,7 @@ Gem::Specification.new do |s|    s.add_dependency('activesupport', version)    s.add_dependency('activemodel',   version)    s.add_dependency('rack-cache',    '~> 1.2') -  s.add_dependency('builder',       '~> 3.0.0') +  s.add_dependency('builder',       '~> 3.0')    s.add_dependency('rack',          '~> 1.4.5')    s.add_dependency('rack-test',     '~> 0.6.1')    s.add_dependency('journey',       '~> 1.0.4') diff --git a/actionpack/lib/abstract_controller/helpers.rb b/actionpack/lib/abstract_controller/helpers.rb index 77cc4c07d9..7a9055a679 100644 --- a/actionpack/lib/abstract_controller/helpers.rb +++ b/actionpack/lib/abstract_controller/helpers.rb @@ -12,6 +12,15 @@ module AbstractController        self._helper_methods = Array.new      end +    class MissingHelperError < LoadError +      def initialize(error, path) +        @error = error +        @path  = "helpers/#{path}.rb" +        set_backtrace error.backtrace +        super("Missing helper file helpers/%s.rb" % path) +      end +    end +      module ClassMethods        # When a class is inherited, wrap its helper module in a new module.        # This ensures that the parent class's module can be changed @@ -132,7 +141,11 @@ module AbstractController            case arg            when String, Symbol              file_name = "#{arg.to_s.underscore}_helper" -            require_dependency(file_name, "Missing helper file helpers/%s.rb") +            begin +              require_dependency(file_name) +            rescue LoadError => e +              raise MissingHelperError.new(e, file_name) +            end              file_name.camelize.constantize            when Module              arg diff --git a/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb b/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb index 05d5f1870a..edfc374b3b 100644 --- a/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb +++ b/actionpack/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb @@ -47,7 +47,7 @@ module ActionView            if concat || (config.perform_caching && cache)              joined_name = (cache == true ? "all" : cache) + ".#{extension}"              joined_path = File.join((joined_name[/^#{File::SEPARATOR}/] ? config.assets_dir : custom_dir), joined_name) -            unless config.perform_caching && File.exists?(joined_path) +            unless config.perform_caching && File.exist?(joined_path)                write_asset_file_contents(joined_path, compute_paths(sources, recursive))              end              asset_tag(joined_name, options) diff --git a/actionpack/lib/action_view/template.rb b/actionpack/lib/action_view/template.rb index e67e52cc76..069ac4e761 100644 --- a/actionpack/lib/action_view/template.rb +++ b/actionpack/lib/action_view/template.rb @@ -323,7 +323,8 @@ module ActionView        end        def locals_code #:nodoc: -        @locals.map { |key| "#{key} = local_assigns[:#{key}];" }.join +        # Double assign to suppress the dreaded 'assigned but unused variable' warning +        @locals.map { |key| "#{key} = #{key} = local_assigns[:#{key}];" }.join        end        def method_name #:nodoc: diff --git a/actionpack/lib/sprockets/helpers/rails_helper.rb b/actionpack/lib/sprockets/helpers/rails_helper.rb index 243c2e5e50..6712aefb2d 100644 --- a/actionpack/lib/sprockets/helpers/rails_helper.rb +++ b/actionpack/lib/sprockets/helpers/rails_helper.rb @@ -163,7 +163,7 @@ module Sprockets              source            elsif source_ext.blank?              "#{source}.#{ext}" -          elsif File.exists?(source) || exact_match_present?(source) +          elsif File.exist?(source) || exact_match_present?(source)              source            else              "#{source}.#{ext}" diff --git a/actionpack/test/abstract/helper_test.rb b/actionpack/test/abstract/helper_test.rb index b28a5b5afb..2e86e7e859 100644 --- a/actionpack/test/abstract/helper_test.rb +++ b/actionpack/test/abstract/helper_test.rb @@ -69,7 +69,10 @@ module AbstractController        end        def test_declare_missing_helper -        assert_raise(MissingSourceFile) { AbstractHelpers.helper :missing } +        e = assert_raise AbstractController::Helpers::MissingHelperError do +          AbstractHelpers.helper :missing +        end +        assert_equal "helpers/missing_helper.rb", e.path        end        def test_helpers_with_module_through_block diff --git a/actionpack/test/abstract_unit.rb b/actionpack/test/abstract_unit.rb index 74efcba666..7ea2c5f061 100644 --- a/actionpack/test/abstract_unit.rb +++ b/actionpack/test/abstract_unit.rb @@ -51,6 +51,9 @@ ActiveSupport::Dependencies.hook!  # Show backtraces for deprecated behavior for quicker cleanup.  ActiveSupport::Deprecation.debug = true +# Disable available locale checks to avoid warnings running the test suite. +I18n.enforce_available_locales = false +  # Register danish language for testing  I18n.backend.store_translations 'da', {}  I18n.backend.store_translations 'pt-BR', {} diff --git a/actionpack/test/template/date_helper_test.rb b/actionpack/test/template/date_helper_test.rb index ad46ff4429..ea4b1611cf 100644 --- a/actionpack/test/template/date_helper_test.rb +++ b/actionpack/test/template/date_helper_test.rb @@ -1386,7 +1386,7 @@ class DateHelperTest < ActionView::TestCase      expected << %(<option value="">Choose seconds</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18" selected="selected">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)      expected << "</select>\n" -    assert_dom_equal expected, select_time(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt => true, :include_seconds => true, +    assert_dom_equal expected, select_time(Time.mktime(2003, 8, 16, 8, 4, 18), :include_seconds => true,        :prompt => {:hour => 'Choose hour', :minute => 'Choose minute', :second => 'Choose seconds'})    end diff --git a/activemodel/activemodel.gemspec b/activemodel/activemodel.gemspec index a4f0836282..ce7037087f 100644 --- a/activemodel/activemodel.gemspec +++ b/activemodel/activemodel.gemspec @@ -19,5 +19,5 @@ Gem::Specification.new do |s|    s.require_path = 'lib'    s.add_dependency('activesupport', version) -  s.add_dependency('builder',       '~> 3.0.0') +  s.add_dependency('builder',       '~> 3.0')  end diff --git a/activemodel/test/cases/helper.rb b/activemodel/test/cases/helper.rb index 2e860272a4..84f6a464cd 100644 --- a/activemodel/test/cases/helper.rb +++ b/activemodel/test/cases/helper.rb @@ -10,4 +10,7 @@ require 'active_support/core_ext/string/access'  # Show backtraces for deprecated behavior for quicker cleanup.  ActiveSupport::Deprecation.debug = true +# Disable available locale checks to avoid warnings running the test suite. +I18n.enforce_available_locales = false +  require 'test/unit' diff --git a/activerecord/lib/active_record/associations/association.rb b/activerecord/lib/active_record/associations/association.rb index abee941c07..7cdaf78223 100644 --- a/activerecord/lib/active_record/associations/association.rb +++ b/activerecord/lib/active_record/associations/association.rb @@ -28,6 +28,7 @@ module ActiveRecord          @target = nil          @owner, @reflection = owner, reflection          @updated = false +        @stale_state = nil          reset          reset_scope diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 5bd1721439..77ad428685 100644 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -648,24 +648,26 @@ module ActiveRecord #:nodoc:          "#<#{self.class} #{inspection}>"        end -      # Hackery to accomodate Syck. Remove for 4.0. -      def to_yaml(opts = {}) #:nodoc: -        if YAML.const_defined?(:ENGINE) && !YAML::ENGINE.syck? -          super -        else -          coder = {} -          encode_with(coder) -          YAML.quick_emit(self, opts) do |out| -            out.map(taguri, to_yaml_style) do |map| -              coder.each { |k, v| map.add(k, v) } +      if RUBY_VERSION < '2.2' +        # Hackery to accomodate Syck. Remove for 4.0. +        def to_yaml(opts = {}) #:nodoc: +          if YAML.const_defined?(:ENGINE) && !YAML::ENGINE.syck? +            super +          else +            coder = {} +            encode_with(coder) +            YAML.quick_emit(self, opts) do |out| +              out.map(taguri, to_yaml_style) do |map| +                coder.each { |k, v| map.add(k, v) } +              end              end            end          end -      end -      # Hackery to accomodate Syck. Remove for 4.0. -      def yaml_initialize(tag, coder) #:nodoc: -        init_with(coder) +        # Hackery to accomodate Syck. Remove for 4.0. +        def yaml_initialize(tag, coder) #:nodoc: +          init_with(coder) +        end        end      private diff --git a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb index 04ab7e0a43..cd1575d049 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb @@ -1,4 +1,5 @@  require 'uri' +require 'active_support/core_ext/uri'  module ActiveRecord    class Base @@ -68,7 +69,7 @@ module ActiveRecord                     :database => config.path.sub(%r{^/},""),                     :host     => config.host }            spec.reject!{ |_,value| value.blank? } -          spec.map { |key,value| spec[key] = URI.unescape(value) if value.is_a?(String) } +          spec.map { |key,value| spec[key] = URI.parser.unescape(value) if value.is_a?(String) }            if config.query              options = Hash[config.query.split("&").map{ |pair| pair.split("=") }].symbolize_keys              spec.merge!(options) diff --git a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb index 455560aa55..f3a47ba80a 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb @@ -571,7 +571,11 @@ module ActiveRecord          def translate_exception(exception, message)            case exception.message -          when /column(s)? .* (is|are) not unique/ +          # SQLite 3.8.2 returns a newly formatted error message: +          #   UNIQUE constraint failed: *table_name*.*column_name* +          # Older versions of SQLite return: +          #   column *column_name* is not unique +          when /column(s)? .* (is|are) not unique/, /UNIQUE constraint failed: .*/              RecordNotUnique.new(message, exception)            else              super diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb index e8ec93470d..546a60e702 100644 --- a/activerecord/lib/active_record/migration.rb +++ b/activerecord/lib/active_record/migration.rb @@ -470,7 +470,7 @@ module ActiveRecord      def copy(destination, sources, options = {})        copied = [] -      FileUtils.mkdir_p(destination) unless File.exists?(destination) +      FileUtils.mkdir_p(destination) unless File.exist?(destination)        destination_migrations = ActiveRecord::Migrator.migrations(destination)        last = destination_migrations.last diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index b8aed49854..44e2d2603e 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -398,7 +398,7 @@ db_namespace = namespace :db do      desc 'Load a schema.rb file into the database'      task :load => [:environment, :load_config] do        file = ENV['SCHEMA'] || "#{Rails.root}/db/schema.rb" -      if File.exists?(file) +      if File.exist?(file)          load(file)        else          abort %{#{file} doesn't exist yet. Run `rake db:migrate` to create it then try again. If you do not intend to use a database, you should instead alter #{Rails.root}/config/application.rb to limit the frameworks that will be loaded} diff --git a/activerecord/test/cases/adapters/postgresql/bytea_test.rb b/activerecord/test/cases/adapters/postgresql/bytea_test.rb index 5ed2d8aba2..9b8441c027 100644 --- a/activerecord/test/cases/adapters/postgresql/bytea_test.rb +++ b/activerecord/test/cases/adapters/postgresql/bytea_test.rb @@ -33,7 +33,6 @@ class PostgresqlByteaTest < ActiveRecord::TestCase    end    def test_serialize -    serializer = Serializer.new      klass = Class.new(ByteaDataType) {        serialize :serialized, Serializer.new      } diff --git a/activerecord/test/cases/helper.rb b/activerecord/test/cases/helper.rb index cf49b125d7..f5d226160d 100644 --- a/activerecord/test/cases/helper.rb +++ b/activerecord/test/cases/helper.rb @@ -17,6 +17,9 @@ require 'support/connection'  # Show backtraces for deprecated behavior for quicker cleanup.  ActiveSupport::Deprecation.debug = true +# Disable available locale checks to avoid warnings running the test suite. +I18n.enforce_available_locales = false +  # Enable Identity Map only when ENV['IM'] is set to "true"  ActiveRecord::IdentityMap.enabled = (ENV['IM'] == "true") @@ -124,7 +127,7 @@ def load_schema    load SCHEMA_ROOT + "/schema.rb" -  if File.exists?(adapter_specific_schema_file) +  if File.exist?(adapter_specific_schema_file)      load adapter_specific_schema_file    end  ensure diff --git a/activerecord/test/cases/migration_test.rb b/activerecord/test/cases/migration_test.rb index 7f0d921545..f74085fc7f 100644 --- a/activerecord/test/cases/migration_test.rb +++ b/activerecord/test/cases/migration_test.rb @@ -1786,10 +1786,14 @@ if ActiveRecord::Base.connection.supports_migrations?      def test_migrator_interleaved_migrations        ActiveRecord::Migrator.up(MIGRATIONS_ROOT + "/interleaved/pass_1") +      Object.send :remove_const, :InterleavedInnocentJointable +        assert_nothing_raised do          ActiveRecord::Migrator.up(MIGRATIONS_ROOT + "/interleaved/pass_2")        end +      Object.send :remove_const, :InterleavedPeopleHaveLastNames +        Person.reset_column_information        assert Person.column_methods_hash.include?(:last_name) @@ -2199,8 +2203,8 @@ if ActiveRecord::Base.connection.supports_migrations?        @existing_migrations = Dir[@migrations_path + "/*.rb"]        copied = ActiveRecord::Migration.copy(@migrations_path, {:bukkits => MIGRATIONS_ROOT + "/to_copy"}) -      assert File.exists?(@migrations_path + "/4_people_have_hobbies.bukkits.rb") -      assert File.exists?(@migrations_path + "/5_people_have_descriptions.bukkits.rb") +      assert File.exist?(@migrations_path + "/4_people_have_hobbies.bukkits.rb") +      assert File.exist?(@migrations_path + "/5_people_have_descriptions.bukkits.rb")        assert_equal [@migrations_path + "/4_people_have_hobbies.bukkits.rb", @migrations_path + "/5_people_have_descriptions.bukkits.rb"], copied.map(&:filename)        expected = "# This migration comes from bukkits (originally 1)" @@ -2223,10 +2227,10 @@ if ActiveRecord::Base.connection.supports_migrations?        sources[:bukkits] = MIGRATIONS_ROOT + "/to_copy"        sources[:omg] = MIGRATIONS_ROOT + "/to_copy2"        ActiveRecord::Migration.copy(@migrations_path, sources) -      assert File.exists?(@migrations_path + "/4_people_have_hobbies.bukkits.rb") -      assert File.exists?(@migrations_path + "/5_people_have_descriptions.bukkits.rb") -      assert File.exists?(@migrations_path + "/6_create_articles.omg.rb") -      assert File.exists?(@migrations_path + "/7_create_comments.omg.rb") +      assert File.exist?(@migrations_path + "/4_people_have_hobbies.bukkits.rb") +      assert File.exist?(@migrations_path + "/5_people_have_descriptions.bukkits.rb") +      assert File.exist?(@migrations_path + "/6_create_articles.omg.rb") +      assert File.exist?(@migrations_path + "/7_create_comments.omg.rb")        files_count = Dir[@migrations_path + "/*.rb"].length        ActiveRecord::Migration.copy(@migrations_path, sources) @@ -2241,8 +2245,8 @@ if ActiveRecord::Base.connection.supports_migrations?        Time.travel_to(Time.utc(2010, 7, 26, 10, 10, 10)) do          copied = ActiveRecord::Migration.copy(@migrations_path, {:bukkits => MIGRATIONS_ROOT + "/to_copy_with_timestamps"}) -        assert File.exists?(@migrations_path + "/20100726101010_people_have_hobbies.bukkits.rb") -        assert File.exists?(@migrations_path + "/20100726101011_people_have_descriptions.bukkits.rb") +        assert File.exist?(@migrations_path + "/20100726101010_people_have_hobbies.bukkits.rb") +        assert File.exist?(@migrations_path + "/20100726101011_people_have_descriptions.bukkits.rb")          expected = [@migrations_path + "/20100726101010_people_have_hobbies.bukkits.rb",                      @migrations_path + "/20100726101011_people_have_descriptions.bukkits.rb"]          assert_equal expected, copied.map(&:filename) @@ -2266,10 +2270,10 @@ if ActiveRecord::Base.connection.supports_migrations?        Time.travel_to(Time.utc(2010, 7, 26, 10, 10, 10)) do          copied = ActiveRecord::Migration.copy(@migrations_path, sources) -        assert File.exists?(@migrations_path + "/20100726101010_people_have_hobbies.bukkits.rb") -        assert File.exists?(@migrations_path + "/20100726101011_people_have_descriptions.bukkits.rb") -        assert File.exists?(@migrations_path + "/20100726101012_create_articles.omg.rb") -        assert File.exists?(@migrations_path + "/20100726101013_create_comments.omg.rb") +        assert File.exist?(@migrations_path + "/20100726101010_people_have_hobbies.bukkits.rb") +        assert File.exist?(@migrations_path + "/20100726101011_people_have_descriptions.bukkits.rb") +        assert File.exist?(@migrations_path + "/20100726101012_create_articles.omg.rb") +        assert File.exist?(@migrations_path + "/20100726101013_create_comments.omg.rb")          assert_equal 4, copied.length          files_count = Dir[@migrations_path + "/*.rb"].length @@ -2286,8 +2290,8 @@ if ActiveRecord::Base.connection.supports_migrations?        Time.travel_to(Time.utc(2010, 2, 20, 10, 10, 10)) do          ActiveRecord::Migration.copy(@migrations_path, {:bukkits => MIGRATIONS_ROOT + "/to_copy_with_timestamps"}) -        assert File.exists?(@migrations_path + "/20100301010102_people_have_hobbies.bukkits.rb") -        assert File.exists?(@migrations_path + "/20100301010103_people_have_descriptions.bukkits.rb") +        assert File.exist?(@migrations_path + "/20100301010102_people_have_hobbies.bukkits.rb") +        assert File.exist?(@migrations_path + "/20100301010103_people_have_descriptions.bukkits.rb")          files_count = Dir[@migrations_path + "/*.rb"].length          copied = ActiveRecord::Migration.copy(@migrations_path, {:bukkits => MIGRATIONS_ROOT + "/to_copy_with_timestamps"}) @@ -2341,8 +2345,8 @@ if ActiveRecord::Base.connection.supports_migrations?        Time.travel_to(Time.utc(2010, 7, 26, 10, 10, 10)) do          copied = ActiveRecord::Migration.copy(@migrations_path, {:bukkits => MIGRATIONS_ROOT + "/to_copy_with_timestamps"}) -        assert File.exists?(@migrations_path + "/20100726101010_people_have_hobbies.bukkits.rb") -        assert File.exists?(@migrations_path + "/20100726101011_people_have_descriptions.bukkits.rb") +        assert File.exist?(@migrations_path + "/20100726101010_people_have_hobbies.bukkits.rb") +        assert File.exist?(@migrations_path + "/20100726101011_people_have_descriptions.bukkits.rb")          assert_equal 2, copied.length        end      ensure @@ -2356,8 +2360,8 @@ if ActiveRecord::Base.connection.supports_migrations?        Time.travel_to(Time.utc(2010, 7, 26, 10, 10, 10)) do          copied = ActiveRecord::Migration.copy(@migrations_path, {:bukkits => MIGRATIONS_ROOT + "/to_copy_with_timestamps"}) -        assert File.exists?(@migrations_path + "/20100726101010_people_have_hobbies.bukkits.rb") -        assert File.exists?(@migrations_path + "/20100726101011_people_have_descriptions.bukkits.rb") +        assert File.exist?(@migrations_path + "/20100726101010_people_have_hobbies.bukkits.rb") +        assert File.exist?(@migrations_path + "/20100726101011_people_have_descriptions.bukkits.rb")          assert_equal 2, copied.length        end      ensure diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index 39632075e8..6d887ce123 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -669,11 +669,11 @@ class RelationTest < ActiveRecord::TestCase    end    def test_relation_merging_with_arel_equalities_keeps_last_equality -   devs = Developer.where(Developer.arel_table[:salary].eq(80000)).merge( -     Developer.where(Developer.arel_table[:salary].eq(9000)) -   ) -   assert_equal [developers(:poor_jamis)], devs.to_a - end +    devs = Developer.where(Developer.arel_table[:salary].eq(80000)).merge( +      Developer.where(Developer.arel_table[:salary].eq(9000)) +    ) +    assert_equal [developers(:poor_jamis)], devs.to_a +  end    def test_relation_merging_with_arel_equalities_with_a_non_attribute_left_hand_ignores_non_attributes_when_discarding_equalities      salary_attr = Developer.arel_table[:salary] @@ -681,7 +681,7 @@ class RelationTest < ActiveRecord::TestCase        Developer.where(salary_attr.eq(9000)).where(Arel::Nodes::NamedFunction.new('abs', [salary_attr]).eq(9000))      )      assert_equal [developers(:poor_jamis)], devs.to_a - end +  end    def test_relation_merging_with_eager_load      relations = [] diff --git a/activeresource/test/abstract_unit.rb b/activeresource/test/abstract_unit.rb index 583fd2afb7..90ca772211 100644 --- a/activeresource/test/abstract_unit.rb +++ b/activeresource/test/abstract_unit.rb @@ -13,6 +13,9 @@ require 'setter_trap'  require 'logger'  ActiveResource::Base.logger = Logger.new("#{File.dirname(__FILE__)}/debug.log") +# Disable available locale checks to avoid warnings running the test suite. +I18n.enforce_available_locales = false +  def setup_response    matz_hash = { 'person' => { :id => 1, :name => 'Matz' } } diff --git a/activesupport/lib/active_support/core_ext/load_error.rb b/activesupport/lib/active_support/core_ext/load_error.rb index 8bdfa0c5bc..bc575ee176 100644 --- a/activesupport/lib/active_support/core_ext/load_error.rb +++ b/activesupport/lib/active_support/core_ext/load_error.rb @@ -6,12 +6,14 @@ class LoadError      /^cannot load such file -- (.+)$/i,    ] -  def path -    @path ||= begin -      REGEXPS.find do |regex| -        message =~ regex +  unless method_defined?(:path) +    def path +      @path ||= begin +        REGEXPS.find do |regex| +          message =~ regex +        end +        $1        end -      $1      end    end @@ -20,4 +22,4 @@ class LoadError    end  end -MissingSourceFile = LoadError
\ No newline at end of file +MissingSourceFile = LoadError diff --git a/activesupport/lib/active_support/file_update_checker.rb b/activesupport/lib/active_support/file_update_checker.rb index a4ad2da137..2e0e873fda 100644 --- a/activesupport/lib/active_support/file_update_checker.rb +++ b/activesupport/lib/active_support/file_update_checker.rb @@ -95,7 +95,7 @@ module ActiveSupport      def updated_at #:nodoc:        @updated_at || begin          all = [] -        all.concat @files.select { |f| File.exists?(f) } +        all.concat @files.select { |f| File.exist?(f) }          all.concat Dir[@glob] if @glob          all.map { |path| File.mtime(path) }.max || Time.at(0)        end diff --git a/activesupport/lib/active_support/hash_with_indifferent_access.rb b/activesupport/lib/active_support/hash_with_indifferent_access.rb index 9dc93de5a9..c02bd60fde 100644 --- a/activesupport/lib/active_support/hash_with_indifferent_access.rb +++ b/activesupport/lib/active_support/hash_with_indifferent_access.rb @@ -153,6 +153,16 @@ module ActiveSupport      def symbolize_keys; to_hash.symbolize_keys end      def to_options!; self end +    if RUBY_VERSION > '1.9' +      def select(*args, &block) +        dup.tap { |hash| hash.select!(*args, &block) } +      end + +      def reject(*args, &block) +        dup.tap { |hash| hash.reject!(*args, &block) } +      end +    end +      # Convert to a Hash with String keys.      def to_hash        Hash.new(default).merge!(self) diff --git a/activesupport/lib/active_support/i18n.rb b/activesupport/lib/active_support/i18n.rb index f9c5e5e2f8..978e87beda 100644 --- a/activesupport/lib/active_support/i18n.rb +++ b/activesupport/lib/active_support/i18n.rb @@ -1,3 +1,7 @@ +require 'active_support/core_ext/hash/deep_merge' +require 'active_support/core_ext/hash/except' +require 'active_support/core_ext/hash/slice' +  begin    require 'i18n'    require 'active_support/lazy_load_hooks' diff --git a/activesupport/lib/active_support/ordered_hash.rb b/activesupport/lib/active_support/ordered_hash.rb index b0d4f2bd86..0f9caca892 100644 --- a/activesupport/lib/active_support/ordered_hash.rb +++ b/activesupport/lib/active_support/ordered_hash.rb @@ -52,6 +52,16 @@ module ActiveSupport        true      end +    if RUBY_VERSION > '1.9' +      def select(*args, &block) +        dup.tap { |hash| hash.select!(*args, &block) } +      end + +      def reject(*args, &block) +        dup.tap { |hash| hash.reject!(*args, &block) } +      end +    end +      # Hash is ordered in Ruby 1.9!      if RUBY_VERSION < '1.9' diff --git a/activesupport/lib/active_support/tagged_logging.rb b/activesupport/lib/active_support/tagged_logging.rb index 232c367d26..19a003757f 100644 --- a/activesupport/lib/active_support/tagged_logging.rb +++ b/activesupport/lib/active_support/tagged_logging.rb @@ -78,7 +78,7 @@ module ActiveSupport        end      else        def respond_to_missing?(*args) -        @logger.respond_to? *args +        @logger.respond_to?(*args)        end      end diff --git a/activesupport/test/abstract_unit.rb b/activesupport/test/abstract_unit.rb index c26a48a490..cbe491eb73 100644 --- a/activesupport/test/abstract_unit.rb +++ b/activesupport/test/abstract_unit.rb @@ -22,13 +22,17 @@ if "ruby".encoding_aware?    end  end +ENV['NO_RELOAD'] = '1' +require 'active_support' +require 'active_support/time' +  require 'test/unit'  require 'empty_bool'  silence_warnings { require 'mocha/setup' } -ENV['NO_RELOAD'] = '1' -require 'active_support' +# Disable available locale checks to avoid warnings running the test suite. +I18n.enforce_available_locales = false  # Include shims until we get off 1.8.6  require 'active_support/ruby/shim' if RUBY_VERSION < '1.8.7' diff --git a/activesupport/test/core_ext/hash_ext_test.rb b/activesupport/test/core_ext/hash_ext_test.rb index c3a59540fb..f29b91a324 100644 --- a/activesupport/test/core_ext/hash_ext_test.rb +++ b/activesupport/test/core_ext/hash_ext_test.rb @@ -259,6 +259,45 @@ class HashExtTest < Test::Unit::TestCase      assert_equal hash.delete('a'), nil    end +  def test_indifferent_select +    hash = ActiveSupport::HashWithIndifferentAccess.new(@strings).select { |k, v| v == 1 } + +    if RUBY_VERSION > '1.9' +      assert_equal({ "a" => 1 }, hash) +      assert_instance_of ActiveSupport::HashWithIndifferentAccess, hash +    else +      # Ruby 1.8.7 returns an Array from Hash#select +      assert_equal([["a", 1]], hash) +      assert_instance_of Array, hash +    end +  end + +  if RUBY_VERSION > '1.9' +    # Hash#select! was added in Ruby 1.9 +    def test_indifferent_select_bang +      indifferent_strings = ActiveSupport::HashWithIndifferentAccess.new(@strings) +      indifferent_strings.select! { |k, v| v == 1 } + +      assert_equal({ "a" => 1 }, indifferent_strings) +      assert_instance_of ActiveSupport::HashWithIndifferentAccess, indifferent_strings +    end +  end + +  def test_indifferent_reject +    hash = ActiveSupport::HashWithIndifferentAccess.new(@strings).reject { |k, v| v != 1 } + +    assert_equal({ "a" => 1 }, hash) +    assert_instance_of ActiveSupport::HashWithIndifferentAccess, hash +  end + +  def test_indifferent_reject_bang +    indifferent_strings = ActiveSupport::HashWithIndifferentAccess.new(@strings) +    indifferent_strings.reject! { |k, v| v != 1 } + +    assert_equal({ "a" => 1 }, indifferent_strings) +    assert_instance_of ActiveSupport::HashWithIndifferentAccess, indifferent_strings +  end +    def test_indifferent_to_hash      # Should convert to a Hash with String keys.      assert_equal @strings, @mixed.with_indifferent_access.to_hash diff --git a/activesupport/test/ordered_hash_test.rb b/activesupport/test/ordered_hash_test.rb index a7fd9402c8..31eeb7f565 100644 --- a/activesupport/test/ordered_hash_test.rb +++ b/activesupport/test/ordered_hash_test.rb @@ -125,6 +125,15 @@ class OrderedHashTest < Test::Unit::TestCase    def test_select      assert_equal @keys, @ordered_hash.select { true }.map(&:first) +    new_ordered_hash = @ordered_hash.select { true } +    assert_equal @keys, new_ordered_hash.map(&:first) + +    if RUBY_VERSION > '1.9' +      assert_instance_of ActiveSupport::OrderedHash, new_ordered_hash +    else +      # Ruby 1.8.7 returns an Array from Hash#select +      assert_instance_of Array, new_ordered_hash +    end    end    def test_delete_if @@ -147,6 +156,7 @@ class OrderedHashTest < Test::Unit::TestCase      assert_equal copy, @ordered_hash      assert !new_ordered_hash.keys.include?('pink')      assert @ordered_hash.keys.include?('pink') +    assert_instance_of ActiveSupport::OrderedHash, new_ordered_hash    end    def test_clear diff --git a/railties/test/application/initializers/active_record_test.rb b/railties/test/application/initializers/active_record_test.rb index b62943a278..d823577a3d 100644 --- a/railties/test/application/initializers/active_record_test.rb +++ b/railties/test/application/initializers/active_record_test.rb @@ -25,8 +25,8 @@ module ApplicationTests        # ActiveSupport::LogSubscriber.flush_all! in lib/rails/rack/logger.rb blew up in Ruby 2.0        # because it tries to open the database. This behavior doesn't happen in Ruby 1.9.3. -      # However, regardless, the server blew up. -      if RUBY_VERSION >= '2.0.0' +      # However, regardless, the server blew up. This appears to be fixed in 2.3.0. +      if RUBY_VERSION >= '2.0.0' && RUBY_VERSION < '2.3.0'          assert_raises (Errno::ENOENT) { get '/foo' }        else          get '/foo' diff --git a/railties/test/application/routing_test.rb b/railties/test/application/routing_test.rb index 7d6033c54c..c0dba3ea3e 100644 --- a/railties/test/application/routing_test.rb +++ b/railties/test/application/routing_test.rb @@ -9,6 +9,8 @@ module ApplicationTests      def setup        build_app        boot_rails + +      sleep 1      end      def teardown @@ -191,14 +193,14 @@ module ApplicationTests          get '/foo'          assert_equal 'bar', last_response.body +        sleep 1 +          app_file 'config/routes.rb', <<-RUBY            AppTemplate::Application.routes.draw do              match 'foo', :to => 'foo#baz'            end          RUBY -        sleep 0.1 -          get '/foo'          assert_equal expected, last_response.body        end | 
