spree_core 5.2.6 → 5.3.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.
Files changed (294) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/addresses_helper.rb +1 -23
  3. data/app/helpers/spree/base_helper.rb +25 -77
  4. data/app/helpers/spree/currency_helper.rb +2 -2
  5. data/app/helpers/spree/images_helper.rb +5 -0
  6. data/app/helpers/spree/mail_helper.rb +1 -1
  7. data/app/helpers/spree/products_helper.rb +1 -1
  8. data/app/jobs/spree/events/subscriber_job.rb +58 -0
  9. data/app/jobs/spree/products/refresh_metrics_job.rb +14 -0
  10. data/app/jobs/spree/products/touch_taxons_job.rb +0 -1
  11. data/app/jobs/spree/variants/touch_job.rb +9 -0
  12. data/app/models/concerns/spree/adjustment_source.rb +8 -0
  13. data/app/models/concerns/spree/parameterizable_name.rb +1 -1
  14. data/app/models/concerns/spree/product_scopes.rb +54 -8
  15. data/app/models/concerns/spree/publishable.rb +253 -0
  16. data/app/models/concerns/spree/unique_name.rb +1 -1
  17. data/app/models/concerns/spree/user_methods.rb +21 -1
  18. data/app/models/spree/ability.rb +3 -3
  19. data/app/models/spree/address.rb +0 -3
  20. data/app/models/spree/adjustable/promotion_accumulator.rb +1 -1
  21. data/app/models/spree/adjustment.rb +32 -6
  22. data/app/models/spree/asset.rb +6 -3
  23. data/app/models/spree/base.rb +3 -1
  24. data/app/models/spree/classification.rb +2 -2
  25. data/app/models/spree/credit_card.rb +0 -3
  26. data/app/models/spree/current.rb +24 -3
  27. data/app/models/spree/custom_domain.rb +1 -1
  28. data/app/models/spree/customer_group.rb +94 -0
  29. data/app/models/spree/customer_group_user.rb +16 -0
  30. data/app/models/spree/customer_return.rb +2 -3
  31. data/app/models/spree/digital.rb +2 -4
  32. data/app/models/spree/digital_link.rb +2 -3
  33. data/app/models/spree/event.rb +104 -0
  34. data/app/models/spree/export.rb +7 -1
  35. data/app/models/spree/gift_card.rb +13 -1
  36. data/app/models/spree/gift_card_batch.rb +3 -1
  37. data/app/models/spree/image.rb +20 -5
  38. data/app/models/spree/import.rb +17 -12
  39. data/app/models/spree/import_row.rb +13 -26
  40. data/app/models/spree/inventory_unit.rb +0 -3
  41. data/app/models/spree/invitation.rb +12 -6
  42. data/app/models/spree/line_item.rb +57 -4
  43. data/app/models/spree/newsletter_subscriber.rb +2 -0
  44. data/app/models/spree/option_type.rb +2 -5
  45. data/app/models/spree/option_value.rb +1 -4
  46. data/app/models/spree/order/checkout.rb +7 -2
  47. data/app/models/spree/order/emails.rb +3 -11
  48. data/app/models/spree/order/store_credit.rb +5 -1
  49. data/app/models/spree/order.rb +80 -31
  50. data/app/models/spree/order_updater.rb +28 -9
  51. data/app/models/spree/payment/custom_events.rb +37 -0
  52. data/app/models/spree/payment.rb +13 -4
  53. data/app/models/spree/payment_capture_event.rb +0 -4
  54. data/app/models/spree/payment_method.rb +1 -1
  55. data/app/models/spree/permission_sets/default_customer.rb +3 -3
  56. data/app/models/spree/policy.rb +1 -8
  57. data/app/models/spree/post.rb +2 -7
  58. data/app/models/spree/post_category.rb +2 -0
  59. data/app/models/spree/price.rb +8 -6
  60. data/app/models/spree/price_list.rb +263 -0
  61. data/app/models/spree/price_rule.rb +26 -0
  62. data/app/models/spree/price_rules/customer_group_rule.rb +21 -0
  63. data/app/models/spree/price_rules/user_rule.rb +19 -0
  64. data/app/models/spree/price_rules/volume_rule.rb +21 -0
  65. data/app/models/spree/price_rules/zone_rule.rb +19 -0
  66. data/app/models/spree/product.rb +117 -76
  67. data/app/models/spree/product_property.rb +2 -2
  68. data/app/models/spree/promotion/rules/customer_group.rb +22 -0
  69. data/app/models/spree/promotion/rules/user.rb +2 -2
  70. data/app/models/spree/promotion.rb +3 -4
  71. data/app/models/spree/promotion_handler/coupon.rb +3 -3
  72. data/app/models/spree/property.rb +3 -6
  73. data/app/models/spree/prototype.rb +0 -3
  74. data/app/models/spree/refund.rb +2 -3
  75. data/app/models/spree/reimbursement.rb +5 -3
  76. data/app/models/spree/report.rb +7 -1
  77. data/app/models/spree/reports/products_performance.rb +1 -1
  78. data/app/models/spree/reports/sales_total.rb +1 -1
  79. data/app/models/spree/return_authorization.rb +7 -3
  80. data/app/models/spree/return_item.rb +15 -4
  81. data/app/models/spree/shipment/custom_events.rb +47 -0
  82. data/app/models/spree/shipment.rb +12 -5
  83. data/app/models/spree/shipping_category.rb +0 -3
  84. data/app/models/spree/shipping_method.rb +0 -3
  85. data/app/models/spree/stock/quantifier.rb +1 -1
  86. data/app/models/spree/stock_item.rb +2 -0
  87. data/app/models/spree/stock_location.rb +0 -3
  88. data/app/models/spree/stock_movement/custom_events.rb +44 -0
  89. data/app/models/spree/stock_movement.rb +3 -0
  90. data/app/models/spree/stock_transfer.rb +2 -3
  91. data/app/models/spree/store.rb +64 -92
  92. data/app/models/spree/store_credit.rb +3 -4
  93. data/app/models/spree/store_product.rb +14 -0
  94. data/app/models/spree/subscriber.rb +186 -0
  95. data/app/models/spree/tax_category.rb +0 -4
  96. data/app/models/spree/tax_rate.rb +0 -3
  97. data/app/models/spree/taxon.rb +3 -36
  98. data/app/models/spree/taxonomy.rb +0 -3
  99. data/app/models/spree/variant.rb +114 -21
  100. data/app/models/spree/webhook_delivery.rb +60 -0
  101. data/app/models/spree/webhook_endpoint.rb +53 -0
  102. data/app/models/spree/wished_item.rb +2 -4
  103. data/app/models/spree/wishlist.rb +2 -3
  104. data/app/models/spree/zone.rb +0 -9
  105. data/app/paginators/spree/shared/paginate.rb +4 -0
  106. data/app/serializers/spree/events/asset_serializer.rb +22 -0
  107. data/app/serializers/spree/events/base_serializer.rb +61 -0
  108. data/app/serializers/spree/events/customer_return_serializer.rb +20 -0
  109. data/app/serializers/spree/events/digital_link_serializer.rb +20 -0
  110. data/app/serializers/spree/events/digital_serializer.rb +18 -0
  111. data/app/serializers/spree/events/export_serializer.rb +22 -0
  112. data/app/serializers/spree/events/gift_card_batch_serializer.rb +24 -0
  113. data/app/serializers/spree/events/gift_card_serializer.rb +29 -0
  114. data/app/serializers/spree/events/image_serializer.rb +9 -0
  115. data/app/serializers/spree/events/import_row_serializer.rb +23 -0
  116. data/app/serializers/spree/events/import_serializer.rb +24 -0
  117. data/app/serializers/spree/events/invitation_serializer.rb +28 -0
  118. data/app/serializers/spree/events/line_item_serializer.rb +31 -0
  119. data/app/serializers/spree/events/newsletter_subscriber_serializer.rb +21 -0
  120. data/app/serializers/spree/events/order_serializer.rb +39 -0
  121. data/app/serializers/spree/events/payment_serializer.rb +24 -0
  122. data/app/serializers/spree/events/post_category_serializer.rb +20 -0
  123. data/app/serializers/spree/events/post_serializer.rb +26 -0
  124. data/app/serializers/spree/events/price_serializer.rb +22 -0
  125. data/app/serializers/spree/events/product_serializer.rb +24 -0
  126. data/app/serializers/spree/events/promotion_serializer.rb +32 -0
  127. data/app/serializers/spree/events/refund_serializer.rb +23 -0
  128. data/app/serializers/spree/events/reimbursement_serializer.rb +22 -0
  129. data/app/serializers/spree/events/report_serializer.rb +23 -0
  130. data/app/serializers/spree/events/return_authorization_serializer.rb +22 -0
  131. data/app/serializers/spree/events/return_item_serializer.rb +27 -0
  132. data/app/serializers/spree/events/shipment_serializer.rb +24 -0
  133. data/app/serializers/spree/events/stock_item_serializer.rb +22 -0
  134. data/app/serializers/spree/events/stock_movement_serializer.rb +22 -0
  135. data/app/serializers/spree/events/stock_transfer_serializer.rb +22 -0
  136. data/app/serializers/spree/events/store_credit_serializer.rb +30 -0
  137. data/app/serializers/spree/events/user_serializer.rb +18 -0
  138. data/app/serializers/spree/events/variant_serializer.rb +34 -0
  139. data/app/serializers/spree/events/wished_item_serializer.rb +20 -0
  140. data/app/serializers/spree/events/wishlist_serializer.rb +22 -0
  141. data/app/services/spree/addresses/update.rb +1 -1
  142. data/app/services/spree/cart/add_item.rb +1 -1
  143. data/app/services/spree/coupon_codes/coupon_codes_handler.rb +2 -1
  144. data/app/services/spree/data_feeds/google/required_attributes.rb +4 -4
  145. data/app/services/spree/newsletter/verify.rb +5 -0
  146. data/app/services/spree/products/auto_match_taxons.rb +1 -1
  147. data/app/services/spree/seeds/all.rb +1 -1
  148. data/app/services/spree/taxons/add_products.rb +8 -4
  149. data/app/services/spree/taxons/regenerate_products.rb +8 -0
  150. data/app/services/spree/taxons/remove_products.rb +12 -7
  151. data/app/subscribers/spree/event_log_subscriber.rb +64 -0
  152. data/app/subscribers/spree/export_subscriber.rb +26 -0
  153. data/app/subscribers/spree/invitation_email_subscriber.rb +40 -0
  154. data/app/subscribers/spree/product_metrics_subscriber.rb +29 -0
  155. data/app/subscribers/spree/report_subscriber.rb +26 -0
  156. data/config/locales/en.yml +126 -0
  157. data/db/migrate/20251110120000_create_spree_price_lists.rb +22 -0
  158. data/db/migrate/20251110120001_create_spree_price_rules.rb +13 -0
  159. data/db/migrate/20251110120002_add_price_list_id_to_spree_prices.rb +6 -0
  160. data/db/migrate/20251110120003_add_price_list_id_to_spree_line_items.rb +5 -0
  161. data/db/migrate/20251201172118_fix_indexes_on_friendly_id_slugs.rb +8 -0
  162. data/db/migrate/20251214000001_create_spree_webhook_endpoints.rb +19 -0
  163. data/db/migrate/20251214000002_create_spree_webhook_deliveries.rb +23 -0
  164. data/db/migrate/20251222000000_add_performance_indexes_to_spree_adjustments.rb +25 -0
  165. data/db/migrate/20260112000000_fix_spree_prices_unique_indexes.rb +33 -0
  166. data/db/migrate/20260115120000_create_spree_customer_groups.rb +14 -0
  167. data/db/migrate/20260115120001_create_spree_customer_group_users.rb +14 -0
  168. data/db/migrate/20260117140831_remove_not_null_constraint_from_policy_name.rb +5 -0
  169. data/db/migrate/20260118120000_add_statistics_to_store_products.rb +11 -0
  170. data/db/migrate/20260119120000_add_counter_caches_to_spree_products.rb +9 -0
  171. data/db/migrate/20260119170000_add_counter_caches_to_spree_taxons.rb +9 -0
  172. data/db/migrate/20260120120000_add_image_count_to_spree_variants.rb +9 -0
  173. data/lib/generators/spree/dummy/dummy_generator.rb +14 -2
  174. data/lib/spree/core/configuration.rb +1 -0
  175. data/lib/spree/core/controller_helpers/auth.rb +0 -15
  176. data/lib/spree/core/controller_helpers/currency.rb +13 -9
  177. data/lib/spree/core/controller_helpers/search.rb +1 -1
  178. data/lib/spree/core/controller_helpers/store.rb +5 -1
  179. data/lib/spree/core/engine.rb +61 -78
  180. data/lib/spree/core/importer/order.rb +1 -1
  181. data/lib/spree/core/importer/product.rb +1 -1
  182. data/lib/spree/core/preferences/preferable.rb +14 -1
  183. data/lib/spree/core/pricing/context.rb +63 -0
  184. data/lib/spree/core/pricing/resolver.rb +129 -0
  185. data/lib/spree/core/search/base.rb +1 -1
  186. data/lib/spree/core/token_generator.rb +1 -1
  187. data/lib/spree/core/version.rb +1 -1
  188. data/lib/spree/core.rb +42 -47
  189. data/lib/spree/events/adapters/active_support_notifications.rb +112 -0
  190. data/lib/spree/events/adapters/base.rb +193 -0
  191. data/lib/spree/events/registry.rb +99 -0
  192. data/lib/spree/events.rb +240 -0
  193. data/lib/spree/permitted_attributes.rb +13 -2
  194. data/lib/spree/testing_support/common_rake.rb +68 -35
  195. data/lib/spree/testing_support/factories/customer_group_factory.rb +6 -0
  196. data/lib/spree/testing_support/factories/customer_group_user_factory.rb +6 -0
  197. data/lib/spree/testing_support/factories/price_factory.rb +4 -0
  198. data/lib/spree/testing_support/factories/price_list_factory.rb +34 -0
  199. data/lib/spree/testing_support/factories/price_rule_factory.rb +49 -0
  200. data/lib/spree/testing_support/factories/promotion_rule_factory.rb +12 -0
  201. data/lib/spree/testing_support/factories/stock_item_factory.rb +6 -4
  202. data/lib/spree/testing_support/factories/store_product_factory.rb +6 -0
  203. data/lib/spree/testing_support/factories/taxon_factory.rb +0 -1
  204. data/lib/spree/testing_support/factories/webhook_delivery_factory.rb +48 -0
  205. data/lib/spree/testing_support/factories/webhook_endpoint_factory.rb +22 -0
  206. data/lib/spree/testing_support/lifecycle_events.rb +38 -0
  207. data/lib/spree/testing_support/store.rb +4 -2
  208. data/lib/spree/webhooks.rb +22 -0
  209. data/lib/tasks/products.rake +40 -0
  210. data/lib/tasks/taxons.rake +19 -0
  211. data/lib/tasks/variants.rake +18 -0
  212. metadata +112 -114
  213. data/app/jobs/spree/themes/duplicate_components_job.rb +0 -59
  214. data/app/jobs/spree/themes/screenshot_job.rb +0 -81
  215. data/app/models/concerns/spree/has_page_links.rb +0 -53
  216. data/app/models/spree/page.rb +0 -188
  217. data/app/models/spree/page_block.rb +0 -73
  218. data/app/models/spree/page_blocks/buttons.rb +0 -29
  219. data/app/models/spree/page_blocks/heading.rb +0 -18
  220. data/app/models/spree/page_blocks/image.rb +0 -20
  221. data/app/models/spree/page_blocks/link.rb +0 -21
  222. data/app/models/spree/page_blocks/mega_nav.rb +0 -33
  223. data/app/models/spree/page_blocks/mega_nav_with_subcategories.rb +0 -32
  224. data/app/models/spree/page_blocks/metafields.rb +0 -18
  225. data/app/models/spree/page_blocks/nav.rb +0 -15
  226. data/app/models/spree/page_blocks/newsletter_form.rb +0 -18
  227. data/app/models/spree/page_blocks/products/brand.rb +0 -15
  228. data/app/models/spree/page_blocks/products/buy_buttons.rb +0 -24
  229. data/app/models/spree/page_blocks/products/description.rb +0 -18
  230. data/app/models/spree/page_blocks/products/price.rb +0 -18
  231. data/app/models/spree/page_blocks/products/quantity_selector.rb +0 -20
  232. data/app/models/spree/page_blocks/products/share.rb +0 -8
  233. data/app/models/spree/page_blocks/products/title.rb +0 -19
  234. data/app/models/spree/page_blocks/products/variant_picker.rb +0 -13
  235. data/app/models/spree/page_blocks/subheading.rb +0 -17
  236. data/app/models/spree/page_blocks/text.rb +0 -16
  237. data/app/models/spree/page_link.rb +0 -60
  238. data/app/models/spree/page_section.rb +0 -222
  239. data/app/models/spree/page_sections/announcement_bar.rb +0 -28
  240. data/app/models/spree/page_sections/breadcrumbs.rb +0 -12
  241. data/app/models/spree/page_sections/collection_banner.rb +0 -18
  242. data/app/models/spree/page_sections/custom_code.rb +0 -11
  243. data/app/models/spree/page_sections/featured_posts.rb +0 -45
  244. data/app/models/spree/page_sections/featured_product.rb +0 -50
  245. data/app/models/spree/page_sections/featured_taxon.rb +0 -90
  246. data/app/models/spree/page_sections/featured_taxons.rb +0 -45
  247. data/app/models/spree/page_sections/footer.rb +0 -101
  248. data/app/models/spree/page_sections/header.rb +0 -62
  249. data/app/models/spree/page_sections/image_banner.rb +0 -55
  250. data/app/models/spree/page_sections/image_with_text.rb +0 -65
  251. data/app/models/spree/page_sections/main_password_footer.rb +0 -18
  252. data/app/models/spree/page_sections/main_password_header.rb +0 -20
  253. data/app/models/spree/page_sections/newsletter.rb +0 -54
  254. data/app/models/spree/page_sections/page_title.rb +0 -19
  255. data/app/models/spree/page_sections/post_details.rb +0 -19
  256. data/app/models/spree/page_sections/post_grid.rb +0 -19
  257. data/app/models/spree/page_sections/product_details.rb +0 -53
  258. data/app/models/spree/page_sections/product_grid.rb +0 -13
  259. data/app/models/spree/page_sections/related_products.rb +0 -58
  260. data/app/models/spree/page_sections/rich_text.rb +0 -31
  261. data/app/models/spree/page_sections/taxon_banner.rb +0 -18
  262. data/app/models/spree/page_sections/taxon_grid.rb +0 -17
  263. data/app/models/spree/page_sections/video.rb +0 -107
  264. data/app/models/spree/pages/account.rb +0 -19
  265. data/app/models/spree/pages/cart.rb +0 -19
  266. data/app/models/spree/pages/checkout.rb +0 -15
  267. data/app/models/spree/pages/custom.rb +0 -38
  268. data/app/models/spree/pages/homepage.rb +0 -72
  269. data/app/models/spree/pages/login.rb +0 -19
  270. data/app/models/spree/pages/password.rb +0 -59
  271. data/app/models/spree/pages/post.rb +0 -27
  272. data/app/models/spree/pages/post_list.rb +0 -36
  273. data/app/models/spree/pages/product_details.rb +0 -30
  274. data/app/models/spree/pages/search_results.rb +0 -43
  275. data/app/models/spree/pages/shop_all.rb +0 -40
  276. data/app/models/spree/pages/taxon.rb +0 -29
  277. data/app/models/spree/pages/taxon_list.rb +0 -41
  278. data/app/models/spree/pages/wishlist.rb +0 -15
  279. data/app/models/spree/theme.rb +0 -233
  280. data/app/models/spree/themes/default.rb +0 -97
  281. data/app/services/spree/taxons/touch_featured_sections.rb +0 -21
  282. data/db/migrate/20250120094216_create_page_builder_models.rb +0 -78
  283. data/db/migrate/20250305121352_remove_page_builder_indices.rb +0 -11
  284. data/db/migrate/20250825175217_add_missing_page_builder_indexes.rb +0 -7
  285. data/db/migrate/20250913130044_add_page_links_counter_cache_to_spree_stores.rb +0 -10
  286. data/lib/generators/spree/dummy/templates/initializers/devise.rb +0 -3
  287. data/lib/generators/spree/install/install_generator.rb +0 -219
  288. data/lib/generators/spree/install/templates/config/initializers/spree.rb +0 -126
  289. data/lib/spree/core/webhooks.rb +0 -21
  290. data/lib/spree/testing_support/factories/page_block_factory.rb +0 -22
  291. data/lib/spree/testing_support/factories/page_factory.rb +0 -33
  292. data/lib/spree/testing_support/factories/page_link_factory.rb +0 -7
  293. data/lib/spree/testing_support/factories/page_section_factory.rb +0 -27
  294. data/lib/spree/testing_support/factories/theme_factory.rb +0 -14
