spree_core 4.2.0.rc2 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js +20 -0
  3. data/app/controllers/spree/base_controller.rb +2 -3
  4. data/app/controllers/spree/errors_controller.rb +11 -0
  5. data/app/finders/spree/addresses/find.rb +1 -12
  6. data/app/finders/spree/base_finder.rb +14 -0
  7. data/app/finders/spree/countries/find.rb +11 -3
  8. data/app/finders/spree/credit_cards/find.rb +2 -2
  9. data/app/finders/spree/orders/find_current.rb +2 -2
  10. data/app/finders/spree/products/find.rb +14 -3
  11. data/app/helpers/spree/base_helper.rb +3 -8
  12. data/app/helpers/spree/currency_helper.rb +34 -0
  13. data/app/helpers/spree/locale_helper.rb +31 -0
  14. data/app/helpers/spree/products_helper.rb +37 -12
  15. data/app/mailers/spree/base_mailer.rb +4 -4
  16. data/app/mailers/spree/order_mailer.rb +3 -3
  17. data/app/mailers/spree/reimbursement_mailer.rb +1 -1
  18. data/app/mailers/spree/shipment_mailer.rb +1 -1
  19. data/app/models/concerns/spree/default_price.rb +1 -5
  20. data/app/models/concerns/spree/product_scopes.rb +1 -1
  21. data/app/models/concerns/spree/user_methods.rb +2 -2
  22. data/app/models/concerns/spree/user_payment_source.rb +1 -1
  23. data/app/models/spree/ability.rb +45 -34
  24. data/app/models/spree/address.rb +4 -0
  25. data/app/models/spree/app_configuration.rb +2 -2
  26. data/app/models/spree/app_dependencies.rb +6 -2
  27. data/app/models/spree/base.rb +5 -0
  28. data/app/models/spree/credit_card.rb +4 -0
  29. data/app/models/spree/fulfilment_changer.rb +58 -16
  30. data/app/models/spree/image.rb +14 -14
  31. data/app/models/spree/inventory_unit.rb +2 -7
  32. data/app/models/spree/line_item.rb +7 -15
  33. data/app/models/spree/order.rb +1 -0
  34. data/app/models/spree/payment.rb +18 -4
  35. data/app/models/spree/payment/processing.rb +2 -2
  36. data/app/models/spree/payment_method.rb +3 -3
  37. data/app/models/spree/price.rb +2 -7
  38. data/app/models/spree/product.rb +41 -17
  39. data/app/models/spree/promotion/rules/option_value.rb +1 -1
  40. data/app/models/spree/promotion/rules/product.rb +2 -1
  41. data/app/models/spree/promotion/rules/user.rb +2 -1
  42. data/app/models/spree/refund.rb +2 -2
  43. data/app/models/spree/return_item/eligibility_validator/default.rb +0 -2
  44. data/app/models/spree/return_item/eligibility_validator/{r_m_a_required.rb → rma_required.rb} +0 -0
  45. data/app/models/spree/shipment.rb +1 -1
  46. data/app/models/spree/shipping_method.rb +1 -5
  47. data/app/models/spree/shipping_rate.rb +2 -11
  48. data/app/models/spree/stock/availability_validator.rb +3 -4
  49. data/app/models/spree/stock_item.rb +1 -5
  50. data/app/models/spree/store.rb +55 -2
  51. data/app/models/spree/store_credit.rb +1 -1
  52. data/app/models/spree/variant.rb +9 -16
  53. data/app/models/spree/zone.rb +13 -4
  54. data/app/paginators/spree/shared/paginate.rb +8 -1
  55. data/app/presenters/spree/variant_presenter.rb +2 -5
  56. data/app/services/spree/account/addresses/create.rb +6 -1
  57. data/app/services/spree/account/addresses/{base.rb → helper.rb} +1 -3
  58. data/app/services/spree/account/addresses/update.rb +6 -1
  59. data/app/services/spree/build_localized_redirect_url.rb +101 -0
  60. data/app/services/spree/cart/estimate_shipping_rates.rb +1 -1
  61. data/app/services/spree/compare_line_items.rb +4 -2
  62. data/app/sorters/spree/base_sorter.rb +35 -0
  63. data/app/sorters/spree/orders/sort.rb +1 -37
  64. data/app/sorters/spree/products/sort.rb +9 -32
  65. data/app/validators/email_validator.rb +1 -1
  66. data/app/views/spree/errors/forbidden.html.erb +0 -0
  67. data/app/views/spree/errors/unauthorized.html.erb +0 -0
  68. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +13 -2
  69. data/app/views/spree/shared/_purchased_items_table.html.erb +15 -6
  70. data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +2 -2
  71. data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +2 -2
  72. data/config/initializers/inflections.rb +3 -0
  73. data/config/initializers/rails61_fixes.rb +3 -0
  74. data/config/locales/en.yml +31 -60
  75. data/config/routes.rb +2 -1
  76. data/db/default/spree/stores.rb +1 -0
  77. data/db/default/spree/zones.rb +4 -1
  78. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +1 -1
  79. data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +1 -0
  80. data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +6 -2
  81. data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +5 -0
  82. data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +5 -0
  83. data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +10 -0
  84. data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +15 -0
  85. data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +5 -0
  86. data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +5 -0
  87. data/db/migrate/20210205211040_add_supported_locales_to_spree_stores.rb +11 -0
  88. data/db/migrate/20210215202602_migrate_spree_i18n_globalize_config.rb +22 -0
  89. data/lib/generators/spree/install/install_generator.rb +9 -6
  90. data/lib/spree/core.rb +2 -1
  91. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  92. data/lib/spree/core/controller_helpers/common.rb +6 -8
  93. data/lib/spree/core/controller_helpers/currency.rb +54 -0
  94. data/lib/spree/core/controller_helpers/locale.rb +58 -0
  95. data/lib/spree/core/controller_helpers/search.rb +1 -1
  96. data/lib/spree/core/controller_helpers/store.rb +4 -16
  97. data/lib/spree/core/product_filters.rb +3 -3
  98. data/lib/spree/core/version.rb +3 -1
  99. data/lib/spree/i18n.rb +17 -19
  100. data/lib/spree/permitted_attributes.rb +2 -2
  101. data/lib/spree/service_module.rb +8 -4
  102. data/lib/spree/testing_support/capybara_config.rb +1 -1
  103. data/lib/spree/testing_support/common_rake.rb +1 -1
  104. data/lib/spree/testing_support/controller_requests.rb +10 -10
  105. data/lib/spree/testing_support/factories/shipment_factory.rb +7 -9
  106. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -2
  107. data/lib/spree/testing_support/factories/store_factory.rb +1 -0
  108. data/lib/spree/testing_support/factories/zone_factory.rb +16 -13
  109. data/lib/spree/testing_support/flatpickr_capybara.rb +101 -0
  110. data/lib/spree/testing_support/locale_helpers.rb +78 -0
  111. data/lib/spree/testing_support/next_instance_of.rb +38 -0
  112. data/lib/spree/testing_support/order_walkthrough.rb +8 -3
  113. data/lib/spree/testing_support/rspec_retry_config.rb +10 -0
  114. data/spree_core.gemspec +5 -4
  115. metadata +71 -26
  116. data/lib/generators/spree/install/templates/config/initializers/spree_storefront.rb +0 -1
  117. data/lib/generators/spree/install/templates/config/spree_storefront.yml +0 -67
  118. data/lib/spree/core/controller_helpers/currency_helpers.rb +0 -15
  119. data/lib/spree/i18n/base.rb +0 -17
  120. data/lib/spree/i18n/initializer.rb +0 -1
