spree_core 4.4.0 → 4.6.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/option_values/find_available.rb +1 -1
- data/app/finders/spree/product_properties/find_available.rb +1 -1
- data/app/finders/spree/products/find.rb +21 -15
- data/app/finders/spree/taxons/find.rb +11 -8
- data/app/helpers/spree/base_helper.rb +14 -11
- 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 +34 -28
- data/app/models/concerns/spree/translatable_resource.rb +25 -0
- data/app/models/concerns/spree/translatable_resource_scopes.rb +24 -0
- data/app/models/concerns/spree/translatable_resource_slug.rb +17 -0
- 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/base.rb +1 -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/data_feed/google.rb +15 -0
- data/app/models/spree/data_feed.rb +40 -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 +9 -1
- data/app/models/spree/menu.rb +3 -0
- data/app/models/spree/menu_item.rb +7 -11
- data/app/models/spree/option_type.rb +8 -0
- data/app/models/spree/option_value.rb +9 -0
- data/app/models/spree/order/address_book.rb +1 -0
- data/app/models/spree/order.rb +12 -3
- 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 +97 -24
- data/app/models/spree/product_property.rb +13 -3
- 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 +10 -1
- 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 +8 -1
- 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 +39 -15
- 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 +26 -7
- 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 +8 -1
- data/app/models/spree/variant.rb +47 -21
- 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/data_feeds/google/optional_attributes.rb +23 -0
- data/app/services/spree/data_feeds/google/optional_sub_attributes.rb +21 -0
- data/app/services/spree/data_feeds/google/products_list.rb +14 -0
- data/app/services/spree/data_feeds/google/required_attributes.rb +67 -0
- data/app/services/spree/data_feeds/google/rss.rb +107 -0
- data/app/services/spree/variants/remove_line_items.rb +15 -0
- data/app/sorters/spree/products/sort.rb +23 -0
- data/brakeman.ignore +326 -18
- data/config/initializers/friendly_id.rb +2 -0
- data/config/initializers/mobility.rb +18 -0
- data/config/locales/en.yml +6 -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/db/migrate/20220706112554_create_product_name_and_description_translations_for_mobility_table_backend.rb +27 -0
- data/db/migrate/20220715083542_create_spree_product_translations_for_mobility.rb +7 -0
- data/db/migrate/20220715120222_change_product_name_null_to_true.rb +5 -0
- data/db/migrate/20220718100743_create_spree_taxon_name_and_description_translations_for_mobility_table_backend.rb +27 -0
- data/db/migrate/20220718100948_change_taxon_name_null_to_true.rb +5 -0
- data/db/migrate/20220802070609_add_locale_to_friendly_id_slugs.rb +11 -0
- data/db/migrate/20220802073225_create_spree_product_slug_translations_for_mobility_table_backend.rb +5 -0
- data/db/migrate/20220804073928_transfer_data_to_translatable_tables.rb +66 -0
- data/db/migrate/20221215151408_add_selected_locale_to_spree_users.rb +8 -0
- data/db/migrate/20221219123957_add_deleted_at_to_product_translations.rb +6 -0
- data/db/migrate/20221220133432_add_uniqueness_constraint_to_product_translations.rb +5 -0
- data/db/migrate/20221229132350_create_spree_data_feed_settings.rb +14 -0
- data/db/migrate/20230103144439_create_option_type_translations.rb +26 -0
- data/db/migrate/20230103151034_create_option_value_translations.rb +26 -0
- data/db/migrate/20230109084253_create_product_property_translations.rb +25 -0
- data/db/migrate/20230109094907_transfer_options_data_to_translatable_tables.rb +58 -0
- data/db/migrate/20230109105943_create_property_translations.rb +26 -0
- data/db/migrate/20230109110840_transfer_property_data_to_translatable_tables.rb +59 -0
- data/db/migrate/20230110142344_backfill_friendly_id_slug_locale.rb +15 -0
- data/db/migrate/20230111121534_add_additional_taxon_translation_fields.rb +8 -0
- data/db/migrate/20230111122511_transfer_product_and_taxon_data_to_translatable_tables.rb +82 -0
- data/db/migrate/20230117115531_create_taxonomy_translations.rb +24 -0
- data/db/migrate/20230117120430_allow_null_taxonomy_name.rb +5 -0
- data/db/migrate/20230117121303_transfer_taxonomy_data_to_translatable_tables.rb +11 -0
- data/db/migrate/20230210142732_create_store_translations.rb +50 -0
- data/db/migrate/20230210142849_transfer_store_data_to_translatable_tables.rb +11 -0
- data/db/migrate/20230210230434_add_deleted_at_to_store_translations.rb +6 -0
- data/db/migrate/20230415155958_rename_data_feed_settings_table.rb +5 -0
- data/db/migrate/20230415160828_rename_data_feed_table_columns.rb +7 -0
- data/db/migrate/20230415161226_add_indexes_to_data_feeds_table.rb +5 -0
- data/db/migrate/20230512094803_rename_data_feeds_column_provider_to_type.rb +5 -0
- data/db/migrate/20230514162157_add_index_on_locale_and_permalink_to_spree_taxons.rb +5 -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 +91 -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 +34 -8
- 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 +106 -0
- data/lib/spree/core/dependencies_helper.rb +19 -0
- data/lib/spree/core/engine.rb +53 -38
- 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/product_duplicator.rb +1 -1
- data/lib/spree/core/product_filters.rb +7 -4
- data/lib/spree/core/search/base.rb +10 -6
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +27 -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/google_data_feed_factory.rb +8 -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 +12 -1
- data/lib/spree/testing_support/factories/product_property_factory.rb +1 -0
- data/lib/spree/testing_support/factories/product_translation_factory.rb +6 -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 +2 -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 +8 -0
- data/lib/spree/translation_migrations.rb +40 -0
- data/lib/spree_core.rb +2 -1
- data/lib/tasks/core.rake +12 -0
- data/spree_core.gemspec +5 -3
- metadata +152 -52
- 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
- /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
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
class TransferProductAndTaxonDataToTranslatableTables < ActiveRecord::Migration[6.1]
|
|
2
|
+
DEFAULT_LOCALE = 'en'
|
|
3
|
+
PRODUCTS_TABLE = 'spree_products'
|
|
4
|
+
PRODUCT_TRANSLATIONS_TABLE = 'spree_product_translations'
|
|
5
|
+
TAXONS_TABLE = 'spree_taxons'
|
|
6
|
+
TAXON_TRANSLATIONS_TABLE = 'spree_taxon_translations'
|
|
7
|
+
|
|
8
|
+
def up
|
|
9
|
+
# Only transfer data if translation tables are being newly created / no translations exist
|
|
10
|
+
# Otherwise, assume translation data is already in place from spree_globalize
|
|
11
|
+
|
|
12
|
+
# Products
|
|
13
|
+
if not Spree::Product::Translation.exists?
|
|
14
|
+
ActiveRecord::Base.connection.execute("
|
|
15
|
+
INSERT INTO #{PRODUCT_TRANSLATIONS_TABLE} (name, description, locale, spree_product_id, created_at, updated_at, meta_description, meta_keywords, meta_title, slug)
|
|
16
|
+
SELECT name, description, '#{DEFAULT_LOCALE}' as locale, id, created_at, updated_at, meta_description, meta_keywords, meta_title, slug FROM #{PRODUCTS_TABLE};
|
|
17
|
+
")
|
|
18
|
+
ActiveRecord::Base.connection.execute("
|
|
19
|
+
UPDATE #{PRODUCTS_TABLE}
|
|
20
|
+
SET name=null, description=null, meta_description=null, meta_keywords=null, meta_title=null, slug=null;
|
|
21
|
+
")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Taxons
|
|
25
|
+
if not Spree::Taxon::Translation.exists?
|
|
26
|
+
ActiveRecord::Base.connection.execute("
|
|
27
|
+
INSERT INTO #{TAXON_TRANSLATIONS_TABLE} (name, description, meta_title, meta_description, meta_keywords, permalink, locale, spree_taxon_id, created_at, updated_at)
|
|
28
|
+
SELECT name, description, meta_title, meta_description, meta_keywords, permalink, '#{DEFAULT_LOCALE}' as locale, id, created_at, updated_at FROM #{TAXONS_TABLE};
|
|
29
|
+
")
|
|
30
|
+
ActiveRecord::Base.connection.execute("
|
|
31
|
+
UPDATE #{TAXONS_TABLE}
|
|
32
|
+
SET name=null, description=null, meta_title=null, meta_description=null, meta_keywords=null, permalink=null;
|
|
33
|
+
")
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def down
|
|
38
|
+
ActiveRecord::Base.connection.execute("
|
|
39
|
+
UPDATE #{PRODUCTS_TABLE} as products
|
|
40
|
+
SET (name,
|
|
41
|
+
description,
|
|
42
|
+
meta_description,
|
|
43
|
+
meta_keywords,
|
|
44
|
+
meta_title,
|
|
45
|
+
slug) =
|
|
46
|
+
(t_products.name,
|
|
47
|
+
t_products.description,
|
|
48
|
+
t_products.meta_description,
|
|
49
|
+
t_products.meta_keywords,
|
|
50
|
+
t_products.meta_title,
|
|
51
|
+
t_products.slug)
|
|
52
|
+
FROM #{PRODUCT_TRANSLATIONS_TABLE} AS t_products
|
|
53
|
+
WHERE t_products.spree_product_id = products.id
|
|
54
|
+
")
|
|
55
|
+
|
|
56
|
+
ActiveRecord::Base.connection.execute("
|
|
57
|
+
TRUNCATE TABLE #{PRODUCT_TRANSLATIONS_TABLE}
|
|
58
|
+
")
|
|
59
|
+
|
|
60
|
+
ActiveRecord::Base.connection.execute("
|
|
61
|
+
UPDATE #{TAXONS_TABLE} as taxons
|
|
62
|
+
SET (name,
|
|
63
|
+
description,
|
|
64
|
+
meta_title,
|
|
65
|
+
meta_description,
|
|
66
|
+
meta_keywords,
|
|
67
|
+
permalink) =
|
|
68
|
+
(t_taxons.name,
|
|
69
|
+
t_taxons.description,
|
|
70
|
+
t_taxons.meta_title,
|
|
71
|
+
t_taxons.meta_description,
|
|
72
|
+
t_taxons.meta_keywords,
|
|
73
|
+
t_taxons.permalink)
|
|
74
|
+
FROM #{TAXON_TRANSLATIONS_TABLE} AS t_taxons
|
|
75
|
+
WHERE t_taxons.spree_taxon_id = taxons.id
|
|
76
|
+
")
|
|
77
|
+
|
|
78
|
+
ActiveRecord::Base.connection.execute("
|
|
79
|
+
TRUNCATE TABLE #{TAXON_TRANSLATIONS_TABLE}
|
|
80
|
+
")
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
class CreateTaxonomyTranslations < ActiveRecord::Migration[6.1]
|
|
2
|
+
def change
|
|
3
|
+
if ActiveRecord::Base.connection.table_exists?('spree_taxonomy_translations')
|
|
4
|
+
# manually check for index since Rails if_exists does not always work correctly
|
|
5
|
+
if ActiveRecord::Migration.connection.index_exists?(:spree_taxonomy_translations, :spree_taxonomy_id)
|
|
6
|
+
remove_index :spree_taxonomy_translations, column: :spree_taxonomy_id, if_exists: true
|
|
7
|
+
end
|
|
8
|
+
else
|
|
9
|
+
create_table :spree_taxonomy_translations do |t|
|
|
10
|
+
# Translated attribute(s)
|
|
11
|
+
t.string :name
|
|
12
|
+
|
|
13
|
+
t.string :locale, null: false
|
|
14
|
+
t.references :spree_taxonomy, null: false, foreign_key: true, index: false
|
|
15
|
+
|
|
16
|
+
t.timestamps null: false
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
add_index :spree_taxonomy_translations, :locale, name: :index_spree_taxonomy_translations_on_locale
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
add_index :spree_taxonomy_translations, [:spree_taxonomy_id, :locale], name: :index_spree_taxonomy_translations_on_spree_taxonomy_id_locale, unique: true
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class TransferTaxonomyDataToTranslatableTables < ActiveRecord::Migration[6.1]
|
|
2
|
+
TRANSLATION_MIGRATION = Spree::TranslationMigrations.new(Spree::Taxonomy, 'en')
|
|
3
|
+
|
|
4
|
+
def up
|
|
5
|
+
TRANSLATION_MIGRATION.transfer_translation_data
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def down
|
|
9
|
+
TRANSLATION_MIGRATION.revert_translation_data_transfer
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
class CreateStoreTranslations < ActiveRecord::Migration[6.1]
|
|
2
|
+
def change
|
|
3
|
+
if ActiveRecord::Base.connection.table_exists?('spree_store_translations')
|
|
4
|
+
add_new_translation_columns_to_globalize_table
|
|
5
|
+
else
|
|
6
|
+
create_table :spree_store_translations do |t|
|
|
7
|
+
# Translated attribute(s)
|
|
8
|
+
t.string :name
|
|
9
|
+
t.text :meta_description
|
|
10
|
+
t.text :meta_keywords
|
|
11
|
+
t.string :seo_title
|
|
12
|
+
t.string :facebook
|
|
13
|
+
t.string :twitter
|
|
14
|
+
t.string :instagram
|
|
15
|
+
t.string :customer_support_email
|
|
16
|
+
t.text :description
|
|
17
|
+
t.text :address
|
|
18
|
+
t.string :contact_phone
|
|
19
|
+
t.string :new_order_notifications_email
|
|
20
|
+
|
|
21
|
+
t.string :locale, null: false
|
|
22
|
+
t.references :spree_store, null: false, foreign_key: true, index: false
|
|
23
|
+
|
|
24
|
+
t.timestamps null: false
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
add_index :spree_store_translations, :locale, name: :index_spree_store_translations_on_locale
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
add_index :spree_store_translations, [:spree_store_id, :locale], name: :index_spree_store_translations_on_spree_store_id_locale, unique: true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def add_new_translation_columns_to_globalize_table
|
|
36
|
+
# manually check for index since Rails if_exists does not always work correctly
|
|
37
|
+
if ActiveRecord::Migration.connection.index_exists?(:spree_store_translations, :spree_store_id)
|
|
38
|
+
remove_index :spree_store_translations, column: :spree_store_id, if_exists: true
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
add_column :spree_store_translations, :facebook, :string
|
|
42
|
+
add_column :spree_store_translations, :twitter, :string
|
|
43
|
+
add_column :spree_store_translations, :instagram, :string
|
|
44
|
+
add_column :spree_store_translations, :customer_support_email, :string
|
|
45
|
+
add_column :spree_store_translations, :description, :text
|
|
46
|
+
add_column :spree_store_translations, :address, :text
|
|
47
|
+
add_column :spree_store_translations, :contact_phone, :string
|
|
48
|
+
add_column :spree_store_translations, :new_order_notifications_email, :string
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class TransferStoreDataToTranslatableTables < ActiveRecord::Migration[6.1]
|
|
2
|
+
TRANSLATION_MIGRATION = Spree::TranslationMigrations.new(Spree::Store, 'en')
|
|
3
|
+
|
|
4
|
+
def up
|
|
5
|
+
TRANSLATION_MIGRATION.transfer_translation_data
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def down
|
|
9
|
+
TRANSLATION_MIGRATION.revert_translation_data_transfer
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -38,13 +38,12 @@ module Spree
|
|
|
38
38
|
opts[:skip_rc] = true
|
|
39
39
|
opts[:skip_spring] = true
|
|
40
40
|
opts[:skip_test] = true
|
|
41
|
-
opts[:skip_yarn] = true
|
|
42
|
-
opts[:skip_javascript] = true
|
|
43
41
|
opts[:skip_bootsnap] = true
|
|
44
42
|
|
|
45
43
|
puts 'Generating dummy Rails application...'
|
|
46
44
|
invoke Rails::Generators::AppGenerator,
|
|
47
45
|
[File.expand_path(dummy_path, destination_root)], opts
|
|
46
|
+
inject_yaml_permitted_classes
|
|
48
47
|
end
|
|
49
48
|
|
|
50
49
|
def test_dummy_config
|
|
@@ -58,6 +57,10 @@ module Spree
|
|
|
58
57
|
template 'rails/test.rb', "#{dummy_path}/config/environments/test.rb", force: true
|
|
59
58
|
template 'rails/script/rails', "#{dummy_path}/spec/dummy/script/rails", force: true
|
|
60
59
|
template 'initializers/devise.rb', "#{dummy_path}/config/initializers/devise.rb", force: true
|
|
60
|
+
|
|
61
|
+
if lib_name == 'spree/backend'
|
|
62
|
+
template 'package.json', "#{dummy_path}/package.json", force: true
|
|
63
|
+
end
|
|
61
64
|
end
|
|
62
65
|
|
|
63
66
|
def test_dummy_inject_extension_requirements
|
|
@@ -114,6 +117,14 @@ end
|
|
|
114
117
|
], before: /require '#{@lib_name}'/, verbose: true
|
|
115
118
|
end
|
|
116
119
|
|
|
120
|
+
def inject_yaml_permitted_classes
|
|
121
|
+
inside dummy_path do
|
|
122
|
+
inject_into_file 'config/application.rb', %Q[
|
|
123
|
+
config.active_record.yaml_column_permitted_classes = [Symbol, BigDecimal, ActiveSupport::HashWithIndifferentAccess]
|
|
124
|
+
], after: /config\.load_defaults.*$/, verbose: true
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
117
128
|
def dummy_path
|
|
118
129
|
ENV['DUMMY_PATH'] || 'spec/dummy'
|
|
119
130
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "app",
|
|
3
|
+
"private": "true",
|
|
4
|
+
"dependencies": {
|
|
5
|
+
"@hotwired/turbo-rails": "^7.2.0",
|
|
6
|
+
"@spree/dashboard": "^0.2.1",
|
|
7
|
+
"esbuild": "^0.15.10"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# This is the primary location for defining spree preferences
|
|
2
|
+
#
|
|
3
|
+
# The expectation is that this is created once and stored in
|
|
4
|
+
# the spree environment
|
|
5
|
+
#
|
|
6
|
+
# setters:
|
|
7
|
+
# a.color = :blue
|
|
8
|
+
# a[:color] = :blue
|
|
9
|
+
# a.set :color = :blue
|
|
10
|
+
# a.preferred_color = :blue
|
|
11
|
+
#
|
|
12
|
+
# getters:
|
|
13
|
+
# a.color
|
|
14
|
+
# a[:color]
|
|
15
|
+
# a.get :color
|
|
16
|
+
# a.preferred_color
|
|
17
|
+
#
|
|
18
|
+
require 'spree/core/search/base'
|
|
19
|
+
require 'spree/core/preferences/configuration'
|
|
20
|
+
|
|
21
|
+
module Spree
|
|
22
|
+
module Core
|
|
23
|
+
class Configuration < Preferences::Configuration
|
|
24
|
+
# Alphabetized to more easily lookup particular preferences
|
|
25
|
+
preference :address_requires_state, :boolean, default: true # should state/state_name be required
|
|
26
|
+
preference :address_requires_phone, :boolean, default: true # Determines whether we require phone in address
|
|
27
|
+
preference :admin_path, :string, deprecated: true
|
|
28
|
+
preference :admin_products_per_page, :integer, deprecated: true
|
|
29
|
+
preference :admin_orders_per_page, :integer, deprecated: true
|
|
30
|
+
preference :admin_properties_per_page, :integer, deprecated: true
|
|
31
|
+
preference :admin_promotions_per_page, :integer, deprecated: true
|
|
32
|
+
preference :admin_customer_returns_per_page, :integer, deprecated: true
|
|
33
|
+
preference :admin_users_per_page, :integer, deprecated: true
|
|
34
|
+
preference :admin_show_version, :boolean, deprecated: true
|
|
35
|
+
preference :allow_checkout_on_gateway_error, :boolean, default: false
|
|
36
|
+
preference :allow_guest_checkout, :boolean, default: true
|
|
37
|
+
preference :alternative_shipping_phone, :boolean, default: false # Request extra phone for ship addr
|
|
38
|
+
preference :always_include_confirm_step, :boolean, default: false # Ensures confirmation step is always in checkout_progress bar, but does not force a confirm step if your payment methods do not support it.
|
|
39
|
+
preference :always_put_site_name_in_title, :boolean, deprecated: true
|
|
40
|
+
preference :title_site_name_separator, :string, deprecated: true
|
|
41
|
+
preference :auto_capture, :boolean, default: false # automatically capture the credit card (as opposed to just authorize and capture later)
|
|
42
|
+
preference :auto_capture_on_dispatch, :boolean, default: false # Captures payment for each shipment in Shipment#after_ship callback, and makes Shipment.ready when payment authorized.
|
|
43
|
+
preference :binary_inventory_cache, :boolean, default: false # only invalidate product cache when a stock item changes whether it is in_stock
|
|
44
|
+
preference :checkout_zone, :string, default: nil, deprecated: true # replace with the name of a zone if you would like to limit the countries
|
|
45
|
+
preference :company, :boolean, default: false # Request company field for billing and shipping addr
|
|
46
|
+
preference :currency, :string, default: 'USD', deprecated: true
|
|
47
|
+
preference :default_country_id, :integer, deprecated: true
|
|
48
|
+
preference :disable_sku_validation, :boolean, default: false # when turned off disables the built-in SKU uniqueness validation
|
|
49
|
+
preference :disable_store_presence_validation, :boolean, default: false # when turned off disables Store presence validation for Products and Payment Methods
|
|
50
|
+
preference :expedited_exchanges, :boolean, default: false # NOTE this requires payment profiles to be supported on your gateway of choice as well as a delayed job handler to be configured with activejob. kicks off an exchange shipment upon return authorization save. charge customer if they do not return items within timely manner.
|
|
51
|
+
preference :expedited_exchanges_days_window, :integer, default: 14 # the amount of days the customer has to return their item after the expedited exchange is shipped in order to avoid being charged
|
|
52
|
+
preference :layout, :string, deprecated: 'Please use Spree::Frontend::Config[:layout] instead'
|
|
53
|
+
preference :logo, :string, deprecated: true
|
|
54
|
+
preference :mailer_logo, :string, deprecated: true
|
|
55
|
+
preference :max_level_in_taxons_menu, :integer, deprecated: true
|
|
56
|
+
preference :products_per_page, :integer, default: 12
|
|
57
|
+
preference :require_master_price, :boolean, default: true
|
|
58
|
+
preference :restock_inventory, :boolean, default: true # Determines if a return item is restocked automatically once it has been received
|
|
59
|
+
preference :return_eligibility_number_of_days, :integer, default: 365
|
|
60
|
+
preference :send_core_emails, :boolean, default: true # Default mail headers settings
|
|
61
|
+
preference :shipping_instructions, :boolean, deprecated: true
|
|
62
|
+
preference :show_only_complete_orders_by_default, :boolean, deprecated: true
|
|
63
|
+
preference :show_variant_full_price, :boolean, default: false # Displays variant full price or difference with product price. Default false to be compatible with older behavior
|
|
64
|
+
preference :show_products_without_price, :boolean, default: false
|
|
65
|
+
preference :show_raw_product_description, :boolean, deprecated: true
|
|
66
|
+
preference :tax_using_ship_address, :boolean, default: true
|
|
67
|
+
preference :track_inventory_levels, :boolean, default: true # Determines whether to track on_hand values for variants / products.
|
|
68
|
+
preference :use_user_locale, :boolean, default: true
|
|
69
|
+
|
|
70
|
+
# Store credits configurations
|
|
71
|
+
preference :non_expiring_credit_types, :array, default: []
|
|
72
|
+
preference :credit_to_new_allocation, :boolean, default: false
|
|
73
|
+
|
|
74
|
+
# Multi store configurations
|
|
75
|
+
preference :show_store_selector, :boolean, deprecated: true
|
|
76
|
+
|
|
77
|
+
# searcher_class allows spree extension writers to provide their own Search class
|
|
78
|
+
def searcher_class
|
|
79
|
+
ActiveSupport::Deprecation.warn('`Spree::Config.searcher_class` is deprecated and will be removed in Spree v5, please use `Spree.searcher_class` instead.')
|
|
80
|
+
@searcher_class ||= Spree.searcher_class
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Sets the path used for products, taxons and pages.
|
|
84
|
+
preference :storefront_products_path, :string, default: 'products'
|
|
85
|
+
preference :storefront_taxons_path, :string, default: 't'
|
|
86
|
+
preference :storefront_pages_path, :string, default: 'pages'
|
|
87
|
+
|
|
88
|
+
attr_writer :searcher_class
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -7,7 +7,9 @@ module Spree
|
|
|
7
7
|
|
|
8
8
|
included do
|
|
9
9
|
before_action :set_token
|
|
10
|
-
helper_method
|
|
10
|
+
if defined?(helper_method)
|
|
11
|
+
helper_method :try_spree_current_user
|
|
12
|
+
end
|
|
11
13
|
|
|
12
14
|
rescue_from CanCan::AccessDenied do |_exception|
|
|
13
15
|
redirect_unauthorized_access
|
|
@@ -5,11 +5,13 @@ module Spree
|
|
|
5
5
|
extend ActiveSupport::Concern
|
|
6
6
|
|
|
7
7
|
included do
|
|
8
|
-
helper_method
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
if defined?(helper_method)
|
|
9
|
+
helper_method :supported_currencies
|
|
10
|
+
helper_method :supported_currencies_for_all_stores
|
|
11
|
+
helper_method :current_currency
|
|
12
|
+
helper_method :supported_currency?
|
|
13
|
+
helper_method :currency_param
|
|
14
|
+
end
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
def current_currency
|
|
@@ -7,12 +7,14 @@ module Spree
|
|
|
7
7
|
included do
|
|
8
8
|
before_action :set_locale
|
|
9
9
|
|
|
10
|
-
helper_method
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
if defined?(helper_method)
|
|
11
|
+
helper_method :supported_locales
|
|
12
|
+
helper_method :supported_locales_for_all_stores
|
|
13
|
+
helper_method :current_locale
|
|
14
|
+
helper_method :supported_locale?
|
|
15
|
+
helper_method :available_locales
|
|
16
|
+
helper_method :locale_param
|
|
17
|
+
end
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
def set_locale
|
|
@@ -20,15 +22,29 @@ module Spree
|
|
|
20
22
|
end
|
|
21
23
|
|
|
22
24
|
def current_locale
|
|
23
|
-
@current_locale ||= if
|
|
25
|
+
@current_locale ||= if user_locale?
|
|
26
|
+
try_spree_current_user.selected_locale
|
|
27
|
+
elsif params_locale?
|
|
24
28
|
params[:locale]
|
|
25
|
-
elsif
|
|
29
|
+
elsif config_locale?
|
|
26
30
|
config_locale
|
|
27
31
|
else
|
|
28
32
|
current_store&.default_locale || Rails.application.config.i18n.default_locale || I18n.default_locale
|
|
29
33
|
end
|
|
30
34
|
end
|
|
31
35
|
|
|
36
|
+
def config_locale?
|
|
37
|
+
respond_to?(:config_locale, true) && config_locale.present?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def params_locale?
|
|
41
|
+
params[:locale].present? && supported_locale?(params[:locale])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def user_locale?
|
|
45
|
+
Spree::Config.use_user_locale && try_spree_current_user && supported_locale?(try_spree_current_user.selected_locale)
|
|
46
|
+
end
|
|
47
|
+
|
|
32
48
|
def supported_locales
|
|
33
49
|
@supported_locales ||= current_store&.supported_locales_list
|
|
34
50
|
end
|
|
@@ -52,6 +68,16 @@ module Spree
|
|
|
52
68
|
|
|
53
69
|
I18n.locale.to_s
|
|
54
70
|
end
|
|
71
|
+
|
|
72
|
+
def find_with_fallback_default_locale(&block)
|
|
73
|
+
result = begin
|
|
74
|
+
block.call
|
|
75
|
+
rescue ActiveRecord::RecordNotFound => _e
|
|
76
|
+
nil
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
result || Mobility.with_locale(current_store.default_locale) { block.call }
|
|
80
|
+
end
|
|
55
81
|
end
|
|
56
82
|
end
|
|
57
83
|
end
|
|
@@ -5,8 +5,10 @@ module Spree
|
|
|
5
5
|
extend ActiveSupport::Concern
|
|
6
6
|
|
|
7
7
|
included do
|
|
8
|
-
helper_method
|
|
9
|
-
|
|
8
|
+
if defined?(helper_method)
|
|
9
|
+
helper_method :current_order
|
|
10
|
+
helper_method :simple_current_order
|
|
11
|
+
end
|
|
10
12
|
end
|
|
11
13
|
|
|
12
14
|
# Used in the link_to_cart helper.
|
|
@@ -3,7 +3,7 @@ module Spree
|
|
|
3
3
|
module ControllerHelpers
|
|
4
4
|
module Search
|
|
5
5
|
def build_searcher(params)
|
|
6
|
-
Spree
|
|
6
|
+
Spree.searcher_class.new(params).tap do |searcher|
|
|
7
7
|
searcher.current_user = try_spree_current_user
|
|
8
8
|
searcher.current_currency = current_currency&.upcase
|
|
9
9
|
searcher.current_store = current_store
|
|
@@ -5,9 +5,11 @@ module Spree
|
|
|
5
5
|
extend ActiveSupport::Concern
|
|
6
6
|
|
|
7
7
|
included do
|
|
8
|
-
helper_method
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
if defined?(helper_method)
|
|
9
|
+
helper_method :current_store
|
|
10
|
+
helper_method :current_price_options
|
|
11
|
+
helper_method :available_menus
|
|
12
|
+
end
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
def current_store
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
require_relative 'dependencies_helper'
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
module Core
|
|
5
|
+
class Dependencies
|
|
6
|
+
INJECTION_POINTS_WITH_DEFAULTS = {
|
|
7
|
+
# ability
|
|
8
|
+
ability_class: 'Spree::Ability',
|
|
9
|
+
|
|
10
|
+
# cart
|
|
11
|
+
cart_compare_line_items_service: 'Spree::CompareLineItems',
|
|
12
|
+
cart_create_service: 'Spree::Cart::Create',
|
|
13
|
+
cart_add_item_service: 'Spree::Cart::AddItem',
|
|
14
|
+
cart_update_service: 'Spree::Cart::Update',
|
|
15
|
+
cart_recalculate_service: 'Spree::Cart::Recalculate',
|
|
16
|
+
cart_remove_item_service: 'Spree::Cart::RemoveItem',
|
|
17
|
+
cart_remove_line_item_service: 'Spree::Cart::RemoveLineItem',
|
|
18
|
+
cart_set_item_quantity_service: 'Spree::Cart::SetQuantity',
|
|
19
|
+
cart_estimate_shipping_rates_service: 'Spree::Cart::EstimateShippingRates',
|
|
20
|
+
cart_empty_service: 'Spree::Cart::Empty',
|
|
21
|
+
cart_destroy_service: 'Spree::Cart::Destroy',
|
|
22
|
+
cart_associate_service: 'Spree::Cart::Associate',
|
|
23
|
+
cart_change_currency_service: 'Spree::Cart::ChangeCurrency',
|
|
24
|
+
|
|
25
|
+
# checkout
|
|
26
|
+
checkout_next_service: 'Spree::Checkout::Next',
|
|
27
|
+
checkout_advance_service: 'Spree::Checkout::Advance',
|
|
28
|
+
checkout_update_service: 'Spree::Checkout::Update',
|
|
29
|
+
checkout_complete_service: 'Spree::Checkout::Complete',
|
|
30
|
+
checkout_add_store_credit_service: 'Spree::Checkout::AddStoreCredit',
|
|
31
|
+
checkout_remove_store_credit_service: 'Spree::Checkout::RemoveStoreCredit',
|
|
32
|
+
checkout_get_shipping_rates_service: 'Spree::Checkout::GetShippingRates',
|
|
33
|
+
checkout_select_shipping_method_service: 'Spree::Checkout::SelectShippingMethod',
|
|
34
|
+
|
|
35
|
+
# order
|
|
36
|
+
order_approve_service: 'Spree::Orders::Approve',
|
|
37
|
+
order_cancel_service: 'Spree::Orders::Cancel',
|
|
38
|
+
|
|
39
|
+
# shipment
|
|
40
|
+
shipment_change_state_service: 'Spree::Shipments::ChangeState',
|
|
41
|
+
shipment_create_service: 'Spree::Shipments::Create',
|
|
42
|
+
shipment_update_service: 'Spree::Shipments::Update',
|
|
43
|
+
shipment_add_item_service: 'Spree::Shipments::AddItem',
|
|
44
|
+
shipment_remove_item_service: 'Spree::Shipments::RemoveItem',
|
|
45
|
+
|
|
46
|
+
# sorter
|
|
47
|
+
collection_sorter: 'Spree::BaseSorter',
|
|
48
|
+
order_sorter: 'Spree::BaseSorter',
|
|
49
|
+
products_sorter: 'Spree::Products::Sort',
|
|
50
|
+
|
|
51
|
+
# paginator
|
|
52
|
+
collection_paginator: 'Spree::Shared::Paginate',
|
|
53
|
+
|
|
54
|
+
# coupons
|
|
55
|
+
# TODO: we should split this service into 2 separate - Add and Remove
|
|
56
|
+
coupon_handler: 'Spree::PromotionHandler::Coupon',
|
|
57
|
+
|
|
58
|
+
# account
|
|
59
|
+
account_create_service: 'Spree::Account::Create',
|
|
60
|
+
account_update_service: 'Spree::Account::Update',
|
|
61
|
+
|
|
62
|
+
# addresses
|
|
63
|
+
address_create_service: 'Spree::Addresses::Create',
|
|
64
|
+
address_update_service: 'Spree::Addresses::Update',
|
|
65
|
+
|
|
66
|
+
# credit cards
|
|
67
|
+
credit_cards_destroy_service: 'Spree::CreditCards::Destroy',
|
|
68
|
+
|
|
69
|
+
# classifications
|
|
70
|
+
classification_reposition_service: 'Spree::Classifications::Reposition',
|
|
71
|
+
|
|
72
|
+
# line items
|
|
73
|
+
line_item_create_service: 'Spree::LineItems::Create',
|
|
74
|
+
line_item_update_service: 'Spree::LineItems::Update',
|
|
75
|
+
line_item_destroy_service: 'Spree::LineItems::Destroy',
|
|
76
|
+
|
|
77
|
+
payment_create_service: 'Spree::Payments::Create',
|
|
78
|
+
|
|
79
|
+
# errors
|
|
80
|
+
error_handler: 'Spree::ErrorReporter',
|
|
81
|
+
|
|
82
|
+
# data feeds
|
|
83
|
+
data_feeds_google_rss_service: 'Spree::DataFeeds::Google::Rss',
|
|
84
|
+
data_feeds_google_optional_attributes_service: 'Spree::DataFeeds::Google::OptionalAttributes',
|
|
85
|
+
data_feeds_google_required_attributes_service: 'Spree::DataFeeds::Google::RequiredAttributes',
|
|
86
|
+
data_feeds_google_optional_sub_attributes_service: 'Spree::DataFeeds::Google::OptionalSubAttributes',
|
|
87
|
+
data_feeds_google_products_list: 'Spree::DataFeeds::Google::ProductsList',
|
|
88
|
+
|
|
89
|
+
# finders
|
|
90
|
+
address_finder: 'Spree::Addresses::Find',
|
|
91
|
+
country_finder: 'Spree::Countries::Find',
|
|
92
|
+
cms_page_finder: 'Spree::CmsPages::Find',
|
|
93
|
+
menu_finder: 'Spree::Menus::Find',
|
|
94
|
+
current_order_finder: 'Spree::Orders::FindCurrent',
|
|
95
|
+
current_store_finder: 'Spree::Stores::FindCurrent',
|
|
96
|
+
completed_order_finder: 'Spree::Orders::FindComplete',
|
|
97
|
+
credit_card_finder: 'Spree::CreditCards::Find',
|
|
98
|
+
products_finder: 'Spree::Products::Find',
|
|
99
|
+
taxon_finder: 'Spree::Taxons::Find',
|
|
100
|
+
line_item_by_variant_finder: 'Spree::LineItems::FindByVariant'
|
|
101
|
+
}.freeze
|
|
102
|
+
|
|
103
|
+
include Spree::DependenciesHelper
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|