Skip to content

Commit

Permalink
The to_prepare block should be done in the Engine
Browse files Browse the repository at this point in the history
This will make it run before other gems that are declared after spree_mobility in the Gemfile. If done in an initializer
like before, then this would not be the case. This replaces the temporary fix for PaymentMethod STI issues - as long as
spree_mobility is before other PaymentMethod gems in the Gemfile, the new payment methods will inherit the translations
association and settings from PaymentMethod.

Fixes #7
  • Loading branch information
mrbrdo committed Jun 1, 2022
1 parent 6e0ff4c commit 621a0a0
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 33 deletions.
19 changes: 0 additions & 19 deletions config/initializers/enable_extensions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,3 @@
# Extend library classes
SpreeMobility.prepend_once(::Mobility::Backends::ActiveRecord::Table.singleton_class,
SpreeMobility::CoreExt::Mobility::Backends::ActiveRecord::Table::MobilityActsAsParanoidDecorator)

Rails.application.config.to_prepare do
# Extend reloadable classes
SpreeMobility.prepend_once(::Spree::OptionType, SpreeMobility::CoreExt::Spree::OptionTypeDecorator)
SpreeMobility.prepend_once(::Spree::OptionValue, SpreeMobility::CoreExt::Spree::OptionValueDecorator)
SpreeMobility.prepend_once(::Spree::Product, SpreeMobility::CoreExt::Spree::ProductDecorator)
SpreeMobility.prepend_once(::Spree::Product.singleton_class, SpreeMobility::CoreExt::Spree::ProductDecorator::ClassMethods)
SpreeMobility.prepend_once(::Spree::Product.singleton_class, SpreeMobility::CoreExt::Spree::ProductScopesWithMobilityDecorator)
SpreeMobility.prepend_once(::Spree::ProductProperty, SpreeMobility::CoreExt::Spree::ProductPropertyDecorator)
SpreeMobility.prepend_once(::Spree::Promotion, SpreeMobility::CoreExt::Spree::PromotionDecorator)
SpreeMobility.prepend_once(::Spree::Property, SpreeMobility::CoreExt::Spree::PropertyDecorator)
SpreeMobility.prepend_once(::Spree::ShippingMethod, SpreeMobility::CoreExt::Spree::ShippingMethodDecorator)
SpreeMobility.prepend_once(::Spree::PaymentMethod, SpreeMobility::CoreExt::Spree::PaymentMethodDecorator)
SpreeMobility.prepend_once(::Spree::Store, SpreeMobility::CoreExt::Spree::StoreDecorator)
SpreeMobility.prepend_once(::Spree::Taxon, SpreeMobility::CoreExt::Spree::TaxonDecorator)
SpreeMobility.prepend_once(::Spree::Taxonomy, SpreeMobility::CoreExt::Spree::TaxonomyDecorator)
SpreeMobility.prepend_once(::Spree::Variant.singleton_class, SpreeMobility::CoreExt::Spree::VariantDecorator::ClassMethods)
SpreeMobility.prepend_once(::Spree::Products::Find, SpreeMobility::CoreExt::Spree::Products::FindWithMobilityDecorator)
end
18 changes: 18 additions & 0 deletions lib/spree_mobility.rb
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,22 @@ def self.spree_backend_config(key)
Spree::Config[key]
end
end

def self.extend_reloadable_classes
SpreeMobility.prepend_once(::Spree::OptionType, SpreeMobility::CoreExt::Spree::OptionTypeDecorator)
SpreeMobility.prepend_once(::Spree::OptionValue, SpreeMobility::CoreExt::Spree::OptionValueDecorator)
SpreeMobility.prepend_once(::Spree::Product, SpreeMobility::CoreExt::Spree::ProductDecorator)
SpreeMobility.prepend_once(::Spree::Product.singleton_class, SpreeMobility::CoreExt::Spree::ProductDecorator::ClassMethods)
SpreeMobility.prepend_once(::Spree::Product.singleton_class, SpreeMobility::CoreExt::Spree::ProductScopesWithMobilityDecorator)
SpreeMobility.prepend_once(::Spree::ProductProperty, SpreeMobility::CoreExt::Spree::ProductPropertyDecorator)
SpreeMobility.prepend_once(::Spree::Promotion, SpreeMobility::CoreExt::Spree::PromotionDecorator)
SpreeMobility.prepend_once(::Spree::Property, SpreeMobility::CoreExt::Spree::PropertyDecorator)
SpreeMobility.prepend_once(::Spree::ShippingMethod, SpreeMobility::CoreExt::Spree::ShippingMethodDecorator)
SpreeMobility.prepend_once(::Spree::PaymentMethod, SpreeMobility::CoreExt::Spree::PaymentMethodDecorator)
SpreeMobility.prepend_once(::Spree::Store, SpreeMobility::CoreExt::Spree::StoreDecorator)
SpreeMobility.prepend_once(::Spree::Taxon, SpreeMobility::CoreExt::Spree::TaxonDecorator)
SpreeMobility.prepend_once(::Spree::Taxonomy, SpreeMobility::CoreExt::Spree::TaxonomyDecorator)
SpreeMobility.prepend_once(::Spree::Variant.singleton_class, SpreeMobility::CoreExt::Spree::VariantDecorator::ClassMethods)
SpreeMobility.prepend_once(::Spree::Products::Find, SpreeMobility::CoreExt::Spree::Products::FindWithMobilityDecorator)
end
end
14 changes: 0 additions & 14 deletions lib/spree_mobility/core_ext/spree/payment_method_decorator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,5 @@ def self.prepended(base)
base.translation_class.class_eval do
validates :name, presence: true
end

# Fix for STI inheriting associations dependent on load-order
base.descendants.each do |klass|
next if klass.reflect_on_association(:translations)
SpreeMobility.translates_for klass, :name, :description
translations_assoc = base.reflect_on_association(:translations)
klass.has_many :translations,
class_name: translations_assoc.class_name,
inverse_of: translations_assoc.inverse_of.name,
foreign_key: translations_assoc.foreign_key,
dependent: translations_assoc.options[:dependent],
autosave: translations_assoc.options[:autosave],
extend: translations_assoc.options[:extend]
end
end
end
4 changes: 4 additions & 0 deletions lib/spree_mobility/engine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ class Engine < Rails::Engine
SpreeMobility::Config = SpreeMobility::Configuration.new
end

config.to_prepare do
SpreeMobility.extend_reloadable_classes
end

initializer "spree_mobility.permitted_attributes", before: :load_config_initializers do |app|
taxon_attributes = { translations_attributes: [:id, :locale, :name, :description, :permalink, :meta_description, :meta_keywords, :meta_title] }
Spree::PermittedAttributes.taxon_attributes << taxon_attributes
Expand Down

0 comments on commit 621a0a0

Please sign in to comment.