From e893ce8f878d225d0ac79505a93584fe279d284e Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 12 Nov 2025 12:20:24 +0100 Subject: [PATCH 01/13] add rails 8.1 --- .github/workflows/specs.yml | 5 ++++- Appraisals | 4 ++++ gemfiles/rails_8.1.gemfile | 21 +++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 gemfiles/rails_8.1.gemfile diff --git a/.github/workflows/specs.yml b/.github/workflows/specs.yml index b57cba5..bf8fd96 100644 --- a/.github/workflows/specs.yml +++ b/.github/workflows/specs.yml @@ -43,6 +43,9 @@ jobs: rails: "8.0" - ruby: "3.4" rails: "8.0" + # Rails 8.1 + - ruby: "3.4" + rails: "8.1" steps: - uses: actions/checkout@v4 - name: Set up Ruby ${{ matrix.ruby }} @@ -63,6 +66,6 @@ jobs: bundle exec rake - name: Simplecov Report uses: k1LoW/octocov-action@v1 - if: matrix.ruby == '3.4' && matrix.rails == '8.0' + if: matrix.ruby == '3.4' && matrix.rails == '8.1' with: github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/Appraisals b/Appraisals index 1fe4f57..2d4c0d1 100644 --- a/Appraisals +++ b/Appraisals @@ -21,3 +21,7 @@ end appraise "rails-8.0" do gem "railties", "~> 8.0" end + +appraise "rails-8.1" do + gem "railties", "~> 8.1" +end diff --git a/gemfiles/rails_8.1.gemfile b/gemfiles/rails_8.1.gemfile new file mode 100644 index 0000000..5389f19 --- /dev/null +++ b/gemfiles/rails_8.1.gemfile @@ -0,0 +1,21 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "actionmailer" +gem "activerecord" +gem "byebug" +gem "railties", "~> 8.1.0" +gem "rake" +gem "rspec" +gem "rspec-rails" +gem "simplecov" +gem "standard" +gem "sqlite3" +gem "vcr" +gem "webmock" +gem "mutex_m" +gem "logger" + +gemspec path: "../" + From 3e1758df6628d0b61d380de0e265375bd3a9fe3a Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 12 Nov 2025 12:23:16 +0100 Subject: [PATCH 02/13] 0.6.0 bump --- CHANGELOG.md | 6 +++++- Gemfile.lock | 7 ++----- castle_devise.gemspec | 2 +- lib/castle_devise/version.rb | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee6dbaa..2866e85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## [Unreleased][main] +## [0.6.0] - 2025-01-XX +- Add Rails 8.1 support + ## [0.5.0] - 2025-06-17 - Throw a warning instead of an error for the `$login.failed` event when an exception is raised - Security fixes and dependency updates @@ -33,7 +36,8 @@ - Initial release -[main]: https://github.com/castle/castle_devise/compare/v0.5.0...HEAD +[main]: https://github.com/castle/castle_devise/compare/v0.6.0...HEAD +[0.6.0]: https://github.com/castle/castle_devise/compare/v0.5.0...v0.6.0 [0.5.0]: https://github.com/castle/castle_devise/compare/v0.4.3...v0.5.0 [0.4.3]: https://github.com/castle/castle_devise/compare/v0.4.2...v0.4.3 [0.4.2]: https://github.com/castle/castle_devise/compare/v0.4.1...v0.4.2 diff --git a/Gemfile.lock b/Gemfile.lock index e79f9fa..3a4b1f8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,8 +1,8 @@ PATH remote: . specs: - castle_devise (0.5.0) - activesupport (>= 6.0) + castle_devise (0.6.0) + activesupport (>= 6.0, < 9.0) castle-rb (>= 7.2, < 9.0) devise (>= 4.3.0, < 5.0) @@ -109,7 +109,6 @@ GEM net-pop net-smtp mini_mime (1.1.5) - mini_portile2 (2.8.9) minitest (5.25.5) mutex_m (0.3.0) net-imap (0.5.8) @@ -223,8 +222,6 @@ GEM simplecov_json_formatter (~> 0.1) simplecov-html (0.13.1) simplecov_json_formatter (0.1.4) - sqlite3 (1.7.3) - mini_portile2 (~> 2.8.0) sqlite3 (1.7.3-aarch64-linux) sqlite3 (1.7.3-arm64-darwin) sqlite3 (1.7.3-x86_64-darwin) diff --git a/castle_devise.gemspec b/castle_devise.gemspec index 399df7c..72f8449 100644 --- a/castle_devise.gemspec +++ b/castle_devise.gemspec @@ -27,7 +27,7 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.add_dependency "activesupport", ">= 6.0" + spec.add_dependency "activesupport", ">= 6.0", "< 9.0" spec.add_dependency "castle-rb", ">= 7.2", "< 9.0" spec.add_dependency "devise", ">= 4.3.0", "< 5.0" diff --git a/lib/castle_devise/version.rb b/lib/castle_devise/version.rb index adea5aa..4aaa8c5 100644 --- a/lib/castle_devise/version.rb +++ b/lib/castle_devise/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module CastleDevise - VERSION = "0.5.0" + VERSION = "0.6.0" end From 0e91c8b8bb6a1c04c15144add38ca5c73c1bebc8 Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 12 Nov 2025 12:35:56 +0100 Subject: [PATCH 03/13] removed deprecated --- lib/castle_devise/configuration.rb | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/castle_devise/configuration.rb b/lib/castle_devise/configuration.rb index 98fdf25..fe61442 100644 --- a/lib/castle_devise/configuration.rb +++ b/lib/castle_devise/configuration.rb @@ -1,20 +1,17 @@ # frozen_string_literal: true -require "active_support/configurable" require "logger" module CastleDevise - # Configuration object using {ActiveSupport::Configurable} + # Configuration object class Configuration - include ActiveSupport::Configurable - # @!attribute api_secret # @return [String] Your API secret - config_accessor(:api_secret) + attr_accessor :api_secret # @!attribute app_id # @return [String] Your Castle App ID - config_accessor(:app_id) + attr_accessor :app_id # @!attribute monitoring_mode # When CastleDevise is in monitoring mode, it sends requests to Castle @@ -25,27 +22,36 @@ class Configuration # from logging in/registering. # # @return [true, false] whether to act on deny requests or not - config_accessor(:monitoring_mode) { false } + attr_accessor :monitoring_mode # @!attribute logger # @return [Logger] A Logger instance. You might want to use Rails.logger here. - config_accessor(:logger) { Logger.new("/dev/null") } + attr_accessor :logger # @!attribute before_request_hooks # @return [Array] Array of procs that will get called before a request to the Castle API - config_accessor(:before_request_hooks) { [] } + attr_accessor :before_request_hooks # @!attribute after_request_hooks # @return [Array] Array of procs that will get called after a request to the Castle API - config_accessor(:after_request_hooks) { [] } + attr_accessor :after_request_hooks # @!attribute castle_sdk_facade_class # @return [Class] Castle API implementation - config_accessor(:castle_sdk_facade_class) { ::CastleDevise::SdkFacade } + attr_accessor :castle_sdk_facade_class # @!attribute castle_client # @return [Class] Castle SDK client - config_accessor(:castle_client) { ::Castle::Client.new } + attr_accessor :castle_client + + def initialize + @monitoring_mode = false + @logger = Logger.new("/dev/null") + @before_request_hooks = [] + @after_request_hooks = [] + @castle_sdk_facade_class = ::CastleDevise::SdkFacade + @castle_client = ::Castle::Client.new + end # Adds a new before_request hook # @param blk [Proc] From ce7b0077f78e7d4c0dd5befde6141a7a7ffc36b6 Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 12 Nov 2025 12:55:43 +0100 Subject: [PATCH 04/13] rubocop --- .github/workflows/lint.yml | 18 +++++ .rubocop.yml | 158 +++++++++++++++++++++++++++++++++++++ Gemfile | 9 ++- Gemfile.lock | 6 ++ 4 files changed, 188 insertions(+), 3 deletions(-) create mode 100644 .rubocop.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4f01d81..e321fc8 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,3 +19,21 @@ jobs: reporter: github-pr-review # Default is github-pr-check rubocop_version: 1.1.6 # note: this actually refers to standardb version, not Rubocop rubocop_flags: --format progress + + rubocop: + name: runner / rubocop + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v4 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 3.1 + - name: Install dependencies + run: | + bundle config path vendor/bundle + bundle install + - name: Run RuboCop + run: | + bundle exec rubocop diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..2f7add0 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,158 @@ +plugins: + - rubocop-rspec + - rubocop-performance + +AllCops: + NewCops: enable + TargetRubyVersion: 3.1 + SuggestExtensions: false + Exclude: + - 'vendor/**/*' + - 'bin/**/*' + - 'spec/dummy_app/**/*' + - 'coverage/**/*' + - 'gemfiles/**/*' + - '.bundle/**/*' + - 'Gemfile.lock' + - '*.gemspec' + - 'Appraisals' + +# Style preferences +Style/Documentation: + Enabled: false + Exclude: + - 'spec/**/*' + +Style/FrozenStringLiteralComment: + Enabled: true + EnforcedStyle: always + +Style/StringLiterals: + EnforcedStyle: double_quotes + +Style/TrailingCommaInArrayLiteral: + EnforcedStyleForMultiline: comma + +Style/ClassAndModuleChildren: + Enabled: true + EnforcedStyle: nested + +Style/Lambda: + EnforcedStyle: literal + +Style/RedundantConstantBase: + Enabled: false + +# Layout preferences +Layout/LineLength: + Max: 120 + AllowedPatterns: ['^(\s*#)'] + Exclude: + - 'spec/**/*' + +Layout/MultilineMethodCallIndentation: + EnforcedStyle: aligned + +Layout/FirstHashElementIndentation: + EnforcedStyle: consistent + +Layout/CaseIndentation: + EnforcedStyle: case + +Layout/LineContinuationLeadingSpace: + EnforcedStyle: leading + +# Metrics preferences +Metrics/BlockLength: + Max: 35 + Exclude: + - 'spec/**/*' + - 'Rakefile' + - '*.gemspec' + - 'Gemfile' + +Metrics/ModuleLength: + Max: 300 + Exclude: + - 'spec/**/*' + +Metrics/ClassLength: + Max: 200 + +Metrics/MethodLength: + Max: 40 + Exclude: + - 'spec/**/*' + +Metrics/AbcSize: + Max: 30 + Exclude: + - 'spec/**/*' + +Metrics/CyclomaticComplexity: + Max: 10 + Exclude: + - 'spec/**/*' + +Metrics/PerceivedComplexity: + Max: 10 + Exclude: + - 'spec/**/*' + +# RSpec preferences +RSpec/ExampleLength: + Max: 30 + +RSpec/MultipleExpectations: + Max: 8 + +RSpec/NestedGroups: + Max: 4 + +RSpec/DescribeClass: + Enabled: true + +RSpec/MessageSpies: + Enabled: false + +RSpec/MultipleMemoizedHelpers: + Enabled: false + +RSpec/ContextWording: + Enabled: false + +RSpec/NoExpectationExample: + Enabled: false + +# Performance preferences +Performance/CollectionLiteralInLoop: + Enabled: true + +# Naming preferences +Naming/VariableNumber: + EnforcedStyle: snake_case + +Naming/MethodParameterName: + MinNameLength: 2 + +# Lint preferences +Lint/MissingSuper: + Enabled: true + +Lint/UnusedBlockArgument: + Enabled: true + +Lint/UnusedMethodArgument: + Enabled: true + +Lint/AmbiguousBlockAssociation: + AllowedMethods: ['change'] + +# Security preferences +Security/YAMLLoad: + Enabled: true + +# Bundler preferences +Bundler/OrderedGems: + Enabled: true + diff --git a/Gemfile b/Gemfile index 955a72e..3f87efc 100644 --- a/Gemfile +++ b/Gemfile @@ -8,14 +8,17 @@ gemspec gem "actionmailer" gem "activerecord" gem "byebug" +gem "logger" +gem "mutex_m" gem "railties", "~> 7.2" gem "rake" +gem "rubocop" +gem "rubocop-performance" +gem "rubocop-rspec" gem "rspec" gem "rspec-rails" gem "simplecov" -gem "standard" gem "sqlite3", "~> 1.7" +gem "standard" gem "vcr" gem "webmock" -gem "mutex_m" -gem "logger" diff --git a/Gemfile.lock b/Gemfile.lock index 3a4b1f8..19d2335 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -214,6 +214,9 @@ GEM lint_roller (~> 1.1) rubocop (>= 1.75.0, < 2.0) rubocop-ast (>= 1.38.0, < 2.0) + rubocop-rspec (3.7.0) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) ruby-progressbar (1.13.0) securerandom (0.4.1) simplecov (0.22.0) @@ -277,6 +280,9 @@ DEPENDENCIES rake rspec rspec-rails + rubocop + rubocop-performance + rubocop-rspec simplecov sqlite3 (~> 1.7) standard From 73f64c3f22058763bf1aa2f494f04e14ef1970b9 Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 12 Nov 2025 12:56:22 +0100 Subject: [PATCH 05/13] layout fixes --- lib/castle_devise/sdk_facade.rb | 22 +++++++++---------- spec/castle_devise/integration/login_spec.rb | 8 +++---- .../password_reset_request_spec.rb | 2 +- .../integration/password_reset_spec.rb | 16 +++++++------- .../integration/profile_update_spec.rb | 18 +++++++-------- .../integration/registration_spec.rb | 8 +++---- spec/castle_devise/sdk_facade_spec.rb | 2 +- 7 files changed, 38 insertions(+), 38 deletions(-) diff --git a/lib/castle_devise/sdk_facade.rb b/lib/castle_devise/sdk_facade.rb index 25fd479..020b1fd 100644 --- a/lib/castle_devise/sdk_facade.rb +++ b/lib/castle_devise/sdk_facade.rb @@ -73,17 +73,17 @@ def log(event:, status:, context:) return if context.castle_id.blank? && context.email.blank? user = if context.castle_id - { - id: context.castle_id, - email: context.email, - registered_at: format_time(context.registered_at), - traits: context.user_traits - } - else - { - email: context.email - } - end + { + id: context.castle_id, + email: context.email, + registered_at: format_time(context.registered_at), + traits: context.user_traits + } + else + { + email: context.email + } + end payload = { event: event, diff --git a/spec/castle_devise/integration/login_spec.rb b/spec/castle_devise/integration/login_spec.rb index 2966e0f..a993be8 100644 --- a/spec/castle_devise/integration/login_spec.rb +++ b/spec/castle_devise/integration/login_spec.rb @@ -17,10 +17,10 @@ # @param request_token [String] def send_sign_in_request(email, password, request_token) post "/users/sign_in", - params: { - user: {email: email, password: password}, - castle_request_token: request_token - } + params: { + user: { email: email, password: password }, + castle_request_token: request_token + } end def send_authenticated_request diff --git a/spec/castle_devise/integration/password_reset_request_spec.rb b/spec/castle_devise/integration/password_reset_request_spec.rb index cd28389..7adaab3 100644 --- a/spec/castle_devise/integration/password_reset_request_spec.rb +++ b/spec/castle_devise/integration/password_reset_request_spec.rb @@ -2,7 +2,7 @@ RSpec.describe "Password reset request", type: :request do subject(:send_password_reset_request) do - post "/users/password", params: {user: {email: email}} + post "/users/password", params: { user: { email: email } } end let(:facade) { instance_double(CastleDevise::SdkFacade) } diff --git a/spec/castle_devise/integration/password_reset_spec.rb b/spec/castle_devise/integration/password_reset_spec.rb index 70e48d2..0a2779d 100644 --- a/spec/castle_devise/integration/password_reset_spec.rb +++ b/spec/castle_devise/integration/password_reset_spec.rb @@ -4,14 +4,14 @@ RSpec.describe "Password reset", type: :request do subject(:send_password_reset) do put "/users/password", - params: { - user: { - reset_password_token: reset_password_token, - password: new_password, - password_confirmation: new_password_confirmation - }, - castle_request_token: request_token - } + params: { + user: { + reset_password_token: reset_password_token, + password: new_password, + password_confirmation: new_password_confirmation + }, + castle_request_token: request_token + } end let(:facade) { instance_spy(CastleDevise::SdkFacade) } diff --git a/spec/castle_devise/integration/profile_update_spec.rb b/spec/castle_devise/integration/profile_update_spec.rb index 7e930ac..4f0e747 100644 --- a/spec/castle_devise/integration/profile_update_spec.rb +++ b/spec/castle_devise/integration/profile_update_spec.rb @@ -3,15 +3,15 @@ RSpec.describe "Profile update", type: :request do subject(:send_profile_update) do put "/users", - params: { - email: email, - user: { - current_password: current_password, - password: new_password, - password_confirmation: new_password - }, - castle_request_token: request_token - } + params: { + email: email, + user: { + current_password: current_password, + password: new_password, + password_confirmation: new_password + }, + castle_request_token: request_token + } end let(:facade) { instance_spy(CastleDevise::SdkFacade) } diff --git a/spec/castle_devise/integration/registration_spec.rb b/spec/castle_devise/integration/registration_spec.rb index 4512cf0..3b15421 100644 --- a/spec/castle_devise/integration/registration_spec.rb +++ b/spec/castle_devise/integration/registration_spec.rb @@ -5,10 +5,10 @@ def send_registration_request post "/users", - params: { - user: {email: "user@example.com", password: "123456", password_confirmation: "123456"}, - castle_request_token: "token123" - } + params: { + user: { email: "user@example.com", password: "123456", password_confirmation: "123456" }, + castle_request_token: "token123" + } end before do diff --git a/spec/castle_devise/sdk_facade_spec.rb b/spec/castle_devise/sdk_facade_spec.rb index 30fef83..5892522 100644 --- a/spec/castle_devise/sdk_facade_spec.rb +++ b/spec/castle_devise/sdk_facade_spec.rb @@ -5,7 +5,7 @@ let(:user_email) { "user@example.com" } let(:user_password) { "password" } - let(:user_rack_params) { {"email" => user_email, "password" => user_password} } + let(:user_rack_params) { { "email" => user_email, "password" => user_password } } let(:rack_params) do { "user" => user_rack_params, From 195f3a8e0efeca591a5cacac1ce73e9ffd603677 Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 12 Nov 2025 12:57:08 +0100 Subject: [PATCH 06/13] rubcop fixes --- Gemfile | 4 ++-- lib/castle_devise/patches.rb | 4 ++-- spec/castle_devise/sdk_facade_spec.rb | 2 +- spec/castle_devise_spec.rb | 2 +- spec/spec_helper.rb | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Gemfile b/Gemfile index 3f87efc..de38073 100644 --- a/Gemfile +++ b/Gemfile @@ -12,11 +12,11 @@ gem "logger" gem "mutex_m" gem "railties", "~> 7.2" gem "rake" +gem "rspec" +gem "rspec-rails" gem "rubocop" gem "rubocop-performance" gem "rubocop-rspec" -gem "rspec" -gem "rspec-rails" gem "simplecov" gem "sqlite3", "~> 1.7" gem "standard" diff --git a/lib/castle_devise/patches.rb b/lib/castle_devise/patches.rb index 0dec238..bbf9770 100644 --- a/lib/castle_devise/patches.rb +++ b/lib/castle_devise/patches.rb @@ -6,8 +6,8 @@ class << self # Applies monkey-patches to Devise controllers # @api private def apply - Devise::RegistrationsController.send(:prepend, Patches::RegistrationsController) - Devise::PasswordsController.send(:prepend, Patches::PasswordsController) + Devise::RegistrationsController.prepend Patches::RegistrationsController + Devise::PasswordsController.prepend Patches::PasswordsController end end end diff --git a/spec/castle_devise/sdk_facade_spec.rb b/spec/castle_devise/sdk_facade_spec.rb index 5892522..b17a405 100644 --- a/spec/castle_devise/sdk_facade_spec.rb +++ b/spec/castle_devise/sdk_facade_spec.rb @@ -27,7 +27,7 @@ shared_examples "calls before- and after- hooks" do |method| let(:castle) { instance_double(Castle::Client, method => castle_response) } let(:before_hook) do - ->(action, context, payload) do + ->(_action, _context, payload) do payload[:test] = 1 end end diff --git a/spec/castle_devise_spec.rb b/spec/castle_devise_spec.rb index 3dad53f..6aefb20 100644 --- a/spec/castle_devise_spec.rb +++ b/spec/castle_devise_spec.rb @@ -2,7 +2,7 @@ RSpec.describe CastleDevise do it "has a version number" do - expect(described_class::VERSION).not_to be nil + expect(described_class::VERSION).not_to be_nil end it "properly initializes the facade" do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index dc929e7..3cc6386 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -5,24 +5,24 @@ ENV["RAILS_ENV"] ||= "test" -require File.expand_path("../dummy_app/config/environment.rb", __FILE__) +require File.expand_path("dummy_app/config/environment.rb", __dir__) require "rspec/rails" require "castle_devise" require "webmock/rspec" -Dir[File.expand_path("../support/**/*.rb", __FILE__)].sort.each { |f| require f } +Dir[File.expand_path("support/**/*.rb", __dir__)].sort.each { |f| require f } Rails.backtrace_cleaner.remove_silencers! if Rails.gem_version < Gem::Version.new("7.0.0") ActiveRecord::MigrationContext.new( - File.expand_path("../dummy_app/db/migrate", __FILE__), + File.expand_path("dummy_app/db/migrate", __dir__), ActiveRecord::SchemaMigration ).migrate else ActiveRecord::MigrationContext.new( - File.expand_path("../dummy_app/db/migrate", __FILE__) + File.expand_path("dummy_app/db/migrate", __dir__) ).migrate end From dfe6e0ea5675e13250495bfd6cfaecd0ff54cd3a Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 12 Nov 2025 12:57:49 +0100 Subject: [PATCH 07/13] rubcop -A fixes --- lib/castle_devise/configuration.rb | 2 +- .../integration/password_reset_request_spec.rb | 10 +++++----- .../castle_devise/integration/password_reset_spec.rb | 10 +++++----- .../castle_devise/integration/profile_update_spec.rb | 12 ++++++------ spec/castle_devise/sdk_facade_spec.rb | 8 ++++---- spec/spec_helper.rb | 2 +- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/lib/castle_devise/configuration.rb b/lib/castle_devise/configuration.rb index fe61442..56529c5 100644 --- a/lib/castle_devise/configuration.rb +++ b/lib/castle_devise/configuration.rb @@ -46,7 +46,7 @@ class Configuration def initialize @monitoring_mode = false - @logger = Logger.new("/dev/null") + @logger = Logger.new(File::NULL) @before_request_hooks = [] @after_request_hooks = [] @castle_sdk_facade_class = ::CastleDevise::SdkFacade diff --git a/spec/castle_devise/integration/password_reset_request_spec.rb b/spec/castle_devise/integration/password_reset_request_spec.rb index 7adaab3..7cb9b84 100644 --- a/spec/castle_devise/integration/password_reset_request_spec.rb +++ b/spec/castle_devise/integration/password_reset_request_spec.rb @@ -37,7 +37,7 @@ end it "does not set reset_password_sent_at on user" do - expect(user.reset_password_sent_at).to eq(nil) + expect(user.reset_password_sent_at).to be_nil end end @@ -49,7 +49,7 @@ end it "does not set reset_password_sent_at on user" do - expect(user.reset_password_sent_at).to eq(nil) + expect(user.reset_password_sent_at).to be_nil end end end @@ -69,7 +69,7 @@ end it "sets reset_password_sent_at on user" do - expect(user.reload.reset_password_sent_at).to eq(nil) + expect(user.reload.reset_password_sent_at).to be_nil end end @@ -87,7 +87,7 @@ end it "sets reset_password_sent_at on user" do - expect(user.reload.reset_password_sent_at).not_to eq(nil) + expect(user.reload.reset_password_sent_at).not_to be_nil end end @@ -107,7 +107,7 @@ end it "sets reset_password_sent_at on user" do - expect(user.reload.reset_password_sent_at).not_to eq(nil) + expect(user.reload.reset_password_sent_at).not_to be_nil end end end diff --git a/spec/castle_devise/integration/password_reset_spec.rb b/spec/castle_devise/integration/password_reset_spec.rb index 0a2779d..c270357 100644 --- a/spec/castle_devise/integration/password_reset_spec.rb +++ b/spec/castle_devise/integration/password_reset_spec.rb @@ -52,7 +52,7 @@ end it "updates the password" do - expect(user.reload.valid_password?(new_password)).to eq(true) + expect(user.reload.valid_password?(new_password)).to be(true) end end @@ -65,7 +65,7 @@ context "when password successfully changed" do it "updates the password" do - expect(user.reload.valid_password?(new_password)).to eq(true) + expect(user.reload.valid_password?(new_password)).to be(true) end it "logs profile_update event with succeeded status" do @@ -81,7 +81,7 @@ let(:new_password_confirmation) { "abcdef" } it "does not update the password" do - expect(user.reload.valid_password?(password)).to eq(true) + expect(user.reload.valid_password?(password)).to be(true) end it "logs profile_update event with failed status" do @@ -97,7 +97,7 @@ let(:reset_password_token) { "fake_reset_password_token" } it "does not update the password" do - expect(user.reload.valid_password?(password)).to eq(true) + expect(user.reload.valid_password?(password)).to be(true) end it "logs profile_update event with failed status" do @@ -127,7 +127,7 @@ end it "updates the password" do - expect(user.reload.valid_password?(new_password)).to eq(true) + expect(user.reload.valid_password?(new_password)).to be(true) end end end diff --git a/spec/castle_devise/integration/profile_update_spec.rb b/spec/castle_devise/integration/profile_update_spec.rb index 4f0e747..f219f85 100644 --- a/spec/castle_devise/integration/profile_update_spec.rb +++ b/spec/castle_devise/integration/profile_update_spec.rb @@ -63,7 +63,7 @@ end it "updates the password" do - expect(user.reload.valid_password?(new_password)).to eq(true) + expect(user.reload.valid_password?(new_password)).to be(true) end end @@ -78,7 +78,7 @@ context "when password successfully changed" do it "updates the password" do - expect(user.reload.valid_password?(new_password)).to eq(true) + expect(user.reload.valid_password?(new_password)).to be(true) end it "performs risk action with profile_update event" do @@ -102,7 +102,7 @@ let(:current_password) { "abcdef" } it "does not update the password" do - expect(user.reload.valid_password?(password)).to eq(true) + expect(user.reload.valid_password?(password)).to be(true) end it "performs risk action with profile_update event" do @@ -142,7 +142,7 @@ end it "updates the password" do - expect(user.reload.valid_password?(new_password)).to eq(true) + expect(user.reload.valid_password?(new_password)).to be(true) end end @@ -164,7 +164,7 @@ end it "updates the password" do - expect(user.reload.valid_password?(new_password)).to eq(true) + expect(user.reload.valid_password?(new_password)).to be(true) end end @@ -186,7 +186,7 @@ end it "updates the password" do - expect(user.reload.valid_password?(new_password)).to eq(true) + expect(user.reload.valid_password?(new_password)).to be(true) end end end diff --git a/spec/castle_devise/sdk_facade_spec.rb b/spec/castle_devise/sdk_facade_spec.rb index b17a405..3795bc2 100644 --- a/spec/castle_devise/sdk_facade_spec.rb +++ b/spec/castle_devise/sdk_facade_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true RSpec.describe CastleDevise::SdkFacade do - subject(:facade) { CastleDevise::SdkFacade.new(castle, before_hooks, after_hooks) } + subject(:facade) { described_class.new(castle, before_hooks, after_hooks) } let(:user_email) { "user@example.com" } let(:user_password) { "password" } @@ -54,7 +54,7 @@ describe "#filter" do let(:event) { "$login" } - include_examples "calls before- and after- hooks", :filter do + it_behaves_like "calls before- and after- hooks", :filter do before do facade.filter(event: event, context: context) end @@ -91,7 +91,7 @@ describe "#risk" do let(:event) { "$login" } - include_examples "calls before- and after- hooks", :risk do + it_behaves_like "calls before- and after- hooks", :risk do before do facade.risk(event: event, context: context) end @@ -101,7 +101,7 @@ describe "#log" do let(:event) { "$login" } - include_examples "calls before- and after- hooks", :log do + it_behaves_like "calls before- and after- hooks", :log do before do facade.log(event: event, status: "$failed", context: context) end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 3cc6386..ad0ee6d 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -11,7 +11,7 @@ require "webmock/rspec" -Dir[File.expand_path("support/**/*.rb", __dir__)].sort.each { |f| require f } +Dir[File.expand_path("support/**/*.rb", __dir__)].each { |f| require f } Rails.backtrace_cleaner.remove_silencers! From eaba50df2b3704340ed7c78752e8517361a7935a Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 12 Nov 2025 13:10:42 +0100 Subject: [PATCH 08/13] robocop enhancements --- lib/castle_devise.rb | 2 +- lib/castle_devise/patches/registrations_controller.rb | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/castle_devise.rb b/lib/castle_devise.rb index 9e0cfc0..f635a3e 100644 --- a/lib/castle_devise.rb +++ b/lib/castle_devise.rb @@ -71,7 +71,7 @@ def castle module Devise # Configures which events trigger Castle API calls mattr_accessor :castle_hooks - @@castle_hooks = { + self.castle_hooks = { before_registration: true, after_login: true, after_password_reset_request: true, diff --git a/lib/castle_devise/patches/registrations_controller.rb b/lib/castle_devise/patches/registrations_controller.rb index 220012d..9ba7941 100644 --- a/lib/castle_devise/patches/registrations_controller.rb +++ b/lib/castle_devise/patches/registrations_controller.rb @@ -80,8 +80,6 @@ def castle_filter flash.alert = "Account cannot be created at this moment. Please try again later." redirect_to new_session_path(resource_name) false - else - # everything fine, continue end rescue Castle::InvalidParametersError # log error and allow From 7755d99a432619eecd894dff0d7f64eee4d0479f Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 12 Nov 2025 13:19:08 +0100 Subject: [PATCH 09/13] restore spec --- .rubocop.yml | 6 ++++++ spec/castle_devise/sdk_facade_spec.rb | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 2f7add0..587cad4 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -124,6 +124,12 @@ RSpec/ContextWording: RSpec/NoExpectationExample: Enabled: false +RSpec/IncludeExamples: + Enabled: false + +RSpec/SharedExamples: + Enabled: false + # Performance preferences Performance/CollectionLiteralInLoop: Enabled: true diff --git a/spec/castle_devise/sdk_facade_spec.rb b/spec/castle_devise/sdk_facade_spec.rb index 3795bc2..04e60c4 100644 --- a/spec/castle_devise/sdk_facade_spec.rb +++ b/spec/castle_devise/sdk_facade_spec.rb @@ -54,7 +54,7 @@ describe "#filter" do let(:event) { "$login" } - it_behaves_like "calls before- and after- hooks", :filter do + include_examples "calls before- and after- hooks", :filter do before do facade.filter(event: event, context: context) end @@ -91,7 +91,7 @@ describe "#risk" do let(:event) { "$login" } - it_behaves_like "calls before- and after- hooks", :risk do + include_examples "calls before- and after- hooks", :risk do before do facade.risk(event: event, context: context) end @@ -101,7 +101,7 @@ describe "#log" do let(:event) { "$login" } - it_behaves_like "calls before- and after- hooks", :log do + include_examples "calls before- and after- hooks", :log do before do facade.log(event: event, status: "$failed", context: context) end From 686a4e97be2d92cc278c1e9a2375e71d55f6c14a Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 12 Nov 2025 13:37:59 +0100 Subject: [PATCH 10/13] additional upgrades --- .rubocop.yml | 1 + Gemfile | 1 + Gemfile.lock | 141 ++++++++++--------- spec/castle_devise/integration/login_spec.rb | 2 +- 4 files changed, 80 insertions(+), 65 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 587cad4..2148d5f 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,6 +1,7 @@ plugins: - rubocop-rspec - rubocop-performance + - rubocop-rspec_rails AllCops: NewCops: enable diff --git a/Gemfile b/Gemfile index de38073..f81cb79 100644 --- a/Gemfile +++ b/Gemfile @@ -17,6 +17,7 @@ gem "rspec-rails" gem "rubocop" gem "rubocop-performance" gem "rubocop-rspec" +gem "rubocop-rspec_rails" gem "simplecov" gem "sqlite3", "~> 1.7" gem "standard" diff --git a/Gemfile.lock b/Gemfile.lock index 19d2335..0362b2f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,40 +9,42 @@ PATH GEM remote: https://rubygems.org/ specs: - actionmailer (7.2.2.2) - actionpack (= 7.2.2.2) - actionview (= 7.2.2.2) - activejob (= 7.2.2.2) - activesupport (= 7.2.2.2) + actionmailer (7.2.3) + actionpack (= 7.2.3) + actionview (= 7.2.3) + activejob (= 7.2.3) + activesupport (= 7.2.3) mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (7.2.2.2) - actionview (= 7.2.2.2) - activesupport (= 7.2.2.2) + actionpack (7.2.3) + actionview (= 7.2.3) + activesupport (= 7.2.3) + cgi nokogiri (>= 1.8.5) racc - rack (>= 2.2.4, < 3.2) + rack (>= 2.2.4, < 3.3) rack-session (>= 1.0.1) rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) useragent (~> 0.16) - actionview (7.2.2.2) - activesupport (= 7.2.2.2) + actionview (7.2.3) + activesupport (= 7.2.3) builder (~> 3.1) + cgi erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activejob (7.2.2.2) - activesupport (= 7.2.2.2) + activejob (7.2.3) + activesupport (= 7.2.3) globalid (>= 0.3.6) - activemodel (7.2.2.2) - activesupport (= 7.2.2.2) - activerecord (7.2.2.2) - activemodel (= 7.2.2.2) - activesupport (= 7.2.2.2) + activemodel (7.2.3) + activesupport (= 7.2.3) + activerecord (7.2.3) + activemodel (= 7.2.3) + activesupport (= 7.2.3) timeout (>= 0.4.0) - activesupport (7.2.2.2) + activesupport (7.2.3) base64 benchmark (>= 0.3) bigdecimal @@ -63,18 +65,19 @@ GEM ast (2.4.3) base64 (0.3.0) bcrypt (3.1.20) - benchmark (0.4.1) - bigdecimal (3.2.3) + benchmark (0.5.0) + bigdecimal (3.3.1) builder (3.3.0) byebug (12.0.0) castle-rb (8.1.0) + cgi (0.5.0) concurrent-ruby (1.3.5) connection_pool (2.5.4) - crack (1.0.0) + crack (1.0.1) bigdecimal rexml crass (1.0.6) - date (3.4.1) + date (3.5.0) devise (4.9.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) @@ -84,34 +87,35 @@ GEM diff-lcs (1.6.2) docile (1.4.1) drb (2.2.3) - erb (5.0.1) + erb (5.1.3) erubi (1.13.1) - globalid (1.2.1) + globalid (1.3.0) activesupport (>= 6.1) - hashdiff (1.2.0) + hashdiff (1.2.1) i18n (1.14.7) concurrent-ruby (~> 1.0) - io-console (0.8.0) - irb (1.15.2) + io-console (0.8.1) + irb (1.15.3) pp (>= 0.6.0) rdoc (>= 4.0.0) reline (>= 0.4.2) - json (2.12.2) + json (2.16.0) language_server-protocol (3.17.0.5) lint_roller (1.1.0) logger (1.7.0) loofah (2.24.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) - mail (2.8.1) + mail (2.9.0) + logger mini_mime (>= 0.1.1) net-imap net-pop net-smtp mini_mime (1.1.5) - minitest (5.25.5) + minitest (5.26.1) mutex_m (0.3.0) - net-imap (0.5.8) + net-imap (0.5.12) date net-protocol net-pop (0.1.2) @@ -120,27 +124,27 @@ GEM timeout net-smtp (0.5.1) net-protocol - nokogiri (1.18.8-aarch64-linux-gnu) + nokogiri (1.18.10-aarch64-linux-gnu) racc (~> 1.4) - nokogiri (1.18.8-arm64-darwin) + nokogiri (1.18.10-arm64-darwin) racc (~> 1.4) - nokogiri (1.18.8-x86_64-darwin) + nokogiri (1.18.10-x86_64-darwin) racc (~> 1.4) orm_adapter (0.5.0) parallel (1.27.0) - parser (3.3.8.0) + parser (3.3.10.0) ast (~> 2.4.1) racc - pp (0.6.2) + pp (0.6.3) prettyprint prettyprint (0.2.0) - prism (1.4.0) + prism (1.6.0) psych (5.2.6) date stringio public_suffix (6.0.2) racc (1.8.1) - rack (3.1.16) + rack (3.2.4) rack-session (2.1.1) base64 (>= 0.1.0) rack (>= 3.0.0) @@ -155,36 +159,39 @@ GEM rails-html-sanitizer (1.6.2) loofah (~> 2.21) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) - railties (7.2.2.2) - actionpack (= 7.2.2.2) - activesupport (= 7.2.2.2) + railties (7.2.3) + actionpack (= 7.2.3) + activesupport (= 7.2.3) + cgi irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) thor (~> 1.0, >= 1.2.2) + tsort (>= 0.2) zeitwerk (~> 2.6) rainbow (3.1.1) - rake (13.3.0) - rdoc (6.14.0) + rake (13.3.1) + rdoc (6.15.1) erb psych (>= 4.0.0) - regexp_parser (2.10.0) - reline (0.6.1) + tsort + regexp_parser (2.11.3) + reline (0.6.3) io-console (~> 0.5) responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) - rexml (3.4.1) - rspec (3.13.1) + rexml (3.4.4) + rspec (3.13.2) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) rspec-mocks (~> 3.13.0) - rspec-core (3.13.4) + rspec-core (3.13.6) rspec-support (~> 3.13.0) rspec-expectations (3.13.5) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-mocks (3.13.5) + rspec-mocks (3.13.7) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-rails (8.0.0) @@ -195,8 +202,8 @@ GEM rspec-expectations (~> 3.13) rspec-mocks (~> 3.13) rspec-support (~> 3.13) - rspec-support (3.13.4) - rubocop (1.75.8) + rspec-support (3.13.6) + rubocop (1.80.2) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -204,10 +211,10 @@ GEM parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.44.0, < 2.0) + rubocop-ast (>= 1.46.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.45.1) + rubocop-ast (1.48.0) parser (>= 3.3.7.2) prism (~> 1.4) rubocop-performance (1.25.0) @@ -217,21 +224,25 @@ GEM rubocop-rspec (3.7.0) lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) + rubocop-rspec_rails (2.32.0) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) + rubocop-rspec (~> 3.5) ruby-progressbar (1.13.0) securerandom (0.4.1) simplecov (0.22.0) docile (~> 1.1) simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) - simplecov-html (0.13.1) + simplecov-html (0.13.2) simplecov_json_formatter (0.1.4) sqlite3 (1.7.3-aarch64-linux) sqlite3 (1.7.3-arm64-darwin) sqlite3 (1.7.3-x86_64-darwin) - standard (1.50.0) + standard (1.51.1) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) - rubocop (~> 1.75.5) + rubocop (~> 1.80.2) standard-custom (~> 1.0.0) standard-performance (~> 1.8) standard-custom (1.0.2) @@ -240,20 +251,21 @@ GEM standard-performance (1.8.0) lint_roller (~> 1.1) rubocop-performance (~> 1.25.0) - stringio (3.1.7) - thor (1.3.2) - timeout (0.4.3) + stringio (3.1.8) + thor (1.4.0) + timeout (0.4.4) + tsort (0.2.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unicode-display_width (3.1.4) - unicode-emoji (~> 4.0, >= 4.0.4) - unicode-emoji (4.0.4) + unicode-display_width (3.2.0) + unicode-emoji (~> 4.1) + unicode-emoji (4.1.0) useragent (0.16.11) vcr (6.3.1) base64 warden (1.2.9) rack (>= 2.0.9) - webmock (3.25.1) + webmock (3.26.1) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) @@ -283,6 +295,7 @@ DEPENDENCIES rubocop rubocop-performance rubocop-rspec + rubocop-rspec_rails simplecov sqlite3 (~> 1.7) standard diff --git a/spec/castle_devise/integration/login_spec.rb b/spec/castle_devise/integration/login_spec.rb index a993be8..2d2452d 100644 --- a/spec/castle_devise/integration/login_spec.rb +++ b/spec/castle_devise/integration/login_spec.rb @@ -71,7 +71,7 @@ def send_authenticated_request end it "redirects" do - expect(response.status).to eq(302) + expect(response).to have_http_status(:found) end end end From dc7036826f5702ebbf26a0bac986788bc155d562 Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 12 Nov 2025 13:41:01 +0100 Subject: [PATCH 11/13] prepare for rails upgrade --- Gemfile | 2 +- Gemfile.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index f81cb79..d0868a3 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,7 @@ gem "activerecord" gem "byebug" gem "logger" gem "mutex_m" -gem "railties", "~> 7.2" +gem "railties", "< 8.0" gem "rake" gem "rspec" gem "rspec-rails" diff --git a/Gemfile.lock b/Gemfile.lock index 0362b2f..ff78503 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -178,9 +178,9 @@ GEM regexp_parser (2.11.3) reline (0.6.3) io-console (~> 0.5) - responders (3.1.1) - actionpack (>= 5.2) - railties (>= 5.2) + responders (3.2.0) + actionpack (>= 7.0) + railties (>= 7.0) rexml (3.4.4) rspec (3.13.2) rspec-core (~> 3.13.0) @@ -194,7 +194,7 @@ GEM rspec-mocks (3.13.7) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-rails (8.0.0) + rspec-rails (8.0.2) actionpack (>= 7.2) activesupport (>= 7.2) railties (>= 7.2) @@ -288,7 +288,7 @@ DEPENDENCIES castle_devise! logger mutex_m - railties (~> 7.2) + railties (< 8.0) rake rspec rspec-rails From 3ea03ab25221f14514fd6cc2c743aca8630de8be Mon Sep 17 00:00:00 2001 From: Bartosz Date: Mon, 22 Dec 2025 09:30:22 +0100 Subject: [PATCH 12/13] drop 3.1 --- .github/workflows/specs.yml | 8 -------- .rubocop.yml | 2 +- Gemfile.lock | 6 +++++- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/workflows/specs.yml b/.github/workflows/specs.yml index bf8fd96..3889ce0 100644 --- a/.github/workflows/specs.yml +++ b/.github/workflows/specs.yml @@ -12,23 +12,15 @@ jobs: matrix: include: # Rails 6.0 - - ruby: "3.1" - rails: "6.0" - ruby: "3.2" rails: "6.0" # Rails 6.1 - - ruby: "3.1" - rails: "6.1" - ruby: "3.2" rails: "6.1" # Rails 7.0 - - ruby: "3.1" - rails: "7.0" - ruby: "3.2" rails: "7.0" # Rails 7.1 - - ruby: "3.1" - rails: "7.1" - ruby: "3.2" rails: "7.1" - ruby: "3.3" diff --git a/.rubocop.yml b/.rubocop.yml index 2148d5f..484ff0b 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -5,7 +5,7 @@ plugins: AllCops: NewCops: enable - TargetRubyVersion: 3.1 + TargetRubyVersion: 3.2 SuggestExtensions: false Exclude: - 'vendor/**/*' diff --git a/Gemfile.lock b/Gemfile.lock index ff78503..4a73726 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -113,6 +113,7 @@ GEM net-pop net-smtp mini_mime (1.1.5) + mini_portile2 (2.8.9) minitest (5.26.1) mutex_m (0.3.0) net-imap (0.5.12) @@ -236,6 +237,8 @@ GEM simplecov_json_formatter (~> 0.1) simplecov-html (0.13.2) simplecov_json_formatter (0.1.4) + sqlite3 (1.7.3) + mini_portile2 (~> 2.8.0) sqlite3 (1.7.3-aarch64-linux) sqlite3 (1.7.3-arm64-darwin) sqlite3 (1.7.3-x86_64-darwin) @@ -275,6 +278,7 @@ PLATFORMS aarch64-linux arm64-darwin-21 arm64-darwin-24 + arm64-darwin-25 x86_64-darwin-18 x86_64-darwin-19 x86_64-darwin-20 @@ -303,4 +307,4 @@ DEPENDENCIES webmock BUNDLED WITH - 2.6.9 + 2.7.2 From 00637f8f3a33fa0abb379a4b28634df8fccb6d03 Mon Sep 17 00:00:00 2001 From: Bartosz Date: Mon, 22 Dec 2025 09:34:16 +0100 Subject: [PATCH 13/13] bumps --- Gemfile.lock | 69 ++++++++++++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4a73726..1d6f787 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -56,8 +56,8 @@ GEM minitest (>= 5.1) securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) + addressable (2.8.8) + public_suffix (>= 2.0.2, < 8.0) appraisal (2.5.0) bundler rake @@ -66,18 +66,18 @@ GEM base64 (0.3.0) bcrypt (3.1.20) benchmark (0.5.0) - bigdecimal (3.3.1) + bigdecimal (4.0.1) builder (3.3.0) byebug (12.0.0) castle-rb (8.1.0) - cgi (0.5.0) - concurrent-ruby (1.3.5) - connection_pool (2.5.4) + cgi (0.5.1) + concurrent-ruby (1.3.6) + connection_pool (3.0.2) crack (1.0.1) bigdecimal rexml crass (1.0.6) - date (3.5.0) + date (3.5.1) devise (4.9.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) @@ -87,23 +87,23 @@ GEM diff-lcs (1.6.2) docile (1.4.1) drb (2.2.3) - erb (5.1.3) + erb (6.0.1) erubi (1.13.1) globalid (1.3.0) activesupport (>= 6.1) hashdiff (1.2.1) - i18n (1.14.7) + i18n (1.14.8) concurrent-ruby (~> 1.0) - io-console (0.8.1) - irb (1.15.3) + io-console (0.8.2) + irb (1.16.0) pp (>= 0.6.0) rdoc (>= 4.0.0) reline (>= 0.4.2) - json (2.16.0) + json (2.18.0) language_server-protocol (3.17.0.5) lint_roller (1.1.0) logger (1.7.0) - loofah (2.24.1) + loofah (2.25.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.9.0) @@ -114,9 +114,10 @@ GEM net-smtp mini_mime (1.1.5) mini_portile2 (2.8.9) - minitest (5.26.1) + minitest (6.0.0) + prism (~> 1.5) mutex_m (0.3.0) - net-imap (0.5.12) + net-imap (0.6.2) date net-protocol net-pop (0.1.2) @@ -139,11 +140,11 @@ GEM pp (0.6.3) prettyprint prettyprint (0.2.0) - prism (1.6.0) - psych (5.2.6) + prism (1.7.0) + psych (5.3.1) date stringio - public_suffix (6.0.2) + public_suffix (7.0.0) racc (1.8.1) rack (3.2.4) rack-session (2.1.1) @@ -151,7 +152,7 @@ GEM rack (>= 3.0.0) rack-test (2.2.0) rack (>= 1.3) - rackup (2.2.1) + rackup (2.3.1) rack (>= 3) rails-dom-testing (2.3.0) activesupport (>= 5.0.0) @@ -172,7 +173,7 @@ GEM zeitwerk (~> 2.6) rainbow (3.1.1) rake (13.3.1) - rdoc (6.15.1) + rdoc (7.0.1) erb psych (>= 4.0.0) tsort @@ -204,7 +205,7 @@ GEM rspec-mocks (~> 3.13) rspec-support (~> 3.13) rspec-support (3.13.6) - rubocop (1.80.2) + rubocop (1.81.7) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -212,19 +213,19 @@ GEM parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.46.0, < 2.0) + rubocop-ast (>= 1.47.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) rubocop-ast (1.48.0) parser (>= 3.3.7.2) prism (~> 1.4) - rubocop-performance (1.25.0) + rubocop-performance (1.26.1) lint_roller (~> 1.1) rubocop (>= 1.75.0, < 2.0) - rubocop-ast (>= 1.38.0, < 2.0) - rubocop-rspec (3.7.0) + rubocop-ast (>= 1.47.1, < 2.0) + rubocop-rspec (3.8.0) lint_roller (~> 1.1) - rubocop (~> 1.72, >= 1.72.1) + rubocop (~> 1.81) rubocop-rspec_rails (2.32.0) lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) @@ -242,27 +243,27 @@ GEM sqlite3 (1.7.3-aarch64-linux) sqlite3 (1.7.3-arm64-darwin) sqlite3 (1.7.3-x86_64-darwin) - standard (1.51.1) + standard (1.52.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) - rubocop (~> 1.80.2) + rubocop (~> 1.81.7) standard-custom (~> 1.0.0) standard-performance (~> 1.8) standard-custom (1.0.2) lint_roller (~> 1.0) rubocop (~> 1.50) - standard-performance (1.8.0) + standard-performance (1.9.0) lint_roller (~> 1.1) - rubocop-performance (~> 1.25.0) - stringio (3.1.8) + rubocop-performance (~> 1.26.0) + stringio (3.2.0) thor (1.4.0) - timeout (0.4.4) + timeout (0.6.0) tsort (0.2.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) unicode-display_width (3.2.0) unicode-emoji (~> 4.1) - unicode-emoji (4.1.0) + unicode-emoji (4.2.0) useragent (0.16.11) vcr (6.3.1) base64 @@ -272,7 +273,7 @@ GEM addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) - zeitwerk (2.7.3) + zeitwerk (2.7.4) PLATFORMS aarch64-linux