spree_core 4.2.0.rc4 → 4.2.0.rc5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/spree/base_controller.rb +2 -1
  3. data/app/controllers/spree/errors_controller.rb +11 -0
  4. data/app/finders/spree/orders/find_current.rb +1 -1
  5. data/app/finders/spree/products/find.rb +12 -1
  6. data/app/helpers/spree/locale_helper.rb +19 -0
  7. data/app/helpers/spree/products_helper.rb +37 -12
  8. data/app/models/concerns/spree/user_payment_source.rb +1 -1
  9. data/app/models/spree/app_configuration.rb +1 -1
  10. data/app/models/spree/image.rb +14 -14
  11. data/app/models/spree/product.rb +12 -15
  12. data/app/models/spree/promotion/rules/option_value.rb +1 -1
  13. data/app/models/spree/store.rb +21 -9
  14. data/app/models/spree/variant.rb +7 -7
  15. data/app/presenters/spree/variant_presenter.rb +2 -5
  16. data/app/services/spree/cart/estimate_shipping_rates.rb +1 -1
  17. data/app/views/spree/errors/forbidden.html.erb +0 -0
  18. data/app/views/spree/errors/unauthorized.html.erb +0 -0
  19. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -2
  20. data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +1 -1
  21. data/config/locales/en.yml +0 -47
  22. data/config/routes.rb +2 -1
  23. data/db/default/spree/stores.rb +1 -0
  24. data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +5 -0
  25. data/lib/generators/spree/install/templates/config/spree_storefront.yml +9 -9
  26. data/lib/spree/core.rb +2 -1
  27. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  28. data/lib/spree/core/controller_helpers/common.rb +6 -8
  29. data/lib/spree/core/controller_helpers/currency.rb +45 -0
  30. data/lib/spree/core/controller_helpers/locale.rb +57 -0
  31. data/lib/spree/core/controller_helpers/store.rb +0 -16
  32. data/lib/spree/core/version.rb +1 -1
  33. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -2
  34. metadata +11 -5
  35. data/lib/spree/core/controller_helpers/currency_helpers.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 661697daa0303090a2d39f0b439929bf8b54e59722ad738cee547487ba27aaf2
4
- data.tar.gz: 8de83da0c8c3aa629f8389e40c63c178391d5a51a370da3595f0e1ce6edf431f
3
+ metadata.gz: 3d0f9d56b3e68e0ff69cfa46d00d61872b775e2e92ddf76a3eccd85899ca863b
4
+ data.tar.gz: 80879be83858cb06f69c5e78f975b9cbf1846941d62282290c8403bd8b509363
5
5
  SHA512:
6
- metadata.gz: 1b2cffe1a5872d559bb2ff7b0361e99c3d2cf6436a57e6ba1779550fb587651316c6c031c019b8e2150feae8df15f5d04ec500ae245585b9886f5584cb89ae2c
7
- data.tar.gz: 83bba2eb568b84622dd523b4b943bcfee3cba206bce126ba9cf2a094b671e53d6094e8129edc4b8d620630fccf0783f962e3311fa1d41baf149575155bd7cf4e
6
+ metadata.gz: 82e15e51f5847c472eac8cd4e24e549dc28705b328f082860009c638277f203adbfe42ff898105862e3385b4ed5935e102200cd247ee998b09b4b2f3912b77d3
7
+ data.tar.gz: c843177415698e0d50d2d9d81b2803f84713db0dfe7d9098c41a7de69cb9c1c15158d97b93a2ecc97dc62752078797adbd03436bad2a8674c87eef07ecb97e35
@@ -7,7 +7,8 @@ class Spree::BaseController < ApplicationController
7
7
  include Spree::Core::ControllerHelpers::Search
8
8
  include Spree::Core::ControllerHelpers::Store
9
9
  include Spree::Core::ControllerHelpers::StrongParameters
10
- include Spree::Core::ControllerHelpers::CurrencyHelpers
10
+ include Spree::Core::ControllerHelpers::Locale
11
+ include Spree::Core::ControllerHelpers::Currency
11
12
 
12
13
  respond_to :html
13
14
  end
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ class ErrorsController < BaseController
3
+ def forbidden
4
+ render status: 403
5
+ end
6
+
7
+ def unauthorized
8
+ render status: 401
9
+ end
10
+ end
11
+ end
@@ -9,7 +9,7 @@ module Spree
9
9
  return order unless order.nil?