@@ -0,0 +1,15 @@
1
+ class MigrateDataPaymentMethodsStores < ActiveRecord::Migration[6.0]
2
+ def up
3
+ Spree::PaymentMethod.all.each do |payment_method|
4
+ next if payment_method.store_ids.any?
5
+
6
+ if payment_method[:store_id].present?
7
+ payment_method.store_ids = payment_method[:store_id]
8
+ else
9
+ payment_method.store_ids = Spree::Store.ids
10
+ end
11
+
12
+ payment_method.save
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ class RemoveStoreIdFromSpreePaymentMethods < ActiveRecord::Migration[6.0]
2
+ def change
3
+ remove_column :spree_payment_methods, :store_id, :integer
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class EnsureDefaultLocaleInSpreeStores < ActiveRecord::Migration[6.0]
2
+ def change
3
+ Spree::Store.where(default_locale: nil).update_all(default_locale: I18n.locale)
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ class AddSupportedLocalesToSpreeStores < ActiveRecord::Migration[6.0]
2
+ def change
3
+ unless column_exists?(:spree_stores, :supported_locales)
4
+ add_column :spree_stores, :supported_locales, :string
5
+ Spree::Store.reset_column_information
6
+ Spree::Store.all.each do |store|
7
+ store.update_attribute(:supported_locales, store.default_locale)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ class MigrateSpreeI18nGlobalizeConfig < ActiveRecord::Migration[6.0]
2
+ def up
3
+ locales = []
4
+
5
+ if defined?(SpreeI18n) && defined?(SpreeI18n::Config)
6
+ locales = (locales << SpreeI18n::Config[:available_locales]).flatten.uniq.compact
7
+ end
8
+
9
+ if defined?(SpreeGlobalize) && defined?(SpreeGlobalize::Config)
10
+ locales = (locales << SpreeGlobalize::Config[:supported_locales]).flatten.uniq.compact
11
+ end
12
+
13
+ default_store = Spree::Store.default
14
+ if default_store.supported_locales.blank? || default_store.supported_locales == default_store.default_locale
15
+ locales = (locales << default_store.default_locale).uniq.compact.join(',')
16
+ default_store.update(supported_locales: locales)
17
+ end
18
+ end
19
+
20
+ def down
21
+ end
22
+ end
@@ -10,7 +10,8 @@ module Spree
10
10
  class_option :migrate, type: :boolean, default: true, banner: 'Run Spree migrations'
