spree_core 4.10.1 → 5.0.0.rc1
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/config/spree_core_manifest.js +4 -0
- data/app/assets/images/google_on_white_hdpi.png +0 -0
- data/app/controllers/spree/base_controller.rb +1 -4
- data/app/finders/spree/orders/find_complete.rb +14 -2
- data/app/finders/spree/products/find.rb +74 -23
- data/app/finders/spree/stores/find_current.rb +6 -2
- data/app/helpers/spree/addresses_helper.rb +106 -0
- data/app/helpers/spree/base_helper.rb +83 -55
- data/app/helpers/spree/currency_helper.rb +12 -0
- data/app/helpers/spree/images_helper.rb +18 -0
- data/app/helpers/spree/mail_helper.rb +24 -0
- data/app/helpers/spree/products_helper.rb +1 -20
- data/app/javascript/spree/core/controllers/address_autocomplete_controller.js +233 -0
- data/app/javascript/spree/core/controllers/address_form_controller.js +98 -0
- data/app/javascript/spree/core/controllers/enable_button_controller.js +29 -0
- data/app/javascript/spree/core/helpers/address_autocomplete/google_places_suggestions_provider.js +179 -0
- data/app/javascript/spree/core/helpers/debounce.js +9 -0
- data/app/javascript/spree/core/helpers/scroll_lock.js +25 -0
- data/app/jobs/spree/addresses/geocode_address_job.rb +31 -0
- data/app/jobs/spree/base_job.rb +1 -0
- data/app/jobs/spree/coupon_codes/bulk_generate_job.rb +17 -0
- data/app/jobs/spree/exports/generate_job.rb +12 -0
- data/app/jobs/spree/products/auto_match_taxons_job.rb +14 -0
- data/app/jobs/spree/products/touch_taxons_job.rb +12 -0
- data/app/jobs/spree/reports/generate_job.rb +12 -0
- data/app/jobs/spree/stock_locations/stock_items/create_job.rb +1 -1
- data/app/jobs/spree/themes/duplicate_components_job.rb +59 -0
- data/app/jobs/spree/themes/screenshot_job.rb +81 -0
- data/app/jobs/spree/variants/remove_from_incomplete_orders_job.rb +2 -0
- data/app/jobs/spree/variants/remove_line_item_job.rb +2 -0
- data/app/mailers/spree/base_mailer.rb +51 -0
- data/app/mailers/spree/export_mailer.rb +19 -0
- data/app/mailers/spree/report_mailer.rb +20 -0
- data/app/mailers/spree/test_mailer.rb +8 -0
- data/app/models/action_text/rich_text_decorator.rb +11 -0
- data/app/models/action_text/video_embed.rb +13 -0
- data/app/models/acts_as_taggable_on/tag_decorator.rb +10 -0
- data/app/models/concerns/spree/calculated_adjustments.rb +2 -0
- data/app/models/concerns/spree/display_on.rb +13 -0
- data/app/models/concerns/spree/has_one_link.rb +42 -0
- data/app/models/concerns/spree/has_page_links.rb +53 -0
- data/app/models/concerns/spree/metadata.rb +3 -7
- data/app/models/concerns/spree/multi_searchable.rb +21 -0
- data/app/models/concerns/spree/multi_store_resource.rb +9 -0
- data/app/models/concerns/spree/number_as_param.rb +4 -2
- data/app/models/concerns/spree/parameterizable_name.rb +21 -0
- data/app/models/concerns/spree/previewable.rb +17 -0
- data/app/models/concerns/spree/product_scopes.rb +7 -7
- data/app/models/concerns/spree/stores/setup.rb +52 -0
- data/app/models/concerns/spree/stores/socials.rb +68 -0
- data/app/models/concerns/spree/user_address.rb +4 -0
- data/app/models/concerns/spree/user_methods.rb +61 -11
- data/app/models/concerns/spree/user_reporting.rb +14 -6
- data/app/models/concerns/spree/user_roles.rb +1 -1
- data/app/models/spree/ability.rb +4 -2
- data/app/models/spree/address.rb +122 -28
- data/app/models/spree/adjustment.rb +4 -1
- data/app/models/spree/asset/support/active_storage.rb +1 -1
- data/app/models/spree/asset.rb +18 -6
- data/app/models/spree/base.rb +38 -7
- data/app/models/spree/base_analytics_event_handler.rb +49 -0
- data/app/models/spree/calculator.rb +1 -1
- data/app/models/spree/classification.rb +10 -1
- data/app/models/spree/country.rb +1 -1
- data/app/models/spree/coupon_code.rb +38 -0
- data/app/models/spree/credit_card.rb +4 -3
- data/app/models/spree/current.rb +9 -0
- data/app/models/spree/custom_domain.rb +53 -0
- data/app/models/spree/customer_return.rb +13 -1
- data/app/models/spree/data_feed.rb +1 -1
- data/app/models/spree/digital.rb +5 -6
- data/app/models/spree/digital_link.rb +11 -6
- data/app/models/spree/export.rb +172 -0
- data/app/models/spree/exports/orders.rb +23 -0
- data/app/models/spree/exports/products.rb +35 -0
- data/app/models/spree/gateway/bogus.rb +5 -0
- data/app/models/spree/gateway.rb +14 -4
- data/app/models/spree/gateway_customer.rb +13 -0
- data/app/models/spree/image/configuration/active_storage.rb +1 -1
- data/app/models/spree/inventory_unit.rb +1 -1
- data/app/models/spree/legacy_user.rb +3 -1
- data/app/models/spree/line_item.rb +37 -2
- data/app/models/spree/log_entry.rb +1 -1
- data/app/models/spree/option_type.rb +40 -6
- data/app/models/spree/option_type_prototype.rb +1 -1
- data/app/models/spree/option_value.rb +35 -5
- data/app/models/spree/option_value_variant.rb +2 -2
- data/app/models/spree/order/address_book.rb +34 -15
- data/app/models/spree/order/checkout.rb +12 -2
- data/app/models/spree/order/currency_updater.rb +1 -1
- data/app/models/spree/order/digital.rb +14 -3
- data/app/models/spree/order/emails.rb +1 -1
- data/app/models/spree/order/payments.rb +1 -13
- data/app/models/spree/order/store_credit.rb +17 -5
- data/app/models/spree/order/webhooks.rb +1 -1
- data/app/models/spree/order.rb +179 -49
- data/app/models/spree/order_promotion.rb +1 -1
- data/app/models/spree/order_updater.rb +9 -3
- data/app/models/spree/page.rb +184 -0
- data/app/models/spree/page_block.rb +69 -0
- data/app/models/spree/page_blocks/buttons.rb +29 -0
- data/app/models/spree/page_blocks/heading.rb +18 -0
- data/app/models/spree/page_blocks/image.rb +17 -0
- data/app/models/spree/page_blocks/link.rb +21 -0
- data/app/models/spree/page_blocks/mega_nav.rb +33 -0
- data/app/models/spree/page_blocks/mega_nav_with_subcategories.rb +32 -0
- data/app/models/spree/page_blocks/nav.rb +15 -0
- data/app/models/spree/page_blocks/newsletter_form.rb +18 -0
- data/app/models/spree/page_blocks/products/buy_buttons.rb +12 -0
- data/app/models/spree/page_blocks/products/price.rb +18 -0
- data/app/models/spree/page_blocks/products/quantity_selector.rb +12 -0
- data/app/models/spree/page_blocks/products/share.rb +8 -0
- data/app/models/spree/page_blocks/products/title.rb +15 -0
- data/app/models/spree/page_blocks/products/variant_picker.rb +9 -0
- data/app/models/spree/page_blocks/subheading.rb +17 -0
- data/app/models/spree/page_blocks/text.rb +16 -0
- data/app/models/spree/page_link.rb +59 -0
- data/app/models/spree/page_section.rb +215 -0
- data/app/models/spree/page_sections/announcement_bar.rb +30 -0
- data/app/models/spree/page_sections/collection_banner.rb +18 -0
- data/app/models/spree/page_sections/custom_code.rb +11 -0
- data/app/models/spree/page_sections/featured_posts.rb +43 -0
- data/app/models/spree/page_sections/featured_product.rb +46 -0
- data/app/models/spree/page_sections/featured_taxon.rb +88 -0
- data/app/models/spree/page_sections/featured_taxons.rb +45 -0
- data/app/models/spree/page_sections/footer.rb +94 -0
- data/app/models/spree/page_sections/header.rb +62 -0
- data/app/models/spree/page_sections/image_banner.rb +38 -0
- data/app/models/spree/page_sections/image_with_text.rb +48 -0
- data/app/models/spree/page_sections/main_password_footer.rb +18 -0
- data/app/models/spree/page_sections/main_password_header.rb +20 -0
- data/app/models/spree/page_sections/newsletter.rb +47 -0
- data/app/models/spree/page_sections/page_title.rb +19 -0
- data/app/models/spree/page_sections/post_details.rb +19 -0
- data/app/models/spree/page_sections/post_grid.rb +19 -0
- data/app/models/spree/page_sections/product_details.rb +16 -0
- data/app/models/spree/page_sections/product_grid.rb +13 -0
- data/app/models/spree/page_sections/related_products.rb +60 -0
- data/app/models/spree/page_sections/rich_text.rb +20 -0
- data/app/models/spree/page_sections/taxon_banner.rb +18 -0
- data/app/models/spree/page_sections/taxon_grid.rb +17 -0
- data/app/models/spree/page_sections/video.rb +99 -0
- data/app/models/spree/pages/account.rb +15 -0
- data/app/models/spree/pages/cart.rb +9 -0
- data/app/models/spree/pages/checkout.rb +9 -0
- data/app/models/spree/pages/custom.rb +34 -0
- data/app/models/spree/pages/homepage.rb +68 -0
- data/app/models/spree/pages/login.rb +15 -0
- data/app/models/spree/pages/password.rb +57 -0
- data/app/models/spree/pages/post.rb +27 -0
- data/app/models/spree/pages/post_list.rb +32 -0
- data/app/models/spree/pages/product_details.rb +29 -0
- data/app/models/spree/pages/search_results.rb +43 -0
- data/app/models/spree/pages/shop_all.rb +36 -0
- data/app/models/spree/pages/taxon.rb +29 -0
- data/app/models/spree/pages/taxon_list.rb +41 -0
- data/app/models/spree/pages/wishlist.rb +11 -0
- data/app/models/spree/payment/gateway_options.rb +13 -15
- data/app/models/spree/payment/processing.rb +1 -1
- data/app/models/spree/payment/webhooks.rb +1 -1
- data/app/models/spree/payment.rb +61 -12
- data/app/models/spree/payment_capture_event.rb +1 -1
- data/app/models/spree/payment_method/store_credit.rb +9 -1
- data/app/models/spree/payment_method.rb +26 -8
- data/app/models/spree/payment_source.rb +2 -2
- data/app/models/spree/post.rb +108 -0
- data/app/models/spree/post_category.rb +33 -0
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +10 -3
- data/app/models/spree/product/webhooks.rb +1 -1
- data/app/models/spree/product.rb +325 -54
- data/app/models/spree/product_option_type.rb +1 -1
- data/app/models/spree/product_promotion_rule.rb +1 -1
- data/app/models/spree/product_property.rb +4 -1
- data/app/models/spree/promotion/actions/create_line_items.rb +37 -2
- data/app/models/spree/promotion/rules/country.rb +22 -4
- data/app/models/spree/promotion/rules/currency.rb +21 -0
- data/app/models/spree/promotion/rules/item_total.rb +12 -3
- data/app/models/spree/promotion/rules/option_value.rb +5 -20
- data/app/models/spree/promotion/rules/product.rb +33 -1
- data/app/models/spree/promotion/rules/taxon.rb +31 -0
- data/app/models/spree/promotion/rules/user.rb +33 -4
- data/app/models/spree/promotion.rb +136 -15
- data/app/models/spree/promotion_action.rb +31 -1
- data/app/models/spree/promotion_action_line_item.rb +1 -1
- data/app/models/spree/promotion_category.rb +1 -1
- data/app/models/spree/promotion_handler/cart.rb +1 -1
- data/app/models/spree/promotion_handler/coupon.rb +46 -8
- data/app/models/spree/promotion_handler/free_shipping.rb +1 -1
- data/app/models/spree/promotion_handler/promotion_duplicator.rb +6 -5
- data/app/models/spree/promotion_rule.rb +23 -1
- data/app/models/spree/promotion_rule_taxon.rb +1 -1
- data/app/models/spree/promotion_rule_user.rb +1 -1
- data/app/models/spree/property.rb +11 -3
- data/app/models/spree/property_prototype.rb +1 -1
- data/app/models/spree/prototype.rb +1 -1
- data/app/models/spree/prototype_taxon.rb +1 -1
- data/app/models/spree/refund.rb +24 -4
- data/app/models/spree/refund_reason.rb +12 -2
- data/app/models/spree/reimbursement/credit.rb +1 -1
- data/app/models/spree/reimbursement/emails.rb +1 -1
- data/app/models/spree/reimbursement.rb +5 -3
- data/app/models/spree/reimbursement_type.rb +1 -1
- data/app/models/spree/report.rb +110 -0
- data/app/models/spree/report_line_item.rb +27 -0
- data/app/models/spree/report_line_items/products_performance.rb +76 -0
- data/app/models/spree/report_line_items/sales_total.rb +49 -0
- data/app/models/spree/reports/products_performance.rb +44 -0
- data/app/models/spree/reports/sales_total.rb +14 -0
- data/app/models/spree/return_authorization.rb +4 -1
- data/app/models/spree/return_authorization_reason.rb +1 -1
- data/app/models/spree/return_item.rb +2 -1
- data/app/models/spree/role.rb +5 -2
- data/app/models/spree/role_user.rb +2 -2
- data/app/models/spree/shipment/emails.rb +1 -1
- data/app/models/spree/shipment/webhooks.rb +1 -1
- data/app/models/spree/shipment.rb +14 -4
- data/app/models/spree/shipping_category.rb +1 -1
- data/app/models/spree/shipping_method.rb +48 -8
- data/app/models/spree/shipping_method_category.rb +1 -1
- data/app/models/spree/shipping_method_zone.rb +1 -1
- data/app/models/spree/shipping_rate.rb +21 -3
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/state_change.rb +1 -1
- data/app/models/spree/stock_item/webhooks.rb +1 -1
- data/app/models/spree/stock_item.rb +9 -6
- data/app/models/spree/stock_location.rb +35 -8
- data/app/models/spree/stock_movement/webhooks.rb +1 -1
- data/app/models/spree/stock_movement.rb +9 -3
- data/app/models/spree/stock_transfer.rb +41 -3
- data/app/models/spree/store.rb +345 -72
- data/app/models/spree/store_credit.rb +12 -4
- data/app/models/spree/store_credit_category.rb +1 -1
- data/app/models/spree/store_credit_event.rb +21 -1
- data/app/models/spree/store_credit_type.rb +1 -1
- data/app/models/spree/store_payment_method.rb +1 -1
- data/app/models/spree/store_product.rb +1 -1
- data/app/models/spree/store_promotion.rb +1 -1
- data/app/models/spree/tax_category.rb +15 -1
- data/app/models/spree/tax_rate.rb +1 -1
- data/app/models/spree/taxon.rb +210 -27
- data/app/models/spree/taxon_image/configuration/active_storage.rb +1 -1
- data/app/models/spree/taxon_rule.rb +25 -0
- data/app/models/spree/taxon_rules/available_on.rb +20 -0
- data/app/models/spree/taxon_rules/sale.rb +16 -0
- data/app/models/spree/taxon_rules/tag.rb +19 -0
- data/app/models/spree/taxonomy.rb +3 -2
- data/app/models/spree/theme.rb +200 -0
- data/app/models/spree/themes/default.rb +94 -0
- data/app/models/spree/variant/webhooks.rb +1 -1
- data/app/models/spree/variant.rb +211 -62
- data/app/models/spree/wished_item.rb +1 -1
- data/app/models/spree/wishlist.rb +1 -1
- data/app/models/spree/zone.rb +1 -1
- data/app/models/spree/zone_member.rb +1 -1
- data/app/presenters/spree/csv/order_line_item_presenter.rb +145 -0
- data/app/presenters/spree/csv/product_presenter.rb +63 -0
- data/app/presenters/spree/csv/product_variant_presenter.rb +130 -0
- data/app/services/spree/addresses/create.rb +31 -6
- data/app/services/spree/addresses/helper.rb +7 -4
- data/app/services/spree/addresses/update.rb +79 -12
- data/app/services/spree/cart/remove_out_of_stock_items.rb +56 -0
- data/app/services/spree/checkout/add_store_credit.rb +6 -1
- data/app/services/spree/checkout/advance.rb +44 -4
- data/app/services/spree/checkout/select_shipping_method.rb +2 -0
- data/app/services/spree/coupon_codes/bulk_generate.rb +37 -0
- data/app/services/spree/coupon_codes/coupon_codes_handler.rb +34 -0
- data/app/services/spree/orders/create_user_account.rb +70 -0
- data/app/services/spree/orders/update_contact_information.rb +19 -0
- data/app/services/spree/products/auto_match_taxons.rb +64 -0
- data/app/services/spree/products/duplicator.rb +121 -0
- data/app/services/spree/products/prepare_nested_attributes.rb +169 -0
- data/app/services/spree/seeds/admin_user.rb +22 -0
- data/app/services/spree/seeds/all.rb +1 -0
- data/app/services/spree/seeds/stores.rb +5 -10
- data/app/services/spree/seeds/zones.rb +2 -0
- data/app/services/spree/tags/bulk_add.rb +38 -0
- data/app/services/spree/tags/bulk_remove.rb +24 -0
- data/app/services/spree/taxons/add_products.rb +39 -0
- data/app/services/spree/taxons/regenerate_products.rb +53 -0
- data/app/services/spree/taxons/remove_products.rb +53 -0
- data/app/services/spree/taxons/touch_featured_sections.rb +21 -0
- data/app/services/spree/themes/duplicator.rb +40 -0
- data/app/services/spree/variants/remove_line_items.rb +1 -1
- data/app/sorters/spree/classifications/sort.rb +68 -0
- data/app/sorters/spree/products/sort.rb +2 -3
- data/app/views/action_text/video_embeds/_thumbnail.html.erb +1 -0
- data/app/views/action_text/video_embeds/_video_embed.html.erb +3 -0
- data/app/views/active_storage/blobs/_blob.html.erb +20 -0
- data/app/views/layouts/action_text/contents/_content.html.erb +3 -0
- data/app/views/layouts/spree/base_mailer.html.erb +46 -0
- data/app/views/spree/addresses/_form.html.erb +58 -0
- data/app/views/spree/addresses/_suggestions_box.erb +14 -0
- data/app/views/spree/export_mailer/export_done.html.erb +15 -0
- data/app/views/spree/report_mailer/report_done.html.erb +15 -0
- data/app/views/spree/shared/_base_mailer_footer.html.erb +12 -0
- data/app/views/spree/shared/_base_mailer_header.html.erb +6 -0
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +456 -0
- data/app/views/spree/shared/_google_places_api_loader.html.erb +7 -0
- data/app/views/spree/shared/_mailer_line_item.html.erb +12 -0
- data/app/views/spree/shared/_mailer_logo.html.erb +41 -0
- data/app/views/spree/shared/_payment.html.erb +41 -0
- data/app/views/spree/test_mailer/test_email.html.erb +40 -0
- data/app/views/spree/test_mailer/test_email.text.erb +4 -0
- data/config/i18n-tasks.yml +178 -0
- data/config/importmap.rb +14 -0
- data/config/initializers/acts_as_taggable_on.rb +2 -0
- data/config/initializers/inflections.rb +2 -0
- data/config/initializers/mobility.rb +4 -0
- data/config/initializers/oembed.rb +1 -0
- data/config/locales/en.yml +823 -413
- data/config/routes.rb +6 -5
- data/db/migrate/20210914000000_spree_four_three.rb +0 -79
- data/db/migrate/20240913143518_change_default_value_of_spree_option_types_filterable.rb +5 -0
- data/db/migrate/20240914153106_add_display_on_to_spree_properties.rb +5 -0
- data/db/migrate/20240915144935_add_position_to_spree_properties.rb +6 -0
- data/db/migrate/20241004181911_create_spree_coupon_codes.rb +15 -0
- data/db/migrate/20241005093437_add_multi_code_to_spree_promotions.rb +14 -0
- data/db/migrate/20241014140140_translate_rich_texts.rb +17 -0
- data/db/migrate/20241030134309_create_spree_exports.rb +23 -0
- data/db/migrate/20241104083457_migrate_spree_promotion_rules_option_value_eligible_values.rb +16 -0
- data/db/migrate/20241123110646_add_estimated_transit_fields_to_spree_shipping_methods.rb +6 -0
- data/db/migrate/20241127193411_create_spree_taxon_rules.rb +13 -0
- data/db/migrate/20241127223627_add_rules_match_policy_and_sort_order_to_spree_taxons.rb +6 -0
- data/db/migrate/20241128103947_add_automatic_to_spree_taxons.rb +5 -0
- data/db/migrate/20241218183905_add_gateway_customer_profile_id_to_spree_payment_sources.rb +5 -0
- data/db/migrate/20250107220432_add_accept_marketing_and_signup_for_an_account_to_spree_orders.rb +6 -0
- data/db/migrate/20250110171203_add_quick_checkout_to_spree_addresses.rb +6 -0
- data/db/migrate/20250113180019_add_preferences_to_spree_stores.rb +5 -0
- data/db/migrate/20250114193857_add_metadata_to_spree_stores.rb +13 -0
- data/db/migrate/20250119165904_create_spree_custom_domains.rb +22 -0
- data/db/migrate/20250120094216_create_page_builder_models.rb +78 -0
- data/db/migrate/20250120152208_add_default_locale_to_action_text_rich_texts.rb +7 -0
- data/db/migrate/20250121160028_create_spree_posts_and_spree_post_categories.rb +33 -0
- data/db/migrate/20250122113708_add_first_and_last_name_to_spree_admin_class.rb +9 -0
- data/db/migrate/20250123135358_add_custom_code_fields_to_spree_store.rb +7 -0
- data/db/migrate/20250127083740_add_kind_to_spree_properties.rb +5 -0
- data/db/migrate/20250127112758_add_latitude_and_longitude_to_spree_addresses.rb +6 -0
- data/db/migrate/20250127151258_add_phone_to_spree_users.rb +5 -0
- data/db/migrate/20250204162453_create_spree_reports.rb +13 -0
- data/db/migrate/20250207084000_add_accepts_email_marketing_field_to_spree_users_table.rb +6 -0
- data/db/migrate/20250217171018_create_action_text_video_embeds.rb +11 -0
- data/db/migrate/20250304115943_add_performed_by_to_spree_reimbursements.rb +5 -0
- data/db/migrate/20250305121352_remove_page_builder_indices.rb +11 -0
- data/db/migrate/20250305121657_remove_spree_posts_indices.rb +7 -0
- data/db/migrate/20250311105934_create_spree_gateway_customers.rb +18 -0
- data/db/migrate/20250312202705_add_unique_index_on_promotion_rules_associations.rb +75 -0
- data/db/migrate/20250313104226_add_user_type_to_spree_role_users.rb +18 -0
- data/db/migrate/20250313175830_add_unique_index_on_promotion_action_line_items.rb +29 -0
- data/db/migrate/20250314144210_create_spree_taggings_and_spree_tags.rb +38 -0
- data/lib/generators/spree/authentication/custom/custom_generator.rb +49 -0
- data/lib/generators/spree/authentication/custom/templates/authentication_helpers.rb.tt +50 -0
- data/lib/generators/spree/authentication/devise/devise_generator.rb +57 -0
- data/lib/generators/spree/authentication/devise/templates/authentication_helpers.rb.tt +50 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
- data/lib/generators/spree/dummy/templates/rails/database.yml +1 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
- data/lib/generators/spree/install/install_generator.rb +21 -36
- data/lib/generators/spree/install/templates/config/initializers/spree.rb +40 -6
- data/lib/normalize_string.rb +18 -0
- data/lib/spree/analytics.rb +11 -0
- data/lib/spree/core/components.rb +1 -1
- data/lib/spree/core/configuration.rb +14 -11
- data/lib/spree/core/controller_helpers/auth.rb +0 -26
- data/lib/spree/core/controller_helpers/order.rb +77 -12
- data/lib/spree/core/controller_helpers/search.rb +2 -0
- data/lib/spree/core/controller_helpers/store.rb +0 -5
- data/lib/spree/core/controller_helpers/strong_parameters.rb +4 -0
- data/lib/spree/core/controller_helpers/turbo.rb +19 -0
- data/lib/spree/core/dependencies.rb +3 -5
- data/lib/spree/core/engine.rb +158 -7
- data/lib/spree/core/preferences/configuration.rb +2 -44
- data/lib/spree/core/preferences/preferable.rb +9 -0
- data/lib/spree/core/preferences/preferable_class_methods.rb +11 -1
- data/lib/spree/core/preferences/runtime_configuration.rb +13 -2
- data/lib/spree/core/search/base.rb +2 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +61 -11
- data/lib/spree/i18n.rb +5 -8
- data/lib/spree/migrations.rb +1 -1
- data/lib/spree/permitted_attributes.rb +24 -15
- data/lib/spree/testing_support/authorization_helpers.rb +9 -6
- data/lib/spree/testing_support/capybara_config.rb +11 -0
- data/lib/spree/testing_support/common_rake.rb +20 -12
- data/lib/spree/testing_support/factories/calculator_factory.rb +16 -0
- data/lib/spree/testing_support/factories/country_factory.rb +8 -0
- data/lib/spree/testing_support/factories/coupon_code_factory.rb +7 -0
- data/lib/spree/testing_support/factories/custom_domain_factory.rb +7 -0
- data/lib/spree/testing_support/factories/export_factory.rb +32 -0
- data/lib/spree/testing_support/factories/gateway_customer_factory.rb +7 -0
- data/lib/spree/testing_support/factories/order_factory.rb +14 -3
- data/lib/spree/testing_support/factories/page_block_factory.rb +21 -0
- data/lib/spree/testing_support/factories/page_factory.rb +33 -0
- data/lib/spree/testing_support/factories/page_link_factory.rb +7 -0
- data/lib/spree/testing_support/factories/page_section_factory.rb +24 -0
- data/lib/spree/testing_support/factories/payment_factory.rb +2 -2
- data/lib/spree/testing_support/factories/post_category_factory.rb +7 -0
- data/lib/spree/testing_support/factories/post_factory.rb +10 -0
- data/lib/spree/testing_support/factories/product_factory.rb +3 -8
- data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_action_factory.rb +5 -0
- data/lib/spree/testing_support/factories/promotion_factory.rb +7 -9
- data/lib/spree/testing_support/factories/promotion_rule_factory.rb +12 -0
- data/lib/spree/testing_support/factories/property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/report_factory.rb +33 -0
- data/lib/spree/testing_support/factories/role_user_factory.rb +7 -0
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +9 -0
- data/lib/spree/testing_support/factories/stock_transfer_factory.rb +5 -2
- data/lib/spree/testing_support/factories/store_factory.rb +6 -9
- data/lib/spree/testing_support/factories/taxon_factory.rb +13 -0
- data/lib/spree/testing_support/factories/taxon_rule_factory.rb +38 -0
- data/lib/spree/testing_support/factories/theme_factory.rb +14 -0
- data/lib/spree/testing_support/factories/user_factory.rb +13 -11
- data/lib/spree/testing_support/factories/variant_factory.rb +23 -5
- data/lib/spree/testing_support/jobs.rb +1 -7
- data/lib/spree/testing_support/metadata.rb +13 -1
- data/lib/spree/testing_support/order_walkthrough.rb +1 -7
- data/lib/spree/testing_support/preferences.rb +1 -4
- data/lib/spree/testing_support/store.rb +26 -0
- data/lib/spree_core.rb +1 -0
- data/vendor/javascript/@rails--request.js.js +4 -0
- data/vendor/javascript/@stimulus-components--auto-submit.js +4 -0
- data/vendor/javascript/stimulus-reveal-controller.js +4 -0
- data/vendor/javascript/tailwindcss-stimulus-components.js +4 -0
- metadata +340 -197
- data/Gemfile +0 -3
- data/app/finders/spree/cms_pages/find.rb +0 -41
- data/app/finders/spree/menus/find.rb +0 -11
- data/app/models/concerns/spree/display_link.rb +0 -30
- data/app/models/spree/cms/pages/feature_page.rb +0 -7
- data/app/models/spree/cms/pages/homepage.rb +0 -20
- data/app/models/spree/cms/pages/standard_page.rb +0 -4
- data/app/models/spree/cms/sections/featured_article.rb +0 -22
- data/app/models/spree/cms/sections/hero_image.rb +0 -38
- data/app/models/spree/cms/sections/image_gallery.rb +0 -97
- data/app/models/spree/cms/sections/product_carousel.rb +0 -14
- data/app/models/spree/cms/sections/rich_text_content.rb +0 -13
- data/app/models/spree/cms/sections/side_by_side_images.rb +0 -68
- data/app/models/spree/cms_page.rb +0 -70
- data/app/models/spree/cms_section.rb +0 -69
- data/app/models/spree/cms_section_image.rb +0 -9
- data/app/models/spree/cms_section_image_one.rb +0 -4
- data/app/models/spree/cms_section_image_three.rb +0 -4
- data/app/models/spree/cms_section_image_two.rb +0 -4
- data/app/models/spree/icon.rb +0 -7
- data/app/models/spree/linkable/homepage.rb +0 -3
- data/app/models/spree/linkable/uri.rb +0 -3
- data/app/models/spree/menu.rb +0 -66
- data/app/models/spree/menu_item.rb +0 -72
- data/brakeman.ignore +0 -328
- data/db/migrate/20211201202851_update_linkable_resource_types.rb +0 -10
- data/db/migrate/20220329113557_fix_cms_pages_unique_indexes.rb +0 -8
- data/lib/generators/spree/custom_authentication/custom_authentication_generator.rb +0 -23
- data/lib/generators/spree/custom_authentication/templates/authentication_helpers.rb.tt +0 -23
- data/lib/generators/spree/custom_user/custom_user_generator.rb +0 -46
- data/lib/generators/spree/custom_user/templates/current_user_helpers.rb.tt +0 -15
- data/lib/generators/spree/custom_user/templates/initializer.rb.tt +0 -1
- data/lib/generators/spree/custom_user/templates/migration.rb.tt +0 -7
- data/lib/generators/spree/dummy/templates/package.json +0 -12
- data/lib/spree/core/product_duplicator.rb +0 -85
- data/lib/spree/core/runtime_configuration.rb +0 -10
- data/lib/spree/testing_support/factories/cms_page_factory.rb +0 -20
- data/lib/spree/testing_support/factories/cms_section_factory.rb +0 -31
- data/lib/spree/testing_support/factories/icon_factory.rb +0 -9
- data/lib/spree/testing_support/factories/menu_factory.rb +0 -16
- data/lib/spree/testing_support/factories/menu_item_factory.rb +0 -10
- data/script/rails +0 -9
- data/spec/fixtures/favicon.ico +0 -0
- data/spec/fixtures/files/icon_256x256.gif +0 -0
- data/spec/fixtures/files/icon_256x256.png +0 -0
- data/spec/fixtures/files/icon_512x512.png +0 -0
- data/spec/fixtures/files/img_256x128.png +0 -0
- data/spec/fixtures/text-file.txt +0 -1
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spree_core.gemspec +0 -62
@@ -1,72 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
class MenuItem < Spree::Base
|
3
|
-
include Spree::DisplayLink
|
4
|
-
if defined?(Spree::Webhooks::HasWebhooks)
|
5
|
-
include Spree::Webhooks::HasWebhooks
|
6
|
-
end
|
7
|
-
|
8
|
-
acts_as_nested_set dependent: :destroy
|
9
|
-
|
10
|
-
ITEM_TYPE = %w[Link Container]
|
11
|
-
LINKED_RESOURCE_TYPE = ['Spree::Linkable::Uri', 'Spree::Linkable::Homepage', 'Spree::Product', 'Spree::Taxon', 'Spree::CmsPage']
|
12
|
-
|
13
|
-
belongs_to :menu, touch: true
|
14
|
-
|
15
|
-
before_create :ensure_item_belongs_to_root
|
16
|
-
before_update :reset_link_attributes
|
17
|
-
before_save :paremeterize_code
|
18
|
-
|
19
|
-
after_save :touch_ancestors_and_menu
|
20
|
-
after_touch :touch_ancestors_and_menu
|
21
|
-
|
22
|
-
validates :name, :menu, presence: true
|
23
|
-
validates :item_type, inclusion: { in: ITEM_TYPE }
|
24
|
-
validates :linked_resource_type, inclusion: { in: LINKED_RESOURCE_TYPE }
|
25
|
-
|
26
|
-
has_one :icon, as: :viewable, dependent: :destroy, class_name: 'Spree::Icon'
|
27
|
-
accepts_nested_attributes_for :icon, reject_if: :all_blank
|
28
|
-
|
29
|
-
def container?
|
30
|
-
item_type == 'Container'
|
31
|
-
end
|
32
|
-
|
33
|
-
def code?(item_code = nil)
|
34
|
-
if item_code
|
35
|
-
code == item_code
|
36
|
-
else
|
37
|
-
code.present?
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def reset_link_attributes
|
44
|
-
if linked_resource_type_changed? || item_type == 'Container'
|
45
|
-
self.linked_resource_id = nil
|
46
|
-
self.destination = nil
|
47
|
-
self.new_window = false
|
48
|
-
|
49
|
-
self.linked_resource_type = 'Spree::Linkable::Uri' if item_type == 'Container'
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def ensure_item_belongs_to_root
|
54
|
-
if menu.try(:root).present? && parent_id.nil?
|
55
|
-
self.parent = menu.root
|
56
|
-
|
57
|
-
store_new_parent
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def touch_ancestors_and_menu
|
62
|
-
ancestors.update_all(updated_at: Time.current)
|
63
|
-
menu.try!(:touch)
|
64
|
-
end
|
65
|
-
|
66
|
-
def paremeterize_code
|
67
|
-
return if code.blank?
|
68
|
-
|
69
|
-
self.code = code.parameterize
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
data/brakeman.ignore
DELETED
@@ -1,328 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"ignored_warnings": [
|
3
|
-
{
|
4
|
-
"warning_type": "SQL Injection",
|
5
|
-
"warning_code": 0,
|
6
|
-
"fingerprint": "011b2643940ba1112f7a737e403abe3616ad91764703c801cc35a48d36b721da",
|
7
|
-
"check_name": "SQL",
|
8
|
-
"message": "Possible SQL injection",
|
9
|
-
"file": "app/models/concerns/spree/product_scopes.rb",
|
10
|
-
"line": 64,
|
11
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
12
|
-
"code": "where(\"#{price_table_name}.amount <= ?\", price)",
|
13
|
-
"render_path": null,
|
14
|
-
"location": {
|
15
|
-
"type": "method",
|
16
|
-
"class": "Spree",
|
17
|
-
"method": null
|
18
|
-
},
|
19
|
-
"user_input": "price_table_name",
|
20
|
-
"confidence": "Medium",
|
21
|
-
"cwe_id": [
|
22
|
-
89
|
23
|
-
],
|
24
|
-
"note": "interpolating table name"
|
25
|
-
},
|
26
|
-
{
|
27
|
-
"warning_type": "Redirect",
|
28
|
-
"warning_code": 18,
|
29
|
-
"fingerprint": "05d3870f66d650510c859a8949d5686b05eb028825083b096d0f65fedf80b118",
|
30
|
-
"check_name": "Redirect",
|
31
|
-
"message": "Possible unprotected redirect",
|
32
|
-
"file": "lib/spree/core/controller_helpers/auth.rb",
|
33
|
-
"line": 25,
|
34
|
-
"link": "https://brakemanscanner.org/docs/warning_types/redirect/",
|
35
|
-
"code": "redirect_to((session[\"spree_user_return_to\"] or (request.env[\"HTTP_REFERER\"] or default)))",
|
36
|
-
"render_path": null,
|
37
|
-
"location": {
|
38
|
-
"type": "method",
|
39
|
-
"class": "Spree::Core::ControllerHelpers::Auth",
|
40
|
-
"method": "redirect_back_or_default"
|
41
|
-
},
|
42
|
-
"user_input": "request.env[\"HTTP_REFERER\"]",
|
43
|
-
"confidence": "High",
|
44
|
-
"cwe_id": [
|
45
|
-
601
|
46
|
-
],
|
47
|
-
"note": ""
|
48
|
-
},
|
49
|
-
{
|
50
|
-
"warning_type": "SQL Injection",
|
51
|
-
"warning_code": 0,
|
52
|
-
"fingerprint": "1c12fcb833b0ddffa07880acb7e604922c0d1d52de598316186241baf16551cd",
|
53
|
-
"check_name": "SQL",
|
54
|
-
"message": "Possible SQL injection",
|
55
|
-
"file": "app/finders/spree/taxons/find.rb",
|
56
|
-
"line": 75,
|
57
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
58
|
-
"code": "taxons.joins(\"INNER JOIN #{Spree::Taxon.table_name} AS parent_taxon ON parent_taxon.id = #{Spree::Taxon.table_name}.parent_id\").join_translation_table(Taxon, \"parent_taxon\").where([\"#{Taxon.translation_table_alias}.permalink = ?\", parent_permalink])",
|
59
|
-
"render_path": null,
|
60
|
-
"location": {
|
61
|
-
"type": "method",
|
62
|
-
"class": "Spree::Taxons::Find",
|
63
|
-
"method": "by_parent_permalink"
|
64
|
-
},
|
65
|
-
"user_input": "Taxon.translation_table_alias",
|
66
|
-
"confidence": "Weak",
|
67
|
-
"cwe_id": [
|
68
|
-
89
|
69
|
-
],
|
70
|
-
"note": ""
|
71
|
-
},
|
72
|
-
{
|
73
|
-
"warning_type": "SQL Injection",
|
74
|
-
"warning_code": 0,
|
75
|
-
"fingerprint": "1f02952550c2f54d044c9577a45e7ba7c7990c8b8a59d1dac83a96790237f507",
|
76
|
-
"check_name": "SQL",
|
77
|
-
"message": "Possible SQL injection",
|
78
|
-
"file": "app/models/concerns/spree/product_scopes.rb",
|
79
|
-
"line": 139,
|
80
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
81
|
-
"code": "joins(:properties).join_translation_table(Property).join_translation_table(ProductProperty).where(\"#{ProductProperty.translation_table_alias}.value = ?\", value)",
|
82
|
-
"render_path": null,
|
83
|
-
"location": {
|
84
|
-
"type": "method",
|
85
|
-
"class": "Spree::ProductScopes",
|
86
|
-
"method": null
|
87
|
-
},
|
88
|
-
"user_input": "ProductProperty.translation_table_alias",
|
89
|
-
"confidence": "Weak",
|
90
|
-
"cwe_id": [
|
91
|
-
89
|
92
|
-
],
|
93
|
-
"note": ""
|
94
|
-
},
|
95
|
-
{
|
96
|
-
"warning_type": "SQL Injection",
|
97
|
-
"warning_code": 0,
|
98
|
-
"fingerprint": "7928c0813a0bf084ead091b4554ef6abea9ae9c7167936f5c62da9e328b9f736",
|
99
|
-
"check_name": "SQL",
|
100
|
-
"message": "Possible SQL injection",
|
101
|
-
"file": "app/models/concerns/spree/product_scopes.rb",
|
102
|
-
"line": 139,
|
103
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
104
|
-
"code": "joins(:properties).join_translation_table(Property).join_translation_table(ProductProperty).where(\"#{ProductProperty.translation_table_alias}.value = ?\", value)",
|
105
|
-
"render_path": null,
|
106
|
-
"location": {
|
107
|
-
"type": "method",
|
108
|
-
"class": "Spree",
|
109
|
-
"method": null
|
110
|
-
},
|
111
|
-
"user_input": "ProductProperty.translation_table_alias",
|
112
|
-
"confidence": "Weak",
|
113
|
-
"cwe_id": [
|
114
|
-
89
|
115
|
-
],
|
116
|
-
"note": ""
|
117
|
-
},
|
118
|
-
{
|
119
|
-
"warning_type": "SQL Injection",
|
120
|
-
"warning_code": 0,
|
121
|
-
"fingerprint": "857c335935a00f584137f31dbcb1a4532af5c8bb5cf53a86058b4af98c6597dc",
|
122
|
-
"check_name": "SQL",
|
123
|
-
"message": "Possible SQL injection",
|
124
|
-
"file": "lib/spree/translation_migrations.rb",
|
125
|
-
"line": 21,
|
126
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
127
|
-
"code": "ActiveRecord::Base.connection.execute(\"\\n UPDATE #{resource_class.table_name}\\n SET #{resource_class.translatable_fields.map do\n \"#{f}=null\"\n end.join(\", \")};\\n \")",
|
128
|
-
"render_path": null,
|
129
|
-
"location": {
|
130
|
-
"type": "method",
|
131
|
-
"class": "Spree::TranslationMigrations",
|
132
|
-
"method": "transfer_translation_data"
|
133
|
-
},
|
134
|
-
"user_input": "resource_class.translatable_fields.map do\n \"#{f}=null\"\n end.join(\", \")",
|
135
|
-
"confidence": "Medium",
|
136
|
-
"cwe_id": [
|
137
|
-
89
|
138
|
-
],
|
139
|
-
"note": ""
|
140
|
-
},
|
141
|
-
{
|
142
|
-
"warning_type": "SQL Injection",
|
143
|
-
"warning_code": 0,
|
144
|
-
"fingerprint": "965d3919f811ab63b7b8d62da528559a7f38dc122c57efea7136e7ec5ef1f062",
|
145
|
-
"check_name": "SQL",
|
146
|
-
"message": "Possible SQL injection",
|
147
|
-
"file": "app/models/concerns/spree/product_scopes.rb",
|
148
|
-
"line": 68,
|
149
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
150
|
-
"code": "where(\"#{price_table_name}.amount >= ?\", price)",
|
151
|
-
"render_path": null,
|
152
|
-
"location": {
|
153
|
-
"type": "method",
|
154
|
-
"class": "Spree::ProductScopes",
|
155
|
-
"method": null
|
156
|
-
},
|
157
|
-
"user_input": "price_table_name",
|
158
|
-
"confidence": "Medium",
|
159
|
-
"cwe_id": [
|
160
|
-
89
|
161
|
-
],
|
162
|
-
"note": "interpolating table name"
|
163
|
-
},
|
164
|
-
{
|
165
|
-
"warning_type": "SQL Injection",
|
166
|
-
"warning_code": 0,
|
167
|
-
"fingerprint": "98607ecfb86c2d3c2567390f813861edbc42d6ffa9f482afb7c0b3464eaf6e73",
|
168
|
-
"check_name": "SQL",
|
169
|
-
"message": "Possible SQL injection",
|
170
|
-
"file": "app/models/concerns/spree/translatable_resource_scopes.rb",
|
171
|
-
"line": 18,
|
172
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
173
|
-
"code": "joins(\"LEFT OUTER JOIN #{translatable_class::Translation.table_name} #{translatable_class.translation_table_alias}\\n ON #{translatable_class.translation_table_alias}.#{\"#{translatable_class.table_name.singularize}_id\"} = #{(translatable_class.table_name or join_on_table_alias)}.id\\n AND #{translatable_class.translation_table_alias}.locale = '#{Mobility.locale}'\")",
|
174
|
-
"render_path": null,
|
175
|
-
"location": {
|
176
|
-
"type": "method",
|
177
|
-
"class": "Spree::TranslatableResourceScopes",
|
178
|
-
"method": "join_translation_table"
|
179
|
-
},
|
180
|
-
"user_input": "translatable_class.translation_table_alias",
|
181
|
-
"confidence": "Medium",
|
182
|
-
"cwe_id": [
|
183
|
-
89
|
184
|
-
],
|
185
|
-
"note": ""
|
186
|
-
},
|
187
|
-
{
|
188
|
-
"warning_type": "SQL Injection",
|
189
|
-
"warning_code": 0,
|
190
|
-
"fingerprint": "abd8e90e7a7dfbcdcd6d44fd3fb550598aee6d7a9ef2bb132ad1a18a3c50be30",
|
191
|
-
"check_name": "SQL",
|
192
|
-
"message": "Possible SQL injection",
|
193
|
-
"file": "app/models/concerns/spree/product_scopes.rb",
|
194
|
-
"line": 64,
|
195
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
196
|
-
"code": "where(\"#{price_table_name}.amount <= ?\", price)",
|
197
|
-
"render_path": null,
|
198
|
-
"location": {
|
199
|
-
"type": "method",
|
200
|
-
"class": "Spree::ProductScopes",
|
201
|
-
"method": null
|
202
|
-
},
|
203
|
-
"user_input": "price_table_name",
|
204
|
-
"confidence": "Medium",
|
205
|
-
"cwe_id": [
|
206
|
-
89
|
207
|
-
],
|
208
|
-
"note": "interpolating table name"
|
209
|
-
},
|
210
|
-
{
|
211
|
-
"warning_type": "SQL Injection",
|
212
|
-
"warning_code": 0,
|
213
|
-
"fingerprint": "c1c97347a2d74ea41d46519e3bfbd94c511a1bd9c285f3f2a1fa0cb7e624d232",
|
214
|
-
"check_name": "SQL",
|
215
|
-
"message": "Possible SQL injection",
|
216
|
-
"file": "lib/spree/translation_migrations.rb",
|
217
|
-
"line": 32,
|
218
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
219
|
-
"code": "ActiveRecord::Base.connection.execute(\"\\n UPDATE #{resource_class.table_name}\\n SET (#{resource_class.translatable_fields.join(\", \")}) = #{(\"ROW\" or \"\")}(#{resource_class.translatable_fields.map do\n \"#{resource_class::Translation.table_name}.#{f}\"\n end.join(\", \")})\\n FROM #{resource_class::Translation.table_name}\\n WHERE #{resource_class::Translation.table_name}.#{\"#{resource_class.table_name.singularize}_id\"} = #{resource_class.table_name}.id\\n \")",
|
220
|
-
"render_path": null,
|
221
|
-
"location": {
|
222
|
-
"type": "method",
|
223
|
-
"class": "Spree::TranslationMigrations",
|
224
|
-
"method": "revert_translation_data_transfer"
|
225
|
-
},
|
226
|
-
"user_input": "resource_class.translatable_fields.join(\", \")",
|
227
|
-
"confidence": "Medium",
|
228
|
-
"cwe_id": [
|
229
|
-
89
|
230
|
-
],
|
231
|
-
"note": ""
|
232
|
-
},
|
233
|
-
{
|
234
|
-
"warning_type": "SQL Injection",
|
235
|
-
"warning_code": 0,
|
236
|
-
"fingerprint": "c2bc48d98076b7c4fc3314c6a85f7bd1132efe5fcc346da4d28df7c25f93633f",
|
237
|
-
"check_name": "SQL",
|
238
|
-
"message": "Possible SQL injection",
|
239
|
-
"file": "app/models/spree/variant.rb",
|
240
|
-
"line": 126,
|
241
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
242
|
-
"code": "joins(:product).join_translation_table(Product).where(\"LOWER(#{Product.translation_table_alias}.name) LIKE LOWER(:query)\\n OR LOWER(sku) LIKE LOWER(:query)\", :query => (\"%#{query}%\"))",
|
243
|
-
"render_path": null,
|
244
|
-
"location": {
|
245
|
-
"type": "method",
|
246
|
-
"class": "Spree::Variant",
|
247
|
-
"method": "Spree::Variant.product_name_or_sku_cont"
|
248
|
-
},
|
249
|
-
"user_input": "Product.translation_table_alias",
|
250
|
-
"confidence": "Weak",
|
251
|
-
"cwe_id": [
|
252
|
-
89
|
253
|
-
],
|
254
|
-
"note": ""
|
255
|
-
},
|
256
|
-
{
|
257
|
-
"warning_type": "SQL Injection",
|
258
|
-
"warning_code": 0,
|
259
|
-
"fingerprint": "ed253ae6b1b4ea3fe3d87d3652380fecab80133319b1ed041d98d163fd16b815",
|
260
|
-
"check_name": "SQL",
|
261
|
-
"message": "Possible SQL injection",
|
262
|
-
"file": "app/finders/spree/taxons/find.rb",
|
263
|
-
"line": 71,
|
264
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
265
|
-
"code": "taxons.joins(:parent).join_translation_table(Taxon, \"parents_spree_taxons\").where([\"#{Taxon.translation_table_alias}.permalink = ?\", parent_permalink])",
|
266
|
-
"render_path": null,
|
267
|
-
"location": {
|
268
|
-
"type": "method",
|
269
|
-
"class": "Spree::Taxons::Find",
|
270
|
-
"method": "by_parent_permalink"
|
271
|
-
},
|
272
|
-
"user_input": "Taxon.translation_table_alias",
|
273
|
-
"confidence": "Weak",
|
274
|
-
"cwe_id": [
|
275
|
-
89
|
276
|
-
],
|
277
|
-
"note": ""
|
278
|
-
},
|
279
|
-
{
|
280
|
-
"warning_type": "SQL Injection",
|
281
|
-
"warning_code": 0,
|
282
|
-
"fingerprint": "efcc57e1a5648d7db59d1beaf5e399d2278539a8667b19c520b305a6ca7e15e8",
|
283
|
-
"check_name": "SQL",
|
284
|
-
"message": "Possible SQL injection",
|
285
|
-
"file": "app/models/concerns/spree/product_scopes.rb",
|
286
|
-
"line": 68,
|
287
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
288
|
-
"code": "where(\"#{price_table_name}.amount >= ?\", price)",
|
289
|
-
"render_path": null,
|
290
|
-
"location": {
|
291
|
-
"type": "method",
|
292
|
-
"class": "Spree",
|
293
|
-
"method": null
|
294
|
-
},
|
295
|
-
"user_input": "price_table_name",
|
296
|
-
"confidence": "Medium",
|
297
|
-
"cwe_id": [
|
298
|
-
89
|
299
|
-
],
|
300
|
-
"note": "interpolating table name"
|
301
|
-
},
|
302
|
-
{
|
303
|
-
"warning_type": "SQL Injection",
|
304
|
-
"warning_code": 0,
|
305
|
-
"fingerprint": "f14dd62fac0dd1e9d5532dd5efc770e2eb873a8db80faf366b6295378634754a",
|
306
|
-
"check_name": "SQL",
|
307
|
-
"message": "Possible SQL injection",
|
308
|
-
"file": "lib/spree/translation_migrations.rb",
|
309
|
-
"line": 16,
|
310
|
-
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
311
|
-
"code": "ActiveRecord::Base.connection.execute(\"\\n INSERT INTO #{resource_class::Translation.table_name} (#{resource_class.translatable_fields.join(\", \")}, #{\"#{resource_class.table_name.singularize}_id\"}, locale, created_at, updated_at)\\n SELECT #{resource_class.translatable_fields.join(\", \")}, id, '#{default_locale}' as locale, created_at, updated_at FROM #{resource_class.table_name};\\n \")",
|
312
|
-
"render_path": null,
|
313
|
-
"location": {
|
314
|
-
"type": "method",
|
315
|
-
"class": "Spree::TranslationMigrations",
|
316
|
-
"method": "transfer_translation_data"
|
317
|
-
},
|
318
|
-
"user_input": "resource_class.translatable_fields.join(\", \")",
|
319
|
-
"confidence": "Medium",
|
320
|
-
"cwe_id": [
|
321
|
-
89
|
322
|
-
],
|
323
|
-
"note": ""
|
324
|
-
}
|
325
|
-
],
|
326
|
-
"updated": "2023-03-22 20:11:32 +0100",
|
327
|
-
"brakeman_version": "5.4.1"
|
328
|
-
}
|
@@ -1,10 +0,0 @@
|
|
1
|
-
class UpdateLinkableResourceTypes < ActiveRecord::Migration[5.2]
|
2
|
-
def change
|
3
|
-
change_column_default :spree_menu_items, :linked_resource_type, 'Spree::Linkable::Uri'
|
4
|
-
|
5
|
-
Spree::MenuItem.where(linked_resource_type: 'URL').update_all(linked_resource_type: 'Spree::Linkable::Uri')
|
6
|
-
Spree::CmsSection.where(linked_resource_type: 'URL').update_all(linked_resource_type: 'Spree::Linkable::Uri')
|
7
|
-
Spree::MenuItem.where(linked_resource_type: 'Home Page').update_all(linked_resource_type: 'Spree::Linkable::Homepage')
|
8
|
-
Spree::CmsSection.where(linked_resource_type: 'Home Page').update_all(linked_resource_type: 'Spree::Linkable::Homepage')
|
9
|
-
end
|
10
|
-
end
|
@@ -1,8 +0,0 @@
|
|
1
|
-
class FixCmsPagesUniqueIndexes < ActiveRecord::Migration[5.2]
|
2
|
-
def change
|
3
|
-
remove_index :spree_cms_pages, [:slug, :store_id, :deleted_at]
|
4
|
-
remove_index :spree_cms_pages, [:slug, :store_id], unique: true
|
5
|
-
|
6
|
-
add_index :spree_cms_pages, [:slug, :store_id, :deleted_at], unique: true
|
7
|
-
end
|
8
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
class CustomAuthenticationGenerator < Rails::Generators::Base
|
3
|
-
desc 'Set up a Spree installation with a custom authentication helpers'
|
4
|
-
|
5
|
-
def self.source_paths
|
6
|
-
paths = superclass.source_paths
|
7
|
-
paths << File.expand_path('templates', __dir__)
|
8
|
-
paths.flatten
|
9
|
-
end
|
10
|
-
|
11
|
-
def generate
|
12
|
-
template 'authentication_helpers.rb.tt', 'lib/spree/authentication_helpers.rb'
|
13
|
-
|
14
|
-
file_action = File.exist?('config/initializers/spree.rb') ? :append_file : :create_file
|
15
|
-
send(file_action, 'config/initializers/spree.rb') do
|
16
|
-
%Q{
|
17
|
-
Rails.application.config.to_prepare do
|
18
|
-
require_dependency 'spree/authentication_helpers'
|
19
|
-
end\n}
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
module AuthenticationHelpers
|
3
|
-
def self.included(receiver)
|
4
|
-
receiver.send :helper_method, :spree_login_path
|
5
|
-
receiver.send :helper_method, :spree_signup_path
|
6
|
-
receiver.send :helper_method, :spree_logout_path
|
7
|
-
end
|
8
|
-
|
9
|
-
def spree_login_path
|
10
|
-
main_app.login_path
|
11
|
-
end
|
12
|
-
|
13
|
-
def spree_signup_path
|
14
|
-
main_app.signup_path
|
15
|
-
end
|
16
|
-
|
17
|
-
def spree_logout_path
|
18
|
-
main_app.logout_path
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
ApplicationController.include Spree::AuthenticationHelpers if defined?(ApplicationController)
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
class CustomUserGenerator < Rails::Generators::NamedBase
|
3
|
-
include Rails::Generators::ResourceHelpers
|
4
|
-
include Rails::Generators::Migration
|
5
|
-
|
6
|
-
desc 'Set up a Spree installation with a custom User class'
|
7
|
-
|
8
|
-
def self.source_paths
|
9
|
-
paths = superclass.source_paths
|
10
|
-
paths << File.expand_path('templates', __dir__)
|
11
|
-
paths.flatten
|
12
|
-
end
|
13
|
-
|
14
|
-
def check_for_constant
|
15
|
-
klass
|
16
|
-
rescue NameError
|
17
|
-
@shell.say "Couldn't find #{class_name}. Are you sure that this class exists within your application and is loaded?", :red
|
18
|
-
exit(1)
|
19
|
-
end
|
20
|
-
|
21
|
-
def generate
|
22
|
-
migration_template 'migration.rb.tt', 'db/migrate/add_spree_fields_to_custom_user_table.rb'
|
23
|
-
template 'current_user_helpers.rb.tt', 'lib/spree/current_user_helpers.rb'
|
24
|
-
|
25
|
-
file_action = File.exist?('config/initializers/spree.rb') ? :append_file : :create_file
|
26
|
-
send(file_action, 'config/initializers/spree.rb') do
|
27
|
-
%Q{
|
28
|
-
Rails.application.config.to_prepare do
|
29
|
-
require_dependency 'spree/current_user_helpers'
|
30
|
-
end\n}
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.next_migration_number(dirname)
|
35
|
-
format('%.3d', (current_migration_number(dirname) + 1))
|
36
|
-
end
|
37
|
-
|
38
|
-
def klass
|
39
|
-
class_name.constantize
|
40
|
-
end
|
41
|
-
|
42
|
-
def table_name
|
43
|
-
klass.table_name
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
module CurrentUserHelpers
|
3
|
-
def self.included(receiver)
|
4
|
-
receiver.send :helper_method, :spree_current_user
|
5
|
-
end
|
6
|
-
|
7
|
-
def spree_current_user
|
8
|
-
current_user
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
|
14
|
-
ApplicationController.include Spree::CurrentUserHelpers if defined?(ApplicationController)
|
15
|
-
Spree::Api::BaseController.include Spree::CurrentUserHelpers if defined?(Spree::Api::BaseController)
|
@@ -1 +0,0 @@
|
|
1
|
-
Spree.user_class = "<%= class_name %>"
|
@@ -1,7 +0,0 @@
|
|
1
|
-
class AddSpreeFieldsToCustomUserTable < ActiveRecord::Migration[4.2]
|
2
|
-
def up
|
3
|
-
add_column <%= table_name.inspect %>, :spree_api_key, :string, limit: 48
|
4
|
-
add_column <%= table_name.inspect %>, :ship_address_id, :bigint
|
5
|
-
add_column <%= table_name.inspect %>, :bill_address_id, :bigint
|
6
|
-
end
|
7
|
-
end
|
@@ -1,12 +0,0 @@
|
|
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
|
-
}
|
@@ -1,85 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
class ProductDuplicator
|
3
|
-
attr_accessor :product
|
4
|
-
|
5
|
-
@@clone_images_default = true
|
6
|
-
mattr_accessor :clone_images_default
|
7
|
-
|
8
|
-
def initialize(product, include_images = @@clone_images_default)
|
9
|
-
@product = product
|
10
|
-
@include_images = include_images
|
11
|
-
end
|
12
|
-
|
13
|
-
def duplicate
|
14
|
-
new_product = duplicate_product
|
15
|
-
|
16
|
-
# don't dup the actual variants, just the characterising types
|
17
|
-
new_product.option_types = product.option_types if product.has_variants?
|
18
|
-
|
19
|
-
# allow site to do some customization
|
20
|
-
new_product.send(:duplicate_extra, product) if new_product.respond_to?(:duplicate_extra)
|
21
|
-
new_product.save!
|
22
|
-
new_product
|
23
|
-
end
|
24
|
-
|
25
|
-
protected
|
26
|
-
|
27
|
-
def duplicate_product
|
28
|
-
product.dup.tap do |new_product|
|
29
|
-
new_product.translations.each do |t|
|
30
|
-
t.name = "COPY OF #{t.name}"
|
31
|
-
t.slug = nil
|
32
|
-
end
|
33
|
-
|
34
|
-
new_product.name = "COPY OF #{product.name}"
|
35
|
-
new_product.taxons = product.taxons
|
36
|
-
new_product.stores = product.stores
|
37
|
-
new_product.created_at = nil
|
38
|
-
new_product.deleted_at = nil
|
39
|
-
new_product.updated_at = nil
|
40
|
-
new_product.product_properties = reset_properties
|
41
|
-
new_product.master = duplicate_master
|
42
|
-
new_product.variants = product.variants.map { |variant| duplicate_variant variant }
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def duplicate_master
|
47
|
-
master = product.master
|
48
|
-
master.dup.tap do |new_master|
|
49
|
-
new_master.sku = sku_generator(master.sku)
|
50
|
-
new_master.deleted_at = nil
|
51
|
-
new_master.images = master.images.map { |image| duplicate_image image } if @include_images
|
52
|
-
new_master.price = master.price
|
53
|
-
new_master.currency = master.currency
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def duplicate_variant(variant)
|
58
|
-
new_variant = variant.dup
|
59
|
-
new_variant.sku = sku_generator(new_variant.sku)
|
60
|
-
new_variant.deleted_at = nil
|
61
|
-
new_variant.option_values = variant.option_values.map { |option_value| option_value }
|
62
|
-
new_variant
|
63
|
-
end
|
64
|
-
|
65
|
-
def duplicate_image(image)
|
66
|
-
new_image = image.dup
|
67
|
-
new_image.attachment.attach(image.attachment.blob)
|
68
|
-
new_image.save!
|
69
|
-
new_image
|
70
|
-
end
|
71
|
-
|
72
|
-
def reset_properties
|
73
|
-
product.product_properties.map do |prop|
|
74
|
-
prop.dup.tap do |new_prop|
|
75
|
-
new_prop.created_at = nil
|
76
|
-
new_prop.updated_at = nil
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def sku_generator(sku)
|
82
|
-
"COPY OF #{Variant.unscoped.where('sku like ?', "%#{sku}").order(:created_at).last.sku}"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require 'spree/core/preferences/runtime_configuration'
|
2
|
-
|
3
|
-
module Spree
|
4
|
-
module Core
|
5
|
-
class RuntimeConfiguration < Preferences::RuntimeConfiguration
|
6
|
-
preference :always_use_translations, :boolean, default: false
|
7
|
-
preference :allow_empty_price_amount, :boolean, default: false
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
FactoryBot.define do
|
2
|
-
factory :base_cms_page, class: Spree::CmsPage do
|
3
|
-
title { generate(:random_string) }
|
4
|
-
locale { 'en' }
|
5
|
-
|
6
|
-
store
|
7
|
-
|
8
|
-
factory :cms_homepage do
|
9
|
-
type { 'Spree::Cms::Pages::Homepage' }
|
10
|
-
end
|
11
|
-
|
12
|
-
factory :cms_standard_page do
|
13
|
-
type { 'Spree::Cms::Pages::StandardPage' }
|
14
|
-
end
|
15
|
-
|
16
|
-
factory :cms_feature_page do
|
17
|
-
type { 'Spree::Cms::Pages::FeaturePage' }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|