10
10
  return if user.nil?
11
11
 
12
- incomplete_orders.order(created_at: :desc).find_by(store: store, user: user)
12
+ incomplete_orders.order(created_at: :desc).find_by(store: store, user: user, currency: params[:currency])
13
13
  end
14
14
 
15
15
  private
@@ -22,6 +22,7 @@ module Spree
22
22
  products = by_ids(scope)
23
23
  products = by_skus(products)
24
24
  products = by_price(products)
25
+ products = by_currency(products)
25
26
  products = by_taxons(products)
26
27
  products = by_concat_taxons(products)
27
28
  products = by_name(products)
@@ -51,6 +52,10 @@ module Spree
51
52
  price.present?
52
53
  end
53
54
 
55
+ def currency?
56
+ currency.present?
57
+ end
58
+
54
59
  def taxons?
55
60
  taxons.present?
56
61
  end
@@ -94,7 +99,7 @@ module Spree
94
99
  def by_price(products)
95
100
  return products unless price?
96
101
 
97
- products.joins(master: :default_price).
102
+ products.joins(master: :prices).
98
103
  where(
99
104
  spree_prices: {
100
105
  amount: price.min..price.max,
@@ -103,6 +108,12 @@ module Spree
103
108
  )
104
109
  end
105
110
 
111
+ def by_currency(products)
112
+ return products unless currency?
113
+
114
+ products.joins(master: :prices).where(spree_prices: { currency: currency })
115
+ end
116
+
106
117
  def by_taxons(products)
107
118
  return products unless taxons?
108
119
 
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module LocaleHelper
3
+ def all_locales_options
4
+ supported_locales_for_all_stores.map { |locale| locale_presentation(locale) }
5
+ end
6
+
7
+ def available_locales_options
8
+ available_locales.map { |locale| locale_presentation(locale) }
9
+ end
10
+
11
+ def locale_presentation(locale)
12
+ if defined?(SpreeI18n)
13
+ [Spree.t('i18n.this_file_language', locale: locale), locale]
14
+ else
15
+ locale.to_s == 'en' ? ['English (US)', :en] : [locale, locale]
16
+ end
17
+ end
18
+ end
19
+ end
@@ -35,6 +35,11 @@ module Spree
35
35
  variants_option_types_presenter(variants, product).default_variant || product.default_variant
36
36
  end
37
37
 
38
+ def should_display_compare_at_price?(default_variant)
39
+ default_variant_price = default_variant.price_in(current_currency)
40
+ default_variant_price.compare_at_amount.present? && (default_variant_price.compare_at_amount > default_variant_price.amount)
41
+ end
42
+
38
43
  def used_variants_options(variants, product)
39
44
  variants_option_types_presenter(variants, product).options
40
45
  end
@@ -115,19 +120,39 @@ module Spree
115
120
  ).call.to_json
116
121
  end
117
122
 
123
+ def product_relation_types
124
+ @product_relation_types ||= @product.respond_to?(:relation_types) ? @product.relation_types : []
125
+ end
126
+
127
+ def product_relations_by_type(relation_type)
128
+ return [] if product_relation_types.none? || !@product.respond_to?(:relations)
129
+
130
+ product_ids = @product.relations.where(relation_type: relation_type).pluck(:related_to_id).uniq
131
+
132
+ return [] if product_ids.empty?
133
+
134
+ Spree::Product.
135
+ available.not_discontinued.distinct.
136
+ where(id: product_ids).
137
+ includes(
138
+ :tax_category,
139
+ master: [
140
+ :prices,
141
+ { images: { attachment_attachment: :blob } },
142
+ ]
143
+ ).
144
+ limit(Spree::Config[:products_per_page])
145
+ end
146
+
118
147
  def related_products
119
- return [] unless @product.respond_to?(:has_related_products?) && @product.has_related_products?(:related_products)
120
-
121
- @related_products ||= @product.
122
- related_products.
123
- includes(
124
- :tax_category,
125
- master: [
126
- :prices,
127
- images: { attachment_attachment: :blob },
128
- ]
129
- ).
130
- limit(Spree::Config[:products_per_page])
148
+ ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
149
+ ProductsHelper#related_products is deprecated and will be removed in Spree 5.0.
150
+ Please use ProductsHelper#relations from now on.
151
+ DEPRECATION
152
+
153
+ return [] unless @product.respond_to?(:has_related_products?)
154
+
155
+ @related_products ||= relations_by_type('related_products')
131
156
  end
