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

Revert "Drop MRI 1.8.7-2.2 support (#158)" #250

Open
wants to merge 29 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
9860cb9
Revert "Drop MRI 1.8.7-2.2 support (#158)"
pboling Feb 20, 2025
14f36cd
💚 Fix bundler versions per Ruby version
pboling Feb 20, 2025
79a6de1
💚 Fix ruby declaration in Gemfile when on ruby-head
pboling Feb 20, 2025
2d022fc
🚨 Address code review from @n-rodriguez
pboling Feb 20, 2025
df41df2
👷 Add Rubies 2.7, 2.6, 2.5, 2.4, 2.3, 2.2, 2.1, 2.0, 1.9, 1.8 to buil…
pboling Feb 20, 2025
1a5b85d
♻️ Use .rspec to dry spec file headers
pboling Feb 20, 2025
a19e707
🚨 Address code review from @n-rodriguez
pboling Feb 21, 2025
e1673bc
🐛 Fixes for Ruby 2.7 compat
pboling Feb 21, 2025
4ec2725
👷 add Ruby 3.4
pboling Feb 21, 2025
594690d
🐛 Fix inconsistent indentation
pboling Feb 21, 2025
386ddb6
📝 Documentation
pboling Feb 21, 2025
7a2ec8e
💚 Fix inconsistent indentation in spec fixtures
pboling Feb 21, 2025
f722561
🚨 Lint lock update
pboling Feb 21, 2025
12002da
👷 Add Ruby 2.6
pboling Feb 21, 2025
df71fbb
✏️ Lookahead != Lookbehind
pboling Feb 21, 2025
5fcfb43
✏️ Fix typo in documentation
pboling Feb 21, 2025
975ded0
👷 Remove Ruby 2.6 from CI (to be added back in another PR)
pboling Feb 21, 2025
46d71e6
📝 Documentation
pboling Feb 3, 2025
c07c0c9
🐛 Ruby 1.8 compat: Replace __dir__ with File.dirname(__FILE__)
pboling Feb 24, 2025
1ceb8ab
🚨 Lint lock update
pboling Feb 24, 2025
8bffc9d
🐛 Ruby < 3.0 compat: Bifurcate the Modern Double Splat
pboling Feb 24, 2025
f3595ab
🐛 Ruby < 3.0 compat: Bifurcate the Modern Double Splat (redux)
pboling Feb 24, 2025
f582740
🐛 Ruby < 3.0 compat: Bifurcate the Modern Double Splat (redux deux)
pboling Feb 24, 2025
1579ad0
🐛 Ruby < 3.0 compat: Bifurcate the Modern Double Splat (tiga)
pboling Feb 24, 2025
a524ead
🐛 Ruby < 3.0 compat: Bifurcate the Modern Double Splat (empat)
pboling Feb 24, 2025
df2a1e9
🚨 Style/SymbolArray: EnforcedStyle: brackets
pboling Feb 24, 2025
0a02c86
💚 Pend spec failure
pboling Feb 24, 2025
be18441
💚 skip tests that are known to fail on old bundler versions
pboling Feb 24, 2025
198a324
💚 turn off truffleruby-head for now
pboling Feb 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@ jobs:
fail-fast: false
matrix:
ruby:
- '3.4'
- '3.3'
- '3.2'
- '3.1'
- '3.0'
- '2.7'
- 'head'
- jruby
- jruby-head
Expand All @@ -38,10 +40,23 @@ jobs:
- name: Update bundler
env:
RUBY_VERSION: ${{ matrix.ruby }}
# See: https://dev.to/galtzo/matrix-ruby-gem-bundler-etc-4kk7
run: |
case ${RUBY_VERSION} in
truffleruby|truffleruby-head)
gem install bundler -v 2.5.18
1.8|1.9|2.0|2.1|2.2)
Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe we should add EOL Rubies in matrix:ruby above?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yep, that's my next task.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Adding them one by one now...

gem install bundler -v 1.17.3
;;

2.3|2.4|2.5)
gem install bundler -v 2.3.27
;;

2.6|2.7)
gem install bundler -v 2.4.22
;;

3.0)
gem install bundler -v 2.5.23
;;

*)
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ pkg
Gemfile.lock
.bundle
.DS_Store

spec/tmp
4 changes: 4 additions & 0 deletions .rspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
--format progress
--color
--require spec_helper
--warnings
17 changes: 17 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
inherit_gem:
rubocop-lts: config/rubygem_rspec.yml

RSpec/ExampleLength:
Enabled: false

RSpec/MultipleExpectations:
Enabled: false

RSpec/DescribeClass:
Enabled: false

