next_rails 1.0.4 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '09652c9c25b1ed9f21f01ee7f65f73d25ad1f89b5d0c7e05f97b7255e96d753a'
4
- data.tar.gz: 8eb4df05b36ed4f47aaeb78720a73e8a31561a1bf2437490d99e3123ce55a326
3
+ metadata.gz: 1fdec8942101c58f6081b681319339b6ed5703dd14af0f1d43498afb894bba26
4
+ data.tar.gz: 32bfa4c31e2d53b9100e4a46a3fbf053ff90b38d15256867b3a5f4b6e4fc0d44
5
5
  SHA512:
6
- metadata.gz: 99a2723cd58752e9bea3c47a695dbefd5fab56cc3490bba5b336cf063b53880830a3a98eba8fb79cc1035713b1ead4f44c8ddadaa493bab36a7686ff053e61a4
7
- data.tar.gz: ee60bfff4836d6f81f2e46f15c4113434881c8eed6266136a39bc797e0bed86fd59289928631c771a2ff03907145c97cc76a670b8cac033fac6bd5662c9496e9
6
+ metadata.gz: 0a030398c55b7e09de54ad9607745410c14d1a64e8fa753e32dd0c41b5555640a9af23f31f9f40cb550fb1b11b8c461adf95727e281d6d05250089dd9ee8b509
7
+ data.tar.gz: 8b7d02f997ca2b7db31ff7e2c131e72df4ccb979979f792ecdefdf0f8500f619fb78a8187f4be712a40503af9bf27bc143678bfa27b95e52594fdc537132b3a0
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: "[BUG] "
5
+ labels: bug
6
+ assignees: ""
7
+ ---
8
+
9
+ **IMPORTANT: please make sure you ask yourself all intro questions and fill all sections of the template.**
10
+
11
+ **Before we start...:**
12
+
13
+ - [ ] I checked the documentation and found no answer
14
+ - [ ] I checked to make sure that this issue has not already been filed
15
+ - [ ] I'm reporting the issue to the correct repository (for multi-repository projects)
16
+
17
+ **Version, Branch, or Commit:**
18
+
19
+ What branch/commit/version of "next_rails" you are using?
20
+
21
+ **Expected behavior:**
22
+
23
+ Please include a detailed description of the behavior you were expecting when you encountered this issue.
24
+
25
+ **Actual behavior:**
26
+
27
+ Please include a detailed description of the actual behavior of the application.
28
+
29
+ **Steps to reproduce:**
30
+
31
+ How do I achieve this behavior? Use the following format to provide a step-by-step guide:
32
+
33
+ 1. Step 1: ...
34
+ 2. Step 2: ...
35
+
36
+ **Context and environment:**
37
+
38
+ Provide any relevant information about your setup (Customize the list accordingly based on what info is relevant to this project)
39
+
40
+ 1. Version of the software the issue is being opened for.
41
+ 2. Operating System
42
+ 3. Operating System version
43
+ 4. Ruby version
44
+
45
+ _Delete any information that is not relevant._
46
+
47
+ **Logs**
48
+
49
+ Include relevant log snippets or files here.
50
+
51
+ **I will abide by the [code of conduct](https://github.com/fastruby/next_rails/blob/main/CODE_OF_CONDUCT.md)**
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: Feature request
3
+ about: Request a new feature
4
+ title: "[REQUEST]"
5
+ labels: enhancement
6
+ assignees: ""
7
+ ---
8
+
9
+ **IMPORTANT: please make sure you ask yourself all intro questions and fill all sections of the template.**
10
+
11
+ **Before we start...:**
12
+
13
+ - [ ] I checked the documentation and didn't find this feature
14
+ - [ ] I checked to make sure that this feature has not already been requested
15
+
16
+ **Branch/Commit:**
17
+
18
+ Inform what branch/commit/version of "next_rails" you are using.
19
+
20
+ **Describe the feature:**
21
+
22
+ Please include a detailed description of the feature you are requesting and any detail on it’s expected behavior.
23
+
24
+ > **As a \<role name\>** > **I do \<something\>** > **And then I do \<another action\>** > **And I see \<some result\>**
25
+
26
+ **Problem:**
27
+
28
+ Please include a detailed description of the problem this feature would solve.
29
+
30
+ > **As a \<role name\>** > **I want to \<do something\>** > **So that I can achieve a \<goal\>**
31
+
32
+ **Mockups:**
33
+
34
+ Include any mockup idea related to the requested feature if it applies.
35
+
36
+ **Resources:**
37
+
38
+ If you have resources related to the implementation or research for this feature, add them here.
39
+
40
+ **I will abide by the [code of conduct](https://github.com/fastruby/next_rails/blob/main/CODE_OF_CONDUCT.md)**
@@ -0,0 +1,11 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "bundler"
9
+ directory: "/"
10
+ schedule:
11
+ interval: "daily"
@@ -0,0 +1,26 @@
1
+ name: Run rake task
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ matrix:
16
+ ruby-version: [3.1, 2.7.5, 2.3, 2.2, 2.1.9, 2.0.0]
17
+
18
+ steps:
19
+ - uses: actions/checkout@v2
20
+ - name: Set up Ruby ${{ matrix.ruby-version }}
21
+ uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby-version }}
24
+ bundler-cache: true
25
+ - name: Run rake task
26
+ run: bundle exec rake
data/.travis.yml CHANGED
@@ -6,4 +6,5 @@ rvm:
6
6
  - 2.5.8
7
7
  - 2.6.6
8
8
  - 2.7.2
9
+ - 3.0.2
9
10
  before_install: gem install bundler -v 1.16.1