11
11
  class_option :seed, type: :boolean, default: true, banner: 'load seed data (migrations must be run)'
12
12
  class_option :sample, type: :boolean, default: true, banner: 'load sample data (migrations must be run)'
13
- class_option :copy_storefront, type: :boolean, default: true, banner: 'copy storefront from spree frontend to your application for easy customization'
13
+ class_option :install_storefront, type: :boolean, default: true, banner: 'installs storefront configuration files'
14
+ class_option :copy_storefront, type: :boolean, default: false, banner: 'copy all storefront views and stylesheets'
14
15
  class_option :auto_accept, type: :boolean
15
16
  class_option :user_class, type: :string
16
17
  class_option :admin_email, type: :string
@@ -30,6 +31,7 @@ module Spree
30
31
  @run_migrations = options[:migrate]
31
32
  @load_seed_data = options[:seed]
32
33
  @load_sample_data = options[:sample]
34
+ @install_storefront = options[:install_storefront]
33
35
  @copy_storefront = options[:copy_storefront]
34
36
 
35
37
  unless @run_migrations
@@ -40,11 +42,6 @@ module Spree
40
42
 
41
43
  def add_files
42
44
  template 'config/initializers/spree.rb', 'config/initializers/spree.rb'
43
-
44
- if Spree::Core::Engine.frontend_available? || Rails.env.test?
45
- template 'config/initializers/spree_storefront.rb', 'config/initializers/spree_storefront.rb'
46
- template 'config/spree_storefront.yml', 'config/spree_storefront.yml'
47
- end
48
45
  end
49
46
 
50
47
  def additional_tweaks
@@ -91,6 +88,12 @@ module Spree
91
88
  empty_directory 'app/overrides'
92
89
  end
93
90
 
91
+ def install_storefront
92
+ if @install_storefront && Spree::Core::Engine.frontend_available?
93
+ generate 'spree:frontend:install'
94
+ end
95
+ end
96
+
94
97
  def copy_storefront
95
98
  if @copy_storefront && Spree::Core::Engine.frontend_available?
96
99
  generate 'spree:frontend:copy_storefront'
