spree_core 4.2.5 → 4.3.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.
Files changed (263) hide show
  1. checksums.yaml +4 -4
  2. data/app/finders/concerns/spree/product_filterable.rb +9 -0
  3. data/app/finders/spree/cms_pages/find.rb +41 -0
  4. data/app/finders/spree/menus/find.rb +11 -0
  5. data/app/finders/spree/option_values/find_available.rb +20 -0
  6. data/app/finders/spree/orders/find_complete.rb +14 -2
  7. data/app/finders/spree/orders/find_current.rb +1 -13
  8. data/app/finders/spree/product_properties/find_available.rb +20 -0
  9. data/app/finders/spree/products/find.rb +80 -21
  10. data/app/finders/spree/stores/find_current.rb +24 -0
  11. data/app/finders/spree/taxons/find.rb +22 -6
  12. data/app/helpers/spree/base_helper.rb +69 -7
  13. data/app/helpers/spree/locale_helper.rb +5 -1
  14. data/app/helpers/spree/products_helper.rb +7 -3
  15. data/app/models/concerns/spree/display_link.rb +42 -0
  16. data/app/models/concerns/spree/display_money.rb +6 -2
  17. data/app/models/concerns/spree/filter_param.rb +21 -0
  18. data/app/models/concerns/spree/image_methods.rb +24 -0
  19. data/app/models/concerns/spree/memoized_data.rb +24 -0
  20. data/app/models/concerns/spree/multi_store_resource.rb +24 -0
  21. data/app/models/concerns/spree/product_scopes.rb +71 -8
  22. data/app/models/concerns/spree/single_store_resource.rb +19 -0
  23. data/app/models/concerns/spree/user_address.rb +19 -0
  24. data/app/models/concerns/spree/user_methods.rb +14 -12
  25. data/app/models/concerns/spree/user_payment_source.rb +1 -1
  26. data/app/models/concerns/spree/user_reporting.rb +35 -10
  27. data/app/models/concerns/spree/user_roles.rb +25 -0
  28. data/app/models/spree/ability.rb +3 -1
  29. data/app/models/spree/address.rb +27 -6
  30. data/app/models/spree/app_configuration.rb +8 -0
  31. data/app/models/spree/app_dependencies.rb +20 -6
  32. data/app/models/spree/base.rb +18 -0
  33. data/app/models/spree/classification.rb +3 -0
  34. data/app/models/spree/cms/pages/feature_page.rb +7 -0
  35. data/app/models/spree/cms/pages/homepage.rb +20 -0
  36. data/app/models/spree/cms/pages/standard_page.rb +4 -0
  37. data/app/models/spree/cms/sections/featured_article.rb +22 -0
  38. data/app/models/spree/cms/sections/hero_image.rb +38 -0
  39. data/app/models/spree/cms/sections/image_gallery.rb +103 -0
  40. data/app/models/spree/cms/sections/product_carousel.rb +14 -0
  41. data/app/models/spree/cms/sections/rich_text_content.rb +13 -0
  42. data/app/models/spree/cms/sections/side_by_side_images.rb +74 -0
  43. data/app/models/spree/cms_page.rb +66 -0
  44. data/app/models/spree/cms_section.rb +69 -0
  45. data/app/models/spree/country.rb +14 -6
  46. data/app/models/spree/credit_card.rb +2 -8
  47. data/app/models/spree/customer_return.rb +8 -2
  48. data/app/models/spree/gateway/bogus.rb +6 -4
  49. data/app/models/spree/icon.rb +9 -0
  50. data/app/models/spree/image/configuration/active_storage.rb +2 -0
  51. data/app/models/spree/image.rb +5 -24
  52. data/app/models/spree/inventory_unit.rb +1 -1
  53. data/app/models/spree/line_item.rb +1 -1
  54. data/app/models/spree/menu.rb +63 -0
  55. data/app/models/spree/menu_item.rb +76 -0
  56. data/app/models/spree/option_type.rb +1 -1
  57. data/app/models/spree/option_value.rb +11 -0
  58. data/app/models/spree/option_value_variant.rb +1 -1
  59. data/app/models/spree/order/address_book.rb +3 -5
  60. data/app/models/spree/order/currency_updater.rb +1 -1
  61. data/app/models/spree/order/emails.rb +32 -0
  62. data/app/models/spree/order/payments.rb +1 -1
  63. data/app/models/spree/order/store_credit.rb +1 -1
  64. data/app/models/spree/order.rb +46 -45
  65. data/app/models/spree/payment.rb +7 -0
  66. data/app/models/spree/payment_method.rb +16 -0
  67. data/app/models/spree/preferences/preferable.rb +12 -0
  68. data/app/models/spree/preferences/preferable_class_methods.rb +10 -1
  69. data/app/models/spree/product.rb +37 -30
  70. data/app/models/spree/product_property.rb +19 -4
  71. data/app/models/spree/promotion/rules/country.rb +1 -1
  72. data/app/models/spree/promotion/rules/first_order.rb +4 -3
  73. data/app/models/spree/promotion/rules/taxon.rb +10 -7
  74. data/app/models/spree/promotion.rb +6 -15
  75. data/app/models/spree/promotion_handler/cart.rb +7 -2
  76. data/app/models/spree/promotion_handler/coupon.rb +5 -4
  77. data/app/models/spree/promotion_handler/free_shipping.rb +5 -6
  78. data/app/models/spree/promotion_handler/page.rb +3 -2
  79. data/app/models/spree/promotion_handler/promotion_duplicator.rb +1 -0
  80. data/app/models/spree/promotion_rule.rb +2 -0
  81. data/app/models/spree/property.rb +28 -1
  82. data/app/models/spree/reimbursement.rb +3 -1
  83. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -1
  84. data/app/models/spree/shipment_handler.rb +4 -2
  85. data/app/models/spree/stock/quantifier.rb +6 -6
  86. data/app/models/spree/stock_location.rb +9 -0
  87. data/app/models/spree/store.rb +90 -7
  88. data/app/models/spree/store_credit.rb +7 -3
  89. data/app/models/spree/store_credit_event.rb +2 -2
  90. data/app/models/spree/store_payment_method.rb +11 -0
  91. data/app/models/spree/store_product.rb +11 -0
  92. data/app/models/spree/store_promotion.rb +11 -0
  93. data/app/models/spree/taxon.rb +22 -1
  94. data/app/models/spree/taxon_image/configuration/active_storage.rb +2 -0
  95. data/app/models/spree/taxon_image.rb +1 -0
  96. data/app/models/spree/taxonomy.rb +3 -1
  97. data/app/models/spree/variant.rb +21 -6
  98. data/app/presenters/spree/filters/options_presenter.rb +47 -0
  99. data/app/presenters/spree/filters/price_presenter.rb +22 -0
  100. data/app/presenters/spree/filters/price_range_presenter.rb +29 -0
  101. data/app/presenters/spree/filters/properties_presenter.rb +23 -0
  102. data/app/presenters/spree/filters/property_presenter.rb +42 -0
  103. data/app/presenters/spree/filters/quantified_price_range_presenter.rb +44 -0
  104. data/app/services/spree/account/addresses/create.rb +1 -0
  105. data/app/services/spree/account/addresses/helper.rb +6 -0
  106. data/app/services/spree/account/addresses/update.rb +9 -3
  107. data/app/services/spree/account/create.rb +17 -0
  108. data/app/services/spree/account/update.rb +15 -0
  109. data/app/services/spree/build_localized_redirect_url.rb +1 -1
  110. data/app/services/spree/cart/associate.rb +16 -0
  111. data/app/services/spree/cart/change_currency.rb +27 -0
  112. data/app/services/spree/cart/create.rb +5 -3
  113. data/app/services/spree/cart/destroy.rb +40 -0
  114. data/app/services/spree/cart/empty.rb +36 -0
  115. data/app/services/spree/cart/estimate_shipping_rates.rb +3 -3
  116. data/app/services/spree/checkout/add_store_credit.rb +1 -1
  117. data/app/services/spree/classifications/reposition.rb +18 -0
  118. data/app/services/spree/credit_cards/destroy.rb +41 -0
  119. data/app/sorters/spree/base_sorter.rb +23 -11
  120. data/app/sorters/spree/products/sort.rb +23 -7
  121. data/app/validators/db_maximum_length_validator.rb +5 -0
  122. data/app/validators/email_validator.rb +3 -1
  123. data/config/initializers/active_storage.rb +2 -0
  124. data/config/locales/en.yml +177 -3
  125. data/config/routes.rb +0 -5
  126. data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +8 -0
  127. data/db/migrate/20210407200948_create_spree_menus.rb +16 -0
  128. data/db/migrate/20210408092939_create_spree_menu_items.rb +31 -0
  129. data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +8 -0
  130. data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +8 -0
  131. data/db/migrate/20210512191732_create_spree_cms_pages.rb +24 -0
  132. data/db/migrate/20210514204251_create_spree_cms_sections.rb +22 -0
  133. data/db/migrate/20210527094055_create_spree_products_stores.rb +36 -0
  134. data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +5 -0
  135. data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +46 -0
  136. data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +29 -0
  137. data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +10 -0
  138. data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +11 -0
  139. data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
  140. data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
  141. data/db/migrate/20210721125657_create_spree_promotions_stores.rb +29 -0
  142. data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +11 -0
  143. data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +305 -0
  144. data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +9 -0
  145. data/lib/generators/spree/dummy/dummy_generator.rb +11 -6
  146. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  147. data/lib/generators/spree/dummy_model/templates/model.rb.tt +1 -1
  148. data/lib/generators/spree/install/install_generator.rb +12 -24
  149. data/lib/spree/core/components.rb +8 -0
  150. data/lib/spree/core/controller_helpers/auth.rb +7 -1
  151. data/lib/spree/core/controller_helpers/common.rb +1 -1
  152. data/lib/spree/core/controller_helpers/order.rb +4 -4
  153. data/lib/spree/core/controller_helpers/search.rb +1 -0
  154. data/lib/spree/core/controller_helpers/store.rb +24 -1
  155. data/lib/spree/core/engine.rb +6 -0
  156. data/lib/spree/core/importer/product.rb +3 -1
  157. data/lib/spree/core/product_duplicator.rb +1 -0
  158. data/lib/spree/core/search/base.rb +17 -22
  159. data/lib/spree/core/version.rb +1 -1
  160. data/lib/spree/core.rb +8 -4
  161. data/lib/spree/i18n.rb +1 -1
  162. data/lib/spree/money.rb +2 -1
  163. data/lib/spree/permitted_attributes.rb +21 -3
  164. data/lib/spree/testing_support/authorization_helpers.rb +6 -3
  165. data/lib/spree/testing_support/capybara_config.rb +3 -1
  166. data/lib/spree/testing_support/common_rake.rb +17 -4
  167. data/lib/spree/testing_support/extension_rake.rb +2 -2
  168. data/lib/spree/testing_support/factories/address_factory.rb +1 -1
  169. data/lib/spree/testing_support/factories/classification_factory.rb +8 -0
  170. data/lib/spree/testing_support/factories/cms_page_factory.rb +20 -0
  171. data/lib/spree/testing_support/factories/cms_section_factory.rb +31 -0
  172. data/lib/spree/testing_support/factories/customer_return_factory.rb +24 -17
  173. data/lib/spree/testing_support/factories/icon_factory.rb +7 -0
  174. data/lib/spree/testing_support/factories/line_item_factory.rb +6 -2
  175. data/lib/spree/testing_support/factories/menu_factory.rb +16 -0
  176. data/lib/spree/testing_support/factories/menu_item_factory.rb +10 -0
  177. data/lib/spree/testing_support/factories/options_factory.rb +5 -0
  178. data/lib/spree/testing_support/factories/order_factory.rb +11 -2
  179. data/lib/spree/testing_support/factories/payment_method_factory.rb +6 -2
  180. data/lib/spree/testing_support/factories/product_factory.rb +17 -1
  181. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
  182. data/lib/spree/testing_support/factories/promotion_factory.rb +18 -9
  183. data/lib/spree/testing_support/factories/property_factory.rb +22 -0
  184. data/lib/spree/testing_support/factories/stock_location_factory.rb +5 -4
  185. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -0
  186. data/lib/spree/testing_support/factories/store_factory.rb +11 -0
  187. data/lib/spree/testing_support/factories/taxon_factory.rb +3 -1
  188. data/lib/spree/testing_support/factories/taxon_image_factory.rb +7 -0
  189. data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -0
  190. data/lib/spree/testing_support/factories/user_factory.rb +7 -2
  191. data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
  192. data/lib/spree/testing_support/flatpickr_capybara.rb +58 -35
  193. data/lib/spree/testing_support/locale_helpers.rb +1 -1
  194. data/lib/spree/testing_support/order_walkthrough.rb +9 -9
  195. data/lib/spree/testing_support/rspec_retry_config.rb +5 -0
  196. data/lib/tasks/core.rake +1 -1
  197. data/spec/fixtures/favicon.ico +0 -0
  198. data/spec/fixtures/files/icon_256x256.gif +0 -0
  199. data/spec/fixtures/files/icon_256x256.png +0 -0
  200. data/spec/fixtures/files/icon_512x512.png +0 -0
  201. data/spec/fixtures/files/img_256x128.png +0 -0
  202. data/spree_core.gemspec +12 -11
  203. metadata +211 -159
  204. data/app/assets/images/logo/spree_50.png +0 -0
  205. data/app/assets/images/noimage/large.png +0 -0
  206. data/app/assets/images/noimage/mini.png +0 -0
  207. data/app/assets/images/noimage/product.png +0 -0
  208. data/app/assets/images/noimage/small.png +0 -0
  209. data/app/assets/javascripts/spree.js +0 -78
  210. data/app/controllers/spree/errors_controller.rb +0 -11
  211. data/app/helpers/spree/mail_helper.rb +0 -29
  212. data/app/mailers/spree/base_mailer.rb +0 -46
  213. data/app/mailers/spree/order_mailer.rb +0 -26
  214. data/app/mailers/spree/reimbursement_mailer.rb +0 -12
  215. data/app/mailers/spree/shipment_mailer.rb +0 -12
  216. data/app/mailers/spree/test_mailer.rb +0 -8
  217. data/app/models/spree/validations/db_maximum_length_validator.rb +0 -22
  218. data/app/views/layouts/spree/base_mailer.html.erb +0 -46
  219. data/app/views/spree/errors/forbidden.html.erb +0 -0
  220. data/app/views/spree/errors/unauthorized.html.erb +0 -0
  221. data/app/views/spree/order_mailer/cancel_email.html.erb +0 -24
  222. data/app/views/spree/order_mailer/cancel_email.text.erb +0 -38
  223. data/app/views/spree/order_mailer/confirm_email.html.erb +0 -23
  224. data/app/views/spree/order_mailer/confirm_email.text.erb +0 -39
  225. data/app/views/spree/order_mailer/store_owner_notification_email.html.erb +0 -23
  226. data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +0 -38
  227. data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +0 -56
  228. data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +0 -24
  229. data/app/views/spree/shared/_base_mailer_footer.html.erb +0 -12
  230. data/app/views/spree/shared/_base_mailer_header.html.erb +0 -13
  231. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -456
  232. data/app/views/spree/shared/_error_messages.html.erb +0 -11
  233. data/app/views/spree/shared/_mailer_line_item.html.erb +0 -16
  234. data/app/views/spree/shared/_paths.html.erb +0 -8
  235. data/app/views/spree/shared/_purchased_items_table.html.erb +0 -69
  236. data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +0 -13
  237. data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +0 -27
  238. data/app/views/spree/shared/purchased_items_table/_subtotal.html.erb +0 -13
  239. data/app/views/spree/shared/purchased_items_table/_total.html.erb +0 -13
  240. data/app/views/spree/shipment_mailer/shipped_email.html.erb +0 -36
  241. data/app/views/spree/shipment_mailer/shipped_email.text.erb +0 -17
  242. data/app/views/spree/test_mailer/test_email.html.erb +0 -40
  243. data/app/views/spree/test_mailer/test_email.text.erb +0 -4
  244. data/config/initializers/assets.rb +0 -2
  245. data/config/initializers/premailer_assets.rb +0 -1
  246. data/config/initializers/premailer_rails.rb +0 -3
  247. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +0 -10
  248. data/lib/generators/spree/dummy/templates/initializers/bullet.rb +0 -5
  249. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -15
  250. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -16
  251. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -16
  252. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -16
  253. data/lib/generators/spree/mailers_preview/mailers_preview_generator.rb +0 -23
  254. data/lib/generators/spree/mailers_preview/templates/mailers/previews/order_preview.rb +0 -13
  255. data/lib/generators/spree/mailers_preview/templates/mailers/previews/reimbursement_preview.rb +0 -5
  256. data/lib/generators/spree/mailers_preview/templates/mailers/previews/shipment_preview.rb +0 -5
  257. data/lib/generators/spree/mailers_preview/templates/mailers/previews/user_preview.rb +0 -11
  258. data/lib/tasks/email.rake +0 -10
  259. data/vendor/assets/javascripts/cleave.js +0 -1669
  260. data/vendor/assets/javascripts/fetch.umd.js +0 -531
  261. data/vendor/assets/javascripts/jquery.payment.js +0 -652
  262. data/vendor/assets/javascripts/jsuri.js +0 -458
  263. data/vendor/assets/javascripts/polyfill.min.js +0 -1
