Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support code reloading when configuring static preferences sources
This is how we usually recommend configuring sources for static preferences [1]: ```ruby Spree.config do |config| config.static_model_preferences.add( AmazingStore::AmazingPaymentMethod, 'amazing_payment_method_credentials', credentials: ENV['AMAZING_PAYMENT_METHOD_CREDENTIALS'], server: Rails.env.production? ? 'production' : 'test', test_mode: !Rails.env.production? ) end ``` However, it's no longer possible to directly reference an autoloadable class from an initializer [2]. In this case, we can't change the `#add` method to take the class name instead. The reason is that it ends up invoking a sanitization check on the given preferences against the defined preferences, and that, of course, needs access to the actual class [3]. Therefore, it's better to start recommending nesting the configuration within a `.to_prepare` block, as they run every time the code is reloaded [4]: ```ruby Rails.application.config.to_prepare do Spree::Config.static_model_preferences.add( AmazingStore::AmazingPaymentMethod, 'amazing_payment_method_credentials', credentials: ENV['AMAZING_PAYMENT_METHOD_CREDENTIALS'], server: Rails.env.production? ? 'production' : 'test', test_mode: !Rails.env.production? ) end ``` However, that means running the `#add` method multiple times, so we need to change it to replace the definition instead of raising an error. [1] - https://github.com/solidusio/solidus_stripe/blob/3fab36511a9d02ebd64d03571704ac5a9031b63b/README.md#usage [2] - https://guides.rubyonrails.org/autoloading_and_reloading_constants.html#autoload-on-boot-and-on-each-reload [3] - https://github.com/solidusio/solidus/blob/df51df62fa9b829216958b21b20514b7a3d87b30/core/lib/spree/preferences/static_model_preferences.rb#L13 [4] - https://guides.rubyonrails.org/configuring.html#initialization-events Closes solidusio#4070 & solidusio#4040
- Loading branch information