spree_core 4.3.0 → 4.6.1

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 (653) hide show
  1. checksums.yaml +4 -4
  2. data/app/finders/spree/option_values/find_available.rb +9 -1
  3. data/app/finders/spree/product_properties/find_available.rb +1 -1
  4. data/app/finders/spree/products/find.rb +22 -16
  5. data/app/finders/spree/taxons/find.rb +11 -8
  6. data/app/helpers/spree/base_helper.rb +14 -15
  7. data/app/helpers/spree/currency_helper.rb +1 -1
  8. data/app/helpers/spree/locale_helper.rb +6 -2
  9. data/app/helpers/spree/products_helper.rb +10 -19
  10. data/app/jobs/spree/base_job.rb +4 -0
  11. data/app/jobs/spree/stock_locations/stock_items/create_job.rb +13 -0
  12. data/app/jobs/spree/variants/remove_from_incomplete_orders_job.rb +9 -0
  13. data/app/jobs/spree/variants/remove_line_item_job.rb +9 -0
  14. data/app/models/concerns/spree/calculated_adjustments.rb +1 -1
  15. data/app/models/concerns/spree/default_price.rb +1 -1
  16. data/app/models/concerns/spree/display_link.rb +17 -29
  17. data/app/models/concerns/spree/display_money.rb +3 -1
  18. data/app/models/concerns/spree/image_methods.rb +21 -9
  19. data/app/models/concerns/spree/memoized_data.rb +1 -1
  20. data/app/models/concerns/spree/metadata.rb +23 -0
  21. data/app/models/concerns/spree/multi_store_resource.rb +1 -1
  22. data/app/models/concerns/spree/named_type.rb +1 -1
  23. data/app/models/concerns/spree/number_identifier.rb +18 -0
  24. data/app/models/concerns/spree/product_scopes.rb +69 -33
  25. data/app/models/concerns/spree/translatable_resource.rb +25 -0
  26. data/app/models/concerns/spree/translatable_resource_scopes.rb +24 -0
  27. data/app/models/concerns/spree/translatable_resource_slug.rb +15 -0
  28. data/app/models/concerns/spree/unique_name.rb +10 -0
  29. data/app/models/concerns/spree/user_methods.rb +9 -0
  30. data/app/models/concerns/spree/user_reporting.rb +1 -1
  31. data/app/models/concerns/spree/user_roles.rb +20 -2
  32. data/app/models/spree/ability.rb +11 -3
  33. data/app/models/spree/address.rb +11 -3
  34. data/app/models/spree/adjustment.rb +1 -0
  35. data/app/models/spree/asset/support/active_storage.rb +3 -2
  36. data/app/models/spree/asset.rb +4 -0
  37. data/app/models/spree/base.rb +15 -0
  38. data/app/models/spree/calculator/flat_rate.rb +1 -1
  39. data/app/models/spree/calculator/flexi_rate.rb +1 -1
  40. data/app/models/spree/calculator/price_sack.rb +1 -1
  41. data/app/models/spree/calculator/shipping/digital_delivery.rb +22 -0
  42. data/app/models/spree/calculator/shipping/flat_rate.rb +1 -1
  43. data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -1
  44. data/app/models/spree/calculator/shipping/per_item.rb +1 -1
  45. data/app/models/spree/calculator/shipping/price_sack.rb +1 -1
  46. data/app/models/spree/calculator.rb +2 -2
  47. data/app/models/spree/cms_page.rb +7 -3
  48. data/app/models/spree/cms_section.rb +13 -13
  49. data/app/models/spree/cms_section_image.rb +15 -0
  50. data/app/models/spree/cms_section_image_one.rb +4 -0
  51. data/app/models/spree/cms_section_image_three.rb +4 -0
  52. data/app/models/spree/cms_section_image_two.rb +4 -0
  53. data/app/models/spree/country.rb +4 -2
  54. data/app/models/spree/credit_card.rb +17 -1
  55. data/app/models/spree/customer_return.rb +6 -1
  56. data/app/models/spree/data_feed/google.rb +15 -0
  57. data/app/models/spree/data_feed.rb +40 -0
  58. data/app/models/spree/digital.rb +19 -0
  59. data/app/models/spree/digital_link.rb +57 -0
  60. data/app/models/spree/fulfilment_changer.rb +1 -1
  61. data/app/models/spree/gateway/bogus.rb +5 -1
  62. data/app/models/spree/icon.rb +5 -1
  63. data/app/models/spree/image/configuration/active_storage.rb +6 -19
  64. data/app/models/spree/image.rb +3 -3
  65. data/app/models/spree/inventory_unit.rb +5 -2
  66. data/app/models/spree/legacy_user.rb +2 -2
  67. data/app/models/spree/line_item.rb +15 -4
  68. data/app/models/spree/linkable/homepage.rb +3 -0
  69. data/app/models/spree/linkable/uri.rb +3 -0
  70. data/app/models/spree/log_entry.rb +9 -1
  71. data/app/models/spree/menu.rb +3 -0
  72. data/app/models/spree/menu_item.rb +7 -11
  73. data/app/models/spree/option_type.rb +12 -4
  74. data/app/models/spree/option_value.rb +11 -0
  75. data/app/models/spree/order/address_book.rb +1 -0
  76. data/app/models/spree/order/checkout.rb +7 -1
  77. data/app/models/spree/order/digital.rb +33 -0
  78. data/app/models/spree/order.rb +45 -24
  79. data/app/models/spree/order_inventory.rb +1 -1
  80. data/app/models/spree/order_merger.rb +1 -1
  81. data/app/models/spree/order_promotion.rb +1 -1
  82. data/app/models/spree/payment/processing.rb +2 -1
  83. data/app/models/spree/payment.rb +32 -5
  84. data/app/models/spree/payment_capture_event.rb +4 -0
  85. data/app/models/spree/payment_method/store_credit.rb +1 -1
  86. data/app/models/spree/payment_method.rb +6 -1
  87. data/app/models/spree/payment_source.rb +10 -0
  88. data/app/models/spree/preference.rb +6 -1
  89. data/app/models/spree/price.rb +4 -1
  90. data/app/models/spree/product.rb +114 -40
  91. data/app/models/spree/product_property.rb +13 -3
  92. data/app/models/spree/promotion/rules/option_value.rb +2 -2
  93. data/app/models/spree/promotion/rules/product.rb +1 -1
  94. data/app/models/spree/promotion.rb +9 -1
  95. data/app/models/spree/promotion_action.rb +1 -1
  96. data/app/models/spree/promotion_rule.rb +1 -1
  97. data/app/models/spree/promotion_rule_user.rb +1 -1
  98. data/app/models/spree/property.rb +11 -1
  99. data/app/models/spree/prototype.rb +5 -0
  100. data/app/models/spree/refund.rb +10 -0
  101. data/app/models/spree/reimbursement.rb +4 -1
  102. data/app/models/spree/return_authorization.rb +7 -2
  103. data/app/models/spree/return_item.rb +5 -1
  104. data/app/models/spree/role.rb +3 -3
  105. data/app/models/spree/role_user.rb +1 -1
  106. data/app/models/spree/shipment.rb +12 -31
  107. data/app/models/spree/shipping_category.rb +4 -1
  108. data/app/models/spree/shipping_method.rb +8 -0
  109. data/app/models/spree/state.rb +1 -1
  110. data/app/models/spree/state_change.rb +1 -1
  111. data/app/models/spree/stock/availability_validator.rb +9 -3
  112. data/app/models/spree/stock/content_item.rb +1 -1
  113. data/app/models/spree/stock/quantifier.rb +2 -2
  114. data/app/models/spree/stock/splitter/digital.rb +35 -0
  115. data/app/models/spree/stock_item.rb +7 -2
  116. data/app/models/spree/stock_location.rb +23 -31
  117. data/app/models/spree/stock_movement.rb +7 -0
  118. data/app/models/spree/stock_transfer.rb +6 -6
  119. data/app/models/spree/store.rb +78 -21
  120. data/app/models/spree/store_credit.rb +10 -3
  121. data/app/models/spree/store_credit_category.rb +2 -0
  122. data/app/models/spree/store_credit_event.rb +2 -7
  123. data/app/models/spree/store_credit_type.rb +2 -0
  124. data/app/models/spree/store_favicon_image.rb +17 -0
  125. data/app/models/spree/store_logo.rb +9 -0
  126. data/app/models/spree/store_mailer_logo.rb +13 -0
  127. data/app/models/spree/tax_category.rb +9 -1
  128. data/app/models/spree/tax_rate.rb +9 -2
  129. data/app/models/spree/taxon.rb +39 -6
  130. data/app/models/spree/taxon_image/configuration/active_storage.rb +6 -12
  131. data/app/models/spree/taxon_image.rb +3 -2
  132. data/app/models/spree/taxonomy.rb +15 -1
  133. data/app/models/spree/variant.rb +67 -31
  134. data/app/models/spree/wished_item.rb +33 -0
  135. data/app/models/spree/wishlist.rb +38 -0
  136. data/app/models/spree/zone.rb +11 -6
  137. data/app/services/spree/account/addresses/create.rb +1 -17
  138. data/app/services/spree/account/addresses/update.rb +1 -22
  139. data/app/services/spree/addresses/create.rb +24 -0
  140. data/app/services/spree/addresses/helper.rb +41 -0
  141. data/app/services/spree/addresses/update.rb +32 -0
  142. data/app/services/spree/cart/add_item.rb +4 -2
  143. data/app/services/spree/cart/create.rb +4 -2
  144. data/app/services/spree/cart/remove_line_item.rb +1 -0
  145. data/app/services/spree/cart/update.rb +2 -2
  146. data/app/services/spree/checkout/add_store_credit.rb +4 -1
  147. data/app/services/spree/checkout/select_shipping_method.rb +49 -0
  148. data/app/services/spree/checkout/update.rb +3 -10
  149. data/app/services/spree/data_feeds/google/optional_attributes.rb +23 -0
  150. data/app/services/spree/data_feeds/google/optional_sub_attributes.rb +21 -0
  151. data/app/services/spree/data_feeds/google/products_list.rb +14 -0
  152. data/app/services/spree/data_feeds/google/required_attributes.rb +67 -0
  153. data/app/services/spree/data_feeds/google/rss.rb +107 -0
  154. data/app/services/spree/line_items/create.rb +20 -0
  155. data/app/services/spree/line_items/destroy.rb +18 -0
  156. data/app/services/spree/line_items/helper.rb +11 -0
  157. data/app/services/spree/line_items/update.rb +17 -0
  158. data/app/services/spree/locales/set_fallback_locale_for_store.rb +16 -0
  159. data/app/services/spree/orders/approve.rb +18 -0
  160. data/app/services/spree/orders/cancel.rb +18 -0
  161. data/app/services/spree/payments/create.rb +66 -0
  162. data/app/services/spree/seeds/all.rb +26 -0
  163. data/app/services/spree/seeds/countries.rb +50 -0
  164. data/app/services/spree/seeds/default_reimbursement_types.rb +12 -0
  165. data/app/services/spree/seeds/roles.rb +11 -0
  166. data/app/services/spree/seeds/shipping_categories.rb +12 -0
  167. data/app/services/spree/seeds/states.rb +72 -0
  168. data/app/services/spree/seeds/stock_locations.rb +18 -0
  169. data/app/services/spree/seeds/store_credit_categories.rb +14 -0
  170. data/app/services/spree/seeds/stores.rb +31 -0
  171. data/app/services/spree/seeds/zones.rb +39 -0
  172. data/app/services/spree/shipments/add_item.rb +32 -0
  173. data/app/services/spree/shipments/change_state.rb +14 -0
  174. data/app/services/spree/shipments/create.rb +48 -0
  175. data/app/services/spree/shipments/helper.rb +23 -0
  176. data/app/services/spree/shipments/remove_item.rb +55 -0
  177. data/app/services/spree/shipments/update.rb +40 -0
  178. data/app/services/spree/stock_locations/stock_items/create.rb +31 -0
  179. data/app/services/spree/variants/remove_line_items.rb +15 -0
  180. data/app/services/spree/wallet/create_payment_source.rb +26 -0
  181. data/app/sorters/spree/products/sort.rb +23 -0
  182. data/app/validators/spree/url_validator.rb +23 -0
  183. data/brakeman.ignore +328 -0
  184. data/config/initializers/active_storage.rb +0 -6
  185. data/config/initializers/friendly_id.rb +2 -0
  186. data/config/initializers/mobility.rb +16 -0
  187. data/config/locales/en.yml +20 -170
  188. data/config/routes.rb +43 -0
  189. data/db/migrate/20210914000000_spree_four_three.rb +1205 -0
  190. data/db/migrate/20210915064321_add_metadata_to_spree_orders.rb +13 -0
  191. data/db/migrate/20210915064322_add_metadata_to_spree_products.rb +13 -0
  192. data/db/migrate/20210915064323_add_metadata_to_spree_variants.rb +13 -0
  193. data/db/migrate/20210915064324_add_metadata_to_spree_line_items.rb +13 -0
  194. data/db/migrate/20210915064325_add_metadata_to_spree_shipments.rb +13 -0
  195. data/db/migrate/20210915064326_add_metadata_to_spree_payments.rb +13 -0
  196. data/db/migrate/20210915064327_add_metadata_to_spree_taxons_and_taxonomies.rb +18 -0
  197. data/db/migrate/20210915064328_add_metadata_to_spree_stock_transfers.rb +13 -0
  198. data/db/migrate/20210915064329_add_metadata_to_spree_multiple_tables.rb +30 -0
  199. data/db/migrate/20210920090344_add_deleted_at_to_spree_stores.rb +8 -0
  200. data/db/migrate/20210921070812_rename_column_access_hash_to_token.rb +8 -0
  201. data/db/migrate/20210921070813_create_spree_wishlists.rb +18 -0
  202. data/db/migrate/20210921070814_create_spree_wished_products.rb +16 -0
  203. data/db/migrate/20210921070815_rename_spree_wished_products_to_spree_wished_items.rb +5 -0
  204. data/db/migrate/20210921090344_add_unique_stock_item_stock_location_variant_deleted_at_index.rb +5 -0
  205. data/db/migrate/20210929090344_create_stock_item_stock_location_id_variant_id_coalesce_deleted_at_unique_index.rb +32 -0
  206. data/db/migrate/20210929091444_create_spree_digital_links.rb +13 -0
  207. data/db/migrate/20210929093238_create_spree_digitals.rb +9 -0
  208. data/db/migrate/20210930143043_rename_secret_to_token_on_spree_digital_links.rb +5 -0
  209. data/db/migrate/20210930155649_add_settings_to_spree_stores.rb +11 -0
  210. data/db/migrate/20211201202851_update_linkable_resource_types.rb +10 -0
  211. data/db/migrate/20211203082008_add_settings_to_payment_methods.rb +11 -0
  212. data/db/migrate/20211229162122_disable_propagate_all_variants_by_default.rb +5 -0
  213. data/db/migrate/20220103082046_add_status_and_make_active_at_to_spree_products.rb +7 -0
  214. data/db/migrate/20220106230929_add_internal_note_to_spree_orders.rb +5 -0
  215. data/db/migrate/20220113052823_create_payment_sources.rb +22 -0
  216. data/db/migrate/20220117100333_add_make_active_at_to_spree_products.rb +17 -0
  217. data/db/migrate/20220120092821_add_metadata_to_spree_tax_rates.rb +13 -0
  218. data/db/migrate/20220201103922_add_first_name_and_last_name_to_spree_users.rb +9 -0
  219. data/db/migrate/20220222083546_add_barcode_to_spree_variants.rb +6 -0
  220. data/db/migrate/20220329113557_fix_cms_pages_unique_indexes.rb +8 -0
  221. data/db/migrate/20220613133029_add_metadata_to_spree_stock_items.rb +13 -0
  222. data/db/migrate/20220706112554_create_product_name_and_description_translations_for_mobility_table_backend.rb +27 -0
  223. data/db/migrate/20220715083542_create_spree_product_translations_for_mobility.rb +7 -0
  224. data/db/migrate/20220715120222_change_product_name_null_to_true.rb +5 -0
  225. data/db/migrate/20220718100743_create_spree_taxon_name_and_description_translations_for_mobility_table_backend.rb +27 -0
  226. data/db/migrate/20220718100948_change_taxon_name_null_to_true.rb +5 -0
  227. data/db/migrate/20220802070609_add_locale_to_friendly_id_slugs.rb +11 -0
  228. data/db/migrate/20220802073225_create_spree_product_slug_translations_for_mobility_table_backend.rb +5 -0
  229. data/db/migrate/20220804073928_transfer_data_to_translatable_tables.rb +66 -0
  230. data/db/migrate/20221215151408_add_selected_locale_to_spree_users.rb +8 -0
  231. data/db/migrate/20221219123957_add_deleted_at_to_product_translations.rb +6 -0
  232. data/db/migrate/20221220133432_add_uniqueness_constraint_to_product_translations.rb +5 -0
  233. data/db/migrate/20221229132350_create_spree_data_feed_settings.rb +14 -0
  234. data/db/migrate/20230103144439_create_option_type_translations.rb +26 -0
  235. data/db/migrate/20230103151034_create_option_value_translations.rb +26 -0
  236. data/db/migrate/20230109084253_create_product_property_translations.rb +25 -0
  237. data/db/migrate/20230109094907_transfer_options_data_to_translatable_tables.rb +58 -0
  238. data/db/migrate/20230109105943_create_property_translations.rb +26 -0
  239. data/db/migrate/20230109110840_transfer_property_data_to_translatable_tables.rb +59 -0
  240. data/db/migrate/20230110142344_backfill_friendly_id_slug_locale.rb +15 -0
  241. data/db/migrate/20230111121534_add_additional_taxon_translation_fields.rb +8 -0
  242. data/db/migrate/20230111122511_transfer_product_and_taxon_data_to_translatable_tables.rb +82 -0
  243. data/db/migrate/20230117115531_create_taxonomy_translations.rb +24 -0
  244. data/db/migrate/20230117120430_allow_null_taxonomy_name.rb +5 -0
  245. data/db/migrate/20230117121303_transfer_taxonomy_data_to_translatable_tables.rb +11 -0
  246. data/db/migrate/20230210142732_create_store_translations.rb +50 -0
  247. data/db/migrate/20230210142849_transfer_store_data_to_translatable_tables.rb +11 -0
  248. data/db/migrate/20230210230434_add_deleted_at_to_store_translations.rb +6 -0
  249. data/db/migrate/20230415155958_rename_data_feed_settings_table.rb +5 -0
  250. data/db/migrate/20230415160828_rename_data_feed_table_columns.rb +7 -0
  251. data/db/migrate/20230415161226_add_indexes_to_data_feeds_table.rb +5 -0
  252. data/db/migrate/20230512094803_rename_data_feeds_column_provider_to_type.rb +5 -0
  253. data/db/migrate/20230514162157_add_index_on_locale_and_permalink_to_spree_taxons.rb +5 -0
  254. data/db/seeds.rb +1 -5
  255. data/lib/friendly_id/paranoia.rb +4 -0
  256. data/lib/generators/spree/dummy/dummy_generator.rb +14 -3
  257. data/lib/generators/spree/dummy/templates/package.json +12 -0
  258. data/lib/generators/spree/dummy/templates/rails/database.yml +20 -18
  259. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  260. data/lib/mobility/plugins/store_based_fallbacks.rb +55 -0
  261. data/lib/spree/core/configuration.rb +91 -0
  262. data/lib/spree/core/controller_helpers/auth.rb +7 -5
  263. data/lib/spree/core/controller_helpers/common.rb +15 -1
  264. data/lib/spree/core/controller_helpers/currency.rb +8 -6
  265. data/lib/spree/core/controller_helpers/locale.rb +41 -8
  266. data/lib/spree/core/controller_helpers/order.rb +4 -2
  267. data/lib/spree/core/controller_helpers/search.rb +1 -1
  268. data/lib/spree/core/controller_helpers/store.rb +5 -3
  269. data/lib/spree/core/dependencies.rb +106 -0
  270. data/lib/spree/core/dependencies_helper.rb +30 -0
  271. data/lib/spree/core/engine.rb +60 -46
  272. data/lib/spree/core/importer/product.rb +1 -1
  273. data/lib/spree/core/number_generator.rb +0 -2
  274. data/{app/models/spree → lib/spree/core}/preferences/configuration.rb +5 -2
  275. data/{app/models/spree → lib/spree/core}/preferences/preferable.rb +3 -0
  276. data/{app/models/spree → lib/spree/core}/preferences/preferable_class_methods.rb +2 -0
  277. data/{app/models/spree → lib/spree/core}/preferences/store.rb +1 -1
  278. data/lib/spree/core/product_duplicator.rb +1 -1
  279. data/lib/spree/core/product_filters.rb +7 -4
  280. data/lib/spree/core/search/base.rb +10 -6
  281. data/lib/spree/core/version.rb +1 -1
  282. data/lib/spree/core.rb +43 -13
  283. data/lib/spree/money.rb +2 -2
  284. data/lib/spree/permitted_attributes.rb +36 -16
  285. data/lib/spree/testing_support/authorization_helpers.rb +3 -1
  286. data/lib/spree/testing_support/capybara_config.rb +14 -19
  287. data/lib/spree/testing_support/capybara_ext.rb +1 -6
  288. data/lib/spree/testing_support/common_rake.rb +23 -4
  289. data/lib/spree/testing_support/factories/asset_factory.rb +15 -0
  290. data/lib/spree/testing_support/factories/cms_section_factory.rb +2 -2
  291. data/lib/spree/testing_support/factories/digital_factory.rb +10 -0
  292. data/lib/spree/testing_support/factories/digital_link_factory.rb +6 -0
  293. data/lib/spree/testing_support/factories/favicon_image_factory.rb +9 -0
  294. data/lib/spree/testing_support/factories/google_data_feed_factory.rb +8 -0
  295. data/lib/spree/testing_support/factories/icon_factory.rb +3 -1
  296. data/lib/spree/testing_support/factories/image_factory.rb +3 -1
  297. data/lib/spree/testing_support/factories/log_entry_factory.rb +6 -0
  298. data/lib/spree/testing_support/factories/menu_item_factory.rb +1 -1
  299. data/lib/spree/testing_support/factories/order_factory.rb +6 -2
  300. data/lib/spree/testing_support/factories/payment_capture_event_factory.rb +6 -0
  301. data/lib/spree/testing_support/factories/payment_factory.rb +3 -3
  302. data/lib/spree/testing_support/factories/product_factory.rb +12 -1
  303. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -0
  304. data/lib/spree/testing_support/factories/product_translation_factory.rb +6 -0
  305. data/lib/spree/testing_support/factories/promotion_action_factory.rb +5 -0
  306. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  307. data/lib/spree/testing_support/factories/reimbursement_credit_factory.rb +7 -0
  308. data/lib/spree/testing_support/factories/return_authorization_factory.rb +1 -1
  309. data/lib/spree/testing_support/factories/role_factory.rb +1 -1
  310. data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
  311. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +7 -0
  312. data/lib/spree/testing_support/factories/state_change_factory.rb +8 -0
  313. data/lib/spree/testing_support/factories/stock_item_factory.rb +7 -0
  314. data/lib/spree/testing_support/factories/stock_location_factory.rb +4 -3
  315. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +9 -0
  316. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
  317. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +5 -0
  318. data/lib/spree/testing_support/factories/store_factory.rb +2 -1
  319. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -0
  320. data/lib/spree/testing_support/factories/taxon_image_factory.rb +3 -1
  321. data/lib/spree/testing_support/factories/user_factory.rb +6 -0
  322. data/lib/spree/testing_support/factories/variant_factory.rb +8 -0
  323. data/lib/spree/testing_support/factories/wished_variant_factory.rb +6 -0
  324. data/lib/spree/testing_support/factories/wishlist_factory.rb +18 -0
  325. data/lib/spree/testing_support/jobs.rb +9 -0
  326. data/lib/spree/testing_support/metadata.rb +54 -0
  327. data/lib/spree/translation_migrations.rb +40 -0
  328. data/lib/spree_core.rb +3 -1
  329. data/lib/tasks/core.rake +16 -4
  330. data/spree_core.gemspec +7 -4
  331. metadata +245 -361
  332. data/app/models/friendly_id/slug_decorator.rb +0 -9
  333. data/app/models/spree/app_configuration.rb +0 -89
  334. data/app/models/spree/app_dependencies.rb +0 -98
  335. data/app/services/spree/account/addresses/helper.rb +0 -43
  336. data/app/services/spree/build_localized_redirect_url.rb +0 -101
  337. data/db/default/spree/countries.rb +0 -24
  338. data/db/default/spree/default_reimbursement_type.rb +0 -1
  339. data/db/default/spree/roles.rb +0 -2
  340. data/db/default/spree/states.rb +0 -49
  341. data/db/default/spree/store_credit_categories.rb +0 -1
  342. data/db/default/spree/stores.rb +0 -21
  343. data/db/default/spree/zones.rb +0 -29
  344. data/db/migrate/20120831092320_spree_one_two.rb +0 -481
  345. data/db/migrate/20120831092359_spree_promo_one_two.rb +0 -45
  346. data/db/migrate/20120905145253_add_tax_rate_label.rb +0 -5
  347. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +0 -5
  348. data/db/migrate/20120929093553_remove_unused_preference_columns.rb +0 -8
  349. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +0 -5
  350. data/db/migrate/20121010142909_add_states_required_to_countries.rb +0 -5
  351. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +0 -6
  352. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +0 -11
  353. data/db/migrate/20121031162139_split_prices_from_variants.rb +0 -31
  354. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +0 -9
  355. data/db/migrate/20121107184631_add_currency_to_line_items.rb +0 -5
  356. data/db/migrate/20121107194006_add_currency_to_orders.rb +0 -5
  357. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +0 -5
  358. data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +0 -5
  359. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +0 -5
  360. data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +0 -5
  361. data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +0 -6
  362. data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +0 -9
  363. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +0 -6
  364. data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +0 -5
  365. data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +0 -9
  366. data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +0 -5
  367. data/db/migrate/20130211190146_create_spree_stock_items.rb +0 -14
  368. data/db/migrate/20130211191120_create_spree_stock_locations.rb +0 -11
  369. data/db/migrate/20130213191427_create_default_stock.rb +0 -33
  370. data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +0 -5
  371. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +0 -5
  372. data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +0 -5
  373. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +0 -6
  374. data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +0 -6
  375. data/db/migrate/20130228210442_create_shipping_method_zone.rb +0 -21
  376. data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +0 -5
  377. data/db/migrate/20130301162924_create_shipping_method_categories.rb +0 -13
  378. data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +0 -5
  379. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +0 -24
  380. data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +0 -7
  381. data/db/migrate/20130305143310_create_stock_movements.rb +0 -12
  382. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +0 -22
  383. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +0 -5
  384. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +0 -5
  385. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +0 -5
  386. data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +0 -8
  387. data/db/migrate/20130319062004_change_orders_total_precision.rb +0 -8
  388. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +0 -7
  389. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +0 -7
  390. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +0 -7
  391. data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +0 -7
  392. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +0 -15
  393. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +0 -9
  394. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +0 -5
  395. data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +0 -15
  396. data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +0 -9
  397. data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +0 -14
  398. data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +0 -5
  399. data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +0 -13
  400. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +0 -5
  401. data/db/migrate/20130417120035_update_adjustment_states.rb +0 -16
  402. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +0 -15
  403. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +0 -14
  404. data/db/migrate/20130423110707_drop_products_count_on_hand.rb +0 -5
  405. data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +0 -5
  406. data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +0 -23
  407. data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +0 -5
  408. data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +0 -5
  409. data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +0 -5
  410. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +0 -5
  411. data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +0 -5
  412. data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +0 -9
  413. data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +0 -9
  414. data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +0 -6
  415. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +0 -5
  416. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +0 -7
  417. data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +0 -5
  418. data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +0 -6
  419. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +0 -5
  420. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +0 -6
  421. data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +0 -5
  422. data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +0 -5
  423. data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +0 -5
  424. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +0 -10
  425. data/db/migrate/20130806022521_drop_spree_mail_methods.rb +0 -12
  426. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +0 -8
  427. data/db/migrate/20130807024301_upgrade_adjustments.rb +0 -46
  428. data/db/migrate/20130807024302_rename_adjustment_fields.rb +0 -20
  429. data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +0 -5
  430. data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +0 -5
  431. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +0 -5
  432. data/db/migrate/20130813140619_expand_order_number_size.rb +0 -9
  433. data/db/migrate/20130813232134_rename_activators_to_promotions.rb +0 -5
  434. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +0 -5
  435. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +0 -5
  436. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +0 -16
  437. data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +0 -8
  438. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +0 -15
  439. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +0 -19
  440. data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +0 -5
  441. data/db/migrate/20130909115621_change_states_required_for_countries.rb +0 -9
  442. data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +0 -5
  443. data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +0 -5
  444. data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +0 -7
  445. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +0 -16
  446. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +0 -5
  447. data/db/migrate/20131107132123_add_tax_category_to_variants.rb +0 -6
  448. data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +0 -5
  449. data/db/migrate/20131118043959_add_included_to_adjustments.rb +0 -5
  450. data/db/migrate/20131118050234_rename_tax_total_fields.rb +0 -11
  451. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +0 -21
  452. data/db/migrate/20131120234456_add_updated_at_to_variants.rb +0 -5
  453. data/db/migrate/20131127001002_add_position_to_classifications.rb +0 -5
  454. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +0 -8
  455. data/db/migrate/20131211192741_unique_shipping_method_categories.rb +0 -24
  456. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +0 -5
  457. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +0 -8
  458. data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +0 -5
  459. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +0 -5
  460. data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +0 -6
  461. data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +0 -5
  462. data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +0 -6
  463. data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +0 -5
  464. data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +0 -5
  465. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +0 -12
  466. data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +0 -5
  467. data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +0 -11
  468. data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +0 -5
  469. data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +0 -5
  470. data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +0 -6
  471. data/db/migrate/20140213184916_add_more_indexes.rb +0 -13
  472. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +0 -5
  473. data/db/migrate/20140227112348_add_preference_store_to_everything.rb +0 -8
  474. data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +0 -13
  475. data/db/migrate/20140309023735_migrate_old_preferences.rb +0 -27
  476. data/db/migrate/20140309024355_create_spree_stores.rb +0 -25
  477. data/db/migrate/20140309033438_create_store_from_preferences.rb +0 -42
  478. data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +0 -6
  479. data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +0 -8
  480. data/db/migrate/20140331100557_add_additional_store_fields.rb +0 -8
  481. data/db/migrate/20140410141842_add_many_missing_indexes.rb +0 -18
  482. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +0 -66
  483. data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +0 -5
  484. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +0 -8
  485. data/db/migrate/20140518174634_add_token_to_spree_orders.rb +0 -5
  486. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +0 -29
  487. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +0 -10
  488. data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +0 -6
  489. data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +0 -6
  490. data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +0 -5
  491. data/db/migrate/20140625214618_create_spree_refunds.rb +0 -12
  492. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +0 -12
  493. data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +0 -5
  494. data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +0 -10
  495. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +0 -55
  496. data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +0 -7
  497. data/db/migrate/20140710190048_drop_return_authorization_amount.rb +0 -5
  498. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +0 -28
  499. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +0 -14
  500. data/db/migrate/20140713142214_rename_return_authorization_reason.rb +0 -5
  501. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +0 -11
  502. data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +0 -9
  503. data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +0 -6
  504. data/db/migrate/20140717155155_create_default_refund_reason.rb +0 -9
  505. data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +0 -7
  506. data/db/migrate/20140718133010_create_spree_customer_returns.rb +0 -9
  507. data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +0 -6
  508. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +0 -15
  509. data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +0 -5
  510. data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +0 -13
  511. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +0 -15
  512. data/db/migrate/20140725131539_create_spree_reimbursements.rb +0 -21
  513. data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +0 -5
  514. data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +0 -7
  515. data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +0 -5
  516. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +0 -20
  517. data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +0 -10
  518. data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +0 -5
  519. data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +0 -9
  520. data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +0 -10
  521. data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +0 -7
  522. data/db/migrate/20140911173301_add_kind_to_zone.rb +0 -11
  523. data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +0 -5
  524. data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +0 -6
  525. data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +0 -5
  526. data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +0 -6
  527. data/db/migrate/20141009204607_add_store_id_to_orders.rb +0 -8
  528. data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +0 -8
  529. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +0 -5
  530. data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +0 -8
  531. data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +0 -13
  532. data/db/migrate/20141105213646_update_classifications_positions.rb +0 -9
  533. data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +0 -5
  534. data/db/migrate/20141215232040_remove_token_permissions_table.rb +0 -6
  535. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +0 -5
  536. data/db/migrate/20141217215630_update_product_slug_index.rb +0 -6
  537. data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +0 -5
  538. data/db/migrate/20150118210639_create_spree_store_credits.rb +0 -24
  539. data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +0 -8
  540. data/db/migrate/20150118212051_create_spree_store_credit_events.rb +0 -17
  541. data/db/migrate/20150118212101_create_spree_store_credit_types.rb +0 -10
  542. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +0 -6
  543. data/db/migrate/20150122145607_add_resellable_to_return_items.rb +0 -5
  544. data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +0 -5
  545. data/db/migrate/20150128032538_remove_environment_from_tracker.rb +0 -8
  546. data/db/migrate/20150128060325_remove_spree_configurations.rb +0 -16
  547. data/db/migrate/20150216173445_add_index_to_spree_stock_items_variant_id.rb +0 -13
  548. data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +0 -13
  549. data/db/migrate/20150314013438_add_missing_indexes_on_spree_tables.rb +0 -67
  550. data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +0 -18
  551. data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +0 -14
  552. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -70
  553. data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +0 -5
  554. data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +0 -6
  555. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +0 -16
  556. data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +0 -19
  557. data/db/migrate/20150627090949_migrate_payment_methods_display.rb +0 -12
  558. data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +0 -6
  559. data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +0 -12
  560. data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +0 -18
  561. data/db/migrate/20150727191614_spree_store_credit_types.rb +0 -11
  562. data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +0 -68
  563. data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +0 -13
  564. data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +0 -16
  565. data/db/migrate/20160219165458_add_indexes.rb +0 -14
  566. data/db/migrate/20160509064646_remove_counter_cache_from_spree_variants_to_spree_stock_items.rb +0 -10
  567. data/db/migrate/20160608090604_add_zipcode_required_to_spree_countries.rb +0 -7
  568. data/db/migrate/20161014145148_add_created_at_to_variant.rb +0 -8
  569. data/db/migrate/20161014152814_add_null_false_to_spree_variants_timestamps.rb +0 -6
  570. data/db/migrate/20161125065505_add_quantity_to_inventory_units.rb +0 -5
  571. data/db/migrate/20170119122701_add_original_return_item_id_to_spree_inventory_units.rb +0 -29
  572. data/db/migrate/20170315152755_add_unique_index_on_number_to_spree_orders.rb +0 -16
  573. data/db/migrate/20170316154338_add_unique_index_on_number_to_spree_stock_transfer.rb +0 -16
  574. data/db/migrate/20170316205511_add_unique_index_on_number_to_spree_shipment.rb +0 -16
  575. data/db/migrate/20170320134043_add_unique_index_on_number_to_spree_payments.rb +0 -17
  576. data/db/migrate/20170320142750_add_unique_index_on_number_to_spree_return_authorizations.rb +0 -16
  577. data/db/migrate/20170320145040_add_unique_index_on_number_to_spree_customer_returns.rb +0 -16
  578. data/db/migrate/20170320145518_add_unique_index_on_number_to_spree_reimbursements.rb +0 -16
  579. data/db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb +0 -37
  580. data/db/migrate/20170329110859_add_index_on_stock_location_to_spree_customer_returns.rb +0 -5
  581. data/db/migrate/20170329113917_add_index_on_prototype_to_spree_option_type_prototype.rb +0 -19
  582. data/db/migrate/20170330082155_add_indexes_to_spree_option_value_variant.rb +0 -19
  583. data/db/migrate/20170330132215_add_index_on_promotion_id_to_order_promotions.rb +0 -5
  584. data/db/migrate/20170331101758_add_indexes_for_property_prototype.rb +0 -20
  585. data/db/migrate/20170331103334_add_index_for_prototype_id_to_prototype_taxons.rb +0 -5
  586. data/db/migrate/20170331110454_add_indexes_to_refunds.rb +0 -6
  587. data/db/migrate/20170331111757_add_indexes_to_reimbursement_credits.rb +0 -6
  588. data/db/migrate/20170331115246_add_indexes_to_return_authorizations.rb +0 -6
  589. data/db/migrate/20170331120125_add_indexes_to_return_items.rb +0 -11
  590. data/db/migrate/20170331121725_add_index_to_role_users.rb +0 -18
  591. data/db/migrate/20170331123625_add_index_to_shipping_method_categories.rb +0 -5
  592. data/db/migrate/20170331123832_add_index_to_shipping_method_zones.rb +0 -20
  593. data/db/migrate/20170331124251_add_index_to_spree_shipping_rates.rb +0 -6
  594. data/db/migrate/20170331124513_add_index_to_spree_stock_items.rb +0 -5
  595. data/db/migrate/20170331124924_add_index_to_spree_stock_movement.rb +0 -5
  596. data/db/migrate/20170413211707_change_indexes_on_friendly_id_slugs.rb +0 -10
  597. data/db/migrate/20170722102643_add_analytics_kind_to_spree_trackers.rb +0 -5
  598. data/db/migrate/20170727103056_rename_tracker_kind_field.rb +0 -5
  599. data/db/migrate/20171004223836_remove_icon_from_taxons.rb +0 -8
  600. data/db/migrate/20180222133746_add_unique_index_on_spree_promotions_code.rb +0 -6
  601. data/db/migrate/20180613080857_rename_guest_token_to_token_in_orders.rb +0 -5
  602. data/db/migrate/20180915160001_add_timestamps_to_spree_prices.rb +0 -12
  603. data/db/migrate/20181024100754_add_deleted_at_to_spree_credit_cards.rb +0 -6
  604. data/db/migrate/20190305121659_add_iso_and_iso3_validation_on_presence_and_uniqueness.rb +0 -18
  605. data/db/migrate/20190523092729_add_user_id_and_deleted_at_to_spree_addresses.rb +0 -12
  606. data/db/migrate/20191005121504_add_store_id_to_payment_methods.rb +0 -7
  607. data/db/migrate/20191016134113_add_deafult_value_for_store_default_currency.rb +0 -5
  608. data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +0 -11
  609. data/db/migrate/20200102141311_add_social_to_spree_stores.rb +0 -10
  610. data/db/migrate/20200212144523_add_hide_from_nav_to_taxons.rb +0 -5
  611. data/db/migrate/20200308210757_add_default_locale_to_spree_store.rb +0 -7
  612. data/db/migrate/20200310145140_add_customer_support_email_to_spree_store.rb +0 -7
  613. data/db/migrate/20200421095017_add_compare_at_amount_to_spree_prices.rb +0 -7
  614. data/db/migrate/20200423123001_add_default_country_id_to_spree_store.rb +0 -9
  615. data/db/migrate/20200430072209_add_footer_fields_to_spree_stores.rb +0 -8
  616. data/db/migrate/20200513154939_add_show_property_to_spree_product_properties.rb +0 -5
  617. data/db/migrate/20200607161221_add_store_owner_order_notification_delivered_to_spree_orders.rb +0 -7
  618. data/db/migrate/20200607161222_add_new_order_notifications_email_to_spree_stores.rb +0 -7
  619. data/db/migrate/20200610113542_add_label_to_spree_addresses.rb +0 -5
  620. data/db/migrate/20200826075557_add_unique_index_on_taxon_id_and_product_id_to_spree_products_taxons.rb +0 -5
  621. data/db/migrate/20201006110150_add_checkout_zone_field_to_store.rb +0 -12
  622. data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +0 -10
  623. data/db/migrate/20201013084504_add_seo_robots_to_spree_stores.rb +0 -5
  624. data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +0 -8
  625. data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +0 -5
  626. data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +0 -5
  627. data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +0 -10
  628. data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +0 -15
  629. data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +0 -5
  630. data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +0 -5
  631. data/db/migrate/20210205211040_add_supported_locales_to_spree_stores.rb +0 -11
  632. data/db/migrate/20210215202602_migrate_spree_i18n_globalize_config.rb +0 -22
  633. data/db/migrate/20210407200948_create_spree_menus.rb +0 -16
  634. data/db/migrate/20210408092939_create_spree_menu_items.rb +0 -31
  635. data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +0 -8
  636. data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +0 -8
  637. data/db/migrate/20210512191732_create_spree_cms_pages.rb +0 -24
  638. data/db/migrate/20210514204251_create_spree_cms_sections.rb +0 -22
  639. data/db/migrate/20210527094055_create_spree_products_stores.rb +0 -36
  640. data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +0 -5
  641. data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +0 -46
  642. data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +0 -29
  643. data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +0 -10
  644. data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +0 -11
  645. data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +0 -31
  646. data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +0 -31
  647. data/db/migrate/20210721125657_create_spree_promotions_stores.rb +0 -29
  648. data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +0 -11
  649. data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +0 -305
  650. data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +0 -9
  651. data/lib/friendly_id/slug_rails5_patch.rb +0 -11
  652. data/lib/spree/dependencies_helper.rb +0 -11
  653. /data/{app/models/spree → lib/spree/core}/preferences/scoped_store.rb +0 -0