@@ -0,0 +1,4 @@
1
+ module Spree::Cms::Pages
2
+ class StandardPage < Spree::CmsPage
3
+ end
4
+ end
@@ -0,0 +1,22 @@
1
+ module Spree::Cms::Sections
2
+ class FeaturedArticle < Spree::CmsSection
3
+ after_initialize :default_values
4
+
5
+ store :content, accessors: [:title, :subtitle, :button_text, :rte_content], coder: JSON
6
+ store :settings, accessors: [:gutters], coder: JSON
7
+
8
+ LINKED_RESOURCE_TYPE = ['Spree::Taxon', 'Spree::Product', 'Spree::CmsPage']
9
+
10
+ def gutters?
11
+ gutters == 'Gutters'
12
+ end
13
+
14
+ private
15
+
16
+ def default_values
17
+ self.gutters ||= 'No Gutters'
18
+ self.fit ||= 'Screen'
19
+ self.linked_resource_type ||= 'Spree::Taxon'
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,38 @@
1
+ module Spree::Cms::Sections
2
+ class HeroImage < Spree::CmsSection
3
+ after_initialize :default_values
4
+
5
+ store :content, accessors: [:title, :button_text], coder: JSON
6
+ store :settings, accessors: [:gutters], coder: JSON
7
+
8
+ LINKED_RESOURCE_TYPE = ['Spree::Taxon', 'Spree::Product', 'Spree::CmsPage']
9
+
10
+ def gutters?
11
+ gutters == 'Gutters'
12
+ end
13
+
14
+ def img_one_sm(dimensions = '600x250>')
15
+ super
16
+ end
17
+
18
+ def img_one_md(dimensions = '1200x500>')
19
+ super
20
+ end
21
+
22
+ def img_one_lg(dimensions = '2400x1000>')
23
+ super
24
+ end
25
+
26
+ def img_one_xl(dimensions = '4800x2000>')
27
+ super
28
+ end
29
+
30
+ private
31
+
32
+ def default_values
33
+ self.gutters ||= 'No Gutters'
34
+ self.fit ||= 'Screen'
35
+ self.linked_resource_type ||= 'Spree::Taxon'
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,103 @@
1
+ module Spree::Cms::Sections
2
+ class ImageGallery < Spree::CmsSection
3
+ after_initialize :default_values
4
+ validate :reset_multiple_link_attributes
5
+
6
+ LINKED_RESOURCE_TYPE = if Rails::VERSION::STRING < '6.0'
7
+ ['Spree::Taxon'].freeze
8
+ else
9
+ ['Spree::Taxon', 'Spree::Product'].freeze
10
+ end
11
+
12
+ LAYOUT_OPTIONS = ['Default', 'Reversed'].freeze
13
+ LABEL_OPTIONS = ['Show', 'Hide'].freeze
14
+
15
+ store :content, accessors: [:link_type_one, :link_one, :title_one,
16
+ :link_type_two, :link_two, :title_two,
17
+ :link_type_three, :link_three, :title_three], coder: JSON
18
+
19
+ store :settings, accessors: [:layout_style, :display_labels], coder: JSON
20
+
21
+ #
22
+ # img_one sizing
23
+ def img_one_md(dimensions = '270x195>')
24
+ super
25
+ end
26
+
27
+ def img_one_lg(dimensions = '540x390>')
28
+ super
29
+ end
30
+
31
+ def img_one_xl(dimensions = '1080x780>')
32
+ super
33
+ end
34
+
35
+ #
36
+ # img_two sizing
37
+ def img_two_md(dimensions = '270x400>')
38
+ super
39
+ end
40
+
41
+ def img_two_lg(dimensions = '540x800>')
42
+ super
43
+ end
44
+
45
+ def img_two_xl(dimensions = '1080x1600>')
46
+ super
47
+ end
48
+
49
+ #
50
+ # img_three sizing
51
+ def img_three_md(dimensions = '270x195>')
52
+ super
53
+ end
54
+
55
+ def img_three_lg(dimensions = '540x390>')
56
+ super
57
+ end
58
+
59
+ def img_three_xl(dimensions = '1080x780>')
60
+ super
61
+ end
62
+
63
+ def default_layout?
64
+ layout_style == 'Default'
65
+ end
66
+
67
+ def show_labels?
68
+ display_labels == 'Show'
69
+ end
70
+
71
+ private
72
+
73
+ def reset_multiple_link_attributes
74
+ return if Rails::VERSION::STRING < '6.0'
75
+
76
+ if link_type_one_changed?
77
+ return if link_type_one_was.nil?
78
+
79
+ self.link_one = nil
80
+ end
81
+
82
+ if link_type_two_changed?
83
+ return if link_type_two_was.nil?
84
+
85
+ self.link_two = nil
86
+ end
87
+
88
+ if link_type_three_changed?
89
+ return if link_type_three_was.nil?
90
+
91
+ self.link_three = nil
92
+ end
93
+ end
94
+
95
+ def default_values
96
+ self.layout_style ||= 'Default'
97
+ self.fit ||= 'Container'
98
+ self.link_type_one ||= 'Spree::Taxon'
99
+ self.link_type_two ||= 'Spree::Taxon'
100
+ self.link_type_three ||= 'Spree::Taxon'
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,14 @@
1
+ module Spree::Cms::Sections
2
+ class ProductCarousel < Spree::CmsSection
3
+ after_initialize :default_values
4
+
5
+ LINKED_RESOURCE_TYPE = ['Spree::Taxon']
6
+
7
+ private
8
+
9
+ def default_values
10
+ self.fit ||= 'Screen'
11
+ self.linked_resource_type ||= 'Spree::Taxon'
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ module Spree::Cms::Sections
2
+ class RichTextContent < Spree::CmsSection
3
+ after_initialize :default_values
4
+
5
+ store :content, accessors: [:rte_content], coder: JSON
6
+
7
+ private
8
+
9
+ def default_values
10
+ self.fit ||= 'Container'
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,74 @@
1
+ module Spree::Cms::Sections
2
+ class SideBySideImages < Spree::CmsSection
3
+ after_initialize :default_values
4
+ validate :reset_multiple_link_attributes
5
+
6
+ LINKED_RESOURCE_TYPE = if Rails::VERSION::STRING < '6.0'
7
+ ['Spree::Taxon'].freeze
8
+ else
9
+ ['Spree::Taxon', 'Spree::Product'].freeze
10
+ end
11
+
12
+ store :content, accessors: [:link_type_one, :link_one, :title_one, :subtitle_one,
13
+ :link_type_two, :link_two, :title_two, :subtitle_two], coder: JSON
14
+
15
+ store :settings, accessors: [:gutters], coder: JSON
16
+
17
+ def gutters?
18
+ gutters == 'Gutters'
19
+ end
20
+
21
+ #
22
+ # img_one sizing
23
+ def img_one_md(dimensions = '387x250>')
24
+ super
25
+ end
26
+
27
+ def img_one_lg(dimensions = '540x390>')
28
+ super
29
+ end
30
+
31
+ def img_one_xl(dimensions = '1468x952>')
32
+ super
33
+ end
34
+
35
+ #
36
+ # img_two sizing
37
+ def img_two_md(dimensions = '387x250>')
38
+ super
39
+ end
40
+
41
+ def img_two_lg(dimensions = '734x476>')
42
+ super
43
+ end
44
+
45
+ def img_two_xl(dimensions = '1468x952>')
46
+ super
47
+ end
48
+
49
+ private
50
+
51
+ def reset_multiple_link_attributes
52
+ return if Rails::VERSION::STRING < '6.0'
53
+
54
+ if link_type_one_changed?
55
+ return if link_type_one_was.nil?
56
+
57
+ self.link_one = nil
58
+ end
59
+
60
+ if link_type_two_changed?
61
+ return if link_type_two_was.nil?
62
+
63
+ self.link_two = nil
64
+ end
65
+ end
66
+
67
+ def default_values
68
+ self.gutters ||= 'Gutters'
69
+ self.fit ||= 'Container'
70
+ self.link_type_one ||= 'Spree::Taxon'
71
+ self.link_type_two ||= 'Spree::Taxon'
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,66 @@
1
+ module Spree
2
+ class CmsPage < Base
3
+ include SingleStoreResource
4
+ include DisplayLink
5
+
6
+ acts_as_paranoid
7
+
8
+ TYPES = ['Spree::Cms::Pages::StandardPage',
9
+ 'Spree::Cms::Pages::FeaturePage',
10
+ 'Spree::Cms::Pages::Homepage']
11
+
12
+ belongs_to :store, touch: true
13
+
14
+ has_many :cms_sections, class_name: 'Spree::CmsSection'
15
+ has_many :menu_items, as: :linked_resource
16
+
17
+ before_validation :handle_slug
18
+
19
+ validates :title, :store, :locale, presence: true
20
+ validates :slug, uniqueness: { scope: :store_id, allow_nil: true, case_sensitive: true }
21
+ validates :locale, uniqueness: { scope: [:store, :type] }, if: :homepage?
22
+
23
+ scope :visible, -> { where(visible: true) }
24
+ scope :by_locale, ->(locale) { where(locale: locale) }
25
+ scope :by_slug, ->(slug) { where(slug: slug) }
26
+
27
+ scope :home, -> { where(type: 'Spree::Cms::Pages::Homepage') }
28
+ scope :standard, -> { where(type: 'Spree::Cms::Pages::StandardPage') }
29
+ scope :feature, -> { where(type: 'Spree::Cms::Pages::FeaturePage') }
30
+
31
+ self.whitelisted_ransackable_attributes = %w[title type locale store_id]
32
+
33
+ def seo_title
34
+ if meta_title.present?
35
+ meta_title
36
+ else
37
+ title
38
+ end
39
+ end
40
+
41
+ # Overide this if your page type uses cms_sections
42
+ def sections?
43
+ false
44
+ end
45
+
46
+ def homepage?
47
+ type == 'Spree::Cms::Pages::Homepage'
48
+ end
49
+
50
+ def draft_mode?
51
+ !visible
52
+ end
53
+
54
+ private
55
+
56
+ def handle_slug
57
+ self.slug = if homepage?
58
+ nil
59
+ elsif slug.blank?
60
+ title&.downcase&.to_url
61
+ else
62
+ slug&.downcase&.to_url
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,69 @@
1
+ module Spree
2
+ class CmsSection < Base
3
+ include DisplayLink
4
+
5
+ acts_as_list scope: :cms_page
6
+ belongs_to :cms_page, touch: true
7
+
8
+ validate :reset_link_attributes
9
+
10
+ IMAGE_COUNT = ['one', 'two', 'three']
11
+ IMAGE_TYPES = ['image/png', 'image/jpg', 'image/jpeg', 'image/gif'].freeze
12
+ IMAGE_SIZE = ['sm', 'md', 'lg', 'xl']
13
+
14
+ IMAGE_COUNT.each do |count|
15
+ send(:has_one_attached, "image_#{count}".to_sym)
16
+
17
+ IMAGE_SIZE.each do |size|
18
+ define_method("img_#{count}_#{size}") do |dimensions = nil|
19
+ return if !send("image_#{count}").attached? || dimensions.nil?
20
+
21
+ send("image_#{count}").variant(resize: dimensions)
22
+ end
23
+ end
24
+ end
25
+
26
+ belongs_to :linked_resource, polymorphic: true
27
+
28
+ default_scope { order(position: :asc) }
29
+
30
+ validates :name, :cms_page, presence: true
31
+
32
+ validates :image_one, :image_two, :image_three, content_type: IMAGE_TYPES
33
+
34
+ LINKED_RESOURCE_TYPE = []
35
+
36
+ TYPES = ['Spree::Cms::Sections::HeroImage',
37
+ 'Spree::Cms::Sections::FeaturedArticle',
38
+ 'Spree::Cms::Sections::ProductCarousel',
39
+ 'Spree::Cms::Sections::ImageGallery',
40
+ 'Spree::Cms::Sections::SideBySideImages',
41
+ 'Spree::Cms::Sections::RichTextContent']
42
+
43
+ def boundaries
44
+ ['Container', 'Screen']
45
+ end
46
+
47
+ def css_classes
48
+ ['row', 'section-row'].compact
49
+ end
50
+
51
+ def gutters_sizes
52
+ ['Gutters', 'No Gutters']
53
+ end
54
+
55
+ def fullscreen?
56
+ fit == 'Screen'
57
+ end
58
+
59
+ private
60
+
61
+ def reset_link_attributes
62
+ if linked_resource_type_changed?
63
+ return if linked_resource_id_was.nil?
64
+
65
+ self.linked_resource_id = nil
66
+ end
67
+ end
68
+ end
69
+ end
@@ -5,19 +5,26 @@ module Spree
5
5
  before_destroy :ensure_not_default
