spree_core 4.4.1 → 4.5.0
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.
- 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/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/store_credit.rb +0 -8
- 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/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 +64 -53
- data/app/models/friendly_id/slug_decorator.rb +0 -9
- data/app/models/spree/app_configuration.rb +0 -86
- data/app/models/spree/order_contents.rb +0 -31
- data/lib/friendly_id/slug_rails5_patch.rb +0 -11
- data/lib/spree/core/app_dependencies.rb +0 -126
- /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
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
|
|
|
@@ -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,
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class InventoryUnit < Spree::Base
|
|
3
|
+
if defined?(Spree::Webhooks)
|
|
4
|
+
include Spree::Webhooks::HasWebhooks
|
|
5
|
+
end
|
|
6
|
+
|
|
3
7
|
with_options inverse_of: :inventory_units do
|
|
4
8
|
belongs_to :variant, -> { with_deleted }, class_name: 'Spree::Variant'
|
|
5
9
|
belongs_to :order, class_name: 'Spree::Order'
|
|
@@ -59,8 +63,7 @@ module Spree
|
|
|
59
63
|
end
|
|
60
64
|
|
|
61
65
|
def find_stock_item
|
|
62
|
-
|
|
63
|
-
variant_id: variant_id).first
|
|
66
|
+
shipment.stock_location.stock_item_or_create(variant)
|
|
64
67
|
end
|
|
65
68
|
|
|
66
69
|
def self.split(original_inventory_unit, extract_quantity)
|