132
157
 
133
158
  def product_available_in_currency?
@@ -9,7 +9,7 @@ module Spree
9
9
  end
10
10
 
11
11
  def payment_sources
12
- credit_cards.with_payment_profile.not_expired
12
+ credit_cards.with_payment_profile.not_expired.where(payment_method: Spree::PaymentMethod.active)
13
13
  end
14
14
 
15
15
  def drop_payment_source(source)
@@ -69,7 +69,7 @@ module Spree
69
69
  preference :credit_to_new_allocation, :boolean, default: false
70
70
 
71
71
  # Multi store configurations
72
- preference :show_store_selector, :boolean, default: false
72
+ preference :show_store_selector, :boolean, default: true
73
73
 
74
74
  # searcher_class allows spree extension writers to provide their own Search class
75
75
  def searcher_class
@@ -15,13 +15,13 @@ module Spree
15
15
  width, height = size.chop.split('x')
16
16
 
17
17
  {
18
- url: polymorphic_path(attachment.variant(combine_options: {
19
- gravity: 'center',
20
- resize: size,
21
- extent: size,
22
- background: 'snow2',
23
- quality: 80
24
- }), only_path: true),
18
+ url: polymorphic_path(attachment.variant(
19
+ gravity: 'center',
20
+ resize: size,
21
+ extent: size,
22
+ background: 'snow2',
23
+ quality: 80
24
+ ), only_path: true),
25
25
  width: width,
26
26
  height: height
27
27
  }
@@ -35,13 +35,13 @@ module Spree
35
35
  width, height = size.chop.split('x')
36
36
 
