From 67ea2b955c1839a9a0f56e78c8768870d0b5278c Mon Sep 17 00:00:00 2001 From: Kendra Riga Date: Wed, 3 Sep 2025 12:15:47 -0600 Subject: [PATCH 1/9] Bump supported Solidus versions We want to support Solidus 4 to 4.5. I stopped at 4.5 because there are changes in 4.6+ with some 'disable_builtin_emails' configuration that required more work, so I think a plan to move forward is to make the current gemspec only allow '>= 4.0.0', '< 4.6', and add some deprecation warnings about that feature becoming obsolete. Then have a new version that's '>= 4.6.0', '<5.0' that removes it all. I am doing this work specifically to bump another app that uses it to Solidus 4, and that is my priority at the moment. --- Gemfile | 10 ++-------- solidus_tracking.gemspec | 4 ++-- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/Gemfile b/Gemfile index 0324be5..b050e55 100644 --- a/Gemfile +++ b/Gemfile @@ -3,14 +3,8 @@ source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } -branch = ENV.fetch('SOLIDUS_BRANCH', 'v3.4') -solidus_git, solidus_frontend_git = if (branch == 'main') || (branch == 'master') || (branch >= 'v3.2') - %w[solidusio/solidus solidusio/solidus_frontend] - else - %w[solidusio/solidus] * 2 - end -gem 'solidus', github: solidus_git, branch: branch -gem 'solidus_frontend', github: solidus_frontend_git, branch: branch +solidus_version = ENV.fetch('SOLIDUS_VERSION', 'v4.5.1') +gem 'solidus', github: "solidusio/solidus", tag: solidus_version # Needed to help Bundler figure out how to resolve dependencies, # otherwise it takes forever to resolve them. diff --git a/solidus_tracking.gemspec b/solidus_tracking.gemspec index 2a6a599..9e0b9b6 100644 --- a/solidus_tracking.gemspec +++ b/solidus_tracking.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |spec| spec.metadata['source_code_uri'] = 'https://github.com/solidusio-contrib/solidus_tracking' spec.metadata['changelog_uri'] = 'https://github.com/aldesantis/solidus_tracking/releases' - spec.required_ruby_version = Gem::Requirement.new('>= 2.5') + spec.required_ruby_version = Gem::Requirement.new('>= 3.1') # Specify which files should be added to the gem when it is released. # The `git ls-files -z` loads the files in the RubyGem that have been added into git. @@ -28,7 +28,7 @@ Gem::Specification.new do |spec| spec.executables = files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.add_dependency 'solidus_core', ['>= 2.0.0', '< 4'] + spec.add_dependency 'solidus_core', ['>= 4.0.0', '< 4.6'] spec.add_dependency 'solidus_support', '~> 0.8' spec.add_development_dependency 'solidus_dev_support' From 9def613d9d6f6a78b29f4b08a9e61108338a534d Mon Sep 17 00:00:00 2001 From: Kendra Riga Date: Fri, 5 Sep 2025 12:14:46 -0600 Subject: [PATCH 2/9] Update mailer subscriber for Solidus 4 compatibility - Update method name from order_finalized to send_confirmation_email - Change target class from Spree::MailerSubscriber to Spree::OrderMailerSubscriber - Remove version conditional since gem now only supports Solidus 4+ --- .../spree/mailer_subscriber/disable_confirm_email.rb | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/decorators/subscribers/solidus_tracking/spree/mailer_subscriber/disable_confirm_email.rb b/app/decorators/subscribers/solidus_tracking/spree/mailer_subscriber/disable_confirm_email.rb index 53f32a0..1c98a6f 100644 --- a/app/decorators/subscribers/solidus_tracking/spree/mailer_subscriber/disable_confirm_email.rb +++ b/app/decorators/subscribers/solidus_tracking/spree/mailer_subscriber/disable_confirm_email.rb @@ -6,12 +6,12 @@ module MailerSubscriber module DisableConfirmEmail def self.prepended(base) base.module_eval do - alias_method :original_order_finalized, :order_finalized + alias_method :original_send_confirmation_email, :send_confirmation_email - def order_finalized(event) + def send_confirmation_email(event) return if SolidusTracking.configuration.disable_builtin_emails - original_order_finalized(event) + original_send_confirmation_email(event) end end end @@ -20,6 +20,4 @@ def order_finalized(event) end end -if Spree.solidus_gem_version >= Gem::Version.new('2.9.0') - Spree::MailerSubscriber.prepend(SolidusTracking::Spree::MailerSubscriber::DisableConfirmEmail) -end +Spree::OrderMailerSubscriber.prepend(SolidusTracking::Spree::MailerSubscriber::DisableConfirmEmail) From 1f4717ecaecad461605c1fe20d42e55bd6ef62ab Mon Sep 17 00:00:00 2001 From: Kendra Riga Date: Mon, 15 Sep 2025 12:57:10 -0600 Subject: [PATCH 3/9] Remove unneeded decorator No longer required with Solidus 4+. The method it is overriding doesn't exist anymore. --- .../spree/order/disable_cancel_email.rb | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 app/decorators/models/solidus_tracking/spree/order/disable_cancel_email.rb diff --git a/app/decorators/models/solidus_tracking/spree/order/disable_cancel_email.rb b/app/decorators/models/solidus_tracking/spree/order/disable_cancel_email.rb deleted file mode 100644 index e3c6859..0000000 --- a/app/decorators/models/solidus_tracking/spree/order/disable_cancel_email.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module SolidusTracking - module Spree - module Order - module DisableCancelEmail - def send_cancel_email - super unless SolidusTracking.configuration.disable_builtin_emails - end - end - end - end -end - -Spree::Order.prepend(SolidusTracking::Spree::Order::DisableCancelEmail) From 87d95aaf5b34f7ad3e60478f74dc63f92fcfbf6e Mon Sep 17 00:00:00 2001 From: Kendra Riga Date: Thu, 25 Sep 2025 08:45:41 -0600 Subject: [PATCH 4/9] Fix various failing specs - Add the requirement of open struct now that it isn't automatically included - Change expectations to account for changes with how state changes are handled in background jobs. solidusio/solidus@2a2df71 - Replace build_stubbed with just build, some objects were missing fields - Since we removed the requirement for solidus_frontend from this gem, we don't care about the reset password email sending so we can just stub it out --- spec/models/spree/order_spec.rb | 9 ++++----- spec/models/spree/user_spec.rb | 7 +++++++ spec/spec_helper.rb | 2 ++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb index 80ed87f..9c980a3 100644 --- a/spec/models/spree/order_spec.rb +++ b/spec/models/spree/order_spec.rb @@ -11,7 +11,7 @@ expect(SolidusTracking::TrackEventJob).to have_been_enqueued.with( 'started_checkout', order: order, - ) + ).at_least(:once) end end end @@ -25,19 +25,18 @@ expect(SolidusTracking::TrackEventJob).to have_been_enqueued.with( 'placed_order', order: order, - ) + ).at_least(:once) end it 'tracks the Ordered Product events' do order = Spree::TestingSupport::OrderWalkthrough.up_to(:payment) order.complete! - order.line_items.each do |line_item| expect(SolidusTracking::TrackEventJob).to have_been_enqueued.with( 'ordered_product', line_item: line_item, - ) + ).at_least(:once) end end @@ -75,7 +74,7 @@ expect(SolidusTracking::TrackEventJob).to have_been_enqueued.with( 'cancelled_order', order: order, - ) + ).at_least(:once) end context 'when disable_builtin_emails is true' do diff --git a/spec/models/spree/user_spec.rb b/spec/models/spree/user_spec.rb index 09c5bb0..9140519 100644 --- a/spec/models/spree/user_spec.rb +++ b/spec/models/spree/user_spec.rb @@ -12,7 +12,14 @@ end end + describe '#send_reset_password_instructions' do + before do + allow(Devise.mailer) + .to receive(:reset_password_instructions) + .and_return(double(deliver_now: true)) + end + it 'tracks the Requested Password Reset event' do create(:store) user = create(:user) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 07e3ca7..eef97f1 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'ostruct' + # Configure Rails Environment ENV['RAILS_ENV'] = 'test' From 4e4047956456e619d3f3c14d5ac43b5d29bf203d Mon Sep 17 00:00:00 2001 From: Kendra Riga Date: Tue, 7 Oct 2025 13:28:35 -0600 Subject: [PATCH 5/9] Add decorator for DisableCancelEmail Similar to the confirm email, we need this to respect the 'disable_builtin_emails' value. --- .../spree/order/disable_cancel_email.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 app/decorators/models/solidus_tracking/spree/order/disable_cancel_email.rb diff --git a/app/decorators/models/solidus_tracking/spree/order/disable_cancel_email.rb b/app/decorators/models/solidus_tracking/spree/order/disable_cancel_email.rb new file mode 100644 index 0000000..8f868e6 --- /dev/null +++ b/app/decorators/models/solidus_tracking/spree/order/disable_cancel_email.rb @@ -0,0 +1,13 @@ +module SolidusTracking + module Spree + module Order + module DisableCancelEmail + def send_cancel_email + super unless SolidusTracking.configuration.disable_builtin_emails + end + end + end + end +end + +Spree::Order.prepend(SolidusTracking::Spree::Order::DisableCancelEmail) From eae3bc0901ded503df9fb53f4e035a7364d85477 Mon Sep 17 00:00:00 2001 From: Adam Mueller Date: Mon, 3 Nov 2025 09:56:29 -0800 Subject: [PATCH 6/9] Update Github actions setup Now that we're only supporting Solidus v4.0-4.5 with these changes, we need to tweak our testing matrix. Also, we were missing some configuration in order for our Github action environment variables to be able to pull the correct versions of Rails and Solidus. --- .github/workflows/test.yml | 26 ++++++++++++++------ Gemfile | 50 ++++++++++++++++++++------------------ solidus_tracking.gemspec | 4 +-- 3 files changed, 47 insertions(+), 33 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bc2fa3a..2e51a3d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,13 +2,13 @@ name: Test on: push: branches: - - master + - main pull_request: schedule: - cron: "0 0 * * 4" # every Thursday concurrency: group: test-${{ github.ref_name }} - cancel-in-progress: ${{ github.ref_name != 'master' }} + cancel-in-progress: ${{ github.ref_name != 'main' }} permissions: contents: read jobs: @@ -16,22 +16,32 @@ jobs: name: Solidus ${{ matrix.solidus-branch }}, Rails ${{ matrix.rails-version }} and Ruby ${{ matrix.ruby-version }} on ${{ matrix.database }} runs-on: ubuntu-24.04 strategy: - fail-fast: true + fail-fast: false matrix: rails-version: - - "7.0" + - "7.0.10" + - "7.1.6" + - "8.0.2" ruby-version: - "3.1" - - "3.2" - "3.3" solidus-branch: - - "v3.2" - - "v3.3" - - "v3.4" + - "v4.0" + - "v4.3" + - "v4.5" database: - "postgresql" - "mysql" - "sqlite" + exclude: + - rails-version: "7.1.6" + solidus-branch: "v4.0" + - rails-version: "8.0.2" + solidus-branch: "v4.0" + - rails-version: "8.0.2" + solidus-branch: "v4.3" + - rails-version: "8.0.2" + ruby-version: "3.1" steps: - uses: actions/checkout@v4 - name: Run extension tests diff --git a/Gemfile b/Gemfile index b050e55..7db5acc 100644 --- a/Gemfile +++ b/Gemfile @@ -1,38 +1,42 @@ # frozen_string_literal: true -source 'https://rubygems.org' +source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } -solidus_version = ENV.fetch('SOLIDUS_VERSION', 'v4.5.1') -gem 'solidus', github: "solidusio/solidus", tag: solidus_version +solidus_version = ENV.fetch("SOLIDUS_BRANCH", "v4.5") +gem "solidus", github: "solidusio/solidus", branch: solidus_version # Needed to help Bundler figure out how to resolve dependencies, # otherwise it takes forever to resolve them. # See https://github.com/bundler/bundler/issues/6677 -gem 'rails', '>0.a' +rails_requirement_string = ENV.fetch("RAILS_VERSION", ">0.a") +gem "rails", rails_requirement_string # Provides basic authentication functionality for testing parts of your engine -gem 'solidus_auth_devise' +gem "solidus_auth_devise" # Standard library gems that became separate in Ruby 3.4+ -gem 'bigdecimal' -gem 'mutex_m' -gem 'drb' -gem 'csv' -gem 'ostruct' - -# This is locked due to a 'stack level too deep' error/bug in v0.1.0. -gem 'state_machines', '~> 0.6.0' - -gem 'concurrent-ruby', '1.3.4' - -case ENV['DB'] -when 'mysql' - gem 'mysql2' -when 'postgresql' - gem 'pg' +gem "bigdecimal" +gem "mutex_m" +gem "drb" +gem "csv" +gem "ostruct" + +# This is locked due to a "stack level too deep" error/bug in v0.10.0 +gem "state_machines", "~> 0.6.0" + +gem "concurrent-ruby", "1.3.4" + +case ENV["DB"] +when "mysql" + gem "mysql2" +when "postgresql" + gem "pg" else - gem 'sqlite3', '~> 1.4' + rails_version = Gem::Requirement.new(rails_requirement_string).requirements[0][1] + sqlite_version = (rails_version < Gem::Version.new(7.2)) ? "~> 1.4" : "~> 2.0" + + gem "sqlite3", sqlite_version end gemspec @@ -42,4 +46,4 @@ gemspec # # We use `send` instead of calling `eval_gemfile` to work around an issue with # how Dependabot parses projects: https://github.com/dependabot/dependabot-core/issues/1658. -send(:eval_gemfile, 'Gemfile-local') if File.exist? 'Gemfile-local' +send(:eval_gemfile, "Gemfile-local") if File.exist? "Gemfile-local" diff --git a/solidus_tracking.gemspec b/solidus_tracking.gemspec index 9e0b9b6..1407dfe 100644 --- a/solidus_tracking.gemspec +++ b/solidus_tracking.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.require_paths = ["lib"] spec.add_dependency 'solidus_core', ['>= 4.0.0', '< 4.6'] - spec.add_dependency 'solidus_support', '~> 0.8' + spec.add_dependency 'solidus_support', ['>= 0.13.0', '< 1'] - spec.add_development_dependency 'solidus_dev_support' + spec.add_development_dependency 'solidus_dev_support', '~> 2.6' end From 8f96c7986d67178bee11a7a6649c70fc78f732ce Mon Sep 17 00:00:00 2001 From: Adam Mueller Date: Tue, 4 Nov 2025 08:48:01 -0800 Subject: [PATCH 7/9] Add run migrations step to install generator At some point in Rails 7.1+, the dummy app generation changed such that it no longer would fully setup the database for us. All of our other extensions seem to have avoided this issue because they all contain some migrations and run them as part of their install steps. So, even though we don't currently add any migrations from this extension, we're adding the step so that our CI can correctly setup the test database. --- .../solidus_tracking/install/install_generator.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/generators/solidus_tracking/install/install_generator.rb b/lib/generators/solidus_tracking/install/install_generator.rb index 70cddce..185fefa 100644 --- a/lib/generators/solidus_tracking/install/install_generator.rb +++ b/lib/generators/solidus_tracking/install/install_generator.rb @@ -3,11 +3,21 @@ module SolidusTracking module Generators class InstallGenerator < Rails::Generators::Base + class_option :auto_run_migrations, type: :boolean, default: false source_root File.expand_path('templates', __dir__) def copy_initializer template 'initializer.rb', 'config/initializers/solidus_tracking.rb' end + + def run_migrations + run_migrations = options[:auto_run_migrations] || ["", "y", "Y"].include?(ask("Would you like to run the migrations now? [Y/n]")) + if run_migrations + run "bin/rails db:migrate" + else + puts "Skipping bin/rails db:migrate, don't forget to run it!" # rubocop:disable Rails/Output + end + end end end end From 26937ba3c92ad9336ffa5ce020cc494120ba8077 Mon Sep 17 00:00:00 2001 From: Adam Mueller Date: Tue, 4 Nov 2025 09:02:31 -0800 Subject: [PATCH 8/9] Bump to v1.0.0 We're cutting off support for older versions of Solidus so we should do a major version bump. (Even if it appears we have never changed the version of this extension since inception.) --- lib/solidus_tracking/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/solidus_tracking/version.rb b/lib/solidus_tracking/version.rb index bfd4c0d..eee26b5 100644 --- a/lib/solidus_tracking/version.rb +++ b/lib/solidus_tracking/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module SolidusTracking - VERSION = '0.0.1' + VERSION = '1.0.0' end From c3e0e9148cbaecee875c12b44829ddd283c0b729 Mon Sep 17 00:00:00 2001 From: Adam Mueller Date: Tue, 4 Nov 2025 09:04:15 -0800 Subject: [PATCH 9/9] Update README with Github actions badge We're no longer using CircleCI for tests, so we should switch the badge to something more useful. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ab24d3..f90f734 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # solidus_tracking -[![CircleCI](https://circleci.com/gh/solidusio-contrib/solidus_tracking.svg?style=svg)](https://circleci.com/gh/solidusio-contrib/solidus_tracking) +[![Test](https://github.com/solidusio-contrib/solidus_tracking/actions/workflows/test.yml/badge.svg)](https://github.com/solidusio-contrib/solidus_tracking/actions/workflows/test.yml) This extension provides a data tracking platform (think [Segment](https://segment.com), but on-premise) for your Solidus store.