@@ -1,219 +0,0 @@
1
- require 'rails/generators'
2
- require 'highline/import'
3
- require 'bundler'
4
- require 'bundler/cli'
5
- require 'active_support/core_ext/string/indent'
6
- require 'spree/core'
7
-
8
- module Spree
9
- class InstallGenerator < Rails::Generators::Base
10
- class_option :migrate, type: :boolean, default: true, banner: 'Run Spree migrations'
11
- class_option :seed, type: :boolean, default: true, banner: 'load seed data (migrations must be run)'
12
- class_option :sample, type: :boolean, default: false, banner: 'load sample data (migrations must be run)'
13
- class_option :install_storefront, type: :boolean, default: false, banner: 'installs default rails storefront'
14
- class_option :install_admin, type: :boolean, default: false, banner: 'installs default rails admin'
15
- class_option :auto_accept, type: :boolean
16
- class_option :user_class, type: :string
17
- class_option :admin_user_class, type: :string
18
- class_option :admin_email, type: :string
19
- class_option :admin_password, type: :string
20
- class_option :lib_name, type: :string, default: 'spree'
21
- class_option :enforce_available_locales, type: :boolean, default: nil
22
- class_option :authentication, type: :string, default: 'devise'
23
-
24
- def self.source_paths
25
- paths = superclass.source_paths
26
- paths << File.expand_path('../templates', "../../#{__FILE__}")
27
- paths << File.expand_path('../templates', "../#{__FILE__}")
28
- paths << File.expand_path('templates', __dir__)
29
- paths.flatten
30
- end
31
-
32
- def prepare_options
33
- @run_migrations = options[:migrate]
34
- @load_seed_data = options[:seed]
35
- @load_sample_data = options[:sample]
36
- @install_storefront = options[:install_storefront]
37
- @install_admin = options[:install_admin]
38
- @authentication = options[:authentication]
39
-
40
- unless @run_migrations
41
- @load_seed_data = false
42
- @load_sample_data = false
43
- end
44
- end
45
-
46
- def add_files
47
- template 'config/initializers/spree.rb', 'config/initializers/spree.rb'
48
- end
49
-
50
- # Currently we only support devise, in the future we will also add support for default Rails authentication
51
- def install_authentication
52
- if @authentication == 'devise'
53
- generate 'spree:authentication:devise'
54
- elsif @authentication == 'dummy'
55
- # this is for dummy / test app
56
- end
57
- end
58
-
59
- def install_storefront
60
- if @install_storefront && Spree::Core::Engine.frontend_available?
61
- generate 'spree:storefront:install'
62
-
63
- # generate devise controllers if authentication is devise
64
- if @authentication == 'devise'
65
- generate 'spree:storefront:devise'
66
- end
67
- end
68
- end
69
-
70
- def install_admin
71
- if @install_admin && Spree::Core::Engine.admin_available?
72
- generate 'spree:admin:install'
73
-
74
- # generate devise controllers if authentication is devise
75
- if @authentication == 'devise'
76
- generate 'spree:admin:devise'
77
- end
78
- end
79
- end
80
-
81
- def configure_application
82
- application <<-APP.strip_heredoc.indent!(4)
83
-
84
- config.to_prepare do
85
- # Load application's model / class decorators
86
- Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
87
- Rails.configuration.cache_classes ? require(c) : load(c)
88
- end
89
- end
90
- APP
91
-
92
- unless options[:enforce_available_locales].nil?
93
- application <<-APP.strip_heredoc.indent!(4)
94
- # Prevent this deprecation message: https://github.com/svenfuchs/i18n/commit/3b6e56e
95
- I18n.enforce_available_locales = #{options[:enforce_available_locales]}
96
- APP
97
- end
98
- end
99
-
100
- def include_seed_data
101
- append_file 'db/seeds.rb', <<-SEEDS.strip_heredoc
102
-
103
- Spree::Core::Engine.load_seed if defined?(Spree::Core)
104
- SEEDS
105
- end
106
-
107
- def install_migrations
108
- say_status :copying, 'migrations'
109
- silence_stream(STDOUT) do
110
- silence_warnings { rake 'active_storage:install:migrations' }
111
- silence_warnings { rake 'action_text:install:migrations' }
112
- silence_warnings { rake 'spree:install:migrations' }
113
- silence_warnings { rake 'spree_api:install:migrations' }
114
- end
115
- end
116
-
117
- def run_migrations
118
- if @run_migrations
119
- say_status :running, 'migrations'
120
- rake 'db:migrate'
121
- else
122
- say_status :skipping, "migrations (don't forget to run rake db:migrate)"
123
- end
124
- end
125
-
126
- def populate_seed_data
127
- if @load_seed_data
128
- say_status :loading, 'seed data'
129
- rake_options = []
130
- rake_options << 'AUTO_ACCEPT=1' if options[:auto_accept]
131
- rake_options << "ADMIN_EMAIL=#{options[:admin_email]}" if options[:admin_email]
132
- rake_options << "ADMIN_PASSWORD=#{options[:admin_password]}" if options[:admin_password]
133
-
134
- cmd = -> { rake("db:seed #{rake_options.join(' ')}") }
135
- if options[:auto_accept] || (options[:admin_email] && options[:admin_password])
136
- silence_warnings &cmd
137
- else
138
- cmd.call
139
- end
140
- else
141
- say_status :skipping, 'seed data (you can always run bin/rails db:seed)'
142
- end
143
- end
144
-
145
- def load_sample_data
146
- return unless Spree::Core::Engine.sample_available?
147
-
148
- if @load_sample_data
149
- say_status :loading, 'sample data'
150
- rake 'spree_sample:load'
151
- else
152
- say_status :skipping, 'sample data (you can always run rake spree_sample:load)'
153
- end
154
- end
155
-
156
- def notify_about_routes
157
- insert_into_file(File.join('config', 'routes.rb'),
158
- after: "Rails.application.routes.draw do\n") do
159
- <<-ROUTES.strip_heredoc.indent!(2)
160
- # This line mounts Spree's routes at the root of your application.
161
- # This means, any requests to URLs such as /products, will go to
162
- # Spree::ProductsController.
163
- # If you would like to change where this engine is mounted, simply change the
164
- # :at option to something different.
165
- #
166
- # We ask that you don't use the :as option here, as Spree relies on it being
167
- # the default of "spree".
168
- mount Spree::Core::Engine, at: '/'
169
- ROUTES
170
- end
171
-
172
- unless options[:quiet]
173
- puts '*' * 50
174
- puts "We added the following line to your application's config/routes.rb file:"
175
- puts ' '
176
- puts " mount Spree::Core::Engine, at: '/'"
177
- end
178
- end
179
-
180
- def complete
181
- unless options[:quiet]
182
- puts '*' * 50
183
- puts "Spree has been installed successfully. You're all ready to go!"
184
- puts ' '
185
- puts 'Enjoy!'
186
- end
187
- end
188
-
189
- protected
190
-
191
- def javascript_exists?(script)
192
- extensions = %w(.js.coffee .js.erb .js.coffee.erb .js)
193
- file_exists?(extensions, script)
194
- end
195
-
196
- def stylesheet_exists?(stylesheet)
197
- extensions = %w(.css.scss .css.erb .css.scss.erb .css)
198
- file_exists?(extensions, stylesheet)
199
- end
200
-
201
- def file_exists?(extensions, filename)
202
- extensions.detect do |extension|
203
- File.exist?("#{filename}#{extension}")
204
- end
205
- end
206
-
207
- private
208
-
209
- def silence_stream(stream)
210
- old_stream = stream.dup
211
- stream.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')
212
- stream.sync = true
213
- yield
214
- ensure
215
- stream.reopen(old_stream)
216
- old_stream.close
217
- end
218
- end
219
- end
@@ -1,126 +0,0 @@
1
- # Configure Spree Preferences
2
- #
3
- # Note: Initializing preferences available within the Admin will overwrite any changes that were made through the user interface when you restart.
4
- # If you would like users to be able to update a setting with the Admin it should NOT be set here.
5
- #
6
- # Note: If a preference is set here it will be stored within the cache & database upon initialization.
7
- # Just removing an entry from this initializer will not make the preference value go away.
8
- # Instead you must either set a new value or remove entry, clear cache, and remove database entry.
9
- #
10
- # In order to initialize a setting do:
11
- # config.setting_name = 'new value'
12
- #
13
- # More on configuring Spree preferences can be found at:
14
- # https://docs.spreecommerce.org/developer/customization
15
- Spree.config do |config|
16
- # Example:
17
- # Uncomment to stop tracking inventory levels in the application
18
- # config.track_inventory_levels = false
19
- end
20
-
21
- # Background job queue names
22
- # Spree.queues.default = :default
23
- # Spree.queues.variants = :default
24
- # Spree.queues.stock_location_stock_items = :default
25
- # Spree.queues.coupon_codes = :default
26
-
27
- # Use a CDN host for images, eg. Cloudfront
28
- # This is used in the frontend to generate absolute URLs to images
29
- # Default is nil and your application host will be used
30
- # Spree.cdn_host = 'cdn.example.com'
31
-
32
- # Multi-store setup
33
- # You need to set a wildcard `root_domain` on the store to enable multi-store setup
34
- # all new stores will be created in a subdomain of the root domain, eg. store1.lvh.me, store2.lvh.me, etc.
35
- # Spree.root_domain = ENV.fetch('SPREE_ROOT_DOMAIN', 'lvh.me')
36
-
37
- # Use a different service for storage (S3, google, etc)
38
- # unless Rails.env.test?
39
- # Spree.private_storage_service_name = :amazon_public # public assets, such as product images
40
- # Spree.public_storage_service_name = :amazon_private # private assets, such as invoices, etc
41
- # end
42
-
43
- # Enable theme preview screenshots in admin dashboard
44
- # Spree.screenshot_api_token = <Your Screenshot API token obtained from https://screenshotapi.net/>
45
-
46
- # Configure Spree Dependencies
47
- #
48
- # Note: If a dependency is set here it will NOT be stored within the cache & database upon initialization.
49
- # Just removing an entry from this initializer will make the dependency value go away.
50
- #
51
- # More on how to use Spree dependencies can be found at:
52
- # https://docs.spreecommerce.org/customization/dependencies
53
- Spree.dependencies do |dependencies|
54
- # Example:
55
- # Uncomment to change the default Service handling adding Items to Cart
56
- # dependencies.cart_add_item_service = 'MyNewAwesomeService'
57
- end
58
-
59
- # Spree::Api::Dependencies.storefront_cart_serializer = 'MyRailsApp::CartSerializer'
60
-
61
- # uncomment lines below to add your own custom business logic
62
- # such as promotions, shipping methods, etc
63
- Rails.application.config.after_initialize do
64
- # Payment methods and shipping calculators
65
- # Spree.payment_methods << Spree::PaymentMethods::VerySafeAndReliablePaymentMethod
66
- # Spree.calculators.shipping_methods << Spree::ShippingMethods::SuperExpensiveNotVeryFastShipping
67
- # Spree.calculators.tax_rates << Spree::TaxRates::FinanceTeamForcedMeToCodeThis
68
-
69
- # Stock splitters and adjusters
70
- # Spree.stock_splitters << Spree::Stock::Splitters::SecretLogicSplitter
71
- # Spree.adjusters << Spree::Adjustable::Adjuster::TaxTheRich
72
-
73
- # Custom promotions
74
- # Spree.calculators.promotion_actions_create_adjustments << Spree::Calculators::PromotionActions::CreateAdjustments::AddDiscountForFriends
75
- # Spree.calculators.promotion_actions_create_item_adjustments << Spree::Calculators::PromotionActions::CreateItemAdjustments::FinanceTeamForcedMeToCodeThis
76
- # Spree.promotions.rules << Spree::Promotions::Rules::OnlyForVIPCustomers
77
- # Spree.promotions.actions << Spree::Promotions::Actions::GiftWithPurchase
78
-
79
- # Taxon rules
80
- # Spree.taxon_rules << Spree::TaxonRules::ProductsWithColor
81
-
82
- # Exports and reports
83
- # Spree.export_types << Spree::Exports::Payments
84
- # Spree.reports << Spree::Reports::MassivelyOvercomplexReportForCfo
85
-
86
- # Page builder (themes, pages, sections, blocks)
87
- # Spree.page_builder.themes << Spree::Themes::NewShinyTheme
88
- # Spree.page_builder.theme_layout_sections << Spree::PageSections::SuperImportantCeoBio
89
- # Spree.page_builder.pages << Spree::Pages::CustomLandingPage
90
- # Spree.page_builder.page_sections << Spree::PageSections::ContactFormToGetInTouch
91
- # Spree.page_builder.page_blocks << Spree::PageBlocks::BigRedButtonToCallSales
92
-
93
- # Storefront partials
94
- # Spree.storefront.partials.head << 'spree/shared/that_js_snippet_that_marketing_forced_me_to_include'
95
-
96
- # Admin partials
97
- # Spree.admin.partials.product_form << 'spree/admin/products/custom_section'
98
-
99
- # Role-based permissions
100
- # Configure which permission sets are assigned to each role
101
- # More on permission sets: https://spreecommerce.org/docs/developer/customization/permissions
102
- Spree.permissions.assign(:default, [Spree::PermissionSets::DefaultCustomer])
103
- Spree.permissions.assign(:admin, [Spree::PermissionSets::SuperUser])
104
-
105
- # Example: Create a custom role with specific permissions
106
- # Spree.permissions.assign(:customer_service, [
107
- # Spree::PermissionSets::DashboardDisplay,
108
- # Spree::PermissionSets::OrderManagement,
109
- # Spree::PermissionSets::UserDisplay
110
- # ])
111
- #
112
- # Available permission sets:
113
- # - Spree::PermissionSets::SuperUser (full admin access)
114
- # - Spree::PermissionSets::DefaultCustomer (storefront access)
115
- # - Spree::PermissionSets::DashboardDisplay (view admin dashboard)
116
- # - Spree::PermissionSets::OrderDisplay / OrderManagement
117
- # - Spree::PermissionSets::ProductDisplay / ProductManagement
118
- # - Spree::PermissionSets::UserDisplay / UserManagement
119
- # - Spree::PermissionSets::StockDisplay / StockManagement
120
- # - Spree::PermissionSets::PromotionManagement
121
- # - Spree::PermissionSets::ConfigurationManagement
122
- # - Spree::PermissionSets::RoleManagement
123
- end
124
-
125
- Spree.user_class = <%= (options[:user_class].blank? ? 'Spree::LegacyUser' : options[:user_class]).inspect %>
126
- Spree.admin_user_class = <%= (options[:admin_user_class].blank? ? (options[:user_class].blank? ? 'Spree::LegacyUser' : options[:user_class]) : options[:admin_user_class]).inspect %>
@@ -1,21 +0,0 @@
1
- module Spree
2
- module Webhooks
3
- def self.disable_webhooks
4
- prev_value = disabled?
5
- RequestStore.store[:disable_spree_webhooks] = true
6
- yield
7
- ensure
8
- RequestStore.store[:disable_spree_webhooks] = prev_value
9
- end
10
-
11
- def self.disabled?
12
- # rubocop:disable Style/RedundantFetchBlock
13
- RequestStore.fetch(:disable_spree_webhooks) { false }
14
- # rubocop:enable Style/RedundantFetchBlock
15
- end
16
-
17
- def self.disabled=(value)
18
- RequestStore.store[:disable_spree_webhooks] = value
19
- end
20
- end
21
- end
@@ -1,22 +0,0 @@
1
- FactoryBot.define do
2
- factory :page_block, class: Spree::PageBlock do
3
- section { create(:page_section) }
4
-
5
- trait :buttons do
6
- type { 'Spree::PageBlocks::Buttons' }
7
- end
8
-
9
- trait :nav do
10
- section { create(:header_page_section) }
11
-
12
- type { 'Spree::PageBlocks::Nav' }
13
- end
14
-
15
- trait :heading do
16
- type { 'Spree::PageBlocks::Heading' }
17
- end
18
-
19
- factory :buttons_block, traits: [:buttons], class: Spree::PageBlocks::Buttons
20
- factory :heading_block, traits: [:heading], class: Spree::PageBlocks::Heading
21
- end
22
- end
@@ -1,33 +0,0 @@
1
- FactoryBot.define do
2
- factory :page, class: Spree::Page do
3
- type { 'Spree::Page' }
4
- pageable { Spree::Theme.first || create(:theme) }
5
- sequence(:name) { |n| "Page #{n}" }
6
- meta_description { 'Page Description' }
7
-
8
- trait :homepage do
9
- name { 'Homepage' }
10
- type { 'Spree::Pages::Homepage' }
11
- end
12
-
13
- trait :account do
14
- type { 'Spree::Pages::Account' }
15
- name { 'Account' }
16
- end
17
-
18
- trait :preview do
19
- parent { create(:page) }
20
- end
21
-
22
- trait :for_store do
23
- pageable { Spree::Store.default }
24
- end
25
- end
26
-
27
- factory :custom_page, class: Spree::Pages::Custom do
28
- type { 'Spree::Pages::Custom' }
29
- pageable { Spree::Store.default }
30
- sequence(:name) { |n| "Custom Page #{n}" }
31
- meta_description { 'Page Description' }
32
- end
33
- end
@@ -1,7 +0,0 @@
1
- FactoryBot.define do
2
- factory :page_link, class: Spree::PageLink do
3
- parent { Spree::PageSections::Header.first }
4
- linkable { Spree::Page.first }
5
- sequence(:label) { |n| "Page Link #{n}" }
6
- end
7
- end
@@ -1,27 +0,0 @@
1
- FactoryBot.define do
2
- factory :page_section, class: Spree::PageSection do
3
- pageable { Spree::Page.find_by!(name: 'Homepage') }
4
-
5
- trait :without_links do
6
- do_not_create_links { true }
7
- end
8
-
9
- factory :featured_taxons_page_section, class: Spree::PageSections::FeaturedTaxons
10
-
11
- factory :featured_taxon_page_section, class: Spree::PageSections::FeaturedTaxon
12
-
13
- factory :header_page_section, class: Spree::PageSections::Header
14
-
15
- factory :announcement_bar_page_section, class: Spree::PageSections::AnnouncementBar
16
-
17
- factory :rich_text_page_section, class: Spree::PageSections::RichText
18
-
19
- factory :newsletter_page_section, class: Spree::PageSections::Newsletter
20
-
21
- factory :video_page_section, class: Spree::PageSections::Video
22
-
23
- factory :image_with_text_page_section, class: Spree::PageSections::ImageWithText
24
-
25
- factory :featured_posts_page_section, class: Spree::PageSections::FeaturedPosts
26
- end
27
- end
@@ -1,14 +0,0 @@
1
- FactoryBot.define do
2
- factory :theme, class: Spree::Theme do
3
- sequence(:name) { |n| "Theme #{n}#{Kernel.rand(9999)}" }
4
- store { Spree::Store.default || create(:store, default: true) }
5
-
6
- trait :blank do
7
- duplicating { true }
8
- end
9
-
10
- trait :preview do
11
- parent { Spree::Store.default.default_theme || create(:theme, store: store) }
12
- end
13
- end
14
- end