# TODO: We would need to implement Mutexes in order to make violations thread safe.
# But even then they would still trigger the violation.
# See: https://coderscat.com/ruby-change-current-working-directory/
ThreadSafety/DirChdir:
Enabled: false
112 changes: 112 additions & 0 deletions .rubocop_gradual.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
{
"Gemfile:3872962921": [
[26, 3, 4, "Security/Eval: The use of `eval` is a serious security risk.", 2087429787],
[28, 3, 4, "Security/Eval: The use of `eval` is a serious security risk.", 2087429787],
[30, 3, 4, "Security/Eval: The use of `eval` is a serious security risk.", 2087429787]
],
"bin/bundle:41466308": [
[66, 5, 20, "ThreadSafety/ClassInstanceVariable: Avoid class instance variables.", 2485198147]
],
"lib/appraisal/appraisal_file.rb:3486777149": [
[13, 5, 52, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 946226050]
],
"lib/appraisal/cli.rb:435288507": [
[116, 5, 410, "Style/MissingRespondToMissing: When using `method_missing`, define `respond_to_missing?`.", 1969529734]
],
"lib/appraisal/customize.rb:190316824": [
[10, 5, 138, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2682968747],
[17, 5, 62, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 4082816720],
[21, 5, 516, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2780620929]
],
"lib/appraisal/utils.rb:3706894031": [
[6, 5, 129, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 733338411],
[10, 5, 124, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 222857520],
[17, 5, 354, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 119295155],
[39, 5, 152, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1306460482],
[46, 5, 151, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1120325158],
[52, 5, 98, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 714993131],
[56, 5, 244, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1461524090],
[65, 5, 111, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1909626476]
],
"spec/acceptance/cli/clean_spec.rb:1564995421": [
[3, 23, 17, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 1606893221]
],
"spec/acceptance/cli/generate_spec.rb:245350726": [
[3, 23, 20, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 3905826443]
],
"spec/acceptance/cli/help_spec.rb:3569358941": [
[3, 23, 16, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 2148351217]
],
"spec/acceptance/cli/install_spec.rb:3249736824": [
[3, 23, 19, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 3284642881]
],
"spec/acceptance/cli/list_spec.rb:36921834": [
[3, 23, 16, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 2152687586]
],
"spec/acceptance/cli/update_spec.rb:3754424074": [
[3, 23, 18, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 3752509585]
],
"spec/acceptance/cli/version_spec.rb:2850459497": [
[3, 23, 19, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 316256858]
],
"spec/appraisal/appraisal_file_spec.rb:1896479557": [
[28, 18, 7, "RSpec/NamedSubject: Name your test subject if you need to reference it explicitly.", 1892732441],
[33, 7, 57, "RSpec/NestedGroups: Maximum example group nesting exceeded [4/3].", 511689843],
[41, 20, 7, "RSpec/NamedSubject: Name your test subject if you need to reference it explicitly.", 1892732441],
[41, 33, 39, "RSpec/ExpectChange: Prefer `change(Appraisal::Customize, :heading)`.", 513325635],
[45, 7, 63, "RSpec/NestedGroups: Maximum example group nesting exceeded [4/3].", 1527582647],
[53, 20, 7, "RSpec/NamedSubject: Name your test subject if you need to reference it explicitly.", 1892732441],
[53, 33, 45, "RSpec/ExpectChange: Prefer `change(Appraisal::Customize, :single_quotes)`.", 627072007],
[57, 7, 77, "RSpec/NestedGroups: Maximum example group nesting exceeded [4/3].", 1960750461],
[65, 11, 7, "RSpec/NamedSubject: Name your test subject if you need to reference it explicitly.", 1892732441]
],
"spec/appraisal/appraisal_spec.rb:3939376245": [
[33, 11, 23, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 2511581329],
[90, 11, 23, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 1120511218],
[95, 7, 83, "RSpec/ReceiveMessages: Use `receive_messages` instead of multiple stubs on lines [96].", 1453890366],
[95, 13, 10, "RSpec/InstanceVariable: Avoid instance variables - use let, a method call, or a local variable (if possible).", 4097172192],
[96, 7, 82, "RSpec/ReceiveMessages: Use `receive_messages` instead of multiple stubs on lines [95].", 1614459968],
[96, 13, 10, "RSpec/InstanceVariable: Avoid instance variables - use let, a method call, or a local variable (if possible).", 4097172192],
[97, 61, 20, "RSpec/VerifiedDoubles: Prefer using verifying doubles over normal doubles.", 2281802167],
[104, 9, 10, "RSpec/InstanceVariable: Avoid instance variables - use let, a method call, or a local variable (if possible).", 4097172192],
[114, 7, 10, "RSpec/InstanceVariable: Avoid instance variables - use let, a method call, or a local variable (if possible).", 4097172192],
[120, 7, 10, "RSpec/InstanceVariable: Avoid instance variables - use let, a method call, or a local variable (if possible).", 4097172192],
[126, 7, 10, "RSpec/InstanceVariable: Avoid instance variables - use let, a method call, or a local variable (if possible).", 4097172192]
],
"spec/appraisal/customize_spec.rb:3636242792": [
[7, 1, 4472, "RSpec/MultipleMemoizedHelpers: Example group has too many memoized helpers [6/5]", 194570577],
[17, 3, 13, "RSpec/SubjectDeclaration: Use subject explicitly rather than using let", 3282510975],
[25, 3, 564, "RSpec/MultipleMemoizedHelpers: Example group has too many memoized helpers [6/5]", 3336288078],
[27, 7, 7, "RSpec/NamedSubject: Name your test subject if you need to reference it explicitly.", 1892732441],
[43, 3, 286, "RSpec/MultipleMemoizedHelpers: Example group has too many memoized helpers [6/5]", 4222920637],
[45, 7, 7, "RSpec/NamedSubject: Name your test subject if you need to reference it explicitly.", 1892732441],
[55, 3, 2985, "RSpec/MultipleMemoizedHelpers: Example group has too many memoized helpers [13/5]", 1576524985],
[65, 7, 62, "RSpec/ReceiveMessages: Use `receive_messages` instead of multiple stubs on lines [66, 67, 68].", 123979604],
[66, 7, 72, "RSpec/ReceiveMessages: Use `receive_messages` instead of multiple stubs on lines [65, 67, 68].", 3240119264],
[67, 7, 74, "RSpec/ReceiveMessages: Use `receive_messages` instead of multiple stubs on lines [65, 66, 68].", 3701550880],
[68, 7, 85, "RSpec/ReceiveMessages: Use `receive_messages` instead of multiple stubs on lines [65, 66, 67].", 3874694796],
[72, 7, 7, "RSpec/NamedSubject: Name your test subject if you need to reference it explicitly.", 1892732441]
],
"spec/appraisal/gemfile_spec.rb:3969538335": [
[228, 11, 17, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 3608128140],
[229, 13, 13, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 420381022],
[236, 13, 15, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 3511037132],
[246, 13, 12, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 3100155342],
[256, 11, 24, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 3242693747],
[259, 13, 17, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 105800534],
[282, 13, 16, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 179066369],
[313, 13, 15, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 3912615366],
[357, 13, 14, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 2832187185],
[415, 13, 22, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 772581599],
[425, 11, 20, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 1076107314]
],
"spec/appraisal/utils_spec.rb:2286225770": [
[62, 17, 58, "RSpec/VerifiedDoubles: Prefer using verifying doubles over normal doubles.", 1573223692]
],
"spec/support/acceptance_test_helpers.rb:3072478660": [
[149, 5, 32, "Style/InvertibleUnlessCondition: Prefer `if $?.exitstatus == 0` over `unless $?.exitstatus != 0`.", 4187517264]
],
"spec/support/stream_helpers.rb:3654818709": [
[10, 17, 4, "Security/Eval: The use of `eval` is a serious security risk.", 2087429787]
]
}
1 change: 1 addition & 0 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ruby truffleruby-24.1.2
43 changes: 40 additions & 3 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,47 @@ source "https://rubygems.org"