@@ -3,9 +3,17 @@ require 'stringex'
3
3
 
4
4
  module Spree
5
5
  class Taxon < Spree::Base
6
+ include TranslatableResource
7
+ include TranslatableResourceSlug
8
+ include Metadata
9
+ if defined?(Spree::Webhooks)
10
+ include Spree::Webhooks::HasWebhooks
11
+ end
12
+
6
13
  extend FriendlyId
7
14
  friendly_id :permalink, slug_column: :permalink, use: :history
8
15
  before_validation :set_permalink, on: :create, if: :name
16
+ alias_attribute :slug, :permalink
9
17
 
10
18
  acts_as_nested_set dependent: :destroy
11
19
 
@@ -22,7 +30,7 @@ module Spree
22
30
  has_many :promotion_rule_taxons, class_name: 'Spree::PromotionRuleTaxon', dependent: :destroy
23
31
  has_many :promotion_rules, through: :promotion_rule_taxons, class_name: 'Spree::PromotionRule'
24
32
 
25
- validates :name, presence: true, uniqueness: { scope: [:parent_id, :taxonomy_id], allow_blank: true, case_sensitive: false }
33
+ validates :name, presence: true, uniqueness: { scope: [:parent_id, :taxonomy_id], case_sensitive: false }
26
34
  validates :taxonomy, presence: true
