1
0
Fork 0
mirror of https://github.com/pry/pry-rails.git synced 2022-11-09 12:36:03 -05:00

Add Rails 5.2 and 6.0 to build, fixing up issues

In addition to adding scenarios for 5.2 and 6.0, I had to do some
cleanup to get everything working well:

* Replace string-based version checks with numeric ones, and update all
  version checks to treat 6+ the same as 5 (except where necessary).

* Avoid touching `ActiveSupport::Deprecation::DeprecationProxy`
  instances to fix a couple of warnings in Rails 6.

* Update Bundler as part of container setup, because Rails 6's config
  seems to rely on a newer version of Bundler than the one that comes
  with the Ruby image.

* Update the regexes in the `show-routes` spec to be compatible with 5.2
  and up.

* Add a new code path to `show-routes` for Rails 6.

* Upgrade all bundles, just for hygiene.
This commit is contained in:
Ryan Fitzgerald 2018-12-29 15:52:51 -08:00
parent 3fad595b6c
commit 035d5c8203
23 changed files with 102 additions and 25 deletions

View file

@ -23,7 +23,8 @@ end
desc 'Start the Rails console'
task :console => :development_env do
if (Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 1)
if (Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 1) ||
Rails::VERSION::MAJOR >= 6
require 'rails/command'
require 'rails/commands/console/console_command'
else

View file

@ -40,6 +40,10 @@ class PryRails::ShowModels < Pry::ClassCommand
models = []
ObjectSpace.each_object do |o|
# If this is deprecated, calling any methods on it will emit a warning,
# so just back away slowly.
next if ActiveSupport::Deprecation::DeprecationProxy === o
is_model = false
begin

View file

@ -17,10 +17,12 @@ class PryRails::ShowRoutes < Pry::ClassCommand
Rails.application.reload_routes!
all_routes = Rails.application.routes.routes
formatted = case Rails.version.to_s
when /^[45]/
formatted =
if Rails::VERSION::MAJOR >= 6
process_rails_6_and_higher(all_routes)
elsif Rails::VERSION::MAJOR == 4 || Rails::VERSION::MAJOR == 5
process_rails_4_and_5(all_routes)
when /^3\.2/
elsif Rails::VERSION::MAJOR >= 3 && Rails::VERSION::MINOR >= 2
process_rails_3_2(all_routes)
else
process_rails_3_0_and_3_1(all_routes)
@ -64,12 +66,26 @@ class PryRails::ShowRoutes < Pry::ClassCommand
def process_rails_3_2(all_routes)
require 'rails/application/route_inspector'
Rails::Application::RouteInspector.new.format(all_routes)
end
def process_rails_4_and_5(all_routes)
require 'action_dispatch/routing/inspector'
ActionDispatch::Routing::RoutesInspector.new(all_routes).format(ActionDispatch::Routing::ConsoleFormatter.new).split(/\n/)
ActionDispatch::Routing::RoutesInspector.
new(all_routes).
format(ActionDispatch::Routing::ConsoleFormatter.new).
split(/\n/)
end
def process_rails_6_and_higher(all_routes)
require 'action_dispatch/routing/inspector'
ActionDispatch::Routing::RoutesInspector.
new(all_routes).
format(ActionDispatch::Routing::ConsoleFormatter::Sheet.new).
split(/\n/)
end
PryRails::Commands.add_command(self)

View file

@ -13,7 +13,7 @@ module PryRails
end
def project_name
if Rails::VERSION::MAJOR == 6
if Rails::VERSION::MAJOR >= 6
Rails.application.class.module_parent_name.underscore
else
Rails.application.class.parent_name.underscore

View file

@ -14,14 +14,12 @@ module PryRails
end
end
if Rails::VERSION::MAJOR == 4 || Rails::VERSION::MAJOR == 5 ||
Rails::VERSION::MAJOR == 6
if Rails::VERSION::MAJOR >= 4
Rails.application.config.console = Pry
end
if (Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR >= 2) ||
Rails::VERSION::MAJOR == 4 || Rails::VERSION::MAJOR == 5 ||
Rails::VERSION::MAJOR == 6
Rails::VERSION::MAJOR >= 4
require "rails/console/app"
require "rails/console/helpers"
TOPLEVEL_BINDING.eval('self').extend ::Rails::ConsoleMethods

View file

