next_rails 1.2.4 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +2 -2
- data/CHANGELOG.md +15 -1
- data/README.md +28 -2
- data/exe/bundle_report +10 -1
- data/exe/deprecations +3 -1
- data/lib/deprecation_tracker.rb +3 -1
- data/lib/next_rails/bundle_report/ruby_version_compatibility.rb +46 -0
- data/lib/next_rails/bundle_report.rb +21 -4
- data/lib/next_rails/gem_info.rb +4 -0
- data/lib/next_rails/version.rb +1 -1
- data/lib/next_rails.rb +21 -1
- data/next_rails.gemspec +2 -2
- metadata +24 -11
- data/.travis.yml +0 -10
- data/CODEOWNERS +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c82f6a12b6cd481313202fce9894ca2690c222d4397a14398f74c4dd0e6d31f
|
4
|
+
data.tar.gz: 546438cf1893b369c1f4c0d05f507a99c96a3dbd939b78b8e3bacbed560f2150
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1330ca26c90f32978737bbf780156458bc8254377addbfdb860c63b1ff697f06a554e640d457bc7c7d1433a3baa7f2cd0115d4860bf451b85d468f8d0501eec
|
7
|
+
data.tar.gz: a5b5da58d00c288258931320c395cbccf1341f4eed15f56b680693f2ef3919d96ec97542a9bc2c3c11e5cf82ee5371f44d64162e9630901a4c702ded146e1415
|
data/.github/workflows/main.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
name:
|
1
|
+
name: Continuous Integration
|
2
2
|
|
3
3
|
on:
|
4
4
|
push:
|
@@ -13,7 +13,7 @@ jobs:
|
|
13
13
|
runs-on: ubuntu-latest
|
14
14
|
strategy:
|
15
15
|
matrix:
|
16
|
-
ruby-version: [3.2, 3.1, 3.0, 2.7, 2.6
|
16
|
+
ruby-version: ["3.3", "3.2", "3.1", "3.0", "2.7", "2.6"]
|
17
17
|
|
18
18
|
steps:
|
19
19
|
- uses: actions/checkout@v2
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,20 @@
|
|
1
|
-
# main [(unreleased)](https://github.com/fastruby/next_rails/compare/v1.
|
1
|
+
# main [(unreleased)](https://github.com/fastruby/next_rails/compare/v1.4.0...main)
|
2
|
+
|
2
3
|
* Your changes/patches go here.
|
3
4
|
|
5
|
+
# v1.4.0 / 2024-09-24 [(commits)](https://github.com/fastruby/next_rails/compare/v1.3.0...v1.4.0)
|
6
|
+
|
7
|
+
- [CHORE: Use next_rails namespace on spec tests.](https://github.com/fastruby/next_rails/pull/117)
|
8
|
+
- [CHORE: Remove 2.0.0, 2.1, 2.2 Ruby support](https://github.com/fastruby/next_rails/pull/126)
|
9
|
+
- [CHORE: Update compatibility for Ruby versions to use Rainbow](https://github.com/fastruby/next_rails/pull/125)
|
10
|
+
- [FEATURE: Support compatibility for Ruby versions](https://github.com/fastruby/next_rails/pull/116)
|
11
|
+
- [CHORE: Remove GPL licensed dependency Colorize and replace it with Rainbow]
|
12
|
+
|
13
|
+
# v1.3.0 / 2023-06-16 [(commits)](https://github.com/fastruby/next_rails/compare/v1.2.4...v1.3.0)
|
14
|
+
|
15
|
+
- [FEATURE: Add NextRails.next? for application usage (e.g. Rails shims)](https://github.com/fastruby/next_rails/pull/97)
|
16
|
+
- [BUGFIX: Support ERB versions older than 2.2.0](https://github.com/fastruby/next_rails/pull/100)
|
17
|
+
|
4
18
|
# v1.2.4 / 2023-04-21 [(commits)](https://github.com/fastruby/next_rails/compare/v1.2.3...v1.2.4)
|
5
19
|
|
6
20
|
- [BUGFIX: Update the warn method signature to support for Ruby 3]
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Next Rails
|
2
2
|
|
3
|
+
[![Continuous Integration](https://github.com/fastruby/next_rails/actions/workflows/main.yml/badge.svg)](https://github.com/fastruby/next_rails/actions/workflows/main.yml)
|
4
|
+
|
3
5
|
This is a toolkit to upgrade your next Rails application. It will help you
|
4
6
|
set up dual booting, track deprecation warnings, and get a report on outdated
|
5
7
|
dependencies for any Rails application.
|
@@ -39,12 +41,36 @@ bundle_report outdated --json
|
|
39
41
|
# Show gems that don't work with Rails 5.2.0
|
40
42
|
bundle_report compatibility --rails-version=5.2.0
|
41
43
|
|
42
|
-
# Show
|
43
|
-
bundle_report --
|
44
|
+
# Show gems that don't work with Ruby 3.0
|
45
|
+
bundle_report compatibility --ruby-version=3.0
|
46
|
+
|
44
47
|
# Find minimum compatible ruby version with Rails 7.0.0
|
45
48
|
bundle_report ruby_check --rails-version=7.0.0
|
49
|
+
|
50
|
+
# Show the usual help message
|
51
|
+
bundle_report --help
|
46
52
|
```
|
47
53
|
|
54
|
+
### Application usage
|
55
|
+
|
56
|
+
Every now and then it will be necessary to add code like this to your
|
57
|
+
application:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
if NextRails.next?
|
61
|
+
# Do things "the Rails 7 way"
|
62
|
+
else
|
63
|
+
# Do things "the Rails 6.1 way"
|
64
|
+
end
|
65
|
+
```
|
66
|
+
|
67
|
+
The `NextRails.next?` method will use your environment
|
68
|
+
(e.g. `ENV['BUNDLE_GEMFILE]`) to determine whether your application is
|
69
|
+
running with the next set of dependencies or the current set of dependencies.
|
70
|
+
|
71
|
+
This might come in handy if you need to inject
|
72
|
+
[Ruby or Rails shims](https://www.fastruby.io/blog/rails/upgrades/rails-upgrade-shims.html).
|
73
|
+
|
48
74
|
### Deprecation tracking
|
49
75
|
|
50
76
|
If you're using RSpec, add this snippet to `rails_helper.rb` or `spec_helper.rb` (whichever loads Rails).
|
data/exe/bundle_report
CHANGED
@@ -16,6 +16,7 @@ at_exit do
|
|
16
16
|
|
17
17
|
Examples:
|
18
18
|
#{$0} compatibility --rails-version 5.0
|
19
|
+
#{$0} compatibility --ruby-version 3.3
|
19
20
|
#{$0} outdated
|
20
21
|
#{$0} outdated --json
|
21
22
|
|
@@ -33,6 +34,10 @@ at_exit do
|
|
33
34
|
options[:rails_version] = rails_version
|
34
35
|
end
|
35
36
|
|
37
|
+
opts.on("--ruby-version [STRING]", "Ruby version to check compatibility against (defaults to 2.3)") do |ruby_version|
|
38
|
+
options[:ruby_version] = ruby_version
|
39
|
+
end
|
40
|
+
|
36
41
|
opts.on("--include-rails-gems", "Include Rails gems in compatibility report (defaults to false)") do
|
37
42
|
options[:include_rails_gems] = true
|
38
43
|
end
|
@@ -61,7 +66,11 @@ at_exit do
|
|
61
66
|
when "ruby_check" then NextRails::BundleReport.compatible_ruby_version(rails_version: options.fetch(:rails_version))
|
62
67
|
when "outdated" then NextRails::BundleReport.outdated(options.fetch(:format, nil))
|
63
68
|
else
|
64
|
-
|
69
|
+
if options[:ruby_version]
|
70
|
+
NextRails::BundleReport.compatibility(ruby_version: options.fetch(:ruby_version, "2.3"))
|
71
|
+
else
|
72
|
+
NextRails::BundleReport.compatibility(rails_version: options.fetch(:rails_version, "5.0"), include_rails_gems: options.fetch(:include_rails_gems, false))
|
73
|
+
end
|
65
74
|
end
|
66
75
|
end
|
67
76
|
|
data/exe/deprecations
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require "json"
|
3
|
-
require "
|
3
|
+
require "rainbow/refinement"
|
4
4
|
require "optparse"
|
5
5
|
require "set"
|
6
6
|
|
7
|
+
using Rainbow
|
8
|
+
|
7
9
|
def run_tests(deprecation_warnings, opts = {})
|
8
10
|
tracker_mode = opts[:tracker_mode]
|
9
11
|
next_mode = opts[:next_mode]
|
data/lib/deprecation_tracker.rb
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
require "rainbow/refinement"
|
2
|
+
|
3
|
+
class NextRails::BundleReport::RubyVersionCompatibility
|
4
|
+
using Rainbow
|
5
|
+
|
6
|
+
MINIMAL_VERSION = 1.0
|
7
|
+
attr_reader :gems, :options
|
8
|
+
|
9
|
+
def initialize(gems: NextRails::GemInfo.all, options: {})
|
10
|
+
@gems = gems
|
11
|
+
@options = options
|
12
|
+
end
|
13
|
+
|
14
|
+
def generate
|
15
|
+
return invalid_message unless valid?
|
16
|
+
|
17
|
+
message
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def message
|
23
|
+
output = "=> Incompatible gems with Ruby #{ruby_version}:".white.bold
|
24
|
+
incompatible.each do |gem|
|
25
|
+
output += "\n#{gem.name} - required Ruby version: #{gem.gem_specification.required_ruby_version}".magenta
|
26
|
+
end
|
27
|
+
output += "\n\n#{incompatible.length} incompatible #{incompatible.one? ? 'gem' : 'gems' } with Ruby #{ruby_version}".red
|
28
|
+
output
|
29
|
+
end
|
30
|
+
|
31
|
+
def incompatible
|
32
|
+
gems.reject { |gem| gem.compatible_with_ruby?(ruby_version) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def ruby_version
|
36
|
+
options[:ruby_version].to_f
|
37
|
+
end
|
38
|
+
|
39
|
+
def invalid_message
|
40
|
+
"=> Invalid Ruby version: #{options[:ruby_version]}.".red.bold
|
41
|
+
end
|
42
|
+
|
43
|
+
def valid?
|
44
|
+
ruby_version > MINIMAL_VERSION
|
45
|
+
end
|
46
|
+
end
|
@@ -1,14 +1,18 @@
|
|
1
|
-
require "
|
1
|
+
require "rainbow/refinement"
|
2
2
|
require "cgi"
|
3
3
|
require "erb"
|
4
4
|
require "json"
|
5
5
|
require "net/http"
|
6
6
|
|
7
|
+
using Rainbow
|
8
|
+
|
7
9
|
module NextRails
|
8
10
|
module BundleReport
|
9
11
|
extend self
|
10
12
|
|
11
|
-
def compatibility(rails_version: nil, include_rails_gems: nil)
|
13
|
+
def compatibility(rails_version: nil, ruby_version: nil, include_rails_gems: nil)
|
14
|
+
return puts RubyVersionCompatibility.new(options: { ruby_version: ruby_version }).generate if ruby_version
|
15
|
+
|
12
16
|
incompatible_gems = NextRails::GemInfo.all.reject do |gem|
|
13
17
|
gem.compatible_with_rails?(rails_version: rails_version) || (!include_rails_gems && gem.from_rails?)
|
14
18
|
end.sort_by { |gem| gem.name }
|
@@ -17,6 +21,10 @@ module NextRails
|
|
17
21
|
|
18
22
|
incompatible_gems_by_state = incompatible_gems.group_by { |gem| gem.state(rails_version) }
|
19
23
|
|
24
|
+
puts erb_output(incompatible_gems_by_state, incompatible_gems, rails_version)
|
25
|
+
end
|
26
|
+
|
27
|
+
def erb_output(incompatible_gems_by_state, incompatible_gems, rails_version)
|
20
28
|
template = <<-ERB
|
21
29
|
<% if incompatible_gems_by_state[:found_compatible] -%>
|
22
30
|
<%= "=> Incompatible with Rails #{rails_version} (with new versions that are compatible):".white.bold %>
|
@@ -49,7 +57,16 @@ module NextRails
|
|
49
57
|
<%= incompatible_gems.length.to_s.red %> gems incompatible with Rails <%= rails_version %>
|
50
58
|
ERB
|
51
59
|
|
52
|
-
|
60
|
+
erb_version = ERB.version
|
61
|
+
if erb_version =~ /erb.rb \[([\d\.]+) .*\]/
|
62
|
+
erb_version = $1
|
63
|
+
end
|
64
|
+
|
65
|
+
if Gem::Version.new(erb_version) < Gem::Version.new("2.2")
|
66
|
+
ERB.new(template, nil, "-").result(binding)
|
67
|
+
else
|
68
|
+
ERB.new(template, trim_mode: "-").result(binding)
|
69
|
+
end
|
53
70
|
end
|
54
71
|
|
55
72
|
def gem_header(_gem)
|
@@ -155,4 +172,4 @@ module NextRails
|
|
155
172
|
puts footer
|
156
173
|
end
|
157
174
|
end
|
158
|
-
end
|
175
|
+
end
|
data/lib/next_rails/gem_info.rb
CHANGED
@@ -147,5 +147,9 @@ module NextRails
|
|
147
147
|
rails_dependency.requirement.satisfied_by?(Gem::Version.new(rails_version))
|
148
148
|
end
|
149
149
|
end
|
150
|
+
|
151
|
+
def compatible_with_ruby?(ruby_version)
|
152
|
+
gem_specification.required_ruby_version.satisfied_by?(Gem::Version.new(ruby_version))
|
153
|
+
end
|
150
154
|
end
|
151
155
|
end
|
data/lib/next_rails/version.rb
CHANGED
data/lib/next_rails.rb
CHANGED
@@ -1,8 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "next_rails/gem_info"
|
2
4
|
require "next_rails/version"
|
3
5
|
require "next_rails/bundle_report"
|
6
|
+
require "next_rails/bundle_report/ruby_version_compatibility"
|
4
7
|
require "deprecation_tracker"
|
5
8
|
|
6
9
|
module NextRails
|
7
|
-
|
10
|
+
@@next_bundle_gemfile = nil
|
11
|
+
|
12
|
+
# This method will check your environment
|
13
|
+
# (e.g. `ENV['BUNDLE_GEMFILE]`) to determine whether your application is
|
14
|
+
# running with the next set of dependencies or the current set of dependencies.
|
15
|
+
#
|
16
|
+
# @return [Boolean]
|
17
|
+
def self.next?
|
18
|
+
return @@next_bundle_gemfile unless @@next_bundle_gemfile.nil?
|
19
|
+
|
20
|
+
@@next_bundle_gemfile = File.exist?(ENV["BUNDLE_GEMFILE"]) && File.basename(ENV["BUNDLE_GEMFILE"]) == "Gemfile.next"
|
21
|
+
end
|
22
|
+
|
23
|
+
# This method will reset the @@next_bundle_gemfile variable. Then next time
|
24
|
+
# you call `NextRails.next?` it will check the environment once again.
|
25
|
+
def self.reset_next_bundle_gemfile
|
26
|
+
@@next_bundle_gemfile = nil
|
27
|
+
end
|
8
28
|
end
|
data/next_rails.gemspec
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
lib = File.expand_path("../lib", __FILE__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require "next_rails/version"
|
@@ -23,12 +22,13 @@ Gem::Specification.new do |spec|
|
|
23
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
23
|
spec.require_paths = ["lib"]
|
25
24
|
|
26
|
-
spec.add_dependency "
|
25
|
+
spec.add_dependency "rainbow", ">= 3"
|
27
26
|
spec.add_development_dependency "bundler", ">= 1.16", "< 3.0"
|
28
27
|
spec.add_development_dependency "rake"
|
29
28
|
spec.add_development_dependency "rspec", "~> 3.0"
|
30
29
|
spec.add_development_dependency "simplecov", "~> 0.17.1"
|
31
30
|
spec.add_development_dependency "timecop", "~> 0.9.1"
|
31
|
+
spec.add_development_dependency "byebug"
|
32
32
|
spec.add_development_dependency "rexml", "3.1.7.3" # limited on purpose, new versions don't work with old rubies
|
33
33
|
spec.add_development_dependency "webmock", "3.16.2" # limited on purpose, new versions don't work with old rubies
|
34
34
|
end
|
metadata
CHANGED
@@ -1,30 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: next_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ernesto Tagwerker
|
8
8
|
- Luis Sagastume
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2024-09-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: rainbow
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: '3'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: '3'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: bundler
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,6 +101,20 @@ dependencies:
|
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: 0.9.1
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: byebug
|
106
|
+
requirement: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
104
118
|
- !ruby/object:Gem::Dependency
|
105
119
|
name: rexml
|
106
120
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,9 +164,7 @@ files:
|
|
150
164
|
- ".github/workflows/main.yml"
|
151
165
|
- ".gitignore"
|
152
166
|
- ".rspec"
|
153
|
-
- ".travis.yml"
|
154
167
|
- CHANGELOG.md
|
155
|
-
- CODEOWNERS
|
156
168
|
- CODE_OF_CONDUCT.md
|
157
169
|
- CONTRIBUTING.md
|
158
170
|
- Gemfile
|
@@ -171,6 +183,7 @@ files:
|
|
171
183
|
- lib/deprecation_tracker.rb
|
172
184
|
- lib/next_rails.rb
|
173
185
|
- lib/next_rails/bundle_report.rb
|
186
|
+
- lib/next_rails/bundle_report/ruby_version_compatibility.rb
|
174
187
|
- lib/next_rails/gem_info.rb
|
175
188
|
- lib/next_rails/version.rb
|
176
189
|
- next_rails.gemspec
|
@@ -179,7 +192,7 @@ homepage: https://github.com/fastruby/next_rails
|
|
179
192
|
licenses:
|
180
193
|
- MIT
|
181
194
|
metadata: {}
|
182
|
-
post_install_message:
|
195
|
+
post_install_message:
|
183
196
|
rdoc_options: []
|
184
197
|
require_paths:
|
185
198
|
- lib
|
@@ -194,8 +207,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
207
|
- !ruby/object:Gem::Version
|
195
208
|
version: '0'
|
196
209
|
requirements: []
|
197
|
-
rubygems_version: 3.
|
198
|
-
signing_key:
|
210
|
+
rubygems_version: 3.5.9
|
211
|
+
signing_key:
|
199
212
|
specification_version: 4
|
200
213
|
summary: A toolkit to upgrade your next Rails application
|
201
214
|
test_files: []
|
data/.travis.yml
DELETED
data/CODEOWNERS
DELETED