27
35
  validates :permalink, uniqueness: { case_sensitive: false, scope: [:parent_id, :taxonomy_id] }
28
36
  validates :hide_from_nav, inclusion: { in: [true, false] }
@@ -37,6 +45,7 @@ module Spree
37
45
 
38
46
  before_validation :copy_taxonomy_from_parent
39
47
  after_save :touch_ancestors_and_taxonomy
48
+ after_update :sync_taxonomy_name
40
49
  after_touch :touch_ancestors_and_taxonomy
41
50
 
42
51
  has_one :icon, as: :viewable, dependent: :destroy, class_name: 'Spree::TaxonImage'
@@ -48,6 +57,26 @@ module Spree
48
57
 
49
58
  scope :for_stores, ->(stores) { joins(:taxonomy).where(spree_taxonomies: { store_id: stores.ids }) }
50
59
 
60
+ TRANSLATABLE_FIELDS = %i[name description permalink].freeze
61
+ translates(*TRANSLATABLE_FIELDS)
62
+
63
+ self::Translation.class_eval do
64
+ alias_attribute :slug, :permalink
65
+
66
+ before_create :set_permalink
67
+
68
+ def set_permalink
69
+ parent = translated_model.parent
70
+ name_with_fallback = name || translated_model.name
71
+
72
+ if parent.present?
73
+ self.permalink = [parent.permalink, (permalink.blank? ? name_with_fallback.to_url : permalink.split('/').last)].join('/')
74
+ else
75
+ self.permalink = name_with_fallback.to_url if permalink.blank?
76
+ end
77
+ end
78
+ end
79
+
51
80
  # indicate which filters should be used for a taxon