data/lib/spree/core.rb CHANGED
@@ -105,4 +105,5 @@ require 'spree/core/controller_helpers/order'
105
105
  require 'spree/core/controller_helpers/search'
106
106
  require 'spree/core/controller_helpers/store'
107
107
  require 'spree/core/controller_helpers/strong_parameters'
108
- require 'spree/core/controller_helpers/currency_helpers'
108
+ require 'spree/core/controller_helpers/locale'
109
+ require 'spree/core/controller_helpers/currency'
@@ -76,7 +76,9 @@ module Spree
76
76
  redirect_to spree.forbidden_path
77
77
  else
78
78
  store_location
79
- if respond_to?(:spree_login_path)
79
+ if request.fullpath.match(Spree.admin_path) && defined?(spree.admin_login_path)
80
+ redirect_to spree.admin_login_path
81
+ elsif respond_to?(:spree_login_path)
80
82
  redirect_to spree_login_path
81
83
  elsif spree.respond_to?(:root_path)
82
84
  redirect_to spree.root_path
@@ -10,8 +10,6 @@ module Spree
10
10
 
11
11
  layout :get_layout
12
12
 
13
- before_action :set_user_language
14
-
15
13
  protected
16
14
 
17
15
  # can be used in views as well as controllers.
@@ -43,12 +41,12 @@ module Spree
43
41
  private
44
42
 
45
43
  def set_user_language
46
- locale = session[:locale]
47
- locale = store_locale if respond_to?(:store_locale, true) && locale.blank?
48
- locale = config_locale if respond_to?(:config_locale, true) && locale.blank?
49
- locale = Rails.application.config.i18n.default_locale if locale.blank?
50
- locale = I18n.default_locale unless I18n.available_locales.map(&:to_s).include?(locale.to_s)
51
- I18n.locale = locale
44
+ ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
45
+ ControllerHelpers::Common#set_user_language is deprecated and will be removed in Spree 5.0.
46
+ Please use `before_action :set_locale` instead
47
+ DEPRECATION
48
+
49
+ set_locale
52
50
  end
53
51
 
54
52
  # Returns which layout to render.
@@ -0,0 +1,54 @@
1
+ module Spree
2
+ module Core
3
+ module ControllerHelpers
4
+ module Currency
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ helper_method :supported_currencies
9
+ helper_method :supported_currencies_for_all_stores
10
+ helper_method :current_currency
11
+ helper_method :supported_currency?
12
+ helper_method :currency_param
13
+ end
14
+
15
+ def current_currency
16
+ @current_currency ||= if defined?(session) && session.key?(:currency) && supported_currency?(session[:currency])
17
+ session[:currency]
18
+ elsif params[:currency].present? && supported_currency?(params[:currency])
19
+ params[:currency]
20
+ elsif current_store.present?
21
+ current_store.default_currency
22
+ else
23
+ Spree::Config[:currency]
24
+ end&.upcase
25
+ end
26
+
27
+ def supported_currencies
28
+ @supported_currencies ||= current_store&.supported_currencies_list
29
+ end
30
+
31
+ def supported_currencies_for_all_stores
32
+ @supported_currencies_for_all_stores ||= begin
33
+ (
34
+ Spree::Store.pluck(:supported_currencies).map { |c| c&.split(',') }.flatten + Spree::Store.pluck(:default_currency)
35
+ ).
36
+ compact.uniq.map { |code| ::Money::Currency.find(code.strip) }
37
+ end
38
+ end
39
+
40
+ def supported_currency?(currency_iso_code)
41
+ return false if supported_currencies.nil?
42
+
43
+ supported_currencies.map(&:iso_code).include?(currency_iso_code.upcase)
44
+ end
45
+
46
+ def currency_param
47
+ return if current_currency == current_store.default_currency
48
+
49
+ current_currency
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,58 @@
1
+ module Spree
2
+ module Core
3
+ module ControllerHelpers
4
+ module Locale
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ before_action :set_locale
9
+
10
+ helper_method :supported_locales
11
+ helper_method :supported_locales_for_all_stores
12
+ helper_method :current_locale
13
+ helper_method :supported_locale?
14
+ helper_method :available_locales
15
+ helper_method :locale_param
16
+ end
17
+
18
+ def set_locale
19
+ I18n.locale = current_locale
20
+ end
21
+
22
+ def current_locale
23
+ @current_locale ||= if params[:locale].present? && supported_locale?(params[:locale])
24
+ params[:locale]
25
+ elsif respond_to?(:config_locale, true) && config_locale.present?
26
+ config_locale
27
+ else
28
+ current_store&.default_locale || Rails.application.config.i18n.default_locale || I18n.default_locale
29
+ end
30
+ end
31
+
32
+ def supported_locales
33
+ @supported_locales ||= current_store&.supported_locales_list
34
+ end
35
+
36
+ def supported_locale?(locale_code)
37
+ return false if supported_locales.nil?
38
+
39
+ supported_locales.include?(locale_code&.to_s)
40
+ end
41
+
42
+ def supported_locales_for_all_stores
43
+ @supported_locales_for_all_stores ||= Spree.available_locales
44
+ end
45
+
46
+ def available_locales
47
+ Spree::Store.available_locales
48
+ end
49
+
50
+ def locale_param
51
+ return if I18n.locale.to_s == current_store.default_locale || current_store.default_locale.nil?
52
+
53
+ I18n.locale.to_s
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -5,7 +5,7 @@ module Spree
5
5
  def build_searcher(params)