gemspec

# For Ruby version specific dependencies
ruby_version = Gem::Version.new(RUBY_VERSION)

platform :mri do
# Debugging - Ensure ENV["DEBUG"] == "true" to use debuggers within spec suite
if ruby_version < Gem::Version.new("2.7")
# Use byebug in code
gem "byebug", ">= 11"
else
# Use binding.break, binding.b, or debugger in code
gem "debug", ">= 1.0.0"
end

# Dev Console - Binding.pry - Irb replacement
gem "pry", "~> 0.14" # ruby >= 2.0
end

# This here to make sure appraisal works with Rails 3.0.0.
gem "thor", "~> 0.14.0"

group :development, :test do
gem "activesupport", ">= 3.2.21"
gem "rspec", "~> 3.0"
if ruby_version < Gem::Version.new("1.9")
eval File.read("Gemfile-1.8")
elsif ruby_version < Gem::Version.new("2.1")
eval File.read("Gemfile-2.0")
elsif ruby_version < Gem::Version.new("2.2")
eval File.read("Gemfile-2.1")
elsif ruby_version < Gem::Version.new("2.7")
# Std Lib extractions
gem "benchmark", "~> 0.4" # Removed from Std Lib in Ruby 3.5
else
# Ruby >= 2.7 we can run style / lint checks via rubocop-gradual with rubocop-lts rules for Ruby 1.8+.
# This means we can develop on modern Ruby but remain compatible with ancient Ruby.
# TODO: Replace individual style gems below with modular gemfile, once eval_gemfile support is added to appraisal.
# eval_gemfile "gemfiles/modular/style.gemfile"
# We run rubocop on the latest version of Ruby,
# but in support of the oldest supported version of Ruby
gem "rubocop-lts", "~> 0.1", ">= 0.1.1" # Style and Linting support for Ruby >= 1.8
gem "rubocop-packaging", "~> 0.5", ">= 0.5.2"
gem "rubocop-rspec", "~> 3.2"
gem "standard", ">= 1.35.1", "!= 1.41.1", "!= 1.42.0"

