spree_core 5.0.6 → 5.1.0.beta
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/assets/images/logo.png +0 -0
- data/app/finders/spree/products/find.rb +28 -1
- data/app/finders/spree/taxons/find.rb +1 -1
- data/app/helpers/spree/base_helper.rb +1 -6
- data/app/helpers/spree/images_helper.rb +12 -13
- data/app/helpers/spree/integrations_helper.rb +15 -0
- data/app/helpers/spree/mail_helper.rb +3 -4
- data/app/javascript/spree/core/controllers/disable_submit_button_controller.js +19 -0
- data/app/mailers/spree/invitation_mailer.rb +24 -0
- data/app/models/concerns/spree/integrations_concern.rb +11 -0
- data/app/models/concerns/spree/product_scopes.rb +6 -6
- data/app/models/concerns/spree/translatable_resource.rb +4 -0
- data/app/models/concerns/spree/translatable_resource_scopes.rb +17 -3
- data/app/models/concerns/spree/unique_name.rb +2 -0
- data/app/models/concerns/spree/user_management.rb +33 -0
- data/app/models/concerns/spree/user_methods.rb +19 -0
- data/app/models/concerns/spree/user_roles.rb +43 -17
- data/app/models/spree/ability.rb +8 -6
- data/app/models/spree/asset.rb +1 -6
- data/app/models/spree/base.rb +1 -0
- data/app/models/spree/base_analytics_event_handler.rb +7 -2
- data/app/models/spree/classification.rb +13 -0
- data/app/models/spree/credit_card.rb +24 -2
- data/app/models/spree/custom_domain.rb +3 -2
- data/app/models/spree/export.rb +1 -1
- data/app/models/spree/integration.rb +63 -0
- data/app/models/spree/invitation.rb +153 -0
- data/app/models/spree/invitations/store.rb +6 -0
- data/app/models/spree/option_value.rb +2 -2
- data/app/models/spree/order.rb +16 -5
- data/app/models/spree/order_merger.rb +7 -5
- data/app/models/spree/page_sections/featured_posts.rb +0 -4
- data/app/models/spree/payment.rb +1 -2
- data/app/models/spree/payment_source.rb +0 -21
- data/app/models/spree/post.rb +0 -1
- data/app/models/spree/product.rb +75 -5
- data/app/models/spree/product_property.rb +1 -1
- data/app/models/spree/promotion/rules/item_total.rb +12 -12
- data/app/models/spree/property.rb +3 -1
- data/app/models/spree/reports/sales_total.rb +5 -1
- data/app/models/spree/role.rb +16 -0
- data/app/models/spree/role_user.rb +32 -1
- data/app/models/spree/shipment_handler.rb +1 -0
- data/app/models/spree/shipping_method.rb +2 -2
- data/app/models/spree/store.rb +9 -4
- data/app/models/spree/store_credit_category.rb +4 -0
- data/app/models/spree/taxon.rb +4 -7
- data/app/models/spree/theme.rb +1 -1
- data/app/models/spree/wishlist.rb +0 -7
- data/app/services/spree/country_to_timezone.rb +273 -0
- data/app/services/spree/products/prepare_nested_attributes.rb +2 -9
- data/app/services/spree/seeds/admin_user.rb +4 -2
- data/app/services/spree/seeds/all.rb +3 -1
- data/app/services/spree/seeds/digital_delivery.rb +20 -0
- data/app/services/spree/seeds/returns_environment.rb +27 -0
- data/app/services/spree/seeds/tax_categories.rb +12 -0
- data/app/services/spree/stores/settings_defaults_by_country.rb +38 -0
- data/app/services/spree/tags/bulk_add.rb +13 -7
- data/app/views/spree/addresses/_form.html.erb +1 -1
- data/app/views/spree/invitation_mailer/invitation_accepted.html.erb +12 -0
- data/app/views/spree/invitation_mailer/invitation_email.html.erb +21 -0
- data/app/views/spree/shared/_payment.html.erb +0 -9
- data/config/locales/en.yml +48 -20
- data/db/migrate/20250407085228_create_spree_integrations.rb +12 -0
- data/db/migrate/20250410061306_create_spree_invitations.rb +20 -0
- data/db/migrate/20250418174652_add_resource_to_spree_role_users.rb +8 -0
- data/db/migrate/20250508060800_add_selected_locale_to_spree_admin_users.rb +8 -0
- data/db/migrate/20250509143831_add_session_id_to_spree_assets.rb +5 -0
- data/lib/generators/spree/authentication/devise/templates/authentication_helpers.rb.tt +3 -3
- data/lib/spree/core/controller_helpers/auth.rb +15 -14
- data/lib/spree/core/controller_helpers/currency.rb +11 -0
- data/lib/spree/core/controller_helpers/strong_parameters.rb +3 -2
- data/lib/spree/core/engine.rb +13 -3
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +1 -0
- data/lib/spree/permitted_attributes.rb +111 -13
- data/lib/spree/testing_support/common_rake.rb +7 -25
- data/lib/spree/testing_support/extension_rake.rb +1 -1
- data/lib/spree/testing_support/factories/integration_factory.rb +7 -0
- data/lib/spree/testing_support/factories/invitation_factory.rb +6 -0
- data/lib/spree/testing_support/factories/page_section_factory.rb +0 -4
- data/lib/spree/testing_support/factories/payment_factory.rb +0 -5
- data/lib/spree/testing_support/factories/payment_method_factory.rb +0 -5
- data/lib/spree/testing_support/factories/promotion_action_factory.rb +4 -0
- data/lib/spree/testing_support/factories/taxon_factory.rb +0 -6
- data/lib/spree/testing_support/factories/user_factory.rb +14 -1
- data/lib/spree/translation_migrations.rb +27 -15
- data/lib/tasks/core.rake +8 -0
- metadata +41 -8
- data/app/models/concerns/spree/payment_source_concern.rb +0 -39
- data/app/models/spree/gateway/custom_payment_source_method.rb +0 -33
- data/app/models/spree/product/slugs.rb +0 -112
- data/lib/spree/testing_support/factories/payment_source_factory.rb +0 -5
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: 5.0.
|
4
|
+
version: 5.1.0.beta
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Schofield
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2025-
|
13
|
+
date: 2025-05-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: i18n-tasks
|
@@ -526,6 +526,20 @@ dependencies:
|
|
526
526
|
- - "~>"
|
527
527
|
- !ruby/object:Gem::Version
|
528
528
|
version: 0.3.2
|
529
|
+
- !ruby/object:Gem::Dependency
|
530
|
+
name: safely_block
|
531
|
+
requirement: !ruby/object:Gem::Requirement
|
532
|
+
requirements:
|
533
|
+
- - "~>"
|
534
|
+
- !ruby/object:Gem::Version
|
535
|
+
version: '0.4'
|
536
|
+
type: :runtime
|
537
|
+
prerelease: false
|
538
|
+
version_requirements: !ruby/object:Gem::Requirement
|
539
|
+
requirements:
|
540
|
+
- - "~>"
|
541
|
+
- !ruby/object:Gem::Version
|
542
|
+
version: '0.4'
|
529
543
|
description: Spree Models, Helpers, Services and core libraries
|
530
544
|
email: hello@spreecommerce.org
|
531
545
|
executables: []
|
@@ -536,6 +550,7 @@ files:
|
|
536
550
|
- Rakefile
|
537
551
|
- app/assets/config/spree_core_manifest.js
|
538
552
|
- app/assets/images/google_on_white_hdpi.png
|
553
|
+
- app/assets/images/logo.png
|
539
554
|
- app/controllers/spree/base_controller.rb
|
540
555
|
- app/finders/concerns/spree/product_filterable.rb
|
541
556
|
- app/finders/spree/addresses/find.rb
|
@@ -558,11 +573,13 @@ files:
|
|
558
573
|
- app/helpers/spree/base_helper.rb
|
559
574
|
- app/helpers/spree/currency_helper.rb
|
560
575
|
- app/helpers/spree/images_helper.rb
|
576
|
+
- app/helpers/spree/integrations_helper.rb
|
561
577
|
- app/helpers/spree/locale_helper.rb
|
562
578
|
- app/helpers/spree/mail_helper.rb
|
563
579
|
- app/helpers/spree/products_helper.rb
|
564
580
|
- app/javascript/spree/core/controllers/address_autocomplete_controller.js
|
565
581
|
- app/javascript/spree/core/controllers/address_form_controller.js
|
582
|
+
- app/javascript/spree/core/controllers/disable_submit_button_controller.js
|
566
583
|
- app/javascript/spree/core/controllers/enable_button_controller.js
|
567
584
|
- app/javascript/spree/core/helpers/address_autocomplete/google_places_suggestions_provider.js
|
568
585
|
- app/javascript/spree/core/helpers/debounce.js
|
@@ -581,6 +598,7 @@ files:
|
|
581
598
|
- app/jobs/spree/variants/remove_line_item_job.rb
|
582
599
|
- app/mailers/spree/base_mailer.rb
|
583
600
|
- app/mailers/spree/export_mailer.rb
|
601
|
+
- app/mailers/spree/invitation_mailer.rb
|
584
602
|
- app/mailers/spree/report_mailer.rb
|
585
603
|
- app/mailers/spree/test_mailer.rb
|
586
604
|
- app/models/action_text/rich_text_decorator.rb
|
@@ -595,6 +613,7 @@ files:
|
|
595
613
|
- app/models/concerns/spree/has_one_link.rb
|
596
614
|
- app/models/concerns/spree/has_page_links.rb
|
597
615
|
- app/models/concerns/spree/image_methods.rb
|
616
|
+
- app/models/concerns/spree/integrations_concern.rb
|
598
617
|
- app/models/concerns/spree/memoized_data.rb
|
599
618
|
- app/models/concerns/spree/metadata.rb
|
600
619
|
- app/models/concerns/spree/multi_searchable.rb
|
@@ -603,7 +622,6 @@ files:
|
|
603
622
|
- app/models/concerns/spree/number_as_param.rb
|
604
623
|
- app/models/concerns/spree/number_identifier.rb
|
605
624
|
- app/models/concerns/spree/parameterizable_name.rb
|
606
|
-
- app/models/concerns/spree/payment_source_concern.rb
|
607
625
|
- app/models/concerns/spree/previewable.rb
|
608
626
|
- app/models/concerns/spree/product_scopes.rb
|
609
627
|
- app/models/concerns/spree/ransackable_attributes.rb
|
@@ -615,6 +633,7 @@ files:
|
|
615
633
|
- app/models/concerns/spree/translatable_resource_slug.rb
|
616
634
|
- app/models/concerns/spree/unique_name.rb
|
617
635
|
- app/models/concerns/spree/user_address.rb
|
636
|
+
- app/models/concerns/spree/user_management.rb
|
618
637
|
- app/models/concerns/spree/user_methods.rb
|
619
638
|
- app/models/concerns/spree/user_payment_source.rb
|
620
639
|
- app/models/concerns/spree/user_reporting.rb
|
@@ -667,11 +686,13 @@ files:
|
|
667
686
|
- app/models/spree/gateway.rb
|
668
687
|
- app/models/spree/gateway/bogus.rb
|
669
688
|
- app/models/spree/gateway/bogus_simple.rb
|
670
|
-
- app/models/spree/gateway/custom_payment_source_method.rb
|
671
689
|
- app/models/spree/gateway_customer.rb
|
672
690
|
- app/models/spree/image.rb
|
673
691
|
- app/models/spree/image/configuration/active_storage.rb
|
692
|
+
- app/models/spree/integration.rb
|
674
693
|
- app/models/spree/inventory_unit.rb
|
694
|
+
- app/models/spree/invitation.rb
|
695
|
+
- app/models/spree/invitations/store.rb
|
675
696
|
- app/models/spree/legacy_user.rb
|
676
697
|
- app/models/spree/line_item.rb
|
677
698
|
- app/models/spree/log_entry.rb
|
@@ -766,7 +787,6 @@ files:
|
|
766
787
|
- app/models/spree/preference.rb
|
767
788
|
- app/models/spree/price.rb
|
768
789
|
- app/models/spree/product.rb
|
769
|
-
- app/models/spree/product/slugs.rb
|
770
790
|
- app/models/spree/product/webhooks.rb
|
771
791
|
- app/models/spree/product_option_type.rb
|
772
792
|
- app/models/spree/product_promotion_rule.rb
|
@@ -944,6 +964,7 @@ files:
|
|
944
964
|
- app/services/spree/checkout/update.rb
|
945
965
|
- app/services/spree/classifications/reposition.rb
|
946
966
|
- app/services/spree/compare_line_items.rb
|
967
|
+
- app/services/spree/country_to_timezone.rb
|
947
968
|
- app/services/spree/coupon_codes/bulk_generate.rb
|
948
969
|
- app/services/spree/coupon_codes/coupon_codes_handler.rb
|
949
970
|
- app/services/spree/credit_cards/destroy.rb
|
@@ -970,13 +991,16 @@ files:
|
|
970
991
|
- app/services/spree/seeds/all.rb
|
971
992
|
- app/services/spree/seeds/countries.rb
|
972
993
|
- app/services/spree/seeds/default_reimbursement_types.rb
|
994
|
+
- app/services/spree/seeds/digital_delivery.rb
|
973
995
|
- app/services/spree/seeds/payment_methods.rb
|
996
|
+
- app/services/spree/seeds/returns_environment.rb
|
974
997
|
- app/services/spree/seeds/roles.rb
|
975
998
|
- app/services/spree/seeds/shipping_categories.rb
|
976
999
|
- app/services/spree/seeds/states.rb
|
977
1000
|
- app/services/spree/seeds/stock_locations.rb
|
978
1001
|
- app/services/spree/seeds/store_credit_categories.rb
|
979
1002
|
- app/services/spree/seeds/stores.rb
|
1003
|
+
- app/services/spree/seeds/tax_categories.rb
|
980
1004
|
- app/services/spree/seeds/zones.rb
|
981
1005
|
- app/services/spree/shipments/add_item.rb
|
982
1006
|
- app/services/spree/shipments/change_state.rb
|
@@ -985,6 +1009,7 @@ files:
|
|
985
1009
|
- app/services/spree/shipments/remove_item.rb
|
986
1010
|
- app/services/spree/shipments/update.rb
|
987
1011
|
- app/services/spree/stock_locations/stock_items/create.rb
|
1012
|
+
- app/services/spree/stores/settings_defaults_by_country.rb
|
988
1013
|
- app/services/spree/tags/bulk_add.rb
|
989
1014
|
- app/services/spree/tags/bulk_remove.rb
|
990
1015
|
- app/services/spree/taxons/add_products.rb
|
@@ -1010,6 +1035,8 @@ files:
|
|
1010
1035
|
- app/views/spree/addresses/_form.html.erb
|
1011
1036
|
- app/views/spree/addresses/_suggestions_box.erb
|
1012
1037
|
- app/views/spree/export_mailer/export_done.html.erb
|
1038
|
+
- app/views/spree/invitation_mailer/invitation_accepted.html.erb
|
1039
|
+
- app/views/spree/invitation_mailer/invitation_email.html.erb
|
1013
1040
|
- app/views/spree/report_mailer/report_done.html.erb
|
1014
1041
|
- app/views/spree/shared/_base_mailer_footer.html.erb
|
1015
1042
|
- app/views/spree/shared/_base_mailer_header.html.erb
|
@@ -1127,6 +1154,11 @@ files:
|
|
1127
1154
|
- db/migrate/20250313104226_add_user_type_to_spree_role_users.rb
|
1128
1155
|
- db/migrate/20250313175830_add_unique_index_on_promotion_action_line_items.rb
|
1129
1156
|
- db/migrate/20250314144210_create_spree_taggings_and_spree_tags.rb
|
1157
|
+
- db/migrate/20250407085228_create_spree_integrations.rb
|
1158
|
+
- db/migrate/20250410061306_create_spree_invitations.rb
|
1159
|
+
- db/migrate/20250418174652_add_resource_to_spree_role_users.rb
|
1160
|
+
- db/migrate/20250508060800_add_selected_locale_to_spree_admin_users.rb
|
1161
|
+
- db/migrate/20250509143831_add_session_id_to_spree_assets.rb
|
1130
1162
|
- db/seeds.rb
|
1131
1163
|
- lib/friendly_id/paranoia.rb
|
1132
1164
|
- lib/generators/spree/authentication/custom/custom_generator.rb
|
@@ -1219,7 +1251,9 @@ files:
|
|
1219
1251
|
- lib/spree/testing_support/factories/gateway_customer_factory.rb
|
1220
1252
|
- lib/spree/testing_support/factories/google_data_feed_factory.rb
|
1221
1253
|
- lib/spree/testing_support/factories/image_factory.rb
|
1254
|
+
- lib/spree/testing_support/factories/integration_factory.rb
|
1222
1255
|
- lib/spree/testing_support/factories/inventory_unit_factory.rb
|
1256
|
+
- lib/spree/testing_support/factories/invitation_factory.rb
|
1223
1257
|
- lib/spree/testing_support/factories/line_item_factory.rb
|
1224
1258
|
- lib/spree/testing_support/factories/log_entry_factory.rb
|
1225
1259
|
- lib/spree/testing_support/factories/options_factory.rb
|
@@ -1232,7 +1266,6 @@ files:
|
|
1232
1266
|
- lib/spree/testing_support/factories/payment_capture_event_factory.rb
|
1233
1267
|
- lib/spree/testing_support/factories/payment_factory.rb
|
1234
1268
|
- lib/spree/testing_support/factories/payment_method_factory.rb
|
1235
|
-
- lib/spree/testing_support/factories/payment_source_factory.rb
|
1236
1269
|
- lib/spree/testing_support/factories/post_category_factory.rb
|
1237
1270
|
- lib/spree/testing_support/factories/post_factory.rb
|
1238
1271
|
- lib/spree/testing_support/factories/price_factory.rb
|
@@ -1312,9 +1345,9 @@ licenses:
|
|
1312
1345
|
- BSD-3-Clause
|
1313
1346
|
metadata:
|
1314
1347
|
bug_tracker_uri: https://github.com/spree/spree/issues
|
1315
|
-
changelog_uri: https://github.com/spree/spree/releases/tag/v5.0.
|
1348
|
+
changelog_uri: https://github.com/spree/spree/releases/tag/v5.1.0.beta
|
1316
1349
|
documentation_uri: https://docs.spreecommerce.org/
|
1317
|
-
source_code_uri: https://github.com/spree/spree/tree/v5.0.
|
1350
|
+
source_code_uri: https://github.com/spree/spree/tree/v5.1.0.beta
|
1318
1351
|
post_install_message:
|
1319
1352
|
rdoc_options: []
|
1320
1353
|
require_paths:
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
module PaymentSourceConcern
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
# Available actions for the payment source.
|
6
|
-
# @return [Array<String>]
|
7
|
-
def actions
|
8
|
-
%w{capture void credit}
|
9
|
-
end
|
10
|
-
|
11
|
-
# Indicates whether its possible to capture the payment
|
12
|
-
# @param payment [Spree::Payment]
|
13
|
-
# @return [Boolean]
|
14
|
-
def can_capture?(payment)
|
15
|
-
payment.pending? || payment.checkout?
|
16
|
-
end
|
17
|
-
|
18
|
-
# Indicates whether its possible to void the payment.
|
19
|
-
# @param payment [Spree::Payment]
|
20
|
-
# @return [Boolean]
|
21
|
-
def can_void?(payment)
|
22
|
-
!payment.failed? && !payment.void?
|
23
|
-
end
|
24
|
-
|
25
|
-
# Indicates whether its possible to credit the payment. Note that most gateways require that the
|
26
|
-
# payment be settled first which generally happens within 12-24 hours of the transaction.
|
27
|
-
# @param payment [Spree::Payment]
|
28
|
-
# @return [Boolean]
|
29
|
-
def can_credit?(payment)
|
30
|
-
payment.completed? && payment.credit_allowed > 0
|
31
|
-
end
|
32
|
-
|
33
|
-
# Returns true if the payment source has a payment profile.
|
34
|
-
# @return [Boolean]
|
35
|
-
def has_payment_profile?
|
36
|
-
gateway_customer_profile_id.present? || gateway_payment_profile_id.present?
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
class Gateway::CustomPaymentSourceMethod < Gateway
|
3
|
-
def provider_class
|
4
|
-
self.class
|
5
|
-
end
|
6
|
-
|
7
|
-
def payment_source_class
|
8
|
-
Spree::PaymentSource
|
9
|
-
end
|
10
|
-
|
11
|
-
def payment_profiles_supported?
|
12
|
-
true
|
13
|
-
end
|
14
|
-
|
15
|
-
def show_in_admin?
|
16
|
-
false
|
17
|
-
end
|
18
|
-
|
19
|
-
def create_profile(payment)
|
20
|
-
return if payment.source.gateway_customer.present?
|
21
|
-
|
22
|
-
user = payment.source.user || payment.order.user
|
23
|
-
return if user.blank?
|
24
|
-
|
25
|
-
find_or_create_customer(user)
|
26
|
-
end
|
27
|
-
|
28
|
-
# simulate a 3rd party payment gateway api to fetch/or create a customer
|
29
|
-
def find_or_create_customer(user)
|
30
|
-
gateway_customers.find_or_create_by!(user: user, profile_id: "CUSTOMER-#{user.id}")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,112 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
class Product < Spree.base_class
|
3
|
-
module Slugs
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
extend FriendlyId
|
8
|
-
include Spree::TranslatableResourceSlug
|
9
|
-
|
10
|
-
translates :slug
|
11
|
-
friendly_id :slug_candidates, use: [:history, :slugged, :scoped, :mobility], scope: spree_base_uniqueness_scope, slug_limit: 255
|
12
|
-
|
13
|
-
Product::Translation.class_eval do
|
14
|
-
acts_as_paranoid
|
15
|
-
# deleted translation values also need to be accessible for index views listing deleted resources
|
16
|
-
default_scope { unscope(where: :deleted_at) }
|
17
|
-
|
18
|
-
before_validation :set_slug
|
19
|
-
before_validation :ensure_slug_is_unique
|
20
|
-
|
21
|
-
validates :slug, presence: true, uniqueness: { allow_blank: true, case_sensitive: true, scope: [*::Spree.base_class.spree_base_uniqueness_scope, :locale] }
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def set_slug
|
26
|
-
self.slug = generate_slug
|
27
|
-
end
|
28
|
-
|
29
|
-
def generate_slug
|
30
|
-
if name.blank? && slug.blank?
|
31
|
-
translated_model.name.to_url
|
32
|
-
elsif slug.blank?
|
33
|
-
name.to_url
|
34
|
-
else
|
35
|
-
slug.to_url
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def ensure_slug_is_unique
|
40
|
-
slug_exists = self.class.where(slug: slug, locale: locale).where.not(id: id).exists?
|
41
|
-
self.slug = [slug, SecureRandom.uuid].join('-') if slug_exists
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
before_validation :downcase_slug
|
46
|
-
before_validation :normalize_slug, on: :update
|
47
|
-
after_destroy :punch_slugs
|
48
|
-
after_restore :regenerate_slug
|
49
|
-
|
50
|
-
validates :slug, presence: true, uniqueness: { allow_blank: true, case_sensitive: true, scope: spree_base_uniqueness_scope }
|
51
|
-
|
52
|
-
def self.slug_available?(slug, id)
|
53
|
-
!where(slug: slug).where.not(id: id).exists?
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def ensure_slug_is_unique(candidate_slug)
|
58
|
-
return slug if candidate_slug.blank? || slug.blank?
|
59
|
-
return candidate_slug if self.class.slug_available?(candidate_slug, id)
|
60
|
-
|
61
|
-
normalize_friendly_id([candidate_slug, uuid_for_friendly_id])
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
def slug_candidates
|
67
|
-
if defined?(:deleted_at) && deleted_at.present?
|
68
|
-
[
|
69
|
-
['deleted', :name],
|
70
|
-
['deleted', :name, :sku],
|
71
|
-
['deleted', :name, :uuid_for_friendly_id]
|
72
|
-
]
|
73
|
-
else
|
74
|
-
[
|
75
|
-
[:name],
|
76
|
-
[:name, :sku],
|
77
|
-
[:name, :uuid_for_friendly_id]
|
78
|
-
]
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def downcase_slug
|
83
|
-
slug&.downcase!
|
84
|
-
end
|
85
|
-
|
86
|
-
def normalize_slug
|
87
|
-
self.slug = normalize_friendly_id(slug)
|
88
|
-
end
|
89
|
-
|
90
|
-
def regenerate_slug
|
91
|
-
self.slug = nil
|
92
|
-
save!
|
93
|
-
end
|
94
|
-
|
95
|
-
def punch_slugs
|
96
|
-
return if new_record? || frozen?
|
97
|
-
|
98
|
-
self.slug = nil
|
99
|
-
|
100
|
-
set_slug
|
101
|
-
update_column(:slug, slug)
|
102
|
-
|
103
|
-
new_slug = ->(rec) { "deleted-#{rec.id}_#{rec.slug}"[..254] }
|
104
|
-
|
105
|
-
translations.with_deleted.each { |rec| rec.update_columns(slug: new_slug.call(rec)) }
|
106
|
-
slugs.with_deleted.each { |rec| rec.update_column(:slug, new_slug.call(rec)) }
|
107
|
-
|
108
|
-
translations.find_by!(locale: I18n.locale).update_column(:slug, slug) if Spree.use_translations?
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|