spree_core 4.7.2 → 4.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/app/finders/spree/taxons/find.rb +7 -3
  4. data/app/models/concerns/spree/named_type.rb +1 -1
  5. data/app/models/concerns/spree/product_scopes.rb +19 -19
  6. data/app/models/concerns/spree/user_address.rb +4 -2
  7. data/app/models/spree/address.rb +2 -21
  8. data/app/models/spree/asset.rb +2 -2
  9. data/app/models/spree/calculator/default_tax.rb +1 -1
  10. data/app/models/spree/cms_page.rb +3 -3
  11. data/app/models/spree/cms_section.rb +1 -1
  12. data/app/models/spree/country.rb +0 -26
  13. data/app/models/spree/credit_card.rb +5 -3
  14. data/app/models/spree/customer_return.rb +3 -3
  15. data/app/models/spree/digital.rb +1 -1
  16. data/app/models/spree/digital_link.rb +1 -1
  17. data/app/models/spree/image.rb +2 -2
  18. data/app/models/spree/inventory_unit.rb +1 -1
  19. data/app/models/spree/legacy_user.rb +3 -3
  20. data/app/models/spree/line_item.rb +2 -2
  21. data/app/models/spree/menu.rb +2 -2
  22. data/app/models/spree/menu_item.rb +1 -1
  23. data/app/models/spree/option_type.rb +6 -6
  24. data/app/models/spree/option_value.rb +5 -5
  25. data/app/models/spree/order.rb +9 -7
  26. data/app/models/spree/payment.rb +4 -4
  27. data/app/models/spree/payment_capture_event.rb +1 -1
  28. data/app/models/spree/payment_method.rb +1 -1
  29. data/app/models/spree/payment_source.rb +1 -1
  30. data/app/models/spree/price.rb +4 -2
  31. data/app/models/spree/product.rb +30 -19
  32. data/app/models/spree/product_property.rb +5 -3
  33. data/app/models/spree/promotion.rb +3 -3
  34. data/app/models/spree/property.rb +8 -6
  35. data/app/models/spree/prototype.rb +2 -2
  36. data/app/models/spree/refund.rb +2 -2
  37. data/app/models/spree/reimbursement.rb +2 -2
  38. data/app/models/spree/return_authorization.rb +2 -2
  39. data/app/models/spree/return_item.rb +1 -1
  40. data/app/models/spree/role.rb +1 -1
  41. data/app/models/spree/shipment.rb +4 -4
  42. data/app/models/spree/shipping_category.rb +2 -2
  43. data/app/models/spree/shipping_method.rb +2 -2
  44. data/app/models/spree/stock/estimator.rb +1 -1
  45. data/app/models/spree/stock_item.rb +3 -3
  46. data/app/models/spree/stock_location.rb +7 -2
  47. data/app/models/spree/stock_movement.rb +1 -1
  48. data/app/models/spree/stock_transfer.rb +4 -4
  49. data/app/models/spree/store.rb +3 -5
  50. data/app/models/spree/store_credit.rb +3 -3
  51. data/app/models/spree/store_favicon_image.rb +11 -2
  52. data/app/models/spree/tax_category.rb +1 -1
  53. data/app/models/spree/tax_rate.rb +1 -1
  54. data/app/models/spree/taxon.rb +23 -7
  55. data/app/models/spree/taxon_image.rb +2 -2
  56. data/app/models/spree/taxonomy.rb +5 -5
  57. data/app/models/spree/variant.rb +11 -6
  58. data/app/models/spree/wished_item.rb +1 -1
  59. data/app/models/spree/wishlist.rb +2 -2
  60. data/app/models/spree/zone.rb +2 -2
  61. data/app/services/spree/addresses/update.rb +1 -0
  62. data/app/services/spree/seeds/all.rb +15 -13
  63. data/app/services/spree/seeds/stores.rb +2 -2
  64. data/app/sorters/spree/products/sort.rb +1 -1
  65. data/config/initializers/mobility.rb +1 -0
  66. data/config/routes.rb +7 -8
  67. data/db/migrate/20210929090344_create_stock_item_stock_location_id_variant_id_coalesce_deleted_at_unique_index.rb +1 -28
  68. data/db/migrate/20230103144439_create_option_type_translations.rb +0 -1
  69. data/db/migrate/20230103151034_create_option_value_translations.rb +0 -1
  70. data/db/migrate/20230109084253_create_product_property_translations.rb +0 -1
  71. data/db/migrate/20230109105943_create_property_translations.rb +0 -2
  72. data/db/migrate/20230110142344_backfill_friendly_id_slug_locale.rb +2 -8
  73. data/db/migrate/20240303174340_fix_spree_stock_item_unique_index.rb +35 -0
  74. data/db/migrate/20240514105216_add_weight_and_dimension_units_to_spree_variants.rb +6 -0
  75. data/lib/generators/spree/custom_authentication/custom_authentication_generator.rb +23 -0
  76. data/lib/generators/spree/{custom_user → custom_authentication}/templates/authentication_helpers.rb.tt +1 -14
  77. data/lib/generators/spree/custom_user/custom_user_generator.rb +3 -8
  78. data/lib/generators/spree/custom_user/templates/current_user_helpers.rb.tt +15 -0
  79. data/lib/generators/spree/custom_user/templates/migration.rb.tt +2 -2
  80. data/lib/generators/spree/dummy/dummy_generator.rb +1 -6
  81. data/lib/generators/spree/dummy/templates/rails/database.yml +19 -21
  82. data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
  83. data/lib/generators/spree/install/templates/config/initializers/spree.rb +25 -0
  84. data/lib/spree/core/configuration.rb +11 -25
  85. data/lib/spree/core/controller_helpers/locale.rb +5 -1
  86. data/lib/spree/core/engine.rb +4 -1
  87. data/lib/spree/core/preferences/runtime_configuration.rb +43 -0
  88. data/lib/spree/core/product_duplicator.rb +2 -0
  89. data/lib/spree/core/product_filters.rb +9 -2
  90. data/lib/spree/core/runtime_configuration.rb +9 -0
  91. data/lib/spree/core/version.rb +1 -1
  92. data/lib/spree/core/webhooks.rb +13 -0
  93. data/lib/spree/core.rb +7 -0
  94. data/lib/spree/money.rb +38 -5
  95. data/lib/spree/testing_support/authorization_helpers.rb +3 -1
  96. data/lib/spree/testing_support/common_rake.rb +7 -18
  97. data/spree_core.gemspec +7 -7
  98. metadata +47 -50
  99. data/db/migrate/20220715120222_change_product_name_null_to_true.rb +0 -5
  100. data/db/migrate/20220718100948_change_taxon_name_null_to_true.rb +0 -5
  101. data/db/migrate/20220804073928_transfer_data_to_translatable_tables.rb +0 -66
  102. data/db/migrate/20230109094907_transfer_options_data_to_translatable_tables.rb +0 -58
  103. data/db/migrate/20230109110840_transfer_property_data_to_translatable_tables.rb +0 -59
  104. data/db/migrate/20230111122511_transfer_product_and_taxon_data_to_translatable_tables.rb +0 -82
  105. data/db/migrate/20230117120430_allow_null_taxonomy_name.rb +0 -5
  106. data/db/migrate/20230117121303_transfer_taxonomy_data_to_translatable_tables.rb +0 -11
  107. data/db/migrate/20230210142849_transfer_store_data_to_translatable_tables.rb +0 -11
  108. data/db/migrate/20230514162157_add_index_on_locale_and_permalink_to_spree_taxons.rb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6a4a6d385eee45a295fc9d8fc753c8db920daf30a0362914b665d4547c207b52
4
- data.tar.gz: e4db8012d7d6485aa06cf5f097aa8affbf329f8842d355d8e0b0d37a0a1e0d80
3
+ metadata.gz: fb9614d2e37d1c4c04ad71985912a54e12c579ba21266bbec33d95d383bf03f4
4
+ data.tar.gz: 7cc25cd0d5e067d97c30a9932cde2a1e02cc3826ba37d98ec14aa6ad5cd8f6ac
5
5
  SHA512:
6
- metadata.gz: 5ae8ad5ec953dd545a91b55e2aa1e06476667fec495b30d1c83fb90a702ff1ac545b79b7f8e7b13c340cd3f5c834db574f30c620854ac911e2eb5a0f9bb4171a
7
- data.tar.gz: e9a19fab07b1ad481e4bc9bfc01547e90cd6d826325691d59372dfe0d06917a0a25f9430b17031f9c63162180f953c799ef77d7024bec033802103247583891b
6
+ metadata.gz: 8e15d6b8da8503742847b455d084c6fd067fde3fc613605707f6c576a9e169cd9b410e2d6755554f2eef05fb622f0b5dd01533372bacc4b9d2f57407f45dac8e
7
+ data.tar.gz: 02e24962d02e6c6665c9d9a8292b9365353fc08170dd7c0697cf6d0234a4d2b22d0b61e0e6d035c2a4ec3f4c6d6b5eb453ae0a5dffae3739e7382ed83c80645d
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2007-2015, Spree Commerce, Inc. and other contributors
1
+ Copyright (c) 2007-2024, Spree Commerce, Inc., Spark Solutuons Sp. z o.o. and other contributors
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without modification,
@@ -65,9 +65,13 @@ module Spree
65
65
  def by_parent_permalink(taxons)
66
66
  return taxons unless parent_permalink?
67
67
 
68
- taxons.joins(:parent).
69
- join_translation_table(Taxon, 'parents_spree_taxons').
70
- where(["#{Taxon.translation_table_alias}.permalink = ?", parent_permalink])
68
+ if Spree.use_translations?
69
+ taxons.joins(:parent).
70
+ join_translation_table(Taxon, 'parents_spree_taxons').
71
+ where(["#{Taxon.translation_table_alias}.permalink = ?", parent_permalink])
72
+ else
73
+ taxons.joins(:parent).where(parent: { permalink: parent_permalink })
74
+ end
71
75
  end
72
76
 
73
77
  def by_taxonomy(taxons)
@@ -6,7 +6,7 @@ module Spree
6
6
  scope :active, -> { where(active: true) }
7
7
  default_scope { order(Arel.sql("LOWER(#{table_name}.name)")) }
8
8
 
9
- include UniqueName
9
+ include Spree::UniqueName
10
10
  end
11
11
  end
12
12
  end
@@ -33,15 +33,15 @@ module Spree
33
33
 
34
34
  def self.property_conditions(property)
35
35
  properties_table = Property.table_name
36
- property_translations_table = Property.translation_table_alias
36
+
37
37
  case property
38
38
  when Property then { "#{properties_table}.id" => property.id }
39
39
  when Integer then { "#{properties_table}.id" => property }
40
40
  else
41
41
  if Property.column_for_attribute('id').type == :uuid
42
- ["#{property_translations_table.name} = ? OR #{properties_table.id} = ?", property, property]
42
+ ["#{properties_table}.name = ? OR #{properties_table}.id = ?", property, property]
43
43
  else
44
- { "#{property_translations_table}.name" => property }
44
+ { "#{properties_table}.name" => property }
45
45
  end
46
46
  end
47
47
  end
@@ -127,25 +127,29 @@ module Spree
127
127
 
128
128
  # a scope that finds all products having property specified by name, object or id
129
129
  add_search_scope :with_property do |property|
130
- joins(:properties).join_translation_table(Property).where(property_conditions(property))
130
+ joins(:properties).where(property_conditions(property))
131
131
  end
132
132
 
133
133
  # a simple test for product with a certain property-value pairing
134
134
  # note that it can test for properties with NULL values, but not for absent values
135
135
  add_search_scope :with_property_value do |property, value|
136
- joins(:properties).
137
- join_translation_table(Property).
138
- join_translation_table(ProductProperty).
139
- where("#{ProductProperty.translation_table_alias}.value = ?", value).
140
- where(property_conditions(property))
136
+ if Spree.use_translations?
137
+ joins(:properties).
138
+ join_translation_table(Property).
139
+ join_translation_table(ProductProperty).
140
+ where("#{ProductProperty.translation_table_alias}.value = ?", value).
141
+ where(property_conditions(property))
142
+ else
143
+ joins(:properties).
144
+ where("#{ProductProperty.table_name}.value = ?", value).
145
+ where(property_conditions(property))
146
+ end
141
147
  end
142
148
 
143
149
  add_search_scope :with_property_values do |property_filter_param, property_values|
144
150
  joins(product_properties: :property).
145
- join_translation_table(Property).
146
- join_translation_table(ProductProperty).
147
- where(Property.translation_table_alias => { filter_param: property_filter_param }).
148
- where(ProductProperty.translation_table_alias => { filter_param: property_values.map(&:parameterize) })
151
+ where(Property.table_name => { filter_param: property_filter_param }).
152
+ where(ProductProperty.table_name => { filter_param: property_values.map(&:parameterize) })
149
153
  end
150
154
 
151
155
  add_search_scope :with_option do |option|
@@ -156,9 +160,7 @@ module Spree
156
160
  elsif OptionType.column_for_attribute('id').type == :uuid
157
161
  joins(:option_types).where(spree_option_types: { name: option }).or(Product.joins(:option_types).where(spree_option_types: { id: option }))
158
162
  else
159
- joins(:option_types).
160
- join_translation_table(OptionType).
161
- where(OptionType.translation_table_alias => { name: option })
163
+ joins(:option_types).where(OptionType.table_name => { name: option })
162
164
  end
163
165
  end
164
166
 
@@ -179,9 +181,7 @@ module Spree
179
181
 
180
182
  group("#{Spree::Product.table_name}.id").
181
183
  joins(variants_including_master: :option_values).
182
- join_translation_table(Spree::OptionValue).
183
- where(Spree::OptionValue.translation_table_alias => { name: value },
184
- Spree::OptionValue.table_name => { option_type_id: option_type_id })
184
+ where(Spree::OptionValue.table_name => { name: value, option_type_id: option_type_id })
185
185
  end
186
186
 
187
187
  # Finds all products which have either:
@@ -5,11 +5,13 @@ module Spree
5
5
  included do
6
6
  belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address',
7
7
  optional: true
8
- alias_attribute :billing_address, :bill_address
8
+ alias_method :billing_address, :bill_address
9
+ alias_method :billing_address=, :bill_address=
9
10
 
10
11
  belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address',
11
12
  optional: true
12
- alias_attribute :shipping_address, :ship_address
13
+ alias_method :shipping_address, :ship_address
14
+ alias_method :shipping_address=, :ship_address=
13
15
 
14
16
  accepts_nested_attributes_for :ship_address, :bill_address
15
17
 
@@ -2,8 +2,8 @@ module Spree
2
2
  class Address < Spree::Base
3
3
  require 'validates_zipcode'
4
4
 
5
- include Metadata
6
- if defined?(Spree::Webhooks)
5
+ include Spree::Metadata
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
  if defined?(Spree::Security::Addresses)
@@ -68,25 +68,6 @@ module Spree
68
68
  self.whitelisted_ransackable_attributes = ADDRESS_FIELDS
69
69
  self.whitelisted_ransackable_associations = %w[country state user]
70
70
 
71
- def self.build_default
72
- Spree::Deprecation.warn(<<-DEPRECATION, caller)
73
- `Address#build_default` is deprecated and will be removed in Spree 5.0.
74
- Please use standard rails `Address.new(country: current_store.default_country)`
75
- DEPRECATION
76
- new(country: Spree::Country.default)
77
- end
78
-
79
- def self.default(user = nil, kind = 'bill')
80
- Spree::Deprecation.warn(<<-DEPRECATION, caller)
81
- `Address#default` is deprecated and will be removed in Spree 5.0.
82
- DEPRECATION
83
- if user && user_address = user.public_send(:"#{kind}_address")
84
- user_address.clone
85
- else
86
- build_default
87
- end
88
- end
89
-
90
71
  def self.required_fields
91
72
  Spree::Address.validators.map do |v|
92
73
  v.is_a?(ActiveModel::Validations::PresenceValidator) ? v.attributes : []
@@ -1,8 +1,8 @@
1
1
  module Spree
2
2
  class Asset < Spree::Base
3
3
  include Support::ActiveStorage
4
- include Metadata
5
- if defined?(Spree::Webhooks)
4
+ include Spree::Metadata
5
+ if defined?(Spree::Webhooks::HasWebhooks)
6
6
  include Spree::Webhooks::HasWebhooks
7
7
  end
8
8
 
@@ -2,7 +2,7 @@ require_dependency 'spree/calculator'
2
2
 
3
3
  module Spree
4
4
  class Calculator::DefaultTax < Calculator
5
- include VatPriceCalculation
5
+ include Spree::VatPriceCalculation
6
6
  def self.description
7
7
  Spree.t(:default_tax)
8
8
  end
@@ -1,9 +1,9 @@
1
1
  module Spree
2
2
  class CmsPage < Base
3
- include SingleStoreResource
4
- include DisplayLink
3
+ include Spree::SingleStoreResource
4
+ include Spree::DisplayLink
5
5
 
6
- if defined?(Spree::Webhooks)
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
 
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class CmsSection < Base
3
- include DisplayLink
3
+ include Spree::DisplayLink
4
4
 
5
5
  acts_as_list scope: :cms_page
6
6
  belongs_to :cms_page, touch: true
@@ -1,9 +1,5 @@
1
1
  module Spree
2
2
  class Country < Spree::Base
3
- # we need to have this callback before any dependent: :destroy associations
4
- # https://github.com/rails/rails/issues/3458
5
- # before_destroy :ensure_not_default
6
-
7
3
  has_many :addresses, dependent: :restrict_with_error
8
4
  has_many :states,
9
5
  -> { order name: :asc },
@@ -18,17 +14,6 @@ module Spree
18
14
 
19
15
  validates :name, :iso_name, :iso, :iso3, presence: true, uniqueness: { case_sensitive: false, scope: spree_base_uniqueness_scope }
20
16
 
21
- def self.default(store = nil)
22
- Spree::Deprecation.warn(<<-DEPRECATION, caller)
23
- `Country#default` is deprecated and will be removed in Spree 5.0.
24
- Please use `current_store.default_country` instead
25
- DEPRECATION
26
- store ||= Spree::Store.default
27
- country_id = store.default_country_id
28
- default = find_by(id: country_id) if country_id.present?
29
- default || find_by(iso: 'US') || first
30
- end
31
-
32
17
  def self.by_iso(iso)
33
18
  where(['LOWER(iso) = ?', iso.downcase]).or(where(['LOWER(iso3) = ?', iso.downcase])).take
34
19
  end
@@ -45,16 +30,5 @@ module Spree
45
30
  def to_s
46
31
  name
47
32
  end
48
-
49
- private
50
-
51
- def ensure_not_default
52
- Spree::Deprecation.warn('Country#ensure_not_default is deprecated and will be removed in Spree v5')
53
-
54
- if id.eql?(Spree::Config[:default_country_id])
55
- errors.add(:base, Spree.t(:default_country_cannot_be_deleted))
56
- throw(:abort)
57
- end
58
- end
59
33
  end
60
34
  end
@@ -1,8 +1,8 @@
1
1
  module Spree
2
2
  class CreditCard < Spree::Base
3
3
  include ActiveMerchant::Billing::CreditCardMethods
4
- include Metadata
5
- if defined?(Spree::Webhooks)
4
+ include Spree::Metadata
5
+ if defined?(Spree::Webhooks::HasWebhooks)
6
6
  include Spree::Webhooks::HasWebhooks
7
7
  end
8
8
  if defined?(Spree::Security::CreditCards)
@@ -99,13 +99,15 @@ module Spree
99
99
  def cc_type=(type)
100
100
  self[:cc_type] = case type
101
101
  when 'mastercard', 'maestro' then 'master'
102
- when 'amex' then 'american_express'
102
+ when 'amex' then 'american_express'
103
103
  when 'dinersclub' then 'diners_club'
104
104
  when '' then try_type_from_number
105
105
  else type
106
106
  end
107
107
  end
108
108
 
109
+ alias_method :brand=, :cc_type=
110
+
109
111
  def verification_value=(value)
110
112
  @verification_value = value.to_s.gsub(/\s/, '')
111
113
  end
@@ -1,9 +1,9 @@
1
1
  module Spree
2
2
  class CustomerReturn < Spree::Base
3
3
  include Spree::Core::NumberGenerator.new(prefix: 'CR', length: 9)
4
- include NumberIdentifier
5
- include Metadata
6
- if defined?(Spree::Webhooks)
4
+ include Spree::NumberIdentifier
5
+ include Spree::Metadata
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
 
@@ -3,7 +3,7 @@ module Spree
3
3
  belongs_to :variant
4
4
  has_many :digital_links, dependent: :destroy
5
5
 
6
- if defined?(Spree::Webhooks)
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
 
@@ -6,7 +6,7 @@ module Spree
6
6
  has_secure_token
7
7
  end
8
8
 
9
- if defined?(Spree::Webhooks)
9
+ if defined?(Spree::Webhooks::HasWebhooks)
10
10
  include Spree::Webhooks::HasWebhooks
11
11
  end
12
12
  if defined?(Spree::Security::DigitalLinks)
@@ -1,8 +1,8 @@
1
1
  module Spree
2
2
  class Image < Asset
3
- include Configuration::ActiveStorage
3
+ include Spree::Image::Configuration::ActiveStorage
4
4
  include Rails.application.routes.url_helpers
5
- include ::Spree::ImageMethods
5
+ include Spree::ImageMethods
6
6
 
7
7
  # In Rails 5.x class constants are being undefined/redefined during the code reloading process
8
8
  # in a rails development environment, after which the actual ruby objects stored in those class constants
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class InventoryUnit < Spree::Base
3
- if defined?(Spree::Webhooks)
3
+ if defined?(Spree::Webhooks::HasWebhooks)
4
4
  include Spree::Webhooks::HasWebhooks
5
5
  end
6
6
 
@@ -1,9 +1,9 @@
1
1
  # Default implementation of User. This class is intended to be modified by extensions (ex. spree_auth_devise)
2
2
  module Spree
3
3
  class LegacyUser < Spree::Base
4
- include UserAddress
5
- include UserPaymentSource
6
- include UserMethods
4
+ include Spree::UserAddress
5
+ include Spree::UserPaymentSource
6
+ include Spree::UserMethods
7
7
  include Spree::Metadata
8
8
 
9
9
  self.table_name = 'spree_users'
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class LineItem < Spree::Base
3
- include Metadata
4
- if defined?(Spree::Webhooks)
3
+ include Spree::Metadata
4
+ if defined?(Spree::Webhooks::HasWebhooks)
5
5
  include Spree::Webhooks::HasWebhooks
6
6
  end
7
7
 
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class Menu < Spree::Base
3
- include SingleStoreResource
4
- if defined?(Spree::Webhooks)
3
+ include Spree::SingleStoreResource
4
+ if defined?(Spree::Webhooks::HasWebhooks)
5
5
  include Spree::Webhooks::HasWebhooks
6
6
  end
7
7
 
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class MenuItem < Spree::Base
3
3
  include Spree::DisplayLink
4
- if defined?(Spree::Webhooks)
4
+ if defined?(Spree::Webhooks::HasWebhooks)
5
5
  include Spree::Webhooks::HasWebhooks
6
6
  end
7
7
 
@@ -1,14 +1,14 @@
1
1
  module Spree
2
2
  class OptionType < Spree::Base
3
- include UniqueName
4
- include Metadata
5
- include TranslatableResource
6
- if defined?(Spree::Webhooks)
3
+ include Spree::UniqueName
4
+ include Spree::Metadata
5
+ include Spree::TranslatableResource
6
+ if defined?(Spree::Webhooks::HasWebhooks)
7
7
  include Spree::Webhooks::HasWebhooks
8
8
  end
9
9
 
10
- TRANSLATABLE_FIELDS = %i[name presentation].freeze
11
- translates(*TRANSLATABLE_FIELDS)
10
+ TRANSLATABLE_FIELDS = %i[presentation].freeze
11
+ translates(*TRANSLATABLE_FIELDS, column_fallback: true)
12
12
 
13
13
  acts_as_list
14
14
  auto_strip_attributes :name, :presentation
@@ -1,13 +1,13 @@
1
1
  module Spree
2
2
  class OptionValue < Spree::Base
3
- include Metadata
4
- include TranslatableResource
5
- if defined?(Spree::Webhooks)
3
+ include Spree::Metadata
4
+ include Spree::TranslatableResource
5
+ if defined?(Spree::Webhooks::HasWebhooks)
6
6
  include Spree::Webhooks::HasWebhooks
7
7
  end
8
8
 
9
- TRANSLATABLE_FIELDS = %i[name presentation].freeze
10
- translates(*TRANSLATABLE_FIELDS)
9
+ TRANSLATABLE_FIELDS = %i[presentation].freeze
10
+ translates(*TRANSLATABLE_FIELDS, column_fallback: true)
11
11
 
12
12
  belongs_to :option_type, class_name: 'Spree::OptionType', touch: true, inverse_of: :option_values
13
13
 
@@ -20,12 +20,12 @@ module Spree
20
20
  include Spree::Core::NumberGenerator.new(prefix: 'R')
21
21
  include Spree::Core::TokenGenerator
22
22
 
23
- include NumberIdentifier
24
- include NumberAsParam
25
- include SingleStoreResource
26
- include MemoizedData
23
+ include Spree::NumberIdentifier
24
+ include Spree::NumberAsParam
25
+ include Spree::SingleStoreResource
26
+ include Spree::MemoizedData
27
27
  include Spree::Metadata
28
- if defined?(Spree::Webhooks)
28
+ if defined?(Spree::Webhooks::HasWebhooks)
29
29
  include Spree::Webhooks::HasWebhooks
30
30
  end
31
31
  if defined?(Spree::Security::Orders)
@@ -102,11 +102,13 @@ module Spree
102
102
 
103
103
  belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address',
104
104
  optional: true, dependent: :destroy
105
- alias_attribute :billing_address, :bill_address
105
+ alias_method :billing_address, :bill_address
106
+ alias_method :billing_address=, :bill_address=
106
107
 
107
108
  belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address',
108
109
  optional: true, dependent: :destroy
109
- alias_attribute :shipping_address, :ship_address
110
+ alias_method :shipping_address, :ship_address
111
+ alias_method :shipping_address=, :ship_address=
110
112
 
111
113
  belongs_to :store, class_name: 'Spree::Store'
112
114
 
@@ -3,10 +3,10 @@ require_dependency 'spree/payment/processing'
3
3
  module Spree
4
4
  class Payment < Spree::Base
5
5
  include Spree::Core::NumberGenerator.new(prefix: 'P', letters: true, length: 7)
6
- include NumberIdentifier
7
- include NumberAsParam
8
- include Metadata
9
- if defined?(Spree::Webhooks)
6
+ include Spree::NumberIdentifier
7
+ include Spree::NumberAsParam
8
+ include Spree::Metadata
9
+ if defined?(Spree::Webhooks::HasWebhooks)
10
10
  include Spree::Webhooks::HasWebhooks
11
11
  end
12
12
  if defined?(Spree::Security::Payments)
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class PaymentCaptureEvent < Spree::Base
3
- if defined?(Spree::Webhooks)
3
+ if defined?(Spree::Webhooks::HasWebhooks)
4
4
  include Spree::Webhooks::HasWebhooks
5
5
  end
6
6
 
@@ -3,7 +3,7 @@ module Spree
3
3
  acts_as_paranoid
4
4
  acts_as_list
5
5
 
6
- include MultiStoreResource
6
+ include Spree::MultiStoreResource
7
7
  include Spree::Metadata
8
8
  if defined?(Spree::Security::PaymentMethods)
9
9
  include Spree::Security::PaymentMethods
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class PaymentSource < Spree::Base
3
- include Metadata
3
+ include Spree::Metadata
4
4
 
5
5
  belongs_to :payment_method, class_name: 'Spree::PaymentMethod'
6
6
  belongs_to :user, class_name: 'Spree::User', optional: true
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class Price < Spree::Base
3
- include VatPriceCalculation
4
- if defined?(Spree::Webhooks)
3
+ include Spree::VatPriceCalculation
4
+ if defined?(Spree::Webhooks::HasWebhooks)
5
5
  include Spree::Webhooks::HasWebhooks
6
6
  end
7
7
 
@@ -46,7 +46,9 @@ module Spree
46
46
  end
47
47
 
48
48
  alias_attribute :price, :amount
49
+ alias_method :price=, :amount=
49
50
  alias_attribute :compare_at_price, :compare_at_amount
51
+ alias_method :compare_at_price=, :compare_at_amount=
50
52
 
51
53
  def price_including_vat_for(price_options)
52
54
  options = price_options.merge(tax_category: variant.tax_category)
@@ -21,13 +21,13 @@
21
21
  module Spree
22
22
  class Product < Spree::Base
23
23
  extend FriendlyId
24
- include ProductScopes
25
- include MultiStoreResource
26
- include TranslatableResource
27
- include TranslatableResourceSlug
28
- include MemoizedData
29
- include Metadata
30
- if defined?(Spree::Webhooks)
24
+ include Spree::ProductScopes
25
+ include Spree::MultiStoreResource
26
+ include Spree::TranslatableResource
27
+ include Spree::TranslatableResourceSlug
28
+ include Spree::MemoizedData
29
+ include Spree::Metadata
30
+ if defined?(Spree::Webhooks::HasWebhooks)
31
31
  include Spree::Webhooks::HasWebhooks
32
32
  end
33
33
  if defined?(Spree::VendorConcern)
@@ -39,7 +39,7 @@ module Spree
39
39
  purchasable? in_stock? backorderable?]
40
40
 
41
41
  TRANSLATABLE_FIELDS = %i[name description slug meta_description meta_keywords meta_title].freeze
42
- translates(*TRANSLATABLE_FIELDS)
42
+ translates(*TRANSLATABLE_FIELDS, column_fallback: true)
43
43
 
44
44
  self::Translation.class_eval do
45
45
  before_save :set_slug
@@ -332,16 +332,17 @@ module Spree
332
332
  end
333
333
 
334
334
  def property(property_name)
335
- product_properties.joins(:property).
336
- join_translation_table(Property).
337
- find_by(Property.translation_table_alias => { name: property_name }).try(:value)
335
+ product_properties.joins(:property).find_by(Property.table_name => { name: property_name }).try(:value)
338
336
  end
339
337
 
340
338
  def set_property(property_name, property_value, property_presentation = property_name)
341
339
  ApplicationRecord.transaction do
342
340
  # Manual first_or_create to work around Mobility bug
343
341
  property = if Property.where(name: property_name).exists?
344
- Property.where(name: property_name).first
342
+ existing_property = Property.where(name: property_name).first
343
+ existing_property.presentation ||= property_presentation
344
+ existing_property.save
345
+ existing_property
345
346
  else
346
347
  Property.create(name: property_name, presentation: property_presentation)
347
348
  end
@@ -375,16 +376,24 @@ module Spree
375
376
  end
376
377
 
377
378
  def brand
378
- @brand ||= taxons.joins(:taxonomy).
379
- join_translation_table(Taxonomy).
380
- find_by(Taxonomy.translation_table_alias => { name: Spree.t(:taxonomy_brands_name) })
379
+ @brand ||= if Spree.use_translations?
380
+ taxons.joins(:taxonomy).
381
+ join_translation_table(Taxonomy).
382
+ find_by(Taxonomy.translation_table_alias => { name: Spree.t(:taxonomy_brands_name) })
383
+ else
384
+ taxons.joins(:taxonomy).find_by(Taxonomy.table_name => { name: Spree.t(:taxonomy_brands_name) })
385
+ end
381
386
  end
382
387
 
383
388
  def category
384
- @category ||= taxons.joins(:taxonomy).
385
- join_translation_table(Taxonomy).
386
- order(depth: :desc).
387
- find_by(Taxonomy.translation_table_alias => { name: Spree.t(:taxonomy_categories_name) })
389
+ @category ||= if Spree.use_translations?
390
+ taxons.joins(:taxonomy).
391
+ join_translation_table(Taxonomy).
392
+ order(depth: :desc).
393
+ find_by(Taxonomy.translation_table_alias => { name: Spree.t(:taxonomy_categories_name) })
394
+ else
395
+ taxons.joins(:taxonomy).order(depth: :desc).find_by(Taxonomy.table_name => { name: Spree.t(:taxonomy_categories_name) })
396
+ end
388
397
  end
389
398
 
390
399
  def taxons_for_store(store)
@@ -460,6 +469,8 @@ module Spree
460
469
  # punch slug with date prefix to allow reuse of original
461
470
  return if frozen?
462
471
 
472
+ update_column(:slug, "#{Time.current.to_i}_#{slug}"[0..254])
473
+
463
474
  translations.with_deleted.each do |t|
464
475
  t.update_column :slug, "#{Time.current.to_i}_#{t.slug}"[0..254]
465
476
  end