37
37
  {
38
- url: polymorphic_path(attachment.variant(combine_options: {
39
- gravity: 'center',
40
- resize: size,
41
- extent: size,
42
- background: 'snow2',
43
- quality: 80
44
- }), only_path: true),
38
+ url: polymorphic_path(attachment.variant(
39
+ gravity: 'center',
40
+ resize: size,
41
+ extent: size,
42
+ background: 'snow2',
43
+ quality: 80
44
+ ), only_path: true),
45
45
  size: size,
46
46
  width: width,
47
47
  height: height
@@ -160,7 +160,7 @@ module Spree
160
160
  #
161
161
  # @return [Spree::Variant]
162
162
  def default_variant
163
- Rails.cache.fetch(default_variant_cache_key) do
163
+ @default_variant ||= Rails.cache.fetch(default_variant_cache_key) do
164
164
  if Spree::Config[:track_inventory_levels] && variants.in_stock_or_backorderable.any?
165
165
  variants.in_stock_or_backorderable.first
166
166
  else
@@ -172,11 +172,11 @@ module Spree
172
172
  # Returns default Variant ID for Product
173
173
  # @return [Integer]
174
174
  def default_variant_id
175
- default_variant.id
175
+ @default_variant_id ||= default_variant.id
176
176
  end
177
177
 
178
178
  def tax_category
179
- super || TaxCategory.find_by(is_default: true)
179
+ @tax_category ||= super || TaxCategory.find_by(is_default: true)
180
180
  end
181
181
 
182
182
  # Adding properties and option types on creation based on a chosen prototype
@@ -288,11 +288,11 @@ module Spree
288
288
  end
289
289
 
290
290
  def total_on_hand
291
- if any_variants_not_track_inventory?
292
- Float::INFINITY
293
- else
294
- stock_items.sum(:count_on_hand)
295
- end
291
+ @total_on_hand ||= if any_variants_not_track_inventory?
292
+ Float::INFINITY
293
+ else
294
+ stock_items.sum(:count_on_hand)
295
+ end
296
296
  end
297
297
 
298
298
  # Master variant may be deleted (i.e. when the product is deleted)
@@ -303,14 +303,11 @@ module Spree
303
303
  end
304
304
 
305
305
  def brand
306
- taxons.joins(:taxonomy).find_by(spree_taxonomies: { name: Spree.t(:taxonomy_brands_name) })
306
+ @brand ||= taxons.joins(:taxonomy).find_by(spree_taxonomies: { name: Spree.t(:taxonomy_brands_name) })
307
307
  end
308
308
 
309
309
  def category
310
- taxons.joins(:taxonomy).
311
- where(spree_taxonomies: { name: Spree.t(:taxonomy_categories_name) }).
312
- order(depth: :desc).
313
- first
310
+ @category ||= taxons.joins(:taxonomy).order(depth: :desc).find_by(spree_taxonomies: { name: Spree.t(:taxonomy_categories_name) })
314
311
  end
315
312
 
316
313
  private
@@ -440,12 +437,12 @@ module Spree
440
437
  end
441
438
 
442
439
  def taxon_and_ancestors
443
- taxons.map(&:self_and_ancestors).flatten.uniq
440
+ @taxon_and_ancestors ||= taxons.map(&:self_and_ancestors).flatten.uniq
444
441
  end
445
442
 
446
443
  # Get the taxonomy ids of all taxons assigned to this product and their ancestors.
447
444
  def taxonomy_ids
448
- taxon_and_ancestors.map(&:taxonomy_id).flatten.uniq
445
+ @taxonomy_ids ||= taxon_and_ancestors.map(&:taxonomy_id).flatten.uniq
449
446
  end
450
447
 
451
448
  # Iterate through this products taxons and taxonomies and touch their timestamps in a batch
@@ -31,7 +31,7 @@ module Spree
31
31
  end
32
32
 
33
33
  def actionable?(line_item)
34
- product_id = line_item.product.id
34
+ product_id = line_item.product_id
35
35
  option_values_ids = line_item.variant.option_value_ids
36
36
  eligible_product_ids = preferred_eligible_values.keys
37
37
  eligible_value_ids = preferred_eligible_values[product_id]
@@ -43,28 +43,39 @@ module Spree
43
43
  end
44
44
  end
45
45
 
46
+ def self.available_locales
47
+ Rails.cache.fetch('stores_available_locales') do
48
+ Spree::Store.all.map(&:supported_locales_list).flatten.uniq
49
+ end
50
+ end
51
+
46
52
  def supported_currencies_list
47
- (read_attribute(:supported_currencies).to_s.split(',') << default_currency).map(&:to_s).map do |code|
53
+ @supported_currencies_list ||= (read_attribute(:supported_currencies).to_s.split(',') << default_currency).map(&:to_s).map do |code|
48
54
  ::Money::Currency.find(code.strip)
49
55
  end.uniq.compact
50
56
  end
51
57
 
58
+ def supported_locales_list
59
+ # TODO: add support of multiple supported languages to a single Store
60
+ @supported_locales_list ||= [default_locale].compact.uniq
61
+ end
62
+
52
63
  def unique_name
53
- "#{name} (#{code})"
64
+ @unique_name ||= "#{name} (#{code})"
54
65
  end
55
66
 
56
67
  def formatted_url
57
68
  return if url.blank?
58
69
 
59
- if url.match(/http:\/\/|https:\/\//)
60
- url
61
- else
62
- Rails.env.development? ? "http://#{url}" : "https://#{url}"
63
- end
70
+ @formatted_url ||= if url.match(/http:\/\/|https:\/\//)
71
+ url
72
+ else
73
+ Rails.env.development? ? "http://#{url}" : "https://#{url}"
74
+ end
64
75
  end
65
76
 
66
77
  def countries_available_for_checkout
67
- checkout_zone_or_default.try(:country_list) || Spree::Country.all
78
+ @countries_available_for_checkout ||= checkout_zone_or_default.try(:country_list) || Spree::Country.all
68
79
  end
69
80
 
70
81
  def states_available_for_checkout(country)
@@ -72,7 +83,7 @@ module Spree
72
83
  end
73
84
 
74
85
  def checkout_zone_or_default
75
- checkout_zone || Spree::Zone.default_checkout_zone
86
+ @checkout_zone_or_default ||= checkout_zone || Spree::Zone.default_checkout_zone
76
87
  end
77
88
 
78
89
  private
@@ -94,6 +105,7 @@ module Spree
94
105
 
95
106
  def clear_cache
96
107
  Rails.cache.delete('default_store')
108
+ Rails.cache.delete('stores_available_locales')
97
109
  end
98
110
  end
99
111
  end
@@ -123,15 +123,15 @@ module Spree
123
123
  end
124
124
 
125
125
  def tax_category
126
- if self[:tax_category_id].nil?
127
- product.tax_category
128
- else
129
- Spree::TaxCategory.find(self[:tax_category_id])
130
- end
126
+ @tax_category ||= if self[:tax_category_id].nil?
127
+ product.tax_category
128
+ else
129
+ Spree::TaxCategory.find(self[:tax_category_id])
130
+ end
131
131
  end
132
132
 
133
133
  def options_text
134
- Spree::Variants::OptionsPresenter.new(self).to_sentence
134
+ @options_text ||= Spree::Variants::OptionsPresenter.new(self).to_sentence
135
135
  end
136
136
 
137
137
  # Default to master name
@@ -226,7 +226,7 @@ module Spree
226
226
  end
227
227
 
228
228
  def compare_at_price
229
- price_in(cost_currency).try(:compare_at_amount)
229
+ @compare_at_price ||= price_in(cost_currency).try(:compare_at_amount)
230
230
  end
231
231
 
232
232
  def name_and_sku
@@ -2,6 +2,7 @@ module Spree
2
2
  class VariantPresenter
3
3
  include Rails.application.routes.url_helpers
4
4
  include Spree::BaseHelper
5
+ include Spree::ProductsHelper
5
6
 
6
7
  attr_reader :current_currency, :current_price_options, :current_store
7
8
 
@@ -19,7 +20,7 @@ module Spree
19
20
  display_price: display_price(variant),
20
21
  price: variant.price_in(current_currency),
21
22
  display_compare_at_price: display_compare_at_price(variant),
22
- should_display_compare_at_price: should_display_compare_at_price(variant),
23
+ should_display_compare_at_price: should_display_compare_at_price?(variant),
23
24
  is_product_available_in_currency: @is_product_available_in_currency,
24
25
  backorderable: backorderable?(variant),
25
26
  in_stock: in_stock?(variant),
@@ -75,9 +76,5 @@ module Spree
75
76
  purchasable: variant.purchasable?
76
77
  }
77
78
  end
78
-
79
- def should_display_compare_at_price(variant)
80
- variant.compare_at_price.present? && variant.compare_at_price > variant.price
81
- end
82
79
  end
83
80
  end
@@ -24,7 +24,7 @@ module Spree
24
24
  if country_iso.present?
25
25
  ::Spree::Country.by_iso(country_iso)&.id
26
26
  else
27
- ::Spree::Country.default.id
27
+ Spree::Config[:default_country_id]
28
28
  end
29
29
  end
30
30
 
File without changes
File without changes
@@ -249,11 +249,9 @@
249
249
  color: #51545E;
250
250
  font-size: 15px;
251
251
  line-height: 18px;
252
- width: 62%;
253
252
  }
254
253
 
255
254
  .purchase_image {
256
- width: 18%;
257
255
  padding: 5px;
258
256
  }
259
257
 
@@ -20,7 +20,7 @@
20
20
  </td>
21
21
  <td class="align-right">
22
22
  <span class="f-fallback purchase_item_price">
23
- <%= line_item.quantity %> x <%= line_item.single_money %>
23
+ <%= line_item.quantity %> x <%= line_item.single_money %><br>
24
24
  <%= line_item.display_amount %>
25
25
  </span>
26
26
  </td>
@@ -663,7 +663,6 @@ en:
663
663
  jackets_and_coats: JACKET & COASTS
664
664
  new_collection: NEW COLLECTION
665
665
  special_offers: SPECIAL OFFERS
666
- summer_2019: SUMMER 2019
667
666
  channel: Channel
668
667
  charged: Charged
669
668
  checkout: Checkout
@@ -760,38 +759,10 @@ en:
760
759
  date: Date
761
760
  date_completed: Date Completed
762
761
  date_picker:
763
- am: 'AM'
764
762
  first_day: 0
765
763
  format: ! '%Y/%m/%d'
766
- hourAriaLabel: 'Hour'
767
764
  js_format: Y/m/d
768
765
  js_date_time: Y/m/d - H:i
769
- minuteAriaLabel: 'Minute'
770
- pm: 'PM'
771
- rangeSeparator: ' to '
772
- scrollTitle: 'Scroll to increment'
773
- toggleTitle: 'Click to toggle'
774
- weekAbbreviation: 'Wk'
775
- yearAriaLabel: 'Year'
776
- sun: 'Sun'
777
- mon: 'Mon'
778
- tue: 'Tue'
779
- wed: 'Wed'
780
- thu: 'Thu'
781
- fri: 'Fri'
782
- sat: 'Sat'
783
- lh_jan: 'January'
784
- lh_feb: 'February'
785
- lh_mar: 'March'
786
- lh_apr: 'April'
787
- lh_may: 'May'
788
- lh_jun: 'June'
789
- lh_jul: 'July'
790
- lh_aug: 'August'
791
- lh_sep: 'September'
792
- lh_oct: 'October'
793
- lh_nov: 'November'
794
- lh_dec: 'December'
795
766
  date_range: Date Range
796
767
  default: Default
797
768
  default_country_cannot_be_deleted: Default country cannot be deleted
@@ -926,24 +897,6 @@ en:
926
897
  hide_from_subcategories_nav: Hide from subcategories navigation
927
898
  home: Home
928
899
  home_page: homepage
929
- homepage:
930
- bestsellers: BESTSELLERS
931
- fashion_trends: FASHION TRENDS
932
- fashion_trends_note: Want to rock this season’s hottest trend in style? These are the top fashion from Summer 2020 Fashion Weeks that are coming our way this season.
933
- men: MEN
934
- new: NEW
935
- new_collection: NEW COLLECTION
936
- read_more: READ MORE
937
- shoes: SHOES
938
- shop_now: SHOP NOW
939
- sportswear: SPORTSWEAR
940
- streetstyle: STREETSTYLE
941
- summer_2020: Summer 2020
942
- summer_collection: Summer Collection
943
- summer_sale: SUMMER SALE
944
- trending: TRENDING
945
- up_to_60: UP TO 60%
946
- women: WOMEN
947
900
  help_center: Help Center
948
901
  i18n:
949
902
  available_locales: Available Locales
data/config/routes.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  Spree::Core::Engine.add_routes do
2
- get '/forbidden', to: 'home#forbidden', as: :forbidden
2
+ get '/forbidden', to: 'errors#forbidden', as: :forbidden
3
+ get '/unauthorized', to: 'errors#unauthorized', as: :unauthorized
3
4
  end
4
5
 
5
6
  Spree::Core::Engine.draw_routes
@@ -11,6 +11,7 @@ else
11
11
  s.customer_support_email = 'support@example.com'
12
12
  s.default_currency = 'USD'
13
13
  s.default_country_id = Spree::Config[:default_country_id]
14
+ s.default_locale = I18n.locale
14
15
  s.seo_title = 'Spree Commerce Demo Shop'
15
16
  s.meta_description = 'This is the new Spree UX DEMO | OVERVIEW: http://bit.ly/new-spree-ux | DOCS: http://bit.ly/spree-ux-customization-docs | CONTACT: https://spreecommerce.org/contact/'
16
17
  s.facebook = 'spreecommerce'
@@ -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
@@ -18,12 +18,12 @@ default:
18
18
  :url: /t/women/jackets-and-coats
19
19
  promo_banners:
20
20
  - subtitle: New collection
21
- title: Summer 2019
22
- url: /t/new-collection/summer-2019
21
+ title: Summer 2021
22
+ url: /t/new-collection/summer-2021
23
23
  image: 'meganav/promo_banner_left-first-category.jpg'
24
24
  - subtitle: Special Offers
25
25
  title: Get up to 30% off
26
- url: /t/special-offers/30-off
26
+ url: /t/special-offers/30-percent-off
27
27
  image: 'meganav/promo_banner_right-first-category.jpg'
28
28
  - title: Men
29
29
  subtitle: Categories
@@ -39,12 +39,12 @@ default:
39
39
  :url: /t/men/jackets-and-coats
40
40
  promo_banners:
41
41
  - subtitle: New collection
42
- title: Summer 2019
43
- url: /t/new-collection/summer-2019
42
+ title: Summer 2021
43
+ url: /t/new-collection/summer-2021
44
44
  image: 'meganav/promo_banner_left-second-category.jpg'
45
45
  - subtitle: Special Offers
46
46
  title: Get up to 30% off
47
- url: /t/special-offers/30-off
47
+ url: /t/special-offers/30-percent-off
48
48
  image: 'meganav/promo_banner_right-second-category.jpg'
49
49
  - title: Sportswear
50
50
  subtitle: Categories
@@ -58,10 +58,10 @@ default:
58
58
  :url: /t/sportswear/pants
59
59
  promo_banners:
60
60
  - subtitle: New collection
61
- title: Summer 2019
62
- url: /t/new-collection/summer-2019
61
+ title: Summer 2021
62
+ url: /t/new-collection/summer-2021
63
63
  image: 'meganav/promo_banner_left-third-category.jpg'
64
64
  - subtitle: Special Offers
65
65
  title: Get up to 30% off
66
- url: /t/special-offers/30-off
66
+ url: /t/special-offers/30-percent-off
67
67
  image: 'meganav/promo_banner_right-third-category.jpg'
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,45 @@
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
+ end
13
+
14
+ def current_currency
15
+ # session support was previously in SpreeMultiCurrency so we would like
16
+ # to keep it for now
17
+ @current_currency ||= if defined?(session) && session.key?(:currency) && supported_currency?(session[:currency])
18
+ session[:currency]
19
+ elsif params[:currency].present? && supported_currency?(params[:currency])
20
+ params[:currency]
21
+ else
22
+ current_store.default_currency
23
+ end
24
+ end
25
+
26
+ def supported_currencies
27
+ @supported_currencies ||= current_store.supported_currencies_list
28
+ end
29
+
30
+ def supported_currencies_for_all_stores
31
+ @supported_currencies_for_all_stores ||= begin
32
+ (
33
+ Spree::Store.pluck(:supported_currencies).map { |c| c&.split(',') }.flatten + Spree::Store.pluck(:default_currency)
34
+ ).
35
+ compact.uniq.map { |code| ::Money::Currency.find(code.strip) }
36
+ end
37
+ end
38
+
39
+ def supported_currency?(currency_iso_code)
40
+ supported_currencies.map(&:iso_code).include?(currency_iso_code)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,57 @@
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
+ end
16
+
17
+ def set_locale
18
+ I18n.locale = current_locale
19
+ end
20
+
21
+ def current_locale
22
+ # session support was previously in SpreeI18n so we would like to keep it for now
23
+ # for easer upgrade
24
+ @current_locale ||= if defined?(session) && session.key?(:locale) && supported_locale?(session[:locale])
25
+ session[:locale]
26
+ elsif params[:locale].present? && supported_locale?(params[:locale])
27
+ params[:locale]
28
+ elsif respond_to?(:config_locale, true) && config_locale.present?
29
+ config_locale
30
+ else
31
+ current_store.default_locale || Rails.application.config.i18n.default_locale || I18n.default_locale
32
+ end
33
+ end
34
+
35
+ def supported_locales
36
+ @supported_locales ||= current_store.supported_locales_list
37
+ end
38
+
39
+ def supported_locale?(locale_code)
40
+ supported_locales.include?(locale_code&.to_s)
41
+ end
42
+
43
+ def supported_locales_for_all_stores
44
+ @supported_locales_for_all_stores ||= (if defined?(SpreeI18n)
45
+ (SpreeI18n::Locale.all << :en).map(&:to_s)
46
+ else
47
+ [Rails.application.config.i18n.default_locale, I18n.locale, :en]
48
+ end).uniq.compact
49
+ end
50
+
51
+ def available_locales
52
+ Spree::Store.available_locales
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -5,26 +5,10 @@ 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
@@ -1,5 +1,5 @@
1
1
  module Spree
2
2
  def self.version
3
- '4.2.0.rc4'
3
+ '4.2.0.rc5'
4
4
  end
5
5
  end
@@ -20,8 +20,8 @@ FactoryBot.define do
20
20
  product_1 = create(:product)
21
21
  product_2 = create(:product)
22
22
 
23
- stock_location.stock_items.where(variant_id: product_1.master.id).first.adjust_count_on_hand(10)
24
- stock_location.stock_items.where(variant_id: product_2.master.id).first.adjust_count_on_hand(20)
23
+ stock_location.stock_items.where(variant_id: product_1.master_id).first.adjust_count_on_hand(10)
24
+ stock_location.stock_items.where(variant_id: product_2.master_id).first.adjust_count_on_hand(20)
25
25
  end
26
26
  end
27
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0.rc4
4
+ version: 4.2.0.rc5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Schofield
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-01-20 00:00:00.000000000 Z
12
+ date: 2021-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemerchant
@@ -447,6 +447,7 @@ files:
447
447
  - app/assets/images/noimage/small.png
448
448
  - app/assets/javascripts/spree.js
449
449
  - app/controllers/spree/base_controller.rb
450
+ - app/controllers/spree/errors_controller.rb
450
451
  - app/finders/spree/addresses/find.rb
451
452
  - app/finders/spree/base_finder.rb
452
453
  - app/finders/spree/countries/find.rb
@@ -459,6 +460,7 @@ files:
459
460
  - app/finders/spree/variants/option_types_finder.rb
460
461
  - app/finders/spree/variants/visible_finder.rb
461
462
  - app/helpers/spree/base_helper.rb
463
+ - app/helpers/spree/locale_helper.rb
462
464
  - app/helpers/spree/mail_helper.rb
463
465
  - app/helpers/spree/products_helper.rb
464
466
  - app/mailers/spree/base_mailer.rb
@@ -688,6 +690,8 @@ files:
688
690
  - app/validators/db_maximum_length_validator.rb
689
691
  - app/validators/email_validator.rb
690
692
  - app/views/layouts/spree/base_mailer.html.erb
693
+ - app/views/spree/errors/forbidden.html.erb
694
+ - app/views/spree/errors/unauthorized.html.erb
691
695
  - app/views/spree/order_mailer/cancel_email.html.erb
692
696
  - app/views/spree/order_mailer/cancel_email.text.erb
693
697
  - app/views/spree/order_mailer/confirm_email.html.erb
@@ -1014,6 +1018,7 @@ files:
1014
1018
  - db/migrate/20210114182625_create_spree_payment_methods_stores.rb
1015
1019
  - db/migrate/20210114220232_migrate_data_payment_methods_stores.rb
1016
1020
  - db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb
1021
+ - db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb
1017
1022
  - db/seeds.rb
1018
1023
  - lib/friendly_id/slug_rails5_patch.rb
1019
1024
  - lib/generators/spree/custom_user/custom_user_generator.rb
@@ -1049,7 +1054,8 @@ files:
1049
1054
  - lib/spree/core/components.rb
1050
1055
  - lib/spree/core/controller_helpers/auth.rb
1051
1056
  - lib/spree/core/controller_helpers/common.rb
1052
- - lib/spree/core/controller_helpers/currency_helpers.rb
1057
+ - lib/spree/core/controller_helpers/currency.rb
1058
+ - lib/spree/core/controller_helpers/locale.rb
1053
1059
  - lib/spree/core/controller_helpers/order.rb
1054
1060
  - lib/spree/core/controller_helpers/search.rb
1055
1061
  - lib/spree/core/controller_helpers/store.rb
@@ -1164,9 +1170,9 @@ licenses:
1164
1170
  - BSD-3-Clause
1165
1171
  metadata:
1166
1172
  bug_tracker_uri: https://github.com/spree/spree/issues
1167
- changelog_uri: https://github.com/spree/spree/releases/tag/v4.2.0.rc4
1173
+ changelog_uri: https://github.com/spree/spree/releases/tag/v4.2.0.rc5
1168
1174
  documentation_uri: https://guides.spreecommerce.org/
1169
- source_code_uri: https://github.com/spree/spree/tree/v4.2.0.rc4
1175
+ source_code_uri: https://github.com/spree/spree/tree/v4.2.0.rc5
1170
1176
  post_install_message:
1171
1177
  rdoc_options: []
1172
1178
  require_paths:
@@ -1,15 +0,0 @@
1
- module Spree
2
- module Core
3
- module ControllerHelpers
4
- module CurrencyHelpers
5
- def self.included(receiver)
6
- receiver.send :helper_method, :supported_currencies
7
- end
8
-
9
- def supported_currencies
10
- current_store.supported_currencies_list
11
- end
12
- end
13
- end
14
- end
15
- end