Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add back Ruby 2.2 support for Rails 5 #2332

Merged
merged 2 commits into from May 16, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 9 additions & 0 deletions .travis.yml
Expand Up @@ -77,6 +77,11 @@ matrix:
env: RAILS_VERSION='~> 5.2.0'
- rvm: 2.3.8
env: RAILS_VERSION='~> 5.2.0'
- rvm: 2.2.10
env: RAILS_VERSION='~> 5.2.0'
allow_failure: true
- rvm: 2.2.10
env: RAILS_VERSION='5-2-stable'
benoittgt marked this conversation as resolved.
Show resolved Hide resolved

# Rails 5.1 Builds >= 2.2.2
- rvm: 2.6.6
Expand All @@ -87,6 +92,8 @@ matrix:
env: RAILS_VERSION='~> 5.1.0'
- rvm: 2.3.8
env: RAILS_VERSION='~> 5.1.0'
- rvm: 2.2.10
env: RAILS_VERSION='~> 5.1.0'

# Rails 5.0 Builds >= 2.2.2
- rvm: 2.6.6
Expand All @@ -97,5 +104,7 @@ matrix:
env: RAILS_VERSION='~> 5.0.0'
- rvm: 2.3.8
env: RAILS_VERSION='~> 5.0.0'
- rvm: 2.2.10
env: RAILS_VERSION='~> 5.0.0'

fast_finish: true
13 changes: 11 additions & 2 deletions Gemfile
Expand Up @@ -22,6 +22,9 @@ case RAILS_VERSION
when /master/
MAJOR = 6
MINOR = 0
when /5-2-stable/
MAJOR = 5
MINOR = 2
when /stable/
MAJOR = 6
MINOR = 0
Expand All @@ -46,7 +49,11 @@ gem 'rake', '~> 12'

gem 'mime-types', "~> 3"

gem 'capybara', '>= 2.13', '< 4.0', require: false
if RUBY_VERSION.to_f == 2.2
gem 'capybara', '~> 3.1.0'
else
gem 'capybara', '>= 2.13', '< 4.0', require: false
end

if MAJOR < 6
gem 'nokogiri', '1.9.1'
Expand All @@ -56,7 +63,9 @@ end

gem "rubyzip", '~> 1.2'

gem 'rubocop', '~> 0.80.1'
if RUBY_VERSION.to_f >= 2.3
gem 'rubocop', '~> 0.80.1'
end

custom_gemfile = File.expand_path('Gemfile-custom', __dir__)
eval_gemfile custom_gemfile if File.exist?(custom_gemfile)
Expand Down
2 changes: 1 addition & 1 deletion Rakefile
Expand Up @@ -27,7 +27,7 @@ RSpec::Core::RakeTask.new(:spec) do |t|
end

Cucumber::Rake::Task.new(:cucumber) do |t|
version = ENV.fetch("RAILS_VERSION", "~> 6.0.0")[/\d[\.-]\d/]
version = ENV.fetch("RAILS_VERSION", "~> 6.0.0")[/\d[\.-]\d/].tr('-', '.')
if version == "master" || version.nil?
version = Float::INFINITY
end
Expand Down
4 changes: 3 additions & 1 deletion example_app_generator/generate_app.rb
Expand Up @@ -36,7 +36,9 @@
end

if Rails::VERSION::STRING >= "5.1.0"
if RUBY_VERSION < "2.4"
if RUBY_VERSION < "2.3"
gsub_file "Gemfile", /.*capybara.*/, "gem 'capybara', '~> 3.1.0'"
elsif RUBY_VERSION < "2.4"
gsub_file "Gemfile", /.*capybara.*/, "gem 'capybara', '~> 3.15.0'"
end
if Rails::VERSION::STRING >= "5.2.0"
Expand Down
4 changes: 2 additions & 2 deletions lib/rspec/rails/example/mailer_example_group.rb
Expand Up @@ -21,8 +21,8 @@ module MailerExampleGroup

included do
include ::Rails.application.routes.url_helpers
options = ::Rails.configuration.action_mailer.default_url_options
options&.each { |key, value| default_url_options[key] = value }
options = ::Rails.configuration.action_mailer.default_url_options || {}
options.each { |key, value| default_url_options[key] = value }
end

# Class-level DSL for mailer specs.
Expand Down
10 changes: 8 additions & 2 deletions script/update_rubygems_and_install_bundler
Expand Up @@ -5,5 +5,11 @@
set -e
source script/functions.sh

gem update --no-document --system
gem install --no-document bundler
if is_ruby_23_plus; then
gem update --no-document --system
gem install --no-document bundler
else
echo "Warning installing older versions of Rubygems / Bundler"
gem update --system '2.7.8'
gem install bundler -v '1.17.3'
fi
20 changes: 17 additions & 3 deletions spec/rspec/rails/example/view_example_group_spec.rb
@@ -1,3 +1,5 @@
require 'support/group_failure_formatter'

module RSpec::Rails
RSpec.describe ViewExampleGroup do
it_behaves_like "an rspec-rails example group mixin", :view,
Expand Down Expand Up @@ -234,17 +236,29 @@ def _view; end # Stub method
expect(view_spec.view).to eq(view)
end

it 'is accessible to hooks' do
if RUBY_VERSION <= "2.3.0" && ENV["RAILS_VERSION"] !~ /stable/ && ::Rails.version.to_f == 5.2
pending_only_on_ruby_22_rails_52 = """
Rails 5.2.4.2 has a syntax error in ActionDispatch::Request::Session.
(A &. usage which does not work in 2.2.10)
It has been fixed but not released, this spec will not pass until that
has been released.
"""
else
pending_only_on_ruby_22_rails_52 = false
end

it 'is accessible to hooks', pending: pending_only_on_ruby_22_rails_52 do
with_isolated_config do
run_count = 0
RSpec.configuration.before(:each, type: :view) do
allow(view).to receive(:render) { :value }
run_count += 1
end
group = RSpec::Core::ExampleGroup.describe 'a view', type: :view do
specify { true }
specify { expect(true).to eq true }
end
group.run
group.run(failure_reporter)
expect(failure_reporter.exceptions).to eq []
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not understand why we need the FailureReporter anymore?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its included for future debugging, we've had this spec fail before and its really hard to see why without this pattern, I'm going to use it in other places for the same reason.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! Maybe we could add a little bit of documentation on the top of file or somewhere?

expect(run_count).to eq 1
end
end
Expand Down
23 changes: 23 additions & 0 deletions spec/support/group_failure_formatter.rb
@@ -0,0 +1,23 @@
module RSpec::Rails::TestSupport
class FailureReporter
def initialize
@exceptions = []
end
attr_reader :exceptions

def example_failed(example)
@exceptions << example.exception
end

def method_missing(name, *_args, &_block)
end
end

def failure_reporter
@failure_reporter ||= FailureReporter.new
end
end

RSpec.configure do |config|
config.include RSpec::Rails::TestSupport
end