From f5c42cf75884253733e8822cb1994f08223ebc20 Mon Sep 17 00:00:00 2001 From: Stephane Bounmy Date: Sat, 19 Oct 2013 17:15:15 +0200 Subject: [PATCH] fix : set_user_language not overriden in spree_auth_devise_controller --- app/controllers/store_controller_decorator.rb | 26 +++++++------------ app/overrides/taxonomy_add_multi_language.rb | 8 +++--- .../controller_helper_locale.rb | 26 +++++++++++++++++++ spec/spec_helper.rb | 2 +- spree_multi_lingual.gemspec | 2 +- 5 files changed, 43 insertions(+), 21 deletions(-) create mode 100644 lib/spree_multi_lingual/controller_helper_locale.rb diff --git a/app/controllers/store_controller_decorator.rb b/app/controllers/store_controller_decorator.rb index 57b7dae..6aece73 100644 --- a/app/controllers/store_controller_decorator.rb +++ b/app/controllers/store_controller_decorator.rb @@ -1,19 +1,13 @@ -Spree::StoreController.class_eval do - private +# could not decorate Spree::Core::ControllerHelpers::Common#set_user_locale +# so manualy override this method here by including ControllerHelperLocale - # Internal : Set user I18n.locale - # - # override spree_core set_user_language - # initialize user language : - # params[:locale] is explicitly given by routing-filter /:locale - # or the session[:locale] set by Spree::LocaleController#set - # or I18n.locale set by rack-locale for example - # or Spree::Config[:default_locale] - # or Rails.application.config.i18n.default_locale +Spree::StoreController.class_eval do + include SpreeMultiLingual::ControllerHelperLocale +end - def set_user_language - locale = params[:locale] || session[:locale] || I18n.locale || Rails.application.config.i18n.default_locale - locale = I18n.default_locale unless locale && I18n.available_locales.include?(locale.to_sym) - I18n.locale = locale.to_sym - end +# spree_devise_auth_devise controllers +%w{Spree::UserRegistrationsController Spree::UserPasswordsController Spree::UserSessionsController Spree::UsersController}.each do |klass| + klass.class_eval do + include SpreeMultiLingual::ControllerHelperLocale + end if klass = klass.safe_constantize end \ No newline at end of file diff --git a/app/overrides/taxonomy_add_multi_language.rb b/app/overrides/taxonomy_add_multi_language.rb index a9029ab..fac9153 100644 --- a/app/overrides/taxonomy_add_multi_language.rb +++ b/app/overrides/taxonomy_add_multi_language.rb @@ -5,7 +5,9 @@ :partial => "spree/admin/taxonomies/multi_language_links") Deface::Override.new( - :virtual_path => "spree/admin/taxons/edit", - :insert_before => '[data-hook="buttons"]', - :text => '<%= render "spree/admin/taxons/multi_scripts", :object => @taxon -%>', + :virtual_path => "spree/admin/taxons/_form", + :insert_top => '[data-hook="admin_inside_taxon_form"]', + :text => '
+ <%= render "spree/admin/taxons/multi_scripts", :object => @taxon -%> +
', :name => "taxon_add_language_dropdown") \ No newline at end of file diff --git a/lib/spree_multi_lingual/controller_helper_locale.rb b/lib/spree_multi_lingual/controller_helper_locale.rb new file mode 100644 index 0000000..6f8cb6f --- /dev/null +++ b/lib/spree_multi_lingual/controller_helper_locale.rb @@ -0,0 +1,26 @@ +module SpreeMultiLingual::ControllerHelperLocale + extend ActiveSupport::Concern + + included do |base| + # only way to make sure that set_user_language included by spree_auth_devise controller is overriden correctly + base.class_eval do + private + + # Internal : Set user I18n.locale + # + # override spree_core set_user_language + # initialize user language : + # params[:locale] is explicitly given by routing-filter /:locale + # or the session[:locale] set by Spree::LocaleController#set + # or I18n.locale set by rack-locale for example + # or Spree::Config[:default_locale] + # or Rails.application.config.i18n.default_locale + def set_user_language + locale = params[:locale] || session[:locale] || I18n.locale || Rails.application.config.i18n.default_locale + locale = I18n.default_locale unless locale && I18n.available_locales.include?(locale.to_sym) + I18n.locale = locale.to_sym + end + end + end + +end \ No newline at end of file diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index dfc2ac2..3fa3f0d 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -5,7 +5,7 @@ require 'rspec/rails' require 'ffaker' -# require 'debugger' +require 'debugger' # Requires supporting ruby files with custom matchers and macros, etc, # in spec/support/ and its subdirectories. diff --git a/spree_multi_lingual.gemspec b/spree_multi_lingual.gemspec index b03835b..f028132 100644 --- a/spree_multi_lingual.gemspec +++ b/spree_multi_lingual.gemspec @@ -41,6 +41,6 @@ Gem::Specification.new do |s| s.add_development_dependency 'email_spec', '~> 1.2.1' s.add_development_dependency 'selenium-webdriver', '2.35.1' # Seems Spree doesn't require it correctly or there is a problem with extensions maybe? Still, it is needed to work with the dummy app! - # s.add_development_dependency 'debugger' + s.add_development_dependency 'debugger' s.add_development_dependency 'sass-rails' end