52
81
  # this method should be customized to your own site
53
82
  def applicable_filters
@@ -67,11 +96,7 @@ module Spree
67
96
 
68
97
  # Creates permalink base for friendly_id
69
98
  def set_permalink
70
- if parent.present?
71
- self.permalink = [parent.permalink, (permalink.blank? ? name.to_url : permalink.split('/').last)].join('/')
72
- else
73
- self.permalink = name.to_url if permalink.blank?
74
- end
99
+ translations.each(&:set_permalink)
75
100
  end
76
101
 
77
102
  def active_products
@@ -103,6 +128,14 @@ module Spree
103
128
 
104
129
  private
105
130
 
131
+ def sync_taxonomy_name
132
+ if saved_change_to_name? && root?
133
+ return if taxonomy.name.to_s == name.to_s
134
+
135
+ taxonomy.update(name: name)
136
+ end
137
+ end
138
+
106
139
  def touch_ancestors_and_taxonomy
107
140
  # Touches all ancestors at once to avoid recursive taxonomy touch, and reduce queries.
108
141
  ancestors.update_all(updated_at: Time.current)
@@ -5,9 +5,13 @@ module Spree
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- validate :check_attachment_content_type
8
+ if Spree.public_storage_service_name
9
+ has_one_attached :attachment, service: Spree.public_storage_service_name
10
+ else
11
+ has_one_attached :attachment
12
+ end
9
13
 
10
- has_one_attached :attachment
14
+ validates :attachment, content_type: /\Aimage\/.*\z/
11
15
 
12
16
  default_scope { includes(attachment_attachment: :blob) }
13
17
 
@@ -21,16 +25,6 @@ module Spree
21
25
  def default_style
22
26
  :mini
23
27
  end
24
-
25
- def accepted_image_types
26
- %w(image/jpeg image/jpg image/png image/gif)
27
- end
28
-
29
- def check_attachment_content_type
30
- if attachment.attached? && !attachment.content_type.in?(accepted_image_types)
31
- errors.add(:attachment, :not_allowed_content_type)
32
- end
33
- end
34
28
  end
35
29
  end
36
30
  end
@@ -6,10 +6,11 @@ module Spree
6
6
 
7
7
  def styles
8
8
  self.class.styles.map do |_, size|
9
- width, height = size[/(\d+)x(\d+)/].split('x')
9
+ width, height = size[/(\d+)x(\d+)/].split('x').map(&:to_i)
10
10
 
11
11
  {
12
- url: polymorphic_path(attachment.variant(resize: size), only_path: true),
12
+ url: generate_url(size: size),
13
+ size: size,
13
14
  width: width,
14
15
  height: height
15
16
  }
@@ -1,5 +1,14 @@
1
1
  module Spree