6
6
 
7
7
  has_many :addresses, dependent: :restrict_with_error
8
- has_many :states, dependent: :destroy
8
+ has_many :states,
9
+ -> { order name: :asc },
10
+ inverse_of: :country,
11
+ dependent: :destroy
9
12
  has_many :zone_members,
10
13
  -> { where(zoneable_type: 'Spree::Country') },
11
14
  class_name: 'Spree::ZoneMember',
12
15
  dependent: :destroy,
13
16
  foreign_key: :zoneable_id
14
-
15
17
  has_many :zones, through: :zone_members, class_name: 'Spree::Zone'
16
18
 
17
19
  validates :name, :iso_name, :iso, :iso3, presence: true, uniqueness: { case_sensitive: false }
18
20
 
19
- def self.default
20
- country_id = Spree::Config[:default_country_id]
21
+ def self.default(store = nil)
22
+ ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
23
+ `Country#default` is deprecated and will be removed in Spree 5.0.
24
+ Please use `current_store.default_country` instead
25
+ DEPRECATION
26
+ store ||= Spree::Store.default
27
+ country_id = store.default_country_id
21
28
  default = find_by(id: country_id) if country_id.present?
22
29
  default || find_by(iso: 'US') || first
23
30
  end
@@ -26,8 +33,9 @@ module Spree
26
33
  where(['LOWER(iso) = ?', iso.downcase]).or(where(['LOWER(iso3) = ?', iso.downcase])).take
27
34
  end
28
35
 
29
- def default?
30
- id == Spree::Config[:default_country_id]
36
+ def default?(store = nil)
37
+ store ||= Spree::Store.default
38
+ self == store.default_country
31
39
  end
32
40
 
33
41
  def <=>(other)