6
6
  Spree::Config.searcher_class.new(params).tap do |searcher|
7
7
  searcher.current_user = try_spree_current_user
8
- searcher.current_currency = current_currency
8
+ searcher.current_currency = current_currency&.upcase
9
9
  end
10
10
  end
11
11
  end
@@ -5,30 +5,18 @@ module Spree
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- helper_method :supported_currencies
9
- helper_method :current_currency
10
8
  helper_method :current_store
11
9
  helper_method :current_price_options
12
10
  end
13
11
 
14
- def current_currency
15
- if defined?(session) && session.key?(:currency) && supported_currencies.map(&:iso_code).include?(session[:currency])
16
- session[:currency]
17
- elsif params[:currency].present? && supported_currencies.map(&:iso_code).include?(params[:currency])
18
- params[:currency]
19
- else
20
- current_store.default_currency
21
- end
22
- end
23
-
24
- def supported_currencies
25
- current_store.supported_currencies_list
26
- end
27
-
28
12
  def current_store
29
13
  @current_store ||= Spree::Store.current(request.env['SERVER_NAME'])
30
14
  end
31
15
 
16
+ def store_locale
17
+ current_store.default_locale
18
+ end
19
+
32
20
  # Return a Hash of things that influence the prices displayed in your shop.
33
21
  #
34
22
  # By default, the only thing that influences prices that is the current order's +tax_zone+
@@ -68,9 +68,9 @@ module Spree
68
68
  def self.price_filter
69
69
  v = Spree::Price.arel_table
70
70
  conds = [[Spree.t(:under_price, price: format_price(10)), v[:amount].lteq(10)],
71
- ["#{format_price(10)} - #{format_price(15)}", v[:amount].in(10..15)],
72
- ["#{format_price(15)} - #{format_price(18)}", v[:amount].in(15..18)],
73
- ["#{format_price(18)} - #{format_price(20)}", v[:amount].in(18..20)],
71
+ ["#{format_price(10)} - #{format_price(15)}", v[:amount].between(10..15)],
72
+ ["#{format_price(15)} - #{format_price(18)}", v[:amount].between(15..18)],
73
+ ["#{format_price(18)} - #{format_price(20)}", v[:amount].between(18..20)],
74
74
  [Spree.t(:or_over_price, price: format_price(20)), v[:amount].gteq(20)]]
