From 6ad41804562ea9b2e8642180cbbbd13f9e93f14b Mon Sep 17 00:00:00 2001 From: Max Melentiev Date: Sun, 5 Apr 2026 15:33:27 -0400 Subject: [PATCH 1/4] Use same logger configuration for all rails versions --- lib/telegram/bot/updates_controller/instrumentation.rb | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/lib/telegram/bot/updates_controller/instrumentation.rb b/lib/telegram/bot/updates_controller/instrumentation.rb index 8063517..32ebd22 100644 --- a/lib/telegram/bot/updates_controller/instrumentation.rb +++ b/lib/telegram/bot/updates_controller/instrumentation.rb @@ -8,13 +8,7 @@ class UpdatesController module Instrumentation extend ActiveSupport::Concern - included do - if respond_to?(:config_accessor, true) - config_accessor :logger - else - include AbstractController::Logger - end - end + include AbstractController::Logger class << self def instrument(action, *args, &block) From aadcd4a90c31fa40bb71e2c7382184a6bbaa2c30 Mon Sep 17 00:00:00 2001 From: Max Melentiev Date: Sun, 5 Apr 2026 15:45:18 -0400 Subject: [PATCH 2/4] Drop support for old rails and ruby --- .github/workflows/ci.yml | 14 +++----------- .rubocop.yml | 2 +- Appraisals | 20 -------------------- CHANGELOG.md | 1 + gemfiles/rails_51.gemfile | 21 --------------------- gemfiles/rails_52.gemfile | 21 --------------------- gemfiles/rails_60.gemfile | 21 --------------------- gemfiles/rails_61.gemfile | 21 --------------------- telegram-bot.gemspec | 6 +++--- 9 files changed, 8 insertions(+), 119 deletions(-) delete mode 100644 gemfiles/rails_51.gemfile delete mode 100644 gemfiles/rails_52.gemfile delete mode 100644 gemfiles/rails_60.gemfile delete mode 100644 gemfiles/rails_61.gemfile diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 288eb0d..84cae9e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,13 +17,6 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - ruby: - - '2.7' - gemfile: - - gemfiles/rails_61.gemfile - - gemfiles/rails_60.gemfile - - gemfiles/rails_52.gemfile - - gemfiles/rails_51.gemfile include: # ruby 3.x - ruby: '3.2' @@ -34,10 +27,9 @@ jobs: gemfile: gemfiles/rails_72.gemfile - ruby: '3.2' gemfile: gemfiles/rails_71.gemfile - - ruby: '3.0' - gemfile: gemfiles/rails_61.gemfile - - ruby: '3.0' - gemfile: gemfiles/rails_60.gemfile + # ruby 2.x + - ruby: '2.7' + gemfile: gemfiles/rails_72.gemfile env: BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }} steps: diff --git a/.rubocop.yml b/.rubocop.yml index 4c21695..97186ab 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,7 +1,7 @@ require: rubocop-rails AllCops: - TargetRubyVersion: 2.4 + TargetRubyVersion: 2.7 NewCops: enable SuggestExtensions: false Exclude: diff --git a/Appraisals b/Appraisals index 011b8eb..6c46612 100644 --- a/Appraisals +++ b/Appraisals @@ -24,23 +24,3 @@ appraise 'rails-70' do gem 'actionpack', '~> 7.0.0' gem 'railties', '~> 7.0.0' end - -appraise 'rails-61' do - gem 'actionpack', '~> 6.1.0' - gem 'railties', '~> 6.1.0' -end - -appraise 'rails-60' do - gem 'actionpack', '~> 6.0.0' - gem 'railties', '~> 6.0.0' -end - -appraise 'rails-52' do - gem 'actionpack', '~> 5.2.0' - gem 'railties', '~> 5.2.0' -end - -appraise 'rails-51' do - gem 'actionpack', '~> 5.1.0' - gem 'railties', '~> 5.1.0' -end diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f24edc..1173cf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Unreleased - Rails 8.1 support +- Drop support for rails < 7.0 and ruby < 2.7 # 0.16.7 diff --git a/gemfiles/rails_51.gemfile b/gemfiles/rails_51.gemfile deleted file mode 100644 index 2ce28b6..0000000 --- a/gemfiles/rails_51.gemfile +++ /dev/null @@ -1,21 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "actionpack", "~> 5.1.0" -gem "railties", "~> 5.1.0" - -group :development do - gem "appraisal", "~> 2.2" - gem "debug", "~> 1.9.2" - gem "sdoc", "~> 2.0.3" - gem "telegram-bot-types", "~> 0.6.3" - gem "rspec", "~> 3.12.0" - gem "rspec-its", "~> 1.3.0" - gem "rspec-rails", "~> 4.0.2" - gem "rubocop", "~> 1.59.0" - gem "rubocop-rails", "~> 2.23.1" - gem "coveralls", "~> 0.8.23", require: false -end - -gemspec path: "../" diff --git a/gemfiles/rails_52.gemfile b/gemfiles/rails_52.gemfile deleted file mode 100644 index f1d1843..0000000 --- a/gemfiles/rails_52.gemfile +++ /dev/null @@ -1,21 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "actionpack", "~> 5.2.0" -gem "railties", "~> 5.2.0" - -group :development do - gem "appraisal", "~> 2.2" - gem "debug", "~> 1.9.2" - gem "sdoc", "~> 2.0.3" - gem "telegram-bot-types", "~> 0.6.3" - gem "rspec", "~> 3.12.0" - gem "rspec-its", "~> 1.3.0" - gem "rspec-rails", "~> 4.0.2" - gem "rubocop", "~> 1.59.0" - gem "rubocop-rails", "~> 2.23.1" - gem "coveralls", "~> 0.8.23", require: false -end - -gemspec path: "../" diff --git a/gemfiles/rails_60.gemfile b/gemfiles/rails_60.gemfile deleted file mode 100644 index 65b3746..0000000 --- a/gemfiles/rails_60.gemfile +++ /dev/null @@ -1,21 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "actionpack", "~> 6.0.0" -gem "railties", "~> 6.0.0" - -group :development do - gem "appraisal", "~> 2.2" - gem "debug", "~> 1.9.2" - gem "sdoc", "~> 2.0.3" - gem "telegram-bot-types", "~> 0.6.3" - gem "rspec", "~> 3.12.0" - gem "rspec-its", "~> 1.3.0" - gem "rspec-rails", "~> 4.0.2" - gem "rubocop", "~> 1.59.0" - gem "rubocop-rails", "~> 2.23.1" - gem "coveralls", "~> 0.8.23", require: false -end - -gemspec path: "../" diff --git a/gemfiles/rails_61.gemfile b/gemfiles/rails_61.gemfile deleted file mode 100644 index cc1df5e..0000000 --- a/gemfiles/rails_61.gemfile +++ /dev/null @@ -1,21 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "actionpack", "~> 6.1.0" -gem "railties", "~> 6.1.0" - -group :development do - gem "appraisal", "~> 2.2" - gem "debug", "~> 1.9.2" - gem "sdoc", "~> 2.0.3" - gem "telegram-bot-types", "~> 0.6.3" - gem "rspec", "~> 3.12.0" - gem "rspec-its", "~> 1.3.0" - gem "rspec-rails", "~> 4.0.2" - gem "rubocop", "~> 1.59.0" - gem "rubocop-rails", "~> 2.23.1" - gem "coveralls", "~> 0.8.23", require: false -end - -gemspec path: "../" diff --git a/telegram-bot.gemspec b/telegram-bot.gemspec index aed0484..bbf21aa 100644 --- a/telegram-bot.gemspec +++ b/telegram-bot.gemspec @@ -23,10 +23,10 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ['lib'] - spec.required_ruby_version = '>= 2.4' + spec.required_ruby_version = '>= 2.7' - spec.add_dependency 'actionpack', '>= 4.0', '< 8.2' - spec.add_dependency 'activesupport', '>= 4.0', '< 8.2' + spec.add_dependency 'actionpack', '>= 7.0', '< 8.2' + spec.add_dependency 'activesupport', '>= 7.0', '< 8.2' spec.add_dependency 'httpclient', '~> 2.7' spec.add_development_dependency 'bundler', '> 1.16' From 6766ffda96a8720eaa6b84043117860cfeb95223 Mon Sep 17 00:00:00 2001 From: Max Melentiev Date: Sun, 5 Apr 2026 15:51:59 -0400 Subject: [PATCH 3/4] Fix linter for ruby 2.7 --- lib/telegram/bot/rspec/client_matchers.rb | 4 ++-- lib/telegram/bot/updates_controller.rb | 10 ++++------ .../bot/updates_controller/instrumentation.rb | 8 +++----- .../bot/updates_controller/rspec_helpers.rb | 2 +- spec/integration_helper.rb | 14 ++++++-------- .../bot/updates_controller/typed_update_spec.rb | 2 +- spec/telegram/bot/updates_controller_spec.rb | 2 +- 7 files changed, 18 insertions(+), 24 deletions(-) diff --git a/lib/telegram/bot/rspec/client_matchers.rb b/lib/telegram/bot/rspec/client_matchers.rb index f2b1a13..b51fae7 100644 --- a/lib/telegram/bot/rspec/client_matchers.rb +++ b/lib/telegram/bot/rspec/client_matchers.rb @@ -82,8 +82,8 @@ def matches?(proc) # rubocop:disable Metrics/AbcSize expected_number.public_send(expectation_method, matching_requests_count) end - def with(*args, &block) - @arg_list_matcher = ArgListMatcher.new(*args, &block) + def with(...) + @arg_list_matcher = ArgListMatcher.new(...) self end diff --git a/lib/telegram/bot/updates_controller.rb b/lib/telegram/bot/updates_controller.rb index 628c2c8..a2e5b36 100644 --- a/lib/telegram/bot/updates_controller.rb +++ b/lib/telegram/bot/updates_controller.rb @@ -120,12 +120,10 @@ def payload_from_update(update) def payload_from_typed_update(update) PAYLOAD_TYPES.find do |type| - begin - item = update[type] - return [item, type] if item - rescue Exception # rubocop:disable Lint/RescueException - # dry-rb raises exception if field is not defined in schema - end + item = update[type] + return [item, type] if item + rescue Exception # rubocop:disable Lint/RescueException + # dry-rb raises exception if field is not defined in schema end end end diff --git a/lib/telegram/bot/updates_controller/instrumentation.rb b/lib/telegram/bot/updates_controller/instrumentation.rb index 32ebd22..83ecaa4 100644 --- a/lib/telegram/bot/updates_controller/instrumentation.rb +++ b/lib/telegram/bot/updates_controller/instrumentation.rb @@ -28,11 +28,9 @@ def process_action(*args) } Instrumentation.instrument(:start_processing, raw_payload.dup) Instrumentation.instrument(:process_action, raw_payload) do |payload| - begin - super - ensure - append_info_to_payload(payload) - end + super + ensure + append_info_to_payload(payload) end end diff --git a/lib/telegram/bot/updates_controller/rspec_helpers.rb b/lib/telegram/bot/updates_controller/rspec_helpers.rb index 2f2149a..1651f5a 100644 --- a/lib/telegram/bot/updates_controller/rspec_helpers.rb +++ b/lib/telegram/bot/updates_controller/rspec_helpers.rb @@ -33,7 +33,7 @@ def dispatch(update = self.update, bot = self.bot, webhook_request = self.webhoo def deep_stringify(input) case input when Array then input.map(&method(__callee__)) - when Hash then input.map { |k, v| [k.to_s, deep_stringify(v)] }.to_h + when Hash then input.to_h { |k, v| [k.to_s, deep_stringify(v)] } else input end end diff --git a/spec/integration_helper.rb b/spec/integration_helper.rb index c2b94a0..388ef38 100644 --- a/spec/integration_helper.rb +++ b/spec/integration_helper.rb @@ -66,14 +66,12 @@ class TestApplication < Rails::Application config.include RSpec::Rails::RequestExampleGroup, type: :request config.around type: :request do |ex| - begin - Telegram.reset_bots - Telegram::Bot::ClientStub.stub_all! - ex.run - ensure - Telegram.reset_bots - Telegram::Bot::ClientStub.stub_all!(false) - end + Telegram.reset_bots + Telegram::Bot::ClientStub.stub_all! + ex.run + ensure + Telegram.reset_bots + Telegram::Bot::ClientStub.stub_all!(false) end config.before type: :request do diff --git a/spec/telegram/bot/updates_controller/typed_update_spec.rb b/spec/telegram/bot/updates_controller/typed_update_spec.rb index bba19b3..03334bf 100644 --- a/spec/telegram/bot/updates_controller/typed_update_spec.rb +++ b/spec/telegram/bot/updates_controller/typed_update_spec.rb @@ -31,7 +31,7 @@ purchased_paid_media pre_checkout_query ]). - map { |x| [x, Telegram::Bot::Types.const_get(x.camelize)] }.to_h. + to_h { |x| [x, Telegram::Bot::Types.const_get(x.camelize)] }. merge( 'chat_member' => Telegram::Bot::Types::ChatMemberUpdated ) diff --git a/spec/telegram/bot/updates_controller_spec.rb b/spec/telegram/bot/updates_controller_spec.rb index 6b23085..78ac1cb 100644 --- a/spec/telegram/bot/updates_controller_spec.rb +++ b/spec/telegram/bot/updates_controller_spec.rb @@ -7,7 +7,7 @@ subject { controller.action_for_payload } def stub_payload(*fields) - fields.map { |x| [x, double(x)] }.to_h + fields.to_h { |x| [x, double(x)] } end context 'when payload is inline_query' do From d8b098a5703b03fc889a8e7072ae443e1ffeb82c Mon Sep 17 00:00:00 2001 From: Max Melentiev Date: Sun, 5 Apr 2026 15:53:37 -0400 Subject: [PATCH 4/4] Use rails 7.1 for ruby 2.7 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 84cae9e..a480a06 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,7 @@ jobs: gemfile: gemfiles/rails_71.gemfile # ruby 2.x - ruby: '2.7' - gemfile: gemfiles/rails_72.gemfile + gemfile: gemfiles/rails_71.gemfile env: BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }} steps: