spree_core 4.4.0 → 4.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/finders/spree/products/find.rb +1 -3
- data/app/finders/spree/taxons/find.rb +1 -1
- data/app/helpers/spree/base_helper.rb +12 -9
- data/app/helpers/spree/locale_helper.rb +6 -2
- data/app/helpers/spree/products_helper.rb +9 -4
- data/app/jobs/spree/variants/remove_from_incomplete_orders_job.rb +9 -0
- data/app/jobs/spree/variants/remove_line_item_job.rb +9 -0
- data/app/models/concerns/spree/calculated_adjustments.rb +1 -1
- data/app/models/concerns/spree/display_link.rb +17 -29
- data/app/models/concerns/spree/image_methods.rb +21 -9
- data/app/models/concerns/spree/metadata.rb +2 -2
- data/app/models/concerns/spree/product_scopes.rb +10 -8
- data/app/models/spree/address.rb +7 -1
- data/app/models/spree/asset/support/active_storage.rb +3 -2
- data/app/models/spree/asset.rb +3 -0
- data/app/models/spree/cms_page.rb +4 -0
- data/app/models/spree/cms_section.rb +12 -12
- data/app/models/spree/cms_section_image.rb +15 -0
- data/app/models/spree/cms_section_image_one.rb +4 -0
- data/app/models/spree/cms_section_image_three.rb +4 -0
- data/app/models/spree/cms_section_image_two.rb +4 -0
- data/app/models/spree/credit_card.rb +10 -4
- data/app/models/spree/customer_return.rb +3 -0
- data/app/models/spree/digital.rb +4 -0
- data/app/models/spree/digital_link.rb +7 -0
- data/app/models/spree/fulfilment_changer.rb +1 -1
- data/app/models/spree/gateway/bogus.rb +1 -1
- data/app/models/spree/icon.rb +5 -1
- data/app/models/spree/image/configuration/active_storage.rb +5 -1
- data/app/models/spree/image.rb +3 -3
- data/app/models/spree/inventory_unit.rb +5 -2
- data/app/models/spree/legacy_user.rb +1 -2
- data/app/models/spree/line_item.rb +4 -1
- data/app/models/spree/linkable/homepage.rb +3 -0
- data/app/models/spree/linkable/uri.rb +3 -0
- data/app/models/spree/log_entry.rb +4 -0
- data/app/models/spree/menu.rb +3 -0
- data/app/models/spree/menu_item.rb +7 -11
- data/app/models/spree/option_type.rb +4 -0
- data/app/models/spree/option_value.rb +5 -0
- data/app/models/spree/order/address_book.rb +1 -0
- data/app/models/spree/order.rb +11 -2
- data/app/models/spree/order_merger.rb +1 -1
- data/app/models/spree/payment/processing.rb +1 -1
- data/app/models/spree/payment.rb +7 -1
- data/app/models/spree/payment_capture_event.rb +4 -0
- data/app/models/spree/payment_method/store_credit.rb +1 -1
- data/app/models/spree/payment_method.rb +3 -0
- data/app/models/spree/payment_source.rb +10 -0
- data/app/models/spree/preference.rb +4 -0
- data/app/models/spree/price.rb +3 -0
- data/app/models/spree/product.rb +56 -14
- data/app/models/spree/product_property.rb +1 -0
- data/app/models/spree/promotion/rules/option_value.rb +2 -2
- data/app/models/spree/promotion.rb +6 -0
- data/app/models/spree/promotion_rule.rb +1 -1
- data/app/models/spree/promotion_rule_user.rb +1 -1
- data/app/models/spree/property.rb +3 -0
- data/app/models/spree/prototype.rb +3 -0
- data/app/models/spree/refund.rb +8 -0
- data/app/models/spree/reimbursement.rb +3 -0
- data/app/models/spree/return_authorization.rb +3 -0
- data/app/models/spree/return_item.rb +4 -0
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/role_user.rb +1 -1
- data/app/models/spree/shipment.rb +7 -0
- data/app/models/spree/shipping_category.rb +3 -0
- data/app/models/spree/shipping_method.rb +6 -0
- data/app/models/spree/state_change.rb +1 -1
- data/app/models/spree/stock/availability_validator.rb +9 -3
- data/app/models/spree/stock/content_item.rb +1 -1
- data/app/models/spree/stock/quantifier.rb +1 -1
- data/app/models/spree/stock_item.rb +5 -0
- data/app/models/spree/stock_location.rb +19 -5
- data/app/models/spree/stock_movement.rb +4 -0
- data/app/models/spree/stock_transfer.rb +3 -0
- data/app/models/spree/store.rb +19 -14
- data/app/models/spree/store_credit.rb +4 -1
- data/app/models/spree/store_favicon_image.rb +17 -0
- data/app/models/spree/store_logo.rb +9 -0
- data/app/models/spree/store_mailer_logo.rb +13 -0
- data/app/models/spree/tax_category.rb +6 -0
- data/app/models/spree/tax_rate.rb +6 -1
- data/app/models/spree/taxon.rb +4 -1
- data/app/models/spree/taxon_image/configuration/active_storage.rb +5 -1
- data/app/models/spree/taxon_image.rb +3 -2
- data/app/models/spree/taxonomy.rb +4 -1
- data/app/models/spree/variant.rb +43 -14
- data/app/models/spree/wished_item.rb +4 -0
- data/app/models/spree/wishlist.rb +4 -1
- data/app/models/spree/zone.rb +3 -0
- data/app/services/spree/addresses/create.rb +1 -1
- data/app/services/spree/addresses/update.rb +7 -2
- data/app/services/spree/cart/remove_line_item.rb +1 -0
- data/app/services/spree/variants/remove_line_items.rb +15 -0
- data/config/locales/en.yml +5 -2
- data/config/routes.rb +43 -0
- data/db/migrate/20211201202851_update_linkable_resource_types.rb +10 -0
- data/db/migrate/20211203082008_add_settings_to_payment_methods.rb +11 -0
- data/db/migrate/20211229162122_disable_propagate_all_variants_by_default.rb +5 -0
- data/db/migrate/20220103082046_add_status_and_make_active_at_to_spree_products.rb +7 -0
- data/db/migrate/20220106230929_add_internal_note_to_spree_orders.rb +5 -0
- data/db/migrate/20220113052823_create_payment_sources.rb +22 -0
- data/db/migrate/20220117100333_add_make_active_at_to_spree_products.rb +17 -0
- data/db/migrate/20220120092821_add_metadata_to_spree_tax_rates.rb +13 -0
- data/db/migrate/20220201103922_add_first_name_and_last_name_to_spree_users.rb +9 -0
- data/db/migrate/20220222083546_add_barcode_to_spree_variants.rb +6 -0
- data/db/migrate/20220329113557_fix_cms_pages_unique_indexes.rb +8 -0
- data/db/migrate/20220613133029_add_metadata_to_spree_stock_items.rb +13 -0
- data/lib/friendly_id/paranoia.rb +4 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +13 -2
- data/lib/generators/spree/dummy/templates/package.json +12 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
- data/lib/spree/core/configuration.rb +90 -0
- data/lib/spree/core/controller_helpers/auth.rb +3 -1
- data/lib/spree/core/controller_helpers/currency.rb +7 -5
- data/lib/spree/core/controller_helpers/locale.rb +8 -6
- data/lib/spree/core/controller_helpers/order.rb +4 -2
- data/lib/spree/core/controller_helpers/search.rb +1 -1
- data/lib/spree/core/controller_helpers/store.rb +5 -3
- data/lib/spree/core/dependencies.rb +130 -0
- data/lib/spree/core/engine.rb +47 -37
- data/{app/models/spree → lib/spree/core}/preferences/configuration.rb +3 -0
- data/{app/models/spree → lib/spree/core}/preferences/preferable.rb +3 -0
- data/{app/models/spree → lib/spree/core}/preferences/preferable_class_methods.rb +0 -0
- data/{app/models/spree → lib/spree/core}/preferences/scoped_store.rb +0 -0
- data/{app/models/spree → lib/spree/core}/preferences/store.rb +0 -0
- data/lib/spree/core/search/base.rb +9 -5
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +25 -5
- data/lib/spree/permitted_attributes.rb +9 -7
- data/lib/spree/testing_support/common_rake.rb +1 -0
- data/lib/spree/testing_support/factories/favicon_image_factory.rb +9 -0
- data/lib/spree/testing_support/factories/icon_factory.rb +3 -1
- data/lib/spree/testing_support/factories/image_factory.rb +3 -1
- data/lib/spree/testing_support/factories/menu_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/order_factory.rb +2 -1
- data/lib/spree/testing_support/factories/product_factory.rb +6 -1
- data/lib/spree/testing_support/factories/product_property_factory.rb +1 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +1 -1
- data/lib/spree/testing_support/factories/role_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +3 -2
- data/lib/spree/testing_support/factories/store_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxon_image_factory.rb +3 -1
- data/lib/spree/testing_support/factories/user_factory.rb +4 -0
- data/lib/spree/testing_support/factories/variant_factory.rb +4 -0
- data/lib/spree_core.rb +2 -1
- data/lib/tasks/core.rake +12 -0
- data/spree_core.gemspec +2 -3
- metadata +63 -51
- data/app/models/friendly_id/slug_decorator.rb +0 -9
- data/app/models/spree/app_configuration.rb +0 -86
- data/lib/friendly_id/slug_rails5_patch.rb +0 -11
- data/lib/spree/core/app_dependencies.rb +0 -126
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f53d1d3ed70fd19d1ae3665df1dfabac01948cd28e71b3a68c86c8a8f7afcf1a
|
4
|
+
data.tar.gz: 87e8a6e4d121d979fadbe0d44d89d30f0f6d55c89b64d3bcd0c2354c794b9ef1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51b6d8e283837db0d607f9528f1527d8cfc46c020a804bc3f2797c392eb040d6b7081df92d52eafac617c2fff64c6e98b500912173266f4c04286f32ab5fbdac
|
7
|
+
data.tar.gz: d2305b19b0364a34e379955ce76fb453702c385f7377a23f40a65ae61f93de5a5d157bd4978c757b563c6c263f5375a32f224840129b29085af424cc00f6712d
|
@@ -4,8 +4,6 @@ module Spree
|
|
4
4
|
def initialize(scope:, params:, current_currency: nil)
|
5
5
|
@scope = scope
|
6
6
|
|
7
|
-
ActiveSupport::Deprecation.warn('`current_currency` param is deprecated and will be removed in Spree 5') if current_currency
|
8
|
-
|
9
7
|
if current_currency.present?
|
10
8
|
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
11
9
|
`current_currency` param is deprecated and will be removed in Spree 5.
|
@@ -257,7 +255,7 @@ module Spree
|
|
257
255
|
|
258
256
|
def map_prices(prices)
|
259
257
|
prices.map do |price|
|
260
|
-
price == 'Infinity' ?
|
258
|
+
price == 'Infinity' ? BigDecimal::INFINITY : price.to_f
|
261
259
|
end
|
262
260
|
end
|
263
261
|
|
@@ -61,11 +61,11 @@ module Spree
|
|
61
61
|
DEPRECATION
|
62
62
|
|
63
63
|
image_path ||= if current_store.logo.attached? && current_store.logo.variable?
|
64
|
-
main_app.
|
64
|
+
main_app.cdn_image_url(current_store.logo.variant(resize_to_limit: [244, 104]))
|
65
65
|
elsif current_store.logo.attached? && current_store.logo.image?
|
66
|
-
main_app.
|
66
|
+
main_app.cdn_image_url(current_store.logo)
|
67
67
|
else
|
68
|
-
|
68
|
+
'logo/spree_50.png'
|
69
69
|
end
|
70
70
|
|
71
71
|
path = spree.respond_to?(:root_path) ? spree.root_path : main_app.root_path
|
@@ -76,7 +76,11 @@ module Spree
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def spree_favicon_path
|
79
|
-
|
79
|
+
if current_store.favicon.present?
|
80
|
+
main_app.cdn_image_url(current_store.favicon)
|
81
|
+
else
|
82
|
+
url_for('favicon.ico')
|
83
|
+
end
|
80
84
|
end
|
81
85
|
|
82
86
|
def object
|
@@ -88,7 +92,7 @@ module Spree
|
|
88
92
|
|
89
93
|
if object.is_a? Spree::Product
|
90
94
|
image = default_image_for_product_or_variant(object)
|
91
|
-
og_meta['og:image'] = main_app.
|
95
|
+
og_meta['og:image'] = main_app.cdn_image_url(image.attachment) if image&.attachment
|
92
96
|
|
93
97
|
og_meta['og:url'] = spree.url_for(object) if frontend_available? # url_for product needed
|
94
98
|
og_meta['og:type'] = object.class.name.demodulize.downcase
|
@@ -163,8 +167,7 @@ module Spree
|
|
163
167
|
end
|
164
168
|
|
165
169
|
def seo_url(taxon, options = {})
|
166
|
-
options.merge(locale: locale_param)
|
167
|
-
spree.nested_taxons_path(taxon.permalink, options)
|
170
|
+
spree.nested_taxons_path(taxon.permalink, options.merge(locale: locale_param))
|
168
171
|
end
|
169
172
|
|
170
173
|
def frontend_available?
|
@@ -238,7 +241,7 @@ module Spree
|
|
238
241
|
|
239
242
|
def create_product_image_tag(image, product, options, style)
|
240
243
|
options[:alt] = image.alt.blank? ? product.name : image.alt
|
241
|
-
image_tag main_app.
|
244
|
+
image_tag main_app.cdn_image_url(image.url(style)), options
|
242
245
|
end
|
243
246
|
|
244
247
|
def define_image_method(style)
|
@@ -249,7 +252,7 @@ module Spree
|
|
249
252
|
img = if image_path.present?
|
250
253
|
create_product_image_tag image_path, product, options, style
|
251
254
|
else
|
252
|
-
|
255
|
+
inline_svg_tag 'noimage/backend-missing-image.svg', class: 'noimage', size: '60%*60%'
|
253
256
|
end
|
254
257
|
|
255
258
|
content_tag(:div, img, class: "admin-product-image-container #{style}-img")
|
@@ -15,10 +15,14 @@ module Spree
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def locale_presentation(locale)
|
18
|
-
if I18n.exists?('spree.i18n.this_file_language', locale: locale)
|
18
|
+
if I18n.exists?('spree.i18n.this_file_language', locale: locale, fallback: false)
|
19
19
|
[locale_full_name(locale), locale.to_s]
|
20
|
+
elsif defined?(SpreeI18n::Locale) && (language_name = SpreeI18n::Locale.local_language_name(locale))
|
21
|
+
["#{language_name} (#{locale})", locale.to_s]
|
22
|
+
elsif locale.to_s == 'en'
|
23
|
+
['English (US)', 'en']
|
20
24
|
else
|
21
|
-
|
25
|
+
[locale, locale.to_s]
|
22
26
|
end
|
23
27
|
end
|
24
28
|
|
@@ -76,15 +76,20 @@ module Spree
|
|
76
76
|
|
77
77
|
# will return a human readable string
|
78
78
|
def available_status(product)
|
79
|
-
|
79
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
80
|
+
`Spree::ProductsHelper#available_status` method from spree/core is deprecated and will be removed.
|
81
|
+
Please use `Spree::Admin::ProductsHelper#available_status` from spree_backend instead.
|
82
|
+
DEPRECATION
|
83
|
+
|
84
|
+
return Spree.t(:archived) if product.discontinued?
|
80
85
|
return Spree.t(:deleted) if product.deleted?
|
81
86
|
|
82
87
|
if product.available?
|
83
|
-
Spree.t(:
|
84
|
-
elsif product.
|
88
|
+
Spree.t(:active)
|
89
|
+
elsif product.make_active_at&.future?
|
85
90
|
Spree.t(:pending_sale)
|
86
91
|
else
|
87
|
-
Spree.t(:
|
92
|
+
Spree.t(:draft)
|
88
93
|
end
|
89
94
|
end
|
90
95
|
|
@@ -18,7 +18,7 @@ module Spree
|
|
18
18
|
|
19
19
|
def calculator_type=(calculator_type)
|
20
20
|
klass = calculator_type.constantize if calculator_type
|
21
|
-
self.calculator = klass.new if klass && !calculator.
|
21
|
+
self.calculator = klass.new if klass && !calculator.instance_of?(klass)
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
@@ -1,42 +1,30 @@
|
|
1
1
|
module Spree
|
2
2
|
module DisplayLink
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
belongs_to :linked_resource, polymorphic: true
|
7
|
+
|
8
|
+
def link
|
9
|
+
case linked_resource_type
|
10
|
+
when 'Spree::Taxon'
|
11
|
+
return if linked_resource&.permalink.blank?
|
7
12
|
|
8
|
-
if spree_routes.method_defined?(:nested_taxons_path)
|
9
|
-
spree_routes.nested_taxons_path(linked_resource.permalink)
|
10
|
-
else
|
11
13
|
"/#{Spree::Config[:storefront_taxons_path]}/#{linked_resource.permalink}"
|
12
|
-
|
13
|
-
|
14
|
-
return if linked_resource&.slug.blank?
|
14
|
+
when 'Spree::Product'
|
15
|
+
return if linked_resource&.slug.blank?
|
15
16
|
|
16
|
-
if spree_routes.method_defined?(:products_path)
|
17
|
-
spree_routes.product_path(linked_resource)
|
18
|
-
else
|
19
17
|
"/#{Spree::Config[:storefront_products_path]}/#{linked_resource.slug}"
|
20
|
-
|
21
|
-
|
22
|
-
return if linked_resource&.slug.blank?
|
18
|
+
when 'Spree::CmsPage'
|
19
|
+
return if linked_resource&.slug.blank?
|
23
20
|
|
24
|
-
if spree_routes.method_defined?(:page_path)
|
25
|
-
spree_routes.page_path(linked_resource.slug)
|
26
|
-
else
|
27
21
|
"/#{Spree::Config[:storefront_pages_path]}/#{linked_resource.slug}"
|
22
|
+
when 'Spree::Linkable::Homepage'
|
23
|
+
'/'
|
24
|
+
when 'Spree::Linkable::Uri'
|
25
|
+
destination
|
28
26
|
end
|
29
|
-
when 'Home Page'
|
30
|
-
'/'
|
31
|
-
when 'URL'
|
32
|
-
destination
|
33
27
|
end
|
34
28
|
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def spree_routes
|
39
|
-
Spree::Core::Engine.routes.url_helpers
|
40
|
-
end
|
41
29
|
end
|
42
30
|
end
|
@@ -2,23 +2,35 @@ module Spree
|
|
2
2
|
module ImageMethods
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
|
-
def generate_url(size:, gravity: '
|
5
|
+
def generate_url(size:, gravity: 'centre', quality: 80, background: [0, 0, 0])
|
6
6
|
return if size.blank?
|
7
|
+
|
7
8
|
size = size.gsub(/\s+/, '')
|
8
9
|
|
9
10
|
return unless size.match(/(\d+)x(\d+)/)
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
), only_path: true)
|
12
|
+
width, height = size.split('x').map(&:to_i)
|
13
|
+
gravity = translate_gravity_for_mini_magick(gravity)
|
14
|
+
|
15
|
+
# FIXME: bring back support for background color
|
16
|
+
|
17
|
+
cdn_image_url(attachment.variant(resize_and_pad: [width, height, { gravity: gravity }], saver: { quality: quality }))
|
18
18
|
end
|
19
19
|
|
20
20
|
def original_url
|
21
|
-
|
21
|
+
cdn_image_url(attachment)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def translate_gravity_for_mini_magick(gravity)
|
27
|
+
variant_processor = Rails.application.config.active_storage.variant_processor
|
28
|
+
|
29
|
+
if gravity.downcase == 'centre' && [:mini_magick, nil].include?(variant_processor)
|
30
|
+
'center'
|
31
|
+
else
|
32
|
+
gravity
|
33
|
+
end
|
22
34
|
end
|
23
35
|
end
|
24
36
|
end
|
@@ -3,8 +3,8 @@ module Spree
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
attribute :public_metadata, default: {}
|
7
|
-
attribute :private_metadata, default: {}
|
6
|
+
attribute :public_metadata, default: {}
|
7
|
+
attribute :private_metadata, default: {}
|
8
8
|
serialize :public_metadata, HashSerializer
|
9
9
|
serialize :private_metadata, HashSerializer
|
10
10
|
end
|
@@ -236,7 +236,7 @@ module Spree
|
|
236
236
|
|
237
237
|
def self.not_discontinued(only_not_discontinued = true)
|
238
238
|
if only_not_discontinued != '0' && only_not_discontinued
|
239
|
-
where(
|
239
|
+
where.not(status: 'archived')
|
240
240
|
else
|
241
241
|
all
|
242
242
|
end
|
@@ -253,9 +253,11 @@ module Spree
|
|
253
253
|
|
254
254
|
# Can't use add_search_scope for this as it needs a default argument
|
255
255
|
def self.available(available_on = nil, currency = nil)
|
256
|
-
available_on
|
257
|
-
|
258
|
-
|
256
|
+
if available_on
|
257
|
+
scope = not_discontinued.where("#{Product.quoted_table_name}.available_on <= ?", available_on)
|
258
|
+
else
|
259
|
+
scope = where(status: 'active')
|
260
|
+
end
|
259
261
|
|
260
262
|
unless Spree::Config.show_products_without_price
|
261
263
|
currency ||= Spree::Store.default.default_currency
|
@@ -282,7 +284,7 @@ module Spree
|
|
282
284
|
if user.try(:has_spree_role?, 'admin')
|
283
285
|
with_deleted
|
284
286
|
else
|
285
|
-
not_deleted.
|
287
|
+
not_deleted.where(status: 'active')
|
286
288
|
end
|
287
289
|
end
|
288
290
|
|
@@ -295,9 +297,9 @@ module Spree
|
|
295
297
|
include PgSearch::Model
|
296
298
|
|
297
299
|
if defined?(SpreeGlobalize)
|
298
|
-
pg_search_scope :search_by_name, associated_against: { translations: :name }, using: :
|
300
|
+
pg_search_scope :search_by_name, associated_against: { translations: :name }, using: { tsearch: { any_word: true, prefix: true } }
|
299
301
|
else
|
300
|
-
pg_search_scope :search_by_name, against: :name, using: :
|
302
|
+
pg_search_scope :search_by_name, against: :name, using: { tsearch: { any_word: true, prefix: true } }
|
301
303
|
end
|
302
304
|
else
|
303
305
|
def self.search_by_name(query)
|
@@ -337,7 +339,7 @@ module Spree
|
|
337
339
|
case t
|
338
340
|
when ApplicationRecord then t
|
339
341
|
else
|
340
|
-
Taxon.where(name
|
342
|
+
Taxon.where(Taxon.arel_table[:name].eq(t)).or(Taxon.where(Taxon.arel_table[:id].eq(t))).or(Taxon.where(Taxon.arel_table[:permalink].matches("%/#{t}/"))).or(Taxon.where(Taxon.arel_table[:permalink].matches("#{t}/"))).first
|
341
343
|
end
|
342
344
|
end.compact.flatten.uniq
|
343
345
|
end
|
data/app/models/spree/address.rb
CHANGED
@@ -3,6 +3,12 @@ module Spree
|
|
3
3
|
require 'validates_zipcode'
|
4
4
|
|
5
5
|
include Metadata
|
6
|
+
if defined?(Spree::Webhooks)
|
7
|
+
include Spree::Webhooks::HasWebhooks
|
8
|
+
end
|
9
|
+
if defined?(Spree::Security::Addresses)
|
10
|
+
include Spree::Security::Addresses
|
11
|
+
end
|
6
12
|
|
7
13
|
if Rails::VERSION::STRING >= '6.1'
|
8
14
|
serialize :preferences, Hash, default: {}
|
@@ -31,7 +37,7 @@ module Spree
|
|
31
37
|
|
32
38
|
belongs_to :country, class_name: 'Spree::Country'
|
33
39
|
belongs_to :state, class_name: 'Spree::State', optional: true
|
34
|
-
belongs_to :user, class_name: Spree.user_class
|
40
|
+
belongs_to :user, class_name: "::#{Spree.user_class}", optional: true
|
35
41
|
|
36
42
|
has_many :shipments, inverse_of: :address
|
37
43
|
|
@@ -8,7 +8,7 @@ module Spree
|
|
8
8
|
def url(style)
|
9
9
|
return placeholder(style) unless attachment.attached?
|
10
10
|
|
11
|
-
attachment.variant(
|
11
|
+
attachment.variant(resize_to_limit: dimensions_for_style(style))
|
12
12
|
end
|
13
13
|
|
14
14
|
def placeholder(style)
|
@@ -16,7 +16,8 @@ module Spree
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def dimensions_for_style(style)
|
19
|
-
self.class.styles.with_indifferent_access[style] || self.class.styles.with_indifferent_access[default_style]
|
19
|
+
dimensions = self.class.styles.with_indifferent_access[style] || self.class.styles.with_indifferent_access[default_style]
|
20
|
+
dimensions.split('x').map(&:to_i)
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
data/app/models/spree/asset.rb
CHANGED
@@ -2,6 +2,9 @@ module Spree
|
|
2
2
|
class Asset < Spree::Base
|
3
3
|
include Support::ActiveStorage
|
4
4
|
include Metadata
|
5
|
+
if defined?(Spree::Webhooks)
|
6
|
+
include Spree::Webhooks::HasWebhooks
|
7
|
+
end
|
5
8
|
|
6
9
|
belongs_to :viewable, polymorphic: true, touch: true
|
7
10
|
acts_as_list scope: [:viewable_id, :viewable_type]
|
@@ -7,30 +7,30 @@ module Spree
|
|
7
7
|
|
8
8
|
validate :reset_link_attributes
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
IMAGE_SIZE = ['sm', 'md', 'lg', 'xl']
|
10
|
+
has_one :image_one, class_name: 'Spree::CmsSectionImageOne', dependent: :destroy, as: :viewable
|
11
|
+
accepts_nested_attributes_for :image_one, reject_if: :all_blank
|
13
12
|
|
14
|
-
|
15
|
-
|
13
|
+
has_one :image_two, class_name: 'Spree::CmsSectionImageTwo', dependent: :destroy, as: :viewable
|
14
|
+
accepts_nested_attributes_for :image_two, reject_if: :all_blank
|
16
15
|
|
17
|
-
|
16
|
+
has_one :image_three, class_name: 'Spree::CmsSectionImageThree', dependent: :destroy, as: :viewable
|
17
|
+
accepts_nested_attributes_for :image_three, reject_if: :all_blank
|
18
|
+
|
19
|
+
Spree::CmsSectionImage::IMAGE_COUNT.each do |count|
|
20
|
+
Spree::CmsSectionImage::IMAGE_SIZE.each do |size|
|
18
21
|
define_method("img_#{count}_#{size}") do |dimensions = nil|
|
19
|
-
|
22
|
+
image = send("image_#{count}")&.attachment
|
23
|
+
return if !image&.attached? || dimensions.nil?
|
20
24
|
|
21
|
-
|
25
|
+
image.variant(resize_to_limit: dimensions.split('x').map(&:to_i))
|
22
26
|
end
|
23
27
|
end
|
24
28
|
end
|
25
29
|
|
26
|
-
belongs_to :linked_resource, polymorphic: true
|
27
|
-
|
28
30
|
default_scope { order(position: :asc) }
|
29
31
|
|
30
32
|
validates :name, :cms_page, :type, presence: true
|
31
33
|
|
32
|
-
validates :image_one, :image_two, :image_three, content_type: IMAGE_TYPES
|
33
|
-
|
34
34
|
LINKED_RESOURCE_TYPE = []
|
35
35
|
|
36
36
|
TYPES = ['Spree::Cms::Sections::HeroImage',
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Spree
|
2
|
+
class CmsSectionImage < Asset
|
3
|
+
if Spree.public_storage_service_name
|
4
|
+
has_one_attached :attachment, service: Spree.public_storage_service_name
|
5
|
+
else
|
6
|
+
has_one_attached :attachment
|
7
|
+
end
|
8
|
+
|
9
|
+
IMAGE_COUNT = ['one', 'two', 'three']
|
10
|
+
IMAGE_TYPES = ['image/png', 'image/jpg', 'image/jpeg', 'image/gif'].freeze
|
11
|
+
IMAGE_SIZE = ['sm', 'md', 'lg', 'xl']
|
12
|
+
|
13
|
+
validates :attachment, attached: true, content_type: IMAGE_TYPES
|
14
|
+
end
|
15
|
+
end
|
@@ -2,11 +2,17 @@ module Spree
|
|
2
2
|
class CreditCard < Spree::Base
|
3
3
|
include ActiveMerchant::Billing::CreditCardMethods
|
4
4
|
include Metadata
|
5
|
+
if defined?(Spree::Webhooks)
|
6
|
+
include Spree::Webhooks::HasWebhooks
|
7
|
+
end
|
8
|
+
if defined?(Spree::Security::CreditCards)
|
9
|
+
include Spree::Security::CreditCards
|
10
|
+
end
|
5
11
|
|
6
12
|
acts_as_paranoid
|
7
13
|
|
8
14
|
belongs_to :payment_method
|
9
|
-
belongs_to :user, class_name: Spree.user_class
|
15
|
+
belongs_to :user, class_name: "::#{Spree.user_class}", foreign_key: 'user_id',
|
10
16
|
optional: true
|
11
17
|
has_many :payments, as: :source
|
12
18
|
|
@@ -174,9 +180,9 @@ module Spree
|
|
174
180
|
|
175
181
|
def self.json_api_permitted_attributes
|
176
182
|
[
|
177
|
-
'number', 'month', 'year', 'expiry', 'verification_value', 'first_name', 'last_name',
|
178
|
-
'cc_type', 'gateway_customer_profile_id', 'gateway_payment_profile_id', 'last_digits',
|
179
|
-
'name', 'encrypted_data', 'address_id', 'created_at', 'updated_at', 'user_id',
|
183
|
+
'number', 'month', 'year', 'expiry', 'verification_value', 'first_name', 'last_name',
|
184
|
+
'cc_type', 'gateway_customer_profile_id', 'gateway_payment_profile_id', 'last_digits',
|
185
|
+
'name', 'encrypted_data', 'address_id', 'created_at', 'updated_at', 'user_id',
|
180
186
|
'payment_method_id', 'default', 'deleted_at'
|
181
187
|
]
|
182
188
|
end
|
@@ -3,6 +3,9 @@ module Spree
|
|
3
3
|
include Spree::Core::NumberGenerator.new(prefix: 'CR', length: 9)
|
4
4
|
include NumberIdentifier
|
5
5
|
include Metadata
|
6
|
+
if defined?(Spree::Webhooks)
|
7
|
+
include Spree::Webhooks::HasWebhooks
|
8
|
+
end
|
6
9
|
|
7
10
|
belongs_to :stock_location
|
8
11
|
belongs_to :store, class_name: 'Spree::Store', inverse_of: :customer_returns
|
data/app/models/spree/digital.rb
CHANGED
@@ -3,6 +3,10 @@ module Spree
|
|
3
3
|
belongs_to :variant
|
4
4
|
has_many :digital_links, dependent: :destroy
|
5
5
|
|
6
|
+
if defined?(Spree::Webhooks)
|
7
|
+
include Spree::Webhooks::HasWebhooks
|
8
|
+
end
|
9
|
+
|
6
10
|
if Spree.private_storage_service_name
|
7
11
|
has_one_attached :attachment, service: Spree.private_storage_service_name
|
8
12
|
else
|
@@ -2,6 +2,13 @@ module Spree
|
|
2
2
|
class DigitalLink < Spree::Base
|
3
3
|
has_secure_token
|
4
4
|
|
5
|
+
if defined?(Spree::Webhooks)
|
6
|
+
include Spree::Webhooks::HasWebhooks
|
7
|
+
end
|
8
|
+
if defined?(Spree::Security::DigitalLinks)
|
9
|
+
include Spree::Security::DigitalLinks
|
10
|
+
end
|
11
|
+
|
5
12
|
belongs_to :digital
|
6
13
|
belongs_to :line_item
|
7
14
|
|
@@ -92,7 +92,7 @@ module Spree
|
|
92
92
|
end
|
93
93
|
|
94
94
|
def get_desired_shipment_inventory_unit(state)
|
95
|
-
desired_shipment.inventory_units.find_or_create_by(state: state) do |unit|
|
95
|
+
desired_shipment.inventory_units.find_or_create_by(state: state, variant: variant) do |unit|
|
96
96
|
current_shipment_unit = current_shipment_units.first
|
97
97
|
unit.variant_id = current_shipment_unit.variant_id
|
98
98
|
unit.order_id = current_shipment_unit.order_id
|
@@ -58,7 +58,7 @@ module Spree
|
|
58
58
|
ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true, authorization: '12345')
|
59
59
|
end
|
60
60
|
|
61
|
-
def cancel(_response_code)
|
61
|
+
def cancel(_response_code, _payment = nil)
|
62
62
|
ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true, authorization: '12345')
|
63
63
|
end
|
64
64
|
|
data/app/models/spree/icon.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
module Spree
|
2
2
|
class Icon < Spree::Asset
|
3
|
-
|
3
|
+
if Spree.public_storage_service_name
|
4
|
+
has_one_attached :attachment, service: Spree.public_storage_service_name
|
5
|
+
else
|
6
|
+
has_one_attached :attachment
|
7
|
+
end
|
4
8
|
|
5
9
|
ICON_TYPES = %i[png jpg jpeg gif svg]
|
6
10
|
|
@@ -5,7 +5,11 @@ module Spree
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
-
|
8
|
+
if Spree.public_storage_service_name
|
9
|
+
has_one_attached :attachment, service: Spree.public_storage_service_name
|
10
|
+
else
|
11
|
+
has_one_attached :attachment
|
12
|
+
end
|
9
13
|
|
10
14
|
validates :attachment, attached: true, content_type: /\Aimage\/.*\z/
|
11
15
|
|
data/app/models/spree/image.rb
CHANGED
@@ -13,7 +13,7 @@ module Spree
|
|
13
13
|
|
14
14
|
def styles
|
15
15
|
self.class.styles.map do |_, size|
|
16
|
-
width, height = size.chop.split('x')
|
16
|
+
width, height = size.chop.split('x').map(&:to_i)
|
17
17
|
|
18
18
|
{
|
19
19
|
url: generate_url(size: size),
|
@@ -28,7 +28,7 @@ module Spree
|
|
28
28
|
size = self.class.styles[name]
|
29
29
|
return unless size
|
30
30
|
|
31
|
-
width, height = size.chop.split('x')
|
31
|
+
width, height = size.chop.split('x').map(&:to_i)
|
32
32
|
|
33
33
|
{
|
34
34
|
url: generate_url(size: size),
|
@@ -40,7 +40,7 @@ module Spree
|
|
40
40
|
|
41
41
|
def style_dimensions(name)
|
42
42
|
size = self.class.styles[name]
|
43
|
-
width, height = size.chop.split('x')
|
43
|
+
width, height = size.chop.split('x').map(&:to_i)
|
44
44
|
|
45
45
|
{
|
46
46
|
width: width,
|