# Std Lib extractions
gem "benchmark", "~> 0.4" # Removed from Std Lib in Ruby 3.5
end
6 changes: 6 additions & 0 deletions Gemfile-1.8
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# These gems are locked for Ruby 1.8.7 compatibility
gem "i18n", "~> 0.6.0"
gem "activesupport", "~> 3.2.21"
gem "rake", "~> 10.5"
gem "rack", "~> 1.6.5"
gem "benchmark", "~> 0.3" # Removed from Std Lib in Ruby 3.5
4 changes: 4 additions & 0 deletions Gemfile-2.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# These gems are locked for Ruby 1.9 & 2.0 compatibility
gem "activesupport", "~> 4.2.7"
gem "rack", "~> 1.6.5"
gem "benchmark", "~> 0.3" # Removed from Std Lib in Ruby 3.5
4 changes: 4 additions & 0 deletions Gemfile-2.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# These gems are locked for Ruby 2.1 compatibility
gem "activesupport", "~> 4.2.7"
gem "rack", "~> 1.6.5"
gem "benchmark", "~> 0.4" # Removed from Std Lib in Ruby 3.5
28 changes: 14 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,31 +122,31 @@ To do this, use the `remove_gem` declaration within the necessary `appraise` blo

**Gemfile**
```ruby
gem 'rails', '~> 4.2'
gem "rails", "~> 4.2"

group :test do
gem 'rspec', '~> 4.0'
gem 'test_after_commit'
gem "rspec", "~> 4.0"
gem "test_after_commit"
end
```

**Appraisals**
```ruby
appraise 'rails-5' do
gem 'rails', '~> 5.2'
appraise "rails-5" do
gem "rails", "~> 5.2"

group :test do
remove_gem 'test_after_commit'
remove_gem "test_after_commit"
end
end
```

Using the `Appraisals` file defined above, this is what the resulting `Gemfile` will look like:
```ruby
gem 'rails', '~> 5.2'
gem "rails", "~> 5.2"

group :test do
gem 'rspec', '~> 4.0'
gem "rspec", "~> 4.0"
end
```

Expand Down Expand Up @@ -174,12 +174,12 @@ You can also provide variables for substitution in the heading, based on each ap
```ruby
customize_gemfiles do
{
single_quotes: true,
heading: <<~HEADING
frozen_string_literal: true
:single_quotes => true,
:heading => <<-HEADING,
frozen_string_literal: true

`%{gemfile}` has been generated by Appraisal, do NOT modify it or `%{lockfile}` directly!
Make the changes to the "%{appraisal}" block in `Appraisals` instead. See the conventions at https://example.com/
`%{gemfile}` has been generated by Appraisal, do NOT modify it or `%{lockfile}` directly!
Make the changes to the "%{appraisal}" block in `Appraisals` instead. See the conventions at https://example.com/
HEADING
}
end
Expand All @@ -196,7 +196,7 @@ Using the `Appraisals` file defined above, this is what the resulting `Gemfile`
# `rails-3.gemfile` has been generated by Appraisal, do NOT modify it or `rails-3.gemfile.lock` directly!
# Make the changes to the "rails-3" block in `Appraisals` instead. See the conventions at https://example.com/

gem 'rails', '3.2.14'
gem "rails", "3.2.14"
```

Version Control
Expand Down
13 changes: 11 additions & 2 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,14 @@ RSpec::Core::RakeTask.new do |t|
t.verbose = false
end

desc "Default: run the rspec examples"
task default: [:spec]
begin
require "rubocop/lts"
Rubocop::Lts.install_tasks
rescue LoadError
task(:rubocop_gradual) do
warn("RuboCop (Gradual) is disabled")
end
end

desc "Default: rubocop_gradual's autocorrect and run the rspec examples"
task :default => ["rubocop_gradual:autocorrect", :spec]
Loading
Loading