spree-contrib/spree_multi_currency

View on GitHub
app/controllers/spree/admin/general_settings_controller_decorator.rb

Summary

Maintainability
A
25 mins
Test Coverage
module Spree
  module Admin
    module GeneralSettingsControllerDecorator
      def self.preneded(base)
        base.before_action :update_currency_settings, only: :update
      end

      def render(*args)
        @preferences_currency |= [:allow_currency_change, :show_currency_selector, :supported_currencies]
        super
      end

      private

      def update_currency_settings
        params.each do |name, value|
          next unless Spree::Config.has_preference? name
          if name == 'supported_currencies'
            value = value.split(',').map { |curr| ::Money::Currency.find(curr.strip).try(:iso_code) }.concat([Spree::Config[:currency]]).uniq.compact.join(',')
          end
          Spree::Config[name] = value
        end
      end
    end
  end
end

::Spree::Admin::GeneralSettingsController.prepend(Spree::Admin::GeneralSettingsControllerDecorator)