data/CHANGELOG.md CHANGED
@@ -1,13 +1,45 @@
1
- # main [(unreleased)](https://github.com/fastruby/next_rails/compare/v1.0.4...main)
1
+ # main [(unreleased)](https://github.com/fastruby/next_rails/compare/v1.2.0...main)
2
+
3
+ # v1.2.0 / 2022-08-12 [(commits)](https://github.com/fastruby/next_rails/compare/v1.1.0...v1.2.0)
4
+
5
+ - [FEATURE: Support Ruby versions as old as Ruby 2.0](https://github.com/fastruby/next_rails/pull/54)
6
+
7
+ - [FEATURE: Better documentation for contributing and releasing versions of this gem](https://github.com/fastruby/next_rails/pull/53)
8
+
9
+ # v1.1.0 / 2022-06-30 [(commits)](https://github.com/fastruby/next_rails/compare/v1.0.5...v1.1.0)
10
+
11
+ - [FEATURE: Try to find the latest **compatible** version of a gem if the latest version is not compatible with the desired Rails version when checking compatibility](https://github.com/fastruby/next_rails/pull/49)
12
+
13
+ - [FEATURE: Added option --version to get the version of the gem being used](https://github.com/fastruby/next_rails/pull/38)
14
+
15
+ - [Added github action workflow](https://github.com/fastruby/next_rails/pull/40)
16
+
17
+ - [FEATURE: Add support to use DeprecationTracker with Minitest](Add support to use DeprecationTracker with Minitest)
18
+
19
+ - [FEATURE: Add dependabot](https://github.com/fastruby/next_rails/pull/41)
20
+
21
+ - [DOCUMENTATION: Update the code of conduct link in PR template](https://github.com/fastruby/next_rails/pull/46)
22
+
23
+ - [DOCUMENTATION: Add FEATURE REQUEST and BUG REPORT templates ](https://github.com/fastruby/next_rails/pull/48)
24
+
25
+ - [BUGFIX: Make behavior arguments optional](https://github.com/fastruby/next_rails/pull/44)
26
+
27
+ - [FEATURE: Command line option to check for recommended ruby version for the desired Rails version](https://github.com/fastruby/next_rails/pull/39)
28
+
29
+ # v1.0.5 / 2022-03-29 [(commits)](https://github.com/fastruby/next_rails/compare/v1.0.4...v1.0.5)
30
+
31
+ - [FEATURE: Initialize the Gemfile.next.lock to avoid major version jumps when used without an initial Gemfile.next.lock](https://github.com/fastruby/next_rails/pull/25)
32
+ - [FEATURE: Drop `actionview` dependency because it is not really used](https://github.com/fastruby/next_rails/pull/26)
33
+ - [BUGFIX: If shitlist path does not exist, create it for the user of the gem](https://github.com/fastruby/next_rails/pull/37)
2
34
 
3
35
  # v1.0.4 / 2021-04-09 [(commits)](https://github.com/fastruby/next_rails/compare/v1.0.3...v1.0.4)
4
36
 
5
- * [BUGFIX] Fixes issue with `bundle_report` and `actionview` (by [@etagwerker][])
37
+ - [BUGFIX: Fixes issue with `bundle_report` and `actionview`](https://github.com/fastruby/next_rails/pull/22)
6
38
 
7
39
  # v1.0.3 / 2021-04-05 [(commits)](https://github.com/fastruby/next_rails/compare/v1.0.2...v1.0.3)
8
40
 
9
- * [BUGFIX] Update README.md to better document this `ten_years_rails` fork (by [@etagwerker][])
10
- * [BUGFIX] Make ActionView an optional dependency (by [@manuca][])
41
+ - [BUGFIX: Update README.md to better document this `ten_years_rails` fork](https://github.com/fastruby/next_rails/pull/11)
42
+ - [BUGFIX: Make ActionView an optional dependency](https://github.com/fastruby/next_rails/pull/6)
11
43
 
12
44
  # v1.0.2 / 2020-01-20
13
45
 
@@ -15,4 +47,4 @@
15
47
 
16
48
  # v1.0.0 / 2019-07-24
17
49
 
18
- * Official Release
50
+ - Official Release
data/CODEOWNERS ADDED
@@ -0,0 +1,4 @@
1
+ # These code owners will be the default owners to everything in the repository.
2
+ # Unless a posterior rule has precedence, they will be automatically requested
3
+ # for review when a pull request is opened.
4
+ * @fastruby/black-bunny-brigade
@@ -0,0 +1,76 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to make participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, sex characteristics, gender identity and expression,
9
+ level of experience, education, socio-economic status, nationality, personal
10
+ appearance, race, religion, or sexual identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies within all project spaces, and it also applies when
49
+ an individual is representing the project or its community in public spaces.
50
+ Examples of representing a project or community include using an official
51
+ project e-mail address, posting via an official social media account, or acting
52
+ as an appointed representative at an online or offline event. Representation of
53
+ a project may be further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at oss@ombulabs.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72
+
73
+ [homepage]: https://www.contributor-covenant.org
74
+
75
+ For answers to common questions about this code of conduct, see
76
+ https://www.contributor-covenant.org/faq
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,60 @@
1
+ # Contributing to next_rails
2
+
3
+ Have a fix for a problem you've been running into or an idea for a new feature you think would be useful? Bug reports and pull requests are welcome on GitHub at [https://github.com/fastruby/next_rails](https://github.com/fastruby/next_rails).
4
+
5
+ Here's what you need to do:
6
+
7
+ - Read and understand the [Code of Conduct](https://github.com/fastruby/next_rails/blob/main/CODE_OF_CONDUCT.md).
8
+ - Fork this repo and clone your fork to somewhere on your machine.
9
+ - [Ensure that you have a working environment](#setting-up-your-environment)
10
+ - Read up on [run the tests](#running-all-tests).
11
+ - Open a new branch and write a failing test for the feature or bug fix you plan on implementing.
12
+ - [Update the changelog when applicable](#a-word-on-the-changelog).
13
+ - Push to your fork and submit a pull request.
14
+ - [Make sure the test suite passes on GitHub Actions and make any necessary changes to your branch to bring it to green.](#continuous-integration).
15
+
16
+ ## Setting up your environment
17
+ To install the dependencies, run:
18
+
19
+ ```bash
20
+ bin/setup
21
+ ```
22
+
23
+ You can also run `bin/console` for an interactive prompt that will allow you to experiment with the gem.
24
+
25
+ To install this gem onto your local machine, run:
26
+
27
+ `bundle exec rake install`.
28
+
29
+ ### Running all tests
30
+
31
+ To run all of the tests, simply run:
32
+
33
+ ```bash
34
+ bundle exec rake
35
+ ```
36
+
37
+ ## A word on the changelog
38
+
39
+ You may also notice that we have a changelog in the form of [CHANGELOG.md](CHANGELOG.md). We use a format based on [Keep A Changelog](https://keepachangelog.com/en/1.0.0/).
40
+
41
+ The important things to keep in mind are:
42
+
43
+ - If your PR closes any open GitHub issue, make sure you include `Closes #XXXX` in your comment.
44
+ - New additions get added under the main (unreleased) heading;
45
+ - Attach a link to the PR with the following format:
46
+
47
+ * [<FEATURE | BUGFIX | CHORE>: Description of changes](github.com/link/to/pr).
48
+
49
+ ## When Submitting a Pull Request:
50
+
51
+ * If your PR closes any open GitHub issues, please include `Closes #XXXX` in your comment.
52
+ * Please include a summary of the change and which issue is fixed or which feature is introduced.
53
+ * If changes to the behavior are made, clearly describe what are the changes and why.
54
+ * If changes to the UI are made, please include screenshots of the before and after.
55
+
56
+ ## Continuous integration
57
+
58
+ After opening your Pull Request, please make sure that all tests pass on the CI, to make sure your changes work in all possible environments. GitHub Actions will kick in after you push up a branch or open a PR.
59
+
60
+ If the build fails, click on a failed job and scroll through its output to verify what is the problem. Push your changes to your branch until the build is green.
data/README.md CHANGED
@@ -34,6 +34,8 @@ bundle_report outdated | head -n 5
34
34
  # Show gems that don't work with Rails 5.2.0
35
35
  bundle_report compatibility --rails-version=5.2.0
36
36
  bundle_report --help
37
+ # Find minimum compatible ruby version with Rails 7.0.0
38
+ bundle_report ruby_check --rails-version=7.0.0
37
39
  ```
38
40
 
39
41
  ### Deprecation tracking
@@ -54,7 +56,20 @@ RSpec.configure do |config|
54
56
  end
55
57
  ```
56
58
 
57
- We don't use MiniTest, so there isn't a prebuilt config for it but I suspect it's pretty similar to `DeprecationTracker.track_rspec`.
59
+ If using minitest, add this somewhere close to the top of your `test_helper.rb`:
60
+
61
+ ```ruby
62
+ # Tracker deprecation messages in each file
63
+ if ENV["DEPRECATION_TRACKER"]
64
+ DeprecationTracker.track_minitest(
65
+ shitlist_path: "test/support/deprecation_warning.shitlist.json",
66
+ mode: ENV["DEPRECATION_TRACKER"],
67
+ transform_message: -> (message) { message.gsub("#{Rails.root}/", "") }
68
+ )
69
+ end
70
+ ```
71
+
72
+ > Keep in mind this is currently not compatible with the `minitest/parallel_fork` gem!
58
73
 
59
74
  Once you have that, you can start using deprecation tracking in your tests:
60
75
 
@@ -78,12 +93,21 @@ deprecations --help # For more options and examples
78
93
 
79
94
  Right now, the path to the shitlist is hardcoded so make sure you store yours at `spec/support/deprecations.shitlist.json`.
80
95
 
96
+ #### `next_rails` command
97
+
98
+ You can use `next_rails` to fetch the version of the gem installed.
99
+
100
+ ```bash
101
+ next_rails --version
102
+ next_rails --help # For more options and examples
103
+ ```
104
+
81
105
  ### Dual-boot Rails next
82
106
 
83
107
  This command helps you dual-boot your application.
84
108
 
85
109
  ```bash
86
- next --init # Create Gemfile.next
110
+ next --init # Create Gemfile.next and Gemfile.next.lock
87
111
  vim Gemfile # Tweak your dependencies conditionally using `next?`
88
112
  next bundle install # Install new gems
89
113
  next rails s # Start server using Gemfile.next
@@ -105,6 +129,44 @@ Or install it yourself as:
105
129
 
106
130
  $ gem install next_rails
107
131
 
132
+ ## Setup
133
+
134
+ Execute:
135
+
136
+ $ next --init
137
+
138
+ Init will create a Gemfile.next and an initialized Gemfile.next.lock.
139
+ The Gemfile.next.lock is initialized with the contents of your existing
140
+ Gemfile.lock lock file. We initialize the Gemfile.next.lock to prevent
141
+ major version jumps when running the next version of Rails.
142
+
143
+ ## Contributing
144
+
145
+ Have a fix for a problem you've been running into or an idea for a new feature you think would be useful? Want to see how you can support `next_rails`?
146
+
147
+ Take a look at the [Contributing document](CONTRIBUTING.md) for instructions to set up the repo on your machine!
148
+
149
+ ## Releases
150
+
151
+ `next_rails` adheres to [semver](https://semver.org). So given a version number MAJOR.MINOR.PATCH, we will increment the:
152
+
153
+ 1. MAJOR version when you make incompatible API changes,
154
+ 2. MINOR version when you add functionality in a backwards compatible manner, and
155
+ 3. PATCH version when you make backwards compatible bug fixes.
156
+
157
+ Here are the steps to release a new version:
158
+
159
+ 1. Update the `version.rb` file with the proper version number
160
+ 2. Update `CHANGELOG.md` to have the right headers
161
+ 3. Commit your changes to a `release/v-1-1-0` branch
162
+ 4. Push your changes and submit a pull request
163
+ 5. Merge your pull request to the `main` branch
164
+ 6. Git tag the latest version of the `main` branch (`git tag v1.1.0`)
165
+ 7. Push tags to GitHub (`git push --tags`)
166
+ 8. Build the gem (`gem build next_rails.gemspec`)
167
+ 9. Push the .gem package to Rubygems.org (`gem push next_rails-1.1.0.gem`)
168
+ 10. You are all done!
169
+
108
170
  ## License
109
171
 
110
172
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/exe/bundle_report CHANGED
@@ -17,6 +17,12 @@ at_exit do
17
17
  Examples:
18
18
  #{$0} compatibility --rails-version 5.0
19
19
  #{$0} outdated
20
+
21
+ ruby_check To find a compatible ruby version for the target rails version
22
+
23
+ Examples:
24
+ #{$0} ruby_check --rails-version 7.0.0
25
+
20
26
  EOS
21
27
 
22
28
  opts.separator ""
@@ -47,6 +53,7 @@ at_exit do
47
53
  report_type = ARGV.first
48
54
 
49
55
  case report_type
56
+ when "ruby_check" then NextRails::BundleReport.compatible_ruby_version(rails_version: options.fetch(:rails_version))
50
57
  when "outdated" then NextRails::BundleReport.outdated
51
58
  else
52
59
  NextRails::BundleReport.compatibility(rails_version: options.fetch(:rails_version, "5.0"), include_rails_gems: options.fetch(:include_rails_gems, false))
data/exe/next.sh CHANGED
@@ -10,6 +10,13 @@ STRING
10
10
  mv Gemfile.tmp Gemfile
11
11
 
12
12
  ln -s Gemfile Gemfile.next
13
+
14
+ # Initialize the Gemfile.next.lock
15
+ # Prevents major version jumps when we start without a Gemfile.next.lock
16
+ if [ -f "Gemfile.lock" ] && [ ! -f "Gemfile.next.lock" ]; then
17
+ cp Gemfile.lock Gemfile.next.lock
18
+ fi
19
+
13
20
  echo <<-MESSAGE
14
21
  Created Gemfile.next (a symlink to your Gemfile). Your Gemfile has been modified to support dual-booting!
15
22
 
data/exe/next_rails ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ require "optparse"
3
+ require "next_rails/version"
4
+
5
+ options = {}
6
+ option_parser = OptionParser.new do |opts|
7
+ opts.banner = <<-MESSAGE
8
+ Usage: #{__FILE__.to_s} [options]
9
+
10
+ Examples:
11
+ bin/next_rails --version info # Show the version of the gem installed
12
+ MESSAGE
13
+
14
+ opts.on("--version", "show version of the gem") do
15
+ options[:version] = true
16
+ end
17
+
18
+ opts.on_tail("-h", "--help", "Prints this help") do
19
+ puts opts
20
+ exit
21
+ end
22
+ end
23
+
24
+ option_parser.parse!
25
+
26
+ if options.fetch(:version, false)
27
+ puts NextRails::VERSION
28
+ exit 2
29
+ end
@@ -27,8 +27,31 @@ class DeprecationTracker
27
27
  end
28
28
  end
29
29
 
30
+ module MinitestExtension
31
+ def self.new(deprecation_tracker)
32
+ @@deprecation_tracker = deprecation_tracker
33
+
34
+ Module.new do
35
+ def before_setup
36
+ test_file_name = method(name).source_location.first.to_s
37
+ @@deprecation_tracker.bucket = test_file_name.gsub(Rails.root.to_s, ".")
38
+ super
39
+ end
40
+
41
+ def after_teardown
42
+ super
43
+ @@deprecation_tracker.bucket = nil
44
+ end
45
+ end
46
+ end
47
+ end
48
+
30
49
  # There are two forms of the `warn` method: one for class Kernel and one for instances of Kernel (i.e., every Object)
31
- Object.prepend(KernelWarnTracker)
50
+ if Object.respond_to?(:prepend)
51
+ Object.prepend(KernelWarnTracker)
52
+ else
53
+ Object.extend(KernelWarnTracker)
54
+ end
32
55
 
33
56
  # Ruby 2.2 and lower doesn't appear to allow overriding of Kernel.warn using `singleton_class.prepend`.
34
57
  if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.3.0")
@@ -39,16 +62,24 @@ class DeprecationTracker
39
62
  end
40
63
  end
41
64
 
42
- def self.track_rspec(rspec_config, opts = {})
65
+ def self.init_tracker(opts = {})
43
66
  shitlist_path = opts[:shitlist_path]
44
67
  mode = opts[:mode]
45
68
  transform_message = opts[:transform_message]
46
- deprecation_tracker = DeprecationTracker.new(shitlist_path, transform_message)
69
+ deprecation_tracker = DeprecationTracker.new(shitlist_path, transform_message, mode)
47
70
  if defined?(ActiveSupport)
48
- ActiveSupport::Deprecation.behavior << -> (message, _callstack, _deprecation_horizon, _gem_name) { deprecation_tracker.add(message) }
71
+ ActiveSupport::Deprecation.behavior << -> (message, _callstack = nil, _deprecation_horizon = nil, _gem_name = nil) {
72
+ deprecation_tracker.add(message)
73
+ }
49
74
  end
50
75
  KernelWarnTracker.callbacks << -> (message) { deprecation_tracker.add(message) }
51
76
 
77
+ deprecation_tracker
78
+ end
79
+
80
+ def self.track_rspec(rspec_config, opts = {})
81
+ deprecation_tracker = init_tracker(opts)
82
+
52
83
  rspec_config.around do |example|
53
84
  deprecation_tracker.bucket = example.metadata.fetch(:rerun_file_path)
54
85
 
@@ -60,21 +91,27 @@ class DeprecationTracker
60
91
  end
61
92
 
62
93
  rspec_config.after(:suite) do
63
- if mode == "save"
64
- deprecation_tracker.save
65
- elsif mode == "compare"
66
- deprecation_tracker.compare
67
- end
94
+ deprecation_tracker.after_run
68
95
  end
69
96
  end
70
97
 
71
- attr_reader :deprecation_messages, :shitlist_path, :transform_message
72
- attr_reader :bucket
98
+ def self.track_minitest(opts = {})
99
+ tracker = init_tracker(opts)
73
100
 
74
- def initialize(shitlist_path, transform_message = nil)
101
+ Minitest.after_run do
102
+ tracker.after_run
103
+ end
104
+
105
+ ActiveSupport::TestCase.include(MinitestExtension.new(tracker))
106
+ end
107
+
108
+ attr_reader :deprecation_messages, :shitlist_path, :transform_message, :bucket, :mode
109
+
110
+ def initialize(shitlist_path, transform_message = nil, mode = :save)
75
111
  @shitlist_path = shitlist_path
76
112
  @transform_message = transform_message || -> (message) { message }
77
113
  @deprecation_messages = {}
114
+ @mode = mode.to_sym
78
115
  end
79
116
 
80
117
  def add(message)
@@ -88,6 +125,14 @@ class DeprecationTracker
88
125
  @deprecation_messages[value] ||= [] unless value.nil?
89
126
  end
90
127
 
128
+ def after_run
129
+ if mode == :save
130
+ save
131
+ elsif mode == :compare
132
+ compare
133
+ end
134
+ end
135
+
91
136
  def compare
92
137
  shitlist = read_shitlist
93
138
 
@@ -130,11 +175,19 @@ class DeprecationTracker
130
175
 
131
176
  def save
132
177
  new_shitlist = create_temp_shitlist
178
+ create_if_shitlist_path_does_not_exist
133
179
  FileUtils.cp(new_shitlist.path, shitlist_path)
134
180
  ensure
135
181
  new_shitlist.delete if new_shitlist
136
182
  end
137
183
 
184
+ def create_if_shitlist_path_does_not_exist
185
+ dirname = File.dirname(shitlist_path)
186
+ unless File.directory?(dirname)
187
+ FileUtils.mkdir_p(dirname)
188
+ end
189
+ end
190
+
138
191
  def create_temp_shitlist
139
192
  temp_file = Tempfile.new("temp-deprecation-tracker-shitlist")
140
193
  temp_file.write(JSON.pretty_generate(normalized_deprecation_messages))
@@ -149,7 +202,12 @@ class DeprecationTracker
149
202
  hash[bucket] = messages.sort
150
203
  end
151
204
 
152
- normalized.reject {|_key, value| value.empty? }.sort_by {|key, _value| key }.to_h
205
+ # not using `to_h` here to support older ruby versions
206
+ {}.tap do |h|
207
+ normalized.reject {|_key, value| value.empty? }.sort_by {|key, _value| key }.each do |k ,v|
208
+ h[k] = v
209
+ end
210
+ end
153
211
  end
154
212
 
155
213
  def read_shitlist
@@ -2,51 +2,49 @@ require "colorize"
2
2
  require "cgi"
3
3
  require "erb"
4
4
  require "json"
5
+ require "net/http"
5
6
 
6
7
  module NextRails
7
8
  class BundleReport
8
- def self.compatibility(rails_version:, include_rails_gems:)
9
+ def self.compatibility(rails_version: nil, include_rails_gems: nil)
9
10
  incompatible_gems = NextRails::GemInfo.all.reject do |gem|
10
11
  gem.compatible_with_rails?(rails_version: rails_version) || (!include_rails_gems && gem.from_rails?)
11
- end.sort_by do |gem|
12
- [
13
- gem.latest_version.compatible_with_rails?(rails_version: rails_version) ? 0 : 1,
14
- gem.name
15
- ].join("-")
16
- end
12
+ end.sort_by { |gem| gem.name }
13
+
14
+ incompatible_gems.each { |gem| gem.find_latest_compatible(rails_version: rails_version) }
17
15
 
18
16
  incompatible_gems_by_state = incompatible_gems.group_by { |gem| gem.state(rails_version) }
19
17
 
20
- template = <<~ERB
21
- <% if incompatible_gems_by_state[:latest_compatible] -%>
22
- <%= "=> Incompatible with Rails #{rails_version} (with new versions that are compatible):".white.bold %>
23
- <%= "These gems will need to be upgraded before upgrading to Rails #{rails_version}.".italic %>
18
+ template = <<-ERB
19
+ <% if incompatible_gems_by_state[:found_compatible] -%>
20
+ <%= "=> Incompatible with Rails #{rails_version} (with new versions that are compatible):".white.bold %>
21
+ <%= "These gems will need to be upgraded before upgrading to Rails #{rails_version}.".italic %>
24
22
 
25
- <% incompatible_gems_by_state[:latest_compatible].each do |gem| -%>
26
- <%= gem_header(gem) %> - upgrade to <%= gem.latest_version.version %>
27
- <% end -%>
23
+ <% incompatible_gems_by_state[:found_compatible].each do |gem| -%>
24
+ <%= gem_header(gem) %> - upgrade to <%= gem.latest_compatible_version.version %>
25
+ <% end -%>
28
26
 
29
- <% end -%>
30
- <% if incompatible_gems_by_state[:incompatible] -%>
31
- <%= "=> Incompatible with Rails #{rails_version} (with no new compatible versions):".white.bold %>
32
- <%= "These gems will need to be removed or replaced before upgrading to Rails #{rails_version}.".italic %>
27
+ <% end -%>
28
+ <% if incompatible_gems_by_state[:incompatible] -%>
29
+ <%= "=> Incompatible with Rails #{rails_version} (with no new compatible versions):".white.bold %>
30
+ <%= "These gems will need to be removed or replaced before upgrading to Rails #{rails_version}.".italic %>
33
31
 
34
- <% incompatible_gems_by_state[:incompatible].each do |gem| -%>
35
- <%= gem_header(gem) %> - new version, <%= gem.latest_version.version %>, is not compatible with Rails #{rails_version}
36
- <% end -%>
32
+ <% incompatible_gems_by_state[:incompatible].each do |gem| -%>
33
+ <%= gem_header(gem) %> - new version, <%= gem.latest_version.version %>, is not compatible with Rails #{rails_version}
34
+ <% end -%>
37
35
 
38
- <% end -%>
39
- <% if incompatible_gems_by_state[:no_new_version] -%>
40
- <%= "=> Incompatible with Rails #{rails_version} (with no new versions):".white.bold %>
41
- <%= "These gems will need to be upgraded by us or removed before upgrading to Rails #{rails_version}.".italic %>
42
- <%= "This list is likely to contain internal gems, like Cuddlefish.".italic %>
36
+ <% end -%>
37
+ <% if incompatible_gems_by_state[:no_new_version] -%>
38
+ <%= "=> Incompatible with Rails #{rails_version} (with no new versions):".white.bold %>
39
+ <%= "These gems will need to be upgraded by us or removed before upgrading to Rails #{rails_version}.".italic %>
40
+ <%= "This list is likely to contain internal gems, like Cuddlefish.".italic %>
43
41
 
44
- <% incompatible_gems_by_state[:no_new_version].each do |gem| -%>
45
- <%= gem_header(gem) %> - new version not found
46
- <% end -%>
42
+ <% incompatible_gems_by_state[:no_new_version].each do |gem| -%>
43
+ <%= gem_header(gem) %> - new version not found
44
+ <% end -%>
47
45
 
48
- <% end -%>
49
- <%= incompatible_gems.length.to_s.red %> gems incompatible with Rails <%= rails_version %>
46
+ <% end -%>
47
+ <%= incompatible_gems.length.to_s.red %> gems incompatible with Rails <%= rails_version %>
50
48
  ERB
51
49
 
52
50
  puts ERB.new(template, nil, "-").result(binding)
@@ -58,6 +56,45 @@ module NextRails
58
56
  header
59
57
  end
60
58
 
59
+ def self.compatible_ruby_version(rails_version)
60
+ # find all the versions of rails gem
61
+ uri = URI('https://rubygems.org/api/v1/versions/rails.json')
62
+ res = Net::HTTP.get_response(uri)
63
+ all_versions_res = JSON.parse(res.body)
64
+
65
+ # push all the versions in an array
66
+ all_versions = []
67
+ all_versions_res.each { |rv| all_versions << rv['number'] }
68
+
69
+ rv = rails_version[:rails_version]
70
+ matched_versions = all_versions.select { |h| h.start_with?(rv) }
71
+
72
+ # the list can either have the exact version or the latest version in the series of versions
73
+ # you are looking at
74
+ # ex: matched_versions = ["6.1.4.2", "6.1.4.1", "6.1.4"]
75
+ # if you have passed "6.1.4" and the list has the exact version, it will match and send
76
+ # the ruby version for it bu tif you had passed "6.1", then it will look for the
77
+ # latest version matching "6.1" which is "6.1.4.2" in this case and will return ruby
78
+ # version for it.
79
+ exact_version = matched_versions.include?(rv) ? rv : matched_versions[0]
80
+
81
+ if exact_version
82
+ uri = URI("https://rubygems.org/api/v2/rubygems/rails/versions/#{exact_version}.json")
83
+ res = Net::HTTP.get_response(uri)
84
+ ruby_version = JSON.parse(res.body)["ruby_version"]
85
+ else
86
+ ruby_version = nil
87
+ end
88
+
89
+
90
+ if ruby_version
91
+ puts "The required ruby version is #{ruby_version} for matched rails version #{exact_version}"
92
+ ruby_version
93
+ else
94
+ puts "Could not find a compatible ruby version"
95
+ end
96
+ end
97
+
61
98
  def self.outdated
62
99
  gems = NextRails::GemInfo.all
63
100
  out_of_date_gems = gems.reject(&:up_to_date?).sort_by(&:created_at)
@@ -67,15 +104,15 @@ module NextRails
67
104
  out_of_date_gems.each do |_gem|
68
105
  header = "#{_gem.name} #{_gem.version}"
69
106
 
70
- puts <<~MESSAGE
71
- #{header.bold.white}: released #{_gem.age} (latest version, #{_gem.latest_version.version}, released #{_gem.latest_version.age})
107
+ puts <<-MESSAGE
108
+ #{header.bold.white}: released #{_gem.age} (latest version, #{_gem.latest_version.version}, released #{_gem.latest_version.age})
72
109
  MESSAGE
73
110
  end
74
111
 
75
112
  puts ""
76
- puts <<~MESSAGE
77
- #{"#{sourced_from_git.count}".yellow} gems are sourced from git
78
- #{"#{out_of_date_gems.length}".red} of the #{gems.count} gems are out-of-date (#{percentage_out_of_date}%)
113
+ puts <<-MESSAGE
114
+ #{"#{sourced_from_git.count}".yellow} gems are sourced from git
115
+ #{"#{out_of_date_gems.length}".red} of the #{gems.count} gems are out-of-date (#{percentage_out_of_date}%)
79
116
  MESSAGE
80
117
  end
81
118
  end
@@ -28,13 +28,28 @@ module NextRails
28
28
  end
29
29
  end
30
30
 
31
+ RAILS_GEMS = [
32
+ "rails",
33
+ "activemodel",
34
+ "activerecord",
35
+ "actionmailer",
36
+ "actioncable",
37
+ "actionpack",
38
+ "actionview",
39
+ "activejob",
40
+ "activestorage",
41
+ "activesupport",
42
+ "railties",
43
+ ].freeze
44
+
31
45
  def self.all
32
46
  Gem::Specification.each.map do |gem_specification|
33
47
  new(gem_specification)
34
48
  end
35
49
  end
36
50
 
37
- attr_reader :gem_specification, :version, :name
51
+ attr_reader :gem_specification, :version, :name, :latest_compatible_version
52
+
38
53
  def initialize(gem_specification)
39
54
  @gem_specification = gem_specification
40
55
  @version = gem_specification.version
@@ -57,59 +72,69 @@ module NextRails
57
72
  version == latest_version.version
58
73
  end
59
74
 
75
+ def from_rails?
76
+ RAILS_GEMS.include?(name)
77
+ end
78
+
60
79
  def state(rails_version)
61
80
  if compatible_with_rails?(rails_version: rails_version)
62
81
  :compatible
63
- elsif latest_version.compatible_with_rails?(rails_version: rails_version)
64
- :latest_compatible
65
- elsif latest_version.version == "NOT FOUND"
82
+ elsif latest_compatible_version.version == "NOT FOUND"
66
83
  :no_new_version
84
+ elsif latest_compatible_version
85
+ :found_compatible
67
86
  else
68
87
  :incompatible
69
88
  end
70
89
  end
71
90
 
72
- def latest_version
73
- @latest_version ||= begin
74
- latest_gem_specification = Gem.latest_spec_for(name)
75
- if latest_gem_specification
76
- GemInfo.new(latest_gem_specification)
77
- else
78
- NullGemInfo.new
79
- end
80
- end
91
+ def compatible_with_rails?(rails_version: nil)
92
+ unsatisfied_rails_dependencies(rails_version: rails_version).empty?
81
93
  end
82
94
 
83
- def compatible_with_rails?(rails_version: Gem::Version.new("5.0"))
84
- unsatisfied_rails_dependencies(rails_version: rails_version).empty?
95
+ def unsatisfied_rails_dependencies(rails_version: nil)
96
+ spec_compatible_with_rails?(specification: gem_specification, rails_version: rails_version)
85
97
  end
86
98
 
87
- def unsatisfied_rails_dependencies(rails_version:)
88
- rails_dependencies = gem_specification.runtime_dependencies.select {|dependency| rails_gems.include?(dependency.name) }
99
+ def find_latest_compatible(rails_version: nil)
100
+ dependency = Gem::Dependency.new(@name)
101
+ fetcher = Gem::SpecFetcher.new
89
102
 
90
- rails_dependencies.reject do |rails_dependency|
91
- rails_dependency.requirement.satisfied_by?(Gem::Version.new(rails_version))
103
+ # list all available data for released gems
104
+ list, errors = fetcher.available_specs(:released)
105
+
106
+ specs = []
107
+ # filter only specs for the current gem and older versions
108
+ list.each do |source, gem_tuples|
109
+ gem_tuples.each do |gem_tuple|
110
+ if gem_tuple.name == @name && gem_tuple.version > @version
111
+ specs << source.fetch_spec(gem_tuple)
112
+ end
113
+ end
92
114
  end
93
- end
94
115
 
95
- def from_rails?
96
- rails_gems.include?(name)
116
+ # if nothing is found, consider gem incompatible
117
+ if specs.empty?
118
+ @latest_compatible_version = NullGemInfo.new
119
+ return
120
+ end
121
+
122
+ # if specs are found, look for the first one from that is compatible
123
+ # with the desired rails version starting from the end
124
+ specs.reverse.each do |spec|
125
+ if spec_compatible_with_rails?(specification: spec, rails_version: rails_version).empty?
126
+ @latest_compatible_version = spec
127
+ break
128
+ end
129
+ end
97
130
  end
98
131
 
99
- private def rails_gems
100
- [
101
- "rails",
102
- "activemodel",
103
- "activerecord",
104
- "actionmailer",
105
- "actioncable",
106
- "actionpack",
107
- "actionview",
108
- "activejob",
109
- "activestorage",
110
- "activesupport",
111
- "railties",
112
- ]
132
+ def spec_compatible_with_rails?(specification: nil, rails_version: nil)
133
+ rails_dependencies = specification.runtime_dependencies.select {|dependency| RAILS_GEMS.include?(dependency.name) }
134
+
135
+ rails_dependencies.reject do |rails_dependency|
136
+ rails_dependency.requirement.satisfied_by?(Gem::Version.new(rails_version))
137
+ end
113
138
  end
114
139
  end
115
140
  end
@@ -1,3 +1,3 @@
1
1
  module NextRails
2
- VERSION = "1.0.4"
2
+ VERSION = "1.2.0"
3
3
  end
data/next_rails.gemspec CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "https://github.com/fastruby/next_rails"
15
15
  spec.license = "MIT"
16
16
 
17
- spec.required_ruby_version = ">= 2.3.0"
17
+ spec.required_ruby_version = ">= 2.0"
18
18
 
19
19
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
20
  f.match(%r{^(test|spec|features)/})
@@ -25,9 +25,10 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_dependency "colorize", ">= 0.8.1"
27
27
  spec.add_development_dependency "bundler", ">= 1.16", "< 3.0"
28
- spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rake"
29
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
30
  spec.add_development_dependency "simplecov", "~> 0.17.1"
31
31
  spec.add_development_dependency "timecop", "~> 0.9.1"
32
- spec.add_development_dependency "actionview", "< 6.0"
32
+ spec.add_development_dependency "rexml", "3.1.7.3" # limited on purpose, new versions don't work with old rubies
33
+ spec.add_development_dependency "webmock", "3.14.0" # limited on purpose, new versions don't work with old rubies
33
34
  end
@@ -0,0 +1,9 @@
1
+ **IMPORTANT**: Please read the README before submitting pull requests for this project. Additionally, if your PR closes any open GitHub issues, make sure you include Closes #XXXX in your comment or use the option on the PR's sidebar to add related issues to auto-close the issue that your PR fixes.
2
+
3
+ - [ ] Add an entry to `CHANGELOG.md` that links to this PR under the "main (unreleased)" heading.
4
+
5
+ Description:
6
+
7
+ Please include a summary of the change and which issue is fixed or which feature is introduced. If changes to the behavior are made, clearly describe what changes.
8
+
9
+ I will abide by the [code of conduct](https://github.com/fastruby/next_rails/blob/main/CODE_OF_CONDUCT.md).
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: next_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.2.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: 2021-04-09 00:00:00.000000000 Z
12
+ date: 2022-08-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize
@@ -49,16 +49,16 @@ dependencies:
49
49
  name: rake
50
50
  requirement: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: '0'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: rspec
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -102,19 +102,33 @@ dependencies:
102
102
  - !ruby/object:Gem::Version
103
103
  version: 0.9.1
104
104
  - !ruby/object:Gem::Dependency
105
- name: actionview
105
+ name: rexml
106
106
  requirement: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "<"
108
+ - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: '6.0'
110
+ version: 3.1.7.3
111
111
  type: :development
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "<"
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 3.1.7.3
118
+ - !ruby/object:Gem::Dependency
119
+ name: webmock
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 3.14.0
125
+ type: :development
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
116
130
  - !ruby/object:Gem::Version
117
- version: '6.0'
131
+ version: 3.14.0
118
132
  description: A set of handy tools to upgrade your Rails application and keep it up
119
133
  to date
120
134
  email:
@@ -126,13 +140,21 @@ executables:
126
140
  - gem-next-diff
127
141
  - next
128
142
  - next.sh
143
+ - next_rails
129
144
  extensions: []
130
145
  extra_rdoc_files: []
131
146
  files:
147
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
148
+ - ".github/ISSUE_TEMPLATE/feature_request.md"
149
+ - ".github/dependabot.yml"
150
+ - ".github/workflows/main.yml"
132
151
  - ".gitignore"
133
152
  - ".rspec"
134
153
  - ".travis.yml"
135
154
  - CHANGELOG.md
155
+ - CODEOWNERS
156
+ - CODE_OF_CONDUCT.md
157
+ - CONTRIBUTING.md
136
158
  - Gemfile
137
159
  - LICENSE.txt
138
160
  - README.md
@@ -145,17 +167,19 @@ files:
145
167
  - exe/gem-next-diff
146
168
  - exe/next
147
169
  - exe/next.sh
170
+ - exe/next_rails
148
171
  - lib/deprecation_tracker.rb
149
172
  - lib/next_rails.rb
150
173
  - lib/next_rails/bundle_report.rb
151
174
  - lib/next_rails/gem_info.rb
152
175
  - lib/next_rails/version.rb
153
176
  - next_rails.gemspec
177
+ - pull_request_template.md
154
178
  homepage: https://github.com/fastruby/next_rails
155
179
  licenses:
156
180
  - MIT
157
181
  metadata: {}
158
- post_install_message:
182
+ post_install_message:
159
183
  rdoc_options: []
160
184
  require_paths:
161
185
  - lib
@@ -163,15 +187,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
163
187
  requirements:
164
188
  - - ">="
165
189
  - !ruby/object:Gem::Version
166
- version: 2.3.0
190
+ version: '2.0'
167
191
  required_rubygems_version: !ruby/object:Gem::Requirement
168
192
  requirements:
169
193
  - - ">="
170
194
  - !ruby/object:Gem::Version
171
195
  version: '0'
172
196
  requirements: []
173
- rubygems_version: 3.1.3
174
- signing_key:
197
+ rubygems_version: 3.1.6
198
+ signing_key:
175
199
  specification_version: 4
176
200
  summary: A toolkit to upgrade your next Rails application
177
201
  test_files: []