75
75
  {
76
76
  name: Spree.t(:price_range),
@@ -1,5 +1,7 @@
1
1
  module Spree
2
+ VERSION = '4.2.1'.freeze
3
+
2
4
  def self.version
3
- '4.2.0.rc2'
5
+ VERSION
4
6
  end
5
7
  end
data/lib/spree/i18n.rb CHANGED
@@ -1,35 +1,33 @@
1
1
  require 'i18n'
2
2
  require 'active_support/core_ext/array/extract_options'
3
- require 'spree/i18n/base'
3
+ require 'action_view'
4
4
 
5
5
  module Spree
6
- extend ActionView::Helpers::TranslationHelper
7
- extend ActionView::Helpers::TagHelper
6
+ class TranslationHelperWrapper
7
+ include ActionView::Helpers::TranslationHelper
8
+ end
8
9
 
9
10
  class << self
10
11
  # Add spree namespace and delegate to Rails TranslationHelper for some nice
11
12
  # extra functionality. e.g return reasonable strings for missing translations
12
- def translate(*args)
13
- @virtual_path = virtual_path
13
+ def translate(key, options = {})
14
+ options[:scope] = [*options[:scope]].unshift(:spree).uniq
14
15
 
15
- options = args.extract_options!
16
- options[:scope] = [*options[:scope]].unshift(:spree)
17
- args << options
18
- super(*args)
16
+ TranslationHelperWrapper.new.translate(key, **options)
19
17
  end
20
18
 
21
- alias t translate
19
+ def available_locales
20
+ locales_from_i18n = I18n.available_locales
21
+ locales =
22
+ if defined?(SpreeI18n)
23
+ (SpreeI18n::Locale.all << :en).map(&:to_s)
24
+ else
25
+ [Rails.application.config.i18n.default_locale, I18n.locale, :en]
26
+ end
22
27
 
23
- def context
24
- Spree::ViewContext.context
28
+ (locales + locales_from_i18n).uniq.compact
25
29
  end
26
30
 
27
- def virtual_path
28
- if context
29
- path = context.instance_variable_get('@virtual_path')
30
-
31
- path&.gsub(/spree/, '')
32
- end
33
- end
31
+ alias t translate
34
32
  end
35
33
  end
@@ -99,9 +99,9 @@ module Spree
99
99
  @@store_attributes = [:name, :url, :seo_title, :code, :meta_keywords, :logo,
100
100
  :meta_description, :default_currency, :mail_from_address,
101
101
  :customer_support_email, :facebook, :twitter, :instagram,
102
- :description, :address, :contact_email, :contact_phone,
102
+ :description, :address, :contact_phone, :supported_locales,
103
103
  :default_locale, :default_country_id, :supported_currencies,
104
- :new_order_notifications_email, :mailer_logo, :checkout_zone_id]
104
+ :new_order_notifications_email, :mailer_logo, :checkout_zone_id, :seo_robots]
105
105
 
106
106
  @@store_credit_attributes = %i[amount currency category_id memo]
107
107
 
@@ -1,8 +1,8 @@
1
1
  module Spree
2
2
  module ServiceModule
3
3
  module Callable
4
- def call(*args)
5
- new.call(*args).tap do |result|
4
+ def call(*args, **kwargs)
5
+ new.call(*args, **kwargs).tap do |result|
6
6
  return yield(result) if block_given?
7
7
  end
8
8
  end
@@ -47,7 +47,11 @@ module Spree
47
47
  def call(input = nil)
48
48
  input ||= {}
49
49
  @_passed_input = Result.new(true, input)
50
- result = super
50
+ result = if input.is_a?(Hash)
51
+ super(**input)
52
+ else
53
+ super(input)
54
+ end
51
55
  @_passed_input = result if result.is_a? Result
52
56
  enforce_data_format
53
57
  @_passed_input
@@ -71,7 +75,7 @@ module Spree
71
75
  end
72
76
 
73
77
  begin
74
- @_passed_input = callable.call(@_passed_input.value)
78
+ @_passed_input = callable.call(**@_passed_input.value)
75
79
  rescue ArgumentError => e
76
80
  if e.message.include? 'missing'
77
81
  raise IncompatibleParamsPassed, "You didn't pass #{e.message} to callable '#{callable.name}'"
@@ -23,4 +23,4 @@ else
23
23
  end
24
24
  end
25
25
  Capybara.default_max_wait_time = 45
26
- Capybara.server = :webrick
26
+ Capybara.server = :puma