2
2
  class Taxonomy < Spree::Base
3
+ include TranslatableResource
4
+ include Metadata
5
+ if defined?(Spree::Webhooks)
6
+ include Spree::Webhooks::HasWebhooks
7
+ end
8
+
9
+ TRANSLATABLE_FIELDS = %i[name].freeze
10
+ translates(*TRANSLATABLE_FIELDS)
11
+
3
12
  acts_as_list
4
13
 
5
14
  validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true, scope: :store_id }
@@ -10,10 +19,12 @@ module Spree
10
19
  belongs_to :store, class_name: 'Spree::Store'
11
20
 
12
21
  after_create :set_root
13
- after_save :set_root_taxon_name
22
+ after_update :set_root_taxon_name
14
23
 
15
24
  default_scope { order("#{table_name}.position, #{table_name}.created_at") }
16
25
 
26
+ self.whitelisted_ransackable_associations = %w[root]
27
+
17
28
  private
18
29
 
19
30
  def set_root
@@ -21,6 +32,9 @@ module Spree
21
32
  end
22
33
 
23
34
  def set_root_taxon_name
35
+ return unless saved_change_to_name?
36
+ return if name.to_s == root.name.to_s
37
+
24
38
  root.update(name: name)
25
39
  end
26
40
  end
@@ -4,20 +4,27 @@ module Spree
4
4
  acts_as_list scope: :product
5
5
 
6
6
  include MemoizedData
7
+ include Metadata
8
+ if defined?(Spree::Webhooks)
9
+ include Spree::Webhooks::HasWebhooks
10
+ end
7
11
 
8
12
  MEMOIZED_METHODS = %w(purchasable in_stock backorderable tax_category options_text compare_at_price)
9
13
 
10
14
  belongs_to :product, -> { with_deleted }, touch: true, class_name: 'Spree::Product', inverse_of: :variants
11
15
  belongs_to :tax_category, class_name: 'Spree::TaxCategory', optional: true
12
16
 
13
- delegate :name, :name=, :description, :slug, :available_on, :shipping_category_id,
17
+ delegate :name, :name=, :description, :slug, :available_on, :make_active_at, :shipping_category_id,
14
18
  :meta_description, :meta_keywords, :shipping_category, to: :product
15
19
 
20
+ auto_strip_attributes :sku, nullify: false
21
+
16
22
  # we need to have this callback before any dependent: :destroy associations
17
23
  # https://github.com/rails/rails/issues/3458
18
- before_destroy :ensure_no_line_items
24
+ before_destroy :ensure_not_in_complete_orders
25
+ after_destroy :remove_line_items_from_incomplete_orders
19
26
 
20
- # must include this after ensure_no_line_items to make sure price won't be deleted before validation
27
+ # must include this after ensure_not_in_complete_orders to make sure price won't be deleted before validation
21
28
  include Spree::DefaultPrice
