Skip to content

Commit 2bcf076

Browse files
committed
Fix preferences serialization compatibility with Rails version check
This PR modifies the Persistable module in Solidus to check the Rails version using Rails.gem_version instead of inspecting the serialize method parameters. This change is necessary only when using Solidus Globalize, ensuring compatibility with Rails 7.2. ## Background Solidus itself does not have any issues with the current implementation: ``` if method(:serialize).parameters.include?([:key, :type]) # Rails 7.1+ serialize :preferences, type: Hash, coder: YAML else serialize :preferences, Hash, coder: YAML end ``` However, when using Solidus Globalize, which relies on globalize, an issue arises in Rails 7.2 due to globalize overriding the serialize method: ``` ArgumentError: wrong number of arguments (given 2, expected 1) ``` This occurs because the serialize method signature is modified by globalize, causing a mismatch when Solidus inspects its parameters. For reference, see the globalize implementation here: https://github.com/globalize/globalize/blob/main/lib/patches/active_record/rails7_2/serialization.rb ## Solution To avoid conflicts, this PR replaces the method introspection with a Rails version check: ``` if Rails.gem_version >= Gem::Version.new('7.1') serialize :preferences, type: Hash, coder: YAML else serialize :preferences, Hash, coder: YAML end ``` This approach ensures compatibility while keeping Solidus independent from dependency-specific overrides. This issue is currently blocking the CI of the following PR in the solidus_globalize repository: solidusio-contrib/solidus_globalize#153 Fixing this in Solidus will help unblock that PR.
1 parent 3675af2 commit 2bcf076

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

core/lib/spree/preferences/persistable.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module Persistable
88
included do
99
include Spree::Preferences::Preferable
1010

11-
if method(:serialize).parameters.include?([:key, :type]) # Rails 7.1+
11+
if Rails.gem_version >= Gem::Version.new('7.1')
1212
serialize :preferences, type: Hash, coder: YAML
1313
else
1414
serialize :preferences, Hash, coder: YAML

0 commit comments

Comments
 (0)