@ -2,7 +2,7 @@ project: pryrails
shared:
from: ruby:2.4
cmd: "(bundle check || bundle install) && bundle exec rake"
cmd: "(bundle check || (gem install bundler && bundle install)) && bundle exec rake"
service:
volumes:
- bundle_{{scenario_name}}:/usr/local/bundle
@ -25,3 +25,6 @@ scenarios:
rails42: {}
rails50: {}
rails51: {}
rails52: {}
rails60:
from: ruby:2.5

View file

@ -2,4 +2,4 @@ FROM ruby:2.0
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake
CMD (bundle check || (gem install bundler && bundle install)) && bundle exec rake

View file

@ -2,4 +2,4 @@ FROM ruby:2.0
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake
CMD (bundle check || (gem install bundler && bundle install)) && bundle exec rake

View file

@ -2,4 +2,4 @@ FROM ruby:2.0
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake
CMD (bundle check || (gem install bundler && bundle install)) && bundle exec rake

View file

@ -2,4 +2,4 @@ FROM ruby:2.3
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake
CMD (bundle check || (gem install bundler && bundle install)) && bundle exec rake

View file

@ -2,4 +2,4 @@ FROM ruby:2.3
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake
CMD (bundle check || (gem install bundler && bundle install)) && bundle exec rake

View file

@ -2,4 +2,4 @@ FROM ruby:2.4
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake
CMD (bundle check || (gem install bundler && bundle install)) && bundle exec rake

View file

@ -2,4 +2,4 @@ FROM ruby:2.4
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake
CMD (bundle check || (gem install bundler && bundle install)) && bundle exec rake

View file

@ -2,4 +2,4 @@ FROM ruby:2.4
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake
CMD (bundle check || (gem install bundler && bundle install)) && bundle exec rake

View file

@ -0,0 +1,15 @@
---
version: "2"
services:
scenario:
build:
context: ..
dockerfile: scenarios/rails52.dockerfile
image: pryrails_scenario_rails52
volumes:
- "..:/scenario"
- "bundle_rails52:/usr/local/bundle"
environment:
BUNDLE_GEMFILE: scenarios/rails52.gemfile
volumes:
bundle_rails52: {}

View file

@ -0,0 +1,5 @@
FROM ruby:2.4
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || (gem install bundler && bundle install)) && bundle exec rake

View file

@ -0,0 +1,7 @@
source "https://rubygems.org"
gem "rails", "~> 5.2.0"
gem "mongoid"
gem "sqlite3"
gemspec :path => "../"

View file

@ -0,0 +1,15 @@
---
version: "2"
services:
scenario:
build:
context: ..
dockerfile: scenarios/rails60.dockerfile
image: pryrails_scenario_rails60
volumes:
- "..:/scenario"
- "bundle_rails60:/usr/local/bundle"
environment:
BUNDLE_GEMFILE: scenarios/rails60.gemfile
volumes:
bundle_rails60: {}

View file

@ -0,0 +1,5 @@
FROM ruby:2.5
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || (gem install bundler && bundle install)) && bundle exec rake

View file

@ -0,0 +1,7 @@
source "https://rubygems.org"
gem "rails", github: "rails/rails"
gem "mongoid"
gem "sqlite3"
gemspec :path => "../"

View file

@ -2,7 +2,8 @@
require 'spec_helper'
if (Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 1)
if (Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 1) ||
Rails::VERSION::MAJOR >= 6
require 'rails/command'
require 'rails/commands/console/console_command'
else

View file

@ -58,7 +58,7 @@ MODELS
expected_output += mongoid_models
end
if Rails.version.to_s =~ /^5/
if Rails::VERSION::MAJOR >= 5
expected_output = internal_models + expected_output
end

View file

@ -10,20 +10,20 @@ describe "show-routes" do
it "should print a list of routes" do
output = mock_pry('show-routes', 'exit-all')
output.must_match %r{^edit_pokemon GET /pokemon/edit}
output.must_match %r{edit_pokemon GET /pokemon/edit}
end
it "should print a list of routes which include grep option" do
output = mock_pry('show-routes -G edit', 'exit-all')
output.must_match %r{^edit_pokemon GET /pokemon/edit}
output.must_match %r{^ edit_beer GET /beer/edit}
output.must_match %r{edit_pokemon GET /pokemon/edit}
output.must_match %r{ edit_beer GET /beer/edit}
end
it "should filter list based on multiple grep options" do
output = mock_pry('show-routes -G edit -G pokemon', 'exit-all')
output.must_match %r{^edit_pokemon GET /pokemon/edit}
output.must_match %r{edit_pokemon GET /pokemon/edit}
output.wont_match %r{edit_beer}
end
end