22
29
 
23
30
  with_options inverse_of: :variant do
@@ -42,6 +49,10 @@ module Spree
42
49
  dependent: :destroy,
43
50
  inverse_of: :variant
44
51
 
52
+ has_many :wished_items, dependent: :destroy
53
+
54
+ has_many :digitals
55
+
45
56
  before_validation :set_cost_currency
46
57
 
47
58
  validate :check_price
@@ -52,7 +63,7 @@ module Spree
52
63
  validates :cost_price
53
64
  validates :price
54
65
  end
55
- validates :sku, uniqueness: { conditions: -> { where(deleted_at: nil) }, case_sensitive: false },
66
+ validates :sku, uniqueness: { conditions: -> { where(deleted_at: nil) }, case_sensitive: false, scope: spree_base_uniqueness_scope },
56
67
  allow_blank: true, unless: :disable_sku_validation?
57
68
 
58
69
  after_create :create_stock_items
@@ -89,7 +100,7 @@ module Spree
89
100
  scope :not_deleted, -> { where("#{Spree::Variant.quoted_table_name}.deleted_at IS NULL") }
90
101
 
91
102
  scope :for_currency_and_available_price_amount, ->(currency = nil) do
92
- currency ||= Spree::Config[:currency]
103
+ currency ||= Spree::Store.default.default_currency
93
104
  joins(:prices).where('spree_prices.currency = ?', currency).where('spree_prices.amount IS NOT NULL').distinct
94
105
  end
95
106
 
@@ -106,32 +117,33 @@ module Spree
106
117
  end
107
118
  end
108
119
 
109
- self.whitelisted_ransackable_associations = %w[option_values product prices default_price]
110
- self.whitelisted_ransackable_attributes = %w[weight sku]
120
+ self.whitelisted_ransackable_associations = %w[option_values product tax_category prices default_price]
121
+ self.whitelisted_ransackable_attributes = %w[weight depth width height sku discontinue_on is_master cost_price cost_currency track_inventory deleted_at]
111
122
  self.whitelisted_ransackable_scopes = %i(product_name_or_sku_cont search_by_product_name_or_sku)
112
123
 
113
124
  def self.product_name_or_sku_cont(query)
114
- joins(:product).where("LOWER(#{Product.table_name}.name) LIKE LOWER(:query) OR LOWER(sku) LIKE LOWER(:query)", query: "%#{query}%")
125
+ joins(:product).join_translation_table(Product).
126
+ where("LOWER(#{Product.translation_table_alias}.name) LIKE LOWER(:query)
127
+ OR LOWER(sku) LIKE LOWER(:query)", query: "%#{query}%")
115
128
  end
116
129
 
117
130
  def self.search_by_product_name_or_sku(query)
118
- if defined?(SpreeGlobalize)
119
- joins(product: :translations).where("LOWER(#{Product::Translation.table_name}.name) LIKE LOWER(:query) OR LOWER(sku) LIKE LOWER(:query)",
120
- query: "%#{query}%")
121
- else
122
- product_name_or_sku_cont(query)
123
- end
131
+ product_name_or_sku_cont(query)
124
132
  end
125
133
 
126
134
  def available?
127
135
  !discontinued? && product.available?
128
136
  end
129
137
 
138
+ def in_stock_or_backorderable?
139
+ self.class.in_stock_or_backorderable.exists?(id: id)
140
+ end
141
+
130
142
  def tax_category
131
143
  @tax_category ||= if self[:tax_category_id].nil?
132
144
  product.tax_category
133
145
  else
134
- Spree::TaxCategory.find(self[:tax_category_id])
146
+ Spree::TaxCategory.find_by(id: self[:tax_category_id]) || product.tax_category
135
147
  end
136
148
  end
137
149
 
@@ -157,6 +169,8 @@ module Spree
157
169
 
158
170
  def options=(options = {})
159
171
  options.each do |option|
172
+ next if option[:name].blank? || option[:value].blank?
173
+
160
174
  set_option_value(option[:name], option[:value])
161
175
  end
162
176
  end
@@ -165,12 +179,12 @@ module Spree
165
179
  # no option values on master
166
180
  return if is_master
167
181
 
168
- option_type = Spree::OptionType.where(name: opt_name).first_or_initialize do |o|
169
- o.presentation = opt_name
182
+ option_type = Spree::OptionType.where(['LOWER(name) = ?', opt_name.downcase.strip]).first_or_initialize do |o|
183
+ o.name = o.presentation = opt_name
170
184
  o.save!
171
185
  end
172
186
 
173
- current_value = option_values.detect { |o| o.option_type.name == opt_name }
187
+ current_value = find_option_value(opt_name)
174
188
 
175
189
  if current_value.nil?
176
190
  # then we have to check to make sure that the product has the option type
@@ -178,13 +192,13 @@ module Spree
178
192
  product.option_types << option_type
179
193
  end
180
194
  else
181
- return if current_value.name == opt_value
195
+ return if current_value.name.downcase.strip == opt_value.downcase.strip
182
196
 
183
197
  option_values.delete(current_value)
184
198
  end
185
199
 
186
- option_value = Spree::OptionValue.where(option_type_id: option_type.id, name: opt_value).first_or_initialize do |o|
187
- o.presentation = opt_value
200
+ option_value = option_type.option_values.where(['LOWER(name) = ?', opt_value.downcase.strip]).first_or_initialize do |o|
201
+ o.name = o.presentation = opt_value
188
202
  o.save!
189
203
  end
190
204
 
@@ -192,12 +206,29 @@ module Spree
192
206
  save
193
207
  end
194
208
 
209
+ def find_option_value(opt_name)
210
+ option_values.detect { |o| o.option_type.name.downcase.strip == opt_name.downcase.strip }
211
+ end
212
+
195
213
  def option_value(opt_name)
196
- option_values.detect { |o| o.option_type.name == opt_name }.try(:presentation)
214
+ find_option_value(opt_name).try(:presentation)
197
215
  end
198
216
 
199
217
  def price_in(currency)
200
- prices.detect { |price| price.currency == currency&.upcase } || prices.build(currency: currency&.upcase)
218
+ currency = currency&.upcase
219
+ find_or_build_price = lambda do
220
+ if prices.loaded?
221
+ prices.detect { |price| price.currency == currency } || prices.build(currency: currency)
222
+ else
223
+ prices.find_or_initialize_by(currency: currency)
224
+ end
225
+ end
226
+
227
+ Rails.cache.fetch("spree/prices/#{cache_key_with_version}/price_in/#{currency}") do
228
+ find_or_build_price.call
229
+ end
230
+ rescue TypeError
231
+ find_or_build_price.call
201
232
  end
202
233
 
203
234
  def amount_in(currency)
@@ -276,10 +307,6 @@ module Spree
276
307
  track_inventory? && Spree::Config.track_inventory_levels
277
308
  end
278
309
 
279
- def track_inventory
280
- should_track_inventory?
281
- end
282
-
283
310
  def volume
284
311
  (width || 0) * (height || 0) * (depth || 0)
285
312
  end
@@ -300,15 +327,24 @@ module Spree
300
327
  @backordered ||= !in_stock? && stock_items.exists?(backorderable: true)
301
328
  end
302
329
 
330
+ # Is this variant to be downloaded by the customer?
331
+ def digital?
332
+ digitals.present?
333
+ end
334
+
303
335
  private
304
336
 
305
- def ensure_no_line_items
306
- if line_items.any?
337
+ def ensure_not_in_complete_orders
338
+ if orders.complete.any?
307
339
  errors.add(:base, :cannot_destroy_if_attached_to_line_items)
308
340
  throw(:abort)
309
341
  end
310
342
  end
311
343
 
344
+ def remove_line_items_from_incomplete_orders
345
+ Spree::Variants::RemoveFromIncompleteOrdersJob.perform_later(self)
346
+ end
347
+
312
348
  def quantifier
313
349
  Spree::Stock::Quantifier.new(self)
314
350
  end
@@ -329,12 +365,12 @@ module Spree
329
365
  self.price = product.master.price
330
366
  end
331
367
  if price.present? && currency.nil?
332
- self.currency = Spree::Config[:currency]
368
+ self.currency = Spree::Store.default.default_currency
333
369
  end
334
370
  end
335
371
 
336
372
  def set_cost_currency
337
- self.cost_currency = Spree::Config[:currency] if cost_currency.blank?
373
+ self.cost_currency = Spree::Store.default.default_currency if cost_currency.blank?
338
374
  end
339
375
 
340
376
  def create_stock_items
@@ -0,0 +1,33 @@
1
+ module Spree
2
+ class WishedItem < Spree::Base
3
+ if defined?(Spree::Webhooks)
4
+ include Spree::Webhooks::HasWebhooks
5
+ end
6
+
7
+ extend DisplayMoney
8
+ money_methods :total, :price
9
+
10
+ belongs_to :variant, class_name: 'Spree::Variant'
11
+ belongs_to :wishlist, class_name: 'Spree::Wishlist'
12
+
13
+ has_one :product, class_name: 'Spree::Product', through: :variant
14
+
15
+ validates :variant, :wishlist, presence: true
16
+ validates :variant, uniqueness: { scope: [:wishlist] }
17
+ validates :quantity, numericality: { only_integer: true, greater_than: 0 }
18
+
19
+ def price(currency)
20
+ variant.amount_in(currency[:currency])
21
+ end
22
+
23
+ def total(currency)
24
+ variant_price = variant.amount_in(currency[:currency])
25
+
26
+ if variant_price.nil?
27
+ variant_price
28
+ else
29
+ quantity * variant_price
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,38 @@
1
+ module Spree
2
+ class Wishlist < Spree::Base
3
+ include SingleStoreResource
4
+ if defined?(Spree::Webhooks)
5
+ include Spree::Webhooks::HasWebhooks
6
+ end
7
+
8
+ has_secure_token
9
+
10
+ belongs_to :user, class_name: "::#{Spree.user_class}", touch: true
11
+ belongs_to :store, class_name: 'Spree::Store'
12
+
13
+ has_many :wished_items, class_name: 'Spree::WishedItem', dependent: :destroy
14
+
15
+ after_commit :ensure_default_exists_and_is_unique
16
+ validates :name, :store, :user, presence: true
17
+
18
+ def include?(variant_id)
19
+ wished_items.exists?(variant_id: variant_id)
20
+ end
21
+
22
+ def to_param
23
+ token
24
+ end
25
+
26
+ def self.get_by_param(param)
27
+ find_by(token: param)
28
+ end
29
+
30
+ private
31
+
32
+ def ensure_default_exists_and_is_unique
33
+ if is_default?
34
+ Wishlist.where(is_default: true, user_id: user_id, store_id: store_id).where.not(id: id).update_all(is_default: false)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,5 +1,10 @@
1
1
  module Spree
2
2
  class Zone < Spree::Base
3
+ include UniqueName
4
+ if defined?(Spree::Webhooks)
5
+ include Spree::Webhooks::HasWebhooks
6
+ end
7
+
3
8
  with_options dependent: :destroy, inverse_of: :zone do
4
9
  has_many :zone_members, class_name: 'Spree::ZoneMember'
5
10
  has_many :tax_rates
@@ -12,8 +17,6 @@ module Spree
12
17
  has_many :shipping_method_zones, class_name: 'Spree::ShippingMethodZone'
13
18
  has_many :shipping_methods, through: :shipping_method_zones, class_name: 'Spree::ShippingMethod'
14
19
 
15
- validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true }
16
-
17
20
  scope :with_default_tax, -> { where(default_tax: true) }
18
21
 
19
22
  after_save :remove_defunct_members
@@ -71,7 +74,9 @@ module Spree
71
74
  end
72
75
 
73
76
  def self.default_checkout_zone
74
- find_by(name: Spree::Config[:checkout_zone])
77
+ ActiveSupport::Deprecation.warn('Spree::Zone.default_checkout_zone is deprecated and will be removed in Spree 5')
78
+
79
+ first
75
80
  end
76
81
 
77
82
  def kind
@@ -109,10 +114,10 @@ module Spree
109
114
  def country_list
110
115
  @countries ||= case kind
111
116
  when 'country' then
112
- zoneables
117
+ Country.where(id: country_ids)
113
118
  when 'state' then
114
- zoneables.collect(&:country)
115
- end.flatten.compact.uniq
119
+ Country.where(id: zoneables.collect(&:country_id))
120
+ end
116
121
  end
117
122
 
118
123
  def <=>(other)
@@ -1,23 +1,7 @@
1
1
  module Spree
2
2
  module Account
3
3
  module Addresses
4
- class Create
5
- prepend Spree::ServiceModule::Base
6
- include Spree::Account::Addresses::Helper
7
-
8
- attr_accessor :country
9
-
10
- def call(user:, address_params:)
11
- fill_country_and_state_ids(address_params)
12
-
13
- address = user.addresses.new(address_params)
14
- if address.save
15
- assign_to_user_as_default(user: user, address_id: address.id)
16
- success(address)
17
- else
18
- failure(address)
19
- end
20
- end
4
+ class Create < Spree::Addresses::Create
21
5
  end
22
6
  end
23
7
  end
@@ -1,28 +1,7 @@
1
1
  module Spree
2
2
  module Account
3
3
  module Addresses
4
- class Update
5
- prepend Spree::ServiceModule::Base
6
- include Spree::Account::Addresses::Helper
7
-
8
- attr_accessor :country
9
-
10
- def call(address:, address_params:)
11
- address_params[:country_id] ||= address.country_id
12
- fill_country_and_state_ids(address_params)
13
-
14
- if address&.editable?
15
- address.update(address_params) ? success(address) : failure(address)
16
- else
17
- new_address(address_params).valid? ? address.destroy && success(new_address) : failure(new_address)
18
- end
19
- end
20
-
21
- private
22
-
23
- def new_address(address_params = {})
24
- @new_address ||= ::Spree::Address.find_or_create_by(address_params.except(:id, :updated_at, :created_at))
25
- end
4
+ class Update < Spree::Addresses::Update
26
5
  end
27
6
  end
28
7
  end
@@ -0,0 +1,24 @@
1
+ module Spree
2
+ module Addresses
3
+ class Create
4
+ prepend Spree::ServiceModule::Base
5
+ include Spree::Addresses::Helper
6
+
7
+ attr_accessor :country
8
+
9
+ def call(address_params: {}, user: nil)
10
+ address_params = fill_country_and_state_ids(address_params)
11
+
12
+ address = Spree::Address.new(address_params)
13
+ address.user = user if user.present?
14
+
15
+ if address.save
16
+ assign_to_user_as_default(user: user, address_id: address.id) if user.present?
17
+ success(address)
18
+ else
19
+ failure(address)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,41 @@
1
+ module Spree
2
+ module Addresses
3
+ module Helper
4
+ private
5
+
6
+ attr_accessor :country
7
+
8
+ def fill_country_and_state_ids(params)
9
+ replace_country_iso_with_id(params)
10
+ fill_state_id(params)
11
+ end
12
+
13
+ def replace_country_iso_with_id(params)
14
+ iso = params[:country_iso]
15
+ return params unless iso.present?
16
+
17
+ country = Spree::Country.by_iso(iso)
18
+ params[:country_id] = country&.id
19
+ params.delete(:country_iso)
20
+ params
21
+ end
22
+
23
+ def fill_state_id(params)
24
+ state_name = params[:state_name]
25
+ return params unless state_name.present?
26
+
27
+ country ||= Spree::Country.find(params[:country_id]) if params[:country_id].present?
28
+ return params unless country
29
+
30
+ params[:state_id] = country.states.find_by(name: state_name)&.id
31
+ params
32
+ end
33
+
34
+ def assign_to_user_as_default(user:, address_id:)
35
+ if user.addresses.pluck(:id) == [address_id] # check if it's user first address
36
+ user.update(bill_address_id: address_id, ship_address_id: address_id)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ module Spree
2
+ module Addresses
3
+ class Update
4
+ prepend Spree::ServiceModule::Base
5
+ include Spree::Addresses::Helper
6
+
7
+ attr_accessor :country
8
+
9
+ def call(address:, address_params:)
10
+ address_params[:country_id] ||= address.country_id
11
+ address_params = fill_country_and_state_ids(address_params)
12
+
13
+ if address&.editable?
14
+ address.update(address_params) ? success(address) : failure(address)
15
+ else
16
+ if new_address(address_params).valid?
17
+ address.destroy
18
+ success(new_address)
19
+ else
20
+ failure(new_address)
21
+ end
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def new_address(address_params = {})
28
+ @new_address ||= ::Spree::Address.find_or_create_by(address_params.except(:id, :updated_at, :created_at))
29
+ end
30
+ end
31
+ end
32
+ end