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
@@ -14,7 +14,7 @@ module Spree
14
14
  validates :country, :name, presence: true
15
15
  validates :name, :abbr, uniqueness: { case_sensitive: false, scope: :country_id }, allow_blank: true
16
16
 
17
- self.whitelisted_ransackable_attributes = %w(abbr)
17
+ self.whitelisted_ransackable_attributes = %w(abbr country_id name)
18
18
 
19
19
  def self.find_all_by_name_or_abbr(name_or_abbr)
20
20
  where('name = ? OR abbr = ?', name_or_abbr, name_or_abbr)
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class StateChange < Spree::Base
3
- belongs_to :user, class_name: Spree.user_class.to_s, optional: true
3
+ belongs_to :user, class_name: "::#{Spree.user_class}", optional: true
4
4
  belongs_to :stateful, polymorphic: true
5
5
 
6
6
  def <=>(other)
@@ -14,9 +14,15 @@ module Spree
14
14
  display_name = variant.name.to_s
15
15
  display_name += " (#{variant.options_text})" unless variant.options_text.blank?
16
16
 
17
- line_item.errors.add(:quantity,
18
- :selected_quantity_not_available,
19
- message: Spree.t(:selected_quantity_not_available, item: display_name.inspect))
17
+ if variant.available?
18
+ line_item.errors.add(:quantity,
19
+ :selected_quantity_not_available,
20
+ message: Spree.t(:selected_quantity_not_available, item: display_name.inspect))
21
+ else
22
+ line_item.errors.add(:base,
23
+ :only_active_products_can_be_added_to_cart,
24
+ message: Spree.t(:only_active_products_can_be_added_to_cart))
25
+ end
20
26
  end
21
27
 
22
28
  private
@@ -12,7 +12,7 @@ module Spree
12
12
  delegate :line_item,
13
13
  :quantity,
14
14
  :variant, to: :inventory_unit
15
- delegate :price, to: :variant
15
+ delegate :price, to: :line_item
16
16
  delegate :dimension,
17
17
  :volume,
18
18
  :weight, to: :variant, prefix: true
@@ -12,7 +12,7 @@ module Spree
12
12
  @total_on_hand ||= if variant.should_track_inventory?
13
13
  stock_items.sum(:count_on_hand)
14
14
  else
15
- Float::INFINITY
15
+ BigDecimal::INFINITY
16
16
  end
17
17
  end
18
18
 
@@ -31,7 +31,7 @@ module Spree
31
31
  private
32
32
 
33
33
  def scope_to_location(collection)
34
- return collection.with_active_stock_location unless stock_location.present?
34
+ return collection.with_active_stock_location if stock_location.blank?
35
35
 
36
36
  collection.where(stock_location: stock_location)
37
37
  end
@@ -0,0 +1,35 @@
1
+ module Spree
2
+ module Stock
3
+ module Splitter
4
+ class Digital < Spree::Stock::Splitter::Base
5
+ def split(packages)
6
+ split_packages = []
7
+ packages.each do |package|
8
+ split_packages += split_by_digital(package)
9
+ end
10
+
11
+ return_next(split_packages)
12
+ end
13
+
14
+ private
15
+
16
+ def split_by_digital(package)
17
+ digitals = Hash.new { |hash, key| hash[key] = [] }
18
+ package.contents.each do |item|
19
+ digitals[item.variant.digital?] << item
20
+ end
21
+
22
+ hash_to_packages(digitals)
23
+ end
24
+
25
+ def hash_to_packages(digitals)
26
+ packages = []
27
+ digitals.each do |_id, contents|
28
+ packages << build_package(contents)
29
+ end
30
+ packages
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -2,6 +2,11 @@ module Spree
2
2
  class StockItem < Spree::Base
3
3
  acts_as_paranoid
4
4
 
5
+ include Metadata
6
+ if defined?(Spree::Webhooks)
7
+ include Spree::Webhooks::HasWebhooks
8
+ end
9
+
5
10
  with_options inverse_of: :stock_items do
6
11
  belongs_to :stock_location, class_name: 'Spree::StockLocation'
7
12
  belongs_to :variant, -> { with_deleted }, class_name: 'Spree::Variant'
@@ -26,7 +31,7 @@ module Spree
26
31
  after_destroy { variant.touch }
27
32
 
28
33
  self.whitelisted_ransackable_attributes = %w[count_on_hand stock_location_id variant_id]
29
- self.whitelisted_ransackable_associations = ['variant']
34
+ self.whitelisted_ransackable_associations = %w[variant stock_location]
30
35
 
31
36
  scope :with_active_stock_location, -> { joins(:stock_location).merge(Spree::StockLocation.active) }
32
37
 
@@ -79,7 +84,7 @@ module Spree
79
84
 
80
85
  if unit.quantity > number
81
86
  # if required quantity is greater than available
82
- # split off and fullfill that
87
+ # split off and fulfill that
83
88
  split = unit.split_inventory!(number)
84
89
  split.fill_backorder
85
90
  else
@@ -1,5 +1,16 @@
1
1
  module Spree
2
2
  class StockLocation < Spree::Base
3
+ include UniqueName
4
+ if defined?(Spree::Webhooks)
5
+ include Spree::Webhooks::HasWebhooks
6
+ end
7
+ if defined?(Spree::Security::StockLocations)
8
+ include Spree::Security::StockLocations
9
+ end
10
+ if defined?(Spree::VendorConcern)
11
+ include Spree::VendorConcern
12
+ end
13
+
3
14
  has_many :shipments
4
15
  has_many :stock_items, dependent: :delete_all, inverse_of: :stock_location
5
16
  has_many :variants, through: :stock_items
@@ -8,8 +19,6 @@ module Spree
8
19
  belongs_to :state, class_name: 'Spree::State', optional: true
9
20
  belongs_to :country, class_name: 'Spree::Country'
10
21
 
11
- validates :name, presence: true, uniqueness: { allow_blank: true, case_sensitive: false }
12
-
13
22
  scope :active, -> { where(active: true) }
14
23
  scope :order_default, -> { order(default: :desc, name: :asc) }
15
24
 
@@ -47,15 +56,19 @@ module Spree
47
56
  end
48
57
 
49
58
  # Attempts to look up StockItem for the variant, and creates one if not found.
50
- # This method accepts an instance of the variant.
51
- # Other methods in this model attempt to pass a variant,
52
- # but controller actions can pass just the variant id as a parameter.
53
59
  #
54
- # @param variant [Variant] Variant instance.
60
+ # @param variant Variant instance or Variant ID
55
61
  #
56
62
  # @return [StockItem] Corresponding StockItem for the StockLocation's variant.
57
- def stock_item_or_create(variant)
58
- stock_item(variant) || stock_items.create(variant_id: variant.id)
63
+ def stock_item_or_create(variant_or_variant_id)
64
+ if variant_or_variant_id.is_a?(Spree::Variant)
65
+ variant_id = variant_or_variant_id.id
66
+ variant = variant_or_variant_id
67
+ else
68
+ variant_id = variant_or_variant_id
69
+ variant = Spree::Variant.find(variant_or_variant_id)
70
+ end
71
+ stock_item(variant_id) || propagate_variant(variant)
59
72
  end
60
73
 
61
74
  def count_on_hand(variant)
@@ -88,8 +101,7 @@ module Spree
88
101
  end
89
102
 
90
103
  def fill_status(variant, quantity)
91
- if item = stock_item(variant)
92
-
104
+ if item = stock_item_or_create(variant)
93
105
  if item.count_on_hand >= quantity
94
106
  on_hand = quantity
95
107
  backordered = 0
@@ -108,27 +120,7 @@ module Spree
108
120
  private
109
121
 
110
122
  def create_stock_items
111
- variants_scope = Spree::Variant
112
-
113
- if self.class.method_defined?(:insert_all) && self.class.method_defined?(:touch_all)
114
- prepared_stock_items = variants_scope.ids.map do |variant_id|
115
- Hash[
116
- 'stock_location_id', id,
117
- 'variant_id', variant_id,
118
- 'backorderable', backorderable_default,
119
- 'created_at', Time.current,
120
- 'updated_at', Time.current
121
- ]
122
- end
123
- if prepared_stock_items.any?
124
- stock_items.insert_all(prepared_stock_items)
125
- variants_scope.touch_all
126
- end
127
- else
128
- variants_scope.find_each do |variant|
129
- propagate_variant(variant)
130
- end
131
- end
123
+ Spree::StockLocations::StockItems::CreateJob.perform_later(self)
132
124
  end
133
125
 
134
126
  def ensure_one_default
@@ -5,6 +5,10 @@ module Spree
5
5
  min: -2**31
6
6
  }.freeze
7
7
 
8
+ if defined?(Spree::Webhooks)
9
+ include Spree::Webhooks::HasWebhooks
10
+ end
11
+
8
12
  belongs_to :stock_item, class_name: 'Spree::StockItem', inverse_of: :stock_movements
9
13
  belongs_to :originator, polymorphic: true
10
14
 
@@ -21,6 +25,9 @@ module Spree
21
25
 
22
26
  scope :recent, -> { order(created_at: :desc) }
23
27
 
28
+ delegate :variant, to: :stock_item
29
+ delegate :product, to: :variant
30
+
24
31
  self.whitelisted_ransackable_attributes = ['quantity']
25
32
 
26
33
  def readonly?
@@ -1,20 +1,20 @@
1
1
  module Spree
2
2
  class StockTransfer < Spree::Base
3
3
  include Spree::Core::NumberGenerator.new(prefix: 'T')
4
+ include NumberIdentifier
5
+ include NumberAsParam
6
+ include Metadata
7
+ if defined?(Spree::Webhooks)
8
+ include Spree::Webhooks::HasWebhooks
9
+ end
4
10
 
5
11
  has_many :stock_movements, as: :originator
6
12
 
7
13
  belongs_to :source_location, class_name: 'StockLocation', optional: true
8
14
  belongs_to :destination_location, class_name: 'StockLocation'
9
15
 
10
- validates :number, uniqueness: true
11
-
12
16
  self.whitelisted_ransackable_attributes = %w[reference source_location_id destination_location_id number]
13
17
 
14
- def to_param
15
- number
16
- end
17
-
18
18
  def source_movements
19
19
  find_stock_location_with_location_id(source_location_id)
20
20
  end
@@ -1,7 +1,36 @@
1
1
  module Spree
2
2
  class Store < Spree::Base
3
- MAILER_LOGO_CONTENT_TYPES = ['image/png', 'image/jpg', 'image/jpeg'].freeze
4
- FAVICON_CONTENT_TYPES = ['image/png', 'image/x-icon', 'image/vnd.microsoft.icon'].freeze
3
+ include TranslatableResource
4
+ if defined?(Spree::Webhooks)
5
+ include Spree::Webhooks::HasWebhooks
6
+ end
7
+ if defined?(Spree::Security::Stores)
8
+ include Spree::Security::Stores
9
+ end
10
+
11
+ TRANSLATABLE_FIELDS = %i[name meta_description meta_keywords seo_title facebook
12
+ twitter instagram customer_support_email description
13
+ address contact_phone new_order_notifications_email].freeze
14
+ translates(*TRANSLATABLE_FIELDS)
15
+
16
+ self::Translation.class_eval do
17
+ acts_as_paranoid
18
+ # deleted translation values still need to be accessible - remove deleted_at scope
19
+ default_scope { unscope(where: :deleted_at) }
20
+ end
21
+
22
+ typed_store :settings, coder: ActiveRecord::TypedStore::IdentityCoder do |s|
23
+ # Spree Digital Asset Configurations
24
+ s.boolean :limit_digital_download_count, default: true, null: false
25
+ s.boolean :limit_digital_download_days, default: true, null: false
26
+ s.integer :digital_asset_authorized_clicks, default: 5, null: false # number of times a customer can download a digital file.
27
+ s.integer :digital_asset_authorized_days, default: 7, null: false # number of days after initial purchase the customer can download a file.
28
+ s.integer :digital_asset_link_expire_time, default: 300, null: false # 5 minutes in seconds
29
+ end
30
+
31
+ attr_accessor :skip_validate_not_last
32
+
33
+ acts_as_paranoid
5
34
 
6
35
  has_many :orders, class_name: 'Spree::Order'
7
36
  has_many :line_items, through: :orders, class_name: 'Spree::LineItem'
@@ -19,7 +48,7 @@ module Spree
19
48
  has_many :menus, class_name: 'Spree::Menu'
20
49
  has_many :menu_items, through: :menus, class_name: 'Spree::MenuItem'
21
50
 
22
- has_many :store_products, class_name: 'Spree::StoreProduct', dependent: :destroy
51
+ has_many :store_products, class_name: 'Spree::StoreProduct'
23
52
  has_many :products, through: :store_products, class_name: 'Spree::Product'
24
53
  has_many :product_properties, through: :products, class_name: 'Spree::ProductProperty'
25
54
  has_many :variants, through: :products, class_name: 'Spree::Variant', source: :variants_including_master
@@ -36,6 +65,10 @@ module Spree
36
65
  has_many :store_promotions, class_name: 'Spree::StorePromotion'
37
66
  has_many :promotions, through: :store_promotions, class_name: 'Spree::Promotion'
38
67
 
68
+ has_many :wishlists, class_name: 'Spree::Wishlist'
69
+
70
+ has_many :data_feeds, class_name: 'Spree::DataFeed'
71
+
39
72
  belongs_to :default_country, class_name: 'Spree::Country'
40
73
  belongs_to :checkout_zone, class_name: 'Spree::Zone'
41
74
 
@@ -43,8 +76,12 @@ module Spree
43
76
  validates :name, :url, :mail_from_address, :default_currency, :code
44
77
  end
45
78
 
46
- validates :code, uniqueness: true
79
+ validates :digital_asset_authorized_clicks, numericality: { only_integer: true, greater_than: 0 }
80
+ validates :digital_asset_authorized_days, numericality: { only_integer: true, greater_than: 0 }
81
+ validates :code, uniqueness: { case_sensitive: false, conditions: -> { with_deleted } }
82
+ validates :mail_from_address, email: { allow_blank: false }
47
83
 
84
+ # FIXME: we should remove this condition in v5
48
85
  if !ENV['SPREE_DISABLE_DB_CONNECTION'] &&
49
86
  connected? &&
50
87
  table_exists? &&
@@ -54,19 +91,19 @@ module Spree
54
91
 
55
92
  default_scope { order(created_at: :asc) }
56
93
 
57
- has_one_attached :logo
58
- has_one_attached :mailer_logo
59
- has_one_attached :favicon_image
94
+ has_one :logo, class_name: 'Spree::StoreLogo', dependent: :destroy, as: :viewable
95
+ accepts_nested_attributes_for :logo, reject_if: :all_blank
96
+
97
+ has_one :mailer_logo, class_name: 'Spree::StoreMailerLogo', dependent: :destroy, as: :viewable
98
+ accepts_nested_attributes_for :mailer_logo, reject_if: :all_blank
60
99
 
61
- validates :mailer_logo, content_type: MAILER_LOGO_CONTENT_TYPES
62
- validates :favicon_image, content_type: FAVICON_CONTENT_TYPES,
63
- dimension: { max: 256..256 },
64
- aspect_ratio: :square,
65
- size: { less_than_or_equal_to: 1.megabyte }
100
+ has_one :favicon_image, class_name: 'Spree::StoreFaviconImage', dependent: :destroy, as: :viewable
101
+ accepts_nested_attributes_for :favicon_image, reject_if: :all_blank
66
102
 
67
103
  before_save :ensure_default_exists_and_is_unique
68
104
  before_save :ensure_supported_currencies, :ensure_supported_locales, :ensure_default_country
69
- before_destroy :validate_not_default
105
+ before_destroy :validate_not_last, unless: :skip_validate_not_last
106
+ before_destroy :pass_default_flag_to_other_store
70
107
 
71
108
  scope :by_url, ->(url) { where('url like ?', "%#{url}%") }
72
109
 
@@ -82,9 +119,16 @@ module Spree
82
119
  Stores::FindCurrent.new(url: url).execute
83
120
  end
84
121
 
122
+ # FIXME: we need to drop `or_initialize` in v5
123
+ # this behaviour is very buggy and unpredictable
85
124
  def self.default
86
125
  Rails.cache.fetch('default_store') do
87
- where(default: true).first_or_initialize
126
+ # workaround for Mobility bug with first_or_initialize
127
+ if where(default: true).any?
128
+ where(default: true).first
129
+ else
130
+ new(default: true)
131
+ end
88
132
  end
89
133
  end
90
134
 
@@ -142,21 +186,27 @@ module Spree
142
186
  end
143
187
 
144
188
  def countries_available_for_checkout
145
- @countries_available_for_checkout ||= checkout_zone_or_default.try(:country_list) || Spree::Country.all
189
+ @countries_available_for_checkout ||= checkout_zone.try(:country_list) || Spree::Country.all
146
190
  end
147
191
 
148
192
  def states_available_for_checkout(country)
149
- checkout_zone_or_default.try(:state_list_for, country) || country.states
193
+ checkout_zone.try(:state_list_for, country) || country.states
150
194
  end
151
195
 
152
196
  def checkout_zone_or_default
197
+ ActiveSupport::Deprecation.warn('Store#checkout_zone_or_default is deprecated and will be removed in Spree 5')
198
+
153
199
  @checkout_zone_or_default ||= checkout_zone || Spree::Zone.default_checkout_zone
154
200
  end
155
201
 
156
202
  def favicon
157
- return unless favicon_image.attached?
203
+ return unless favicon_image&.attachment&.attached?
204
+
205
+ favicon_image.attachment.variant(resize_to_limit: [32, 32])
206
+ end
158
207
 
159
- favicon_image.variant(resize: '32x32')
208
+ def can_be_deleted?
209
+ self.class.where.not(id: id).any?
160
210
  end
161
211
 
162
212
  private
@@ -185,13 +235,20 @@ module Spree
185
235
  self.supported_currencies = default_currency
186
236
  end
187
237
 
188
- def validate_not_default
189
- if default
190
- errors.add(:base, :cannot_destroy_default_store)
238
+ def validate_not_last
239
+ unless can_be_deleted?
240
+ errors.add(:base, :cannot_destroy_only_store)
191
241
  throw(:abort)
192
242
  end
193
243
  end
194
244
 
245
+ def pass_default_flag_to_other_store
246
+ if default? && can_be_deleted?
247
+ self.class.where.not(id: id).first.update!(default: true)
248
+ self.default = false
249
+ end
250
+ end
251
+
195
252
  def clear_cache
196
253
  Rails.cache.delete('default_store')
197
254
  Rails.cache.delete('stores_available_locales')
@@ -1,6 +1,10 @@
1
1
  module Spree
2
2
  class StoreCredit < Spree::Base
3
3
  include SingleStoreResource
4
+ include Metadata
5
+ if defined?(Spree::Webhooks)
6
+ include Spree::Webhooks::HasWebhooks
7
+ end
4
8
 
5
9
  acts_as_paranoid
6
10
 
@@ -14,9 +18,9 @@ module Spree
14
18
 
15
19
  DEFAULT_CREATED_BY_EMAIL = 'spree@example.com'.freeze
16
20
 
17
- belongs_to :user, class_name: Spree.user_class.to_s, foreign_key: 'user_id'
21
+ belongs_to :user, class_name: "::#{Spree.user_class}", foreign_key: 'user_id'
18
22
  belongs_to :category, class_name: 'Spree::StoreCreditCategory'
19
- belongs_to :created_by, class_name: Spree.user_class.to_s, foreign_key: 'created_by_id'
23
+ belongs_to :created_by, class_name: Spree.admin_user_class.to_s, foreign_key: 'created_by_id'
20
24
  belongs_to :credit_type, class_name: 'Spree::StoreCreditType', foreign_key: 'type_id'
21
25
  belongs_to :store, class_name: 'Spree::Store'
22
26
  has_many :store_credit_events, class_name: 'Spree::StoreCreditEvent'
@@ -41,6 +45,9 @@ module Spree
41
45
  extend Spree::DisplayMoney
42
46
  money_methods :amount, :amount_used
43
47
 
48
+ self.whitelisted_ransackable_attributes = %w[user_id created_by_id amount currency type_id]
49
+ self.whitelisted_ransackable_associations = %w[type user created_by]
50
+
44
51
  def amount_remaining
45
52
  amount - amount_used - amount_authorized
46
53
  end
@@ -246,7 +253,7 @@ module Spree
246
253
  def associate_credit_type
247
254
  unless type_id
248
255
  credit_type_name = category.try(:non_expiring?) ? 'Non-expiring' : 'Expiring'
249
- self.credit_type = Spree::StoreCreditType.find_by(name: credit_type_name)
256
+ self.credit_type = Spree::StoreCreditType.find_or_create_by(name: credit_type_name)
250
257
  end
251
258
  end
252
259
  end
@@ -7,6 +7,8 @@ module Spree
7
7
  GIFT_CARD_CATEGORY_NAME = 'Gift Card'.freeze
8
8
  DEFAULT_NON_EXPIRING_TYPES = [GIFT_CARD_CATEGORY_NAME]
9
9
 
10
+ self.whitelisted_ransackable_attributes = %w[name]
11
+
10
12
  def non_expiring?
11
13
  non_expiring_category_types.include? name
12
14
  end
@@ -10,13 +10,8 @@ module Spree
10
10
 
11
11
  delegate :currency, :store, to: :store_credit
12
12
 
13
- def display_amount
14
- Spree::Money.new(amount, currency: currency)
15
- end
16
-
17
- def display_user_total_amount
18
- Spree::Money.new(user_total_amount, currency: currency)
19
- end
13
+ extend DisplayMoney
14
+ money_methods :amount, :user_total_amount
20
15
 
21
16
  def display_action
22
17
  case action
@@ -2,5 +2,7 @@ module Spree
2
2
  class StoreCreditType < Spree::Base
3
3
  DEFAULT_TYPE_NAME = 'Expiring'.freeze
4
4
  has_many :store_credits, class_name: 'Spree::StoreCredit', foreign_key: 'type_id'
5
+
6
+ validates :name, presence: true
5
7
  end
6
8
  end
@@ -0,0 +1,17 @@
1
+ module Spree
2
+ class StoreFaviconImage < Asset
3
+ if Spree.public_storage_service_name
4
+ has_one_attached :attachment, service: Spree.public_storage_service_name
5
+ else
6
+ has_one_attached :attachment
7
+ end
8
+
9
+ VALID_CONTENT_TYPES = ['image/png', 'image/x-icon', 'image/vnd.microsoft.icon'].freeze
10
+
11
+ validates :attachment,
12
+ content_type: VALID_CONTENT_TYPES,
13
+ dimension: { max: 256..256 },
14
+ aspect_ratio: :square,
15
+ size: { less_than_or_equal_to: 1.megabyte }
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ module Spree
2
+ class StoreLogo < Asset
3
+ if Spree.public_storage_service_name
4
+ has_one_attached :attachment, service: Spree.public_storage_service_name
5
+ else
6
+ has_one_attached :attachment
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ class StoreMailerLogo < Asset
3
+ if Spree.public_storage_service_name
4
+ has_one_attached :attachment, service: Spree.public_storage_service_name
5
+ else
6
+ has_one_attached :attachment
7
+ end
8
+
9
+ VALID_CONTENT_TYPES = ['image/png', 'image/jpg', 'image/jpeg'].freeze
10
+
11
+ validates :attachment, content_type: VALID_CONTENT_TYPES
12
+ end
13
+ end
@@ -1,12 +1,20 @@
1
1
  module Spree
2
2
  class TaxCategory < Spree::Base
3
+ if defined?(Spree::Webhooks)
4
+ include Spree::Webhooks::HasWebhooks
5
+ end
6
+
3
7
  acts_as_paranoid
4
- validates :name, presence: true, uniqueness: { case_sensitive: false, scope: :deleted_at }
8
+ validates :name, presence: true, uniqueness: { case_sensitive: false, scope: spree_base_uniqueness_scope.push(:deleted_at) }
5
9
 
6
10
  has_many :tax_rates, dependent: :destroy, inverse_of: :tax_category
11
+ has_many :products, dependent: :nullify
12
+ has_many :variants, dependent: :nullify
7
13
 
8
14
  before_save :set_default_category
9
15
 
16
+ self.whitelisted_ransackable_attributes = %w[name is_default tax_code]
17
+
10
18
  def set_default_category
11
19
  # set existing default tax category to false if this one has been marked as default
12
20
 
@@ -4,6 +4,10 @@ module Spree
4
4
 
5
5
  include Spree::CalculatedAdjustments
6
6
  include Spree::AdjustmentSource
7
+ include Spree::Metadata
8
+ if defined?(Spree::Webhooks)
9
+ include Spree::Webhooks::HasWebhooks
10
+ end
7
11
 
8
12
  with_options inverse_of: :tax_rates do
9
13
  belongs_to :zone, class_name: 'Spree::Zone', optional: true
@@ -13,7 +17,7 @@ module Spree
13
17
 
14
18
  with_options presence: true do
15
19
  validates :amount, numericality: { allow_nil: true }
16
- validates :tax_category
20
+ validates :tax_category, :name
17
21
  end
18
22
 
19
23
  scope :by_zone, ->(zone) { where(zone_id: zone.id) }
@@ -27,6 +31,8 @@ module Spree
27
31
  ->(category) { where(tax_category_id: category.try(:id)) }
28
32
  scope :included_in_price, -> { where(included_in_price: true) }
29
33
 
34
+ self.whitelisted_ransackable_attributes = %w[amount zone_id tax_category_id included_in_price name]
35
+
30
36
  # Gets the array of TaxRates appropriate for the specified tax zone
31
37
  def self.match(order_tax_zone)
32
38
  return [] unless order_tax_zone
@@ -112,7 +118,8 @@ module Spree
112
118
 
113
119
  ' ' + ActiveSupport::NumberHelper::NumberToPercentageConverter.convert(
114
120
  amount * 100,
115
- locale: I18n.locale
121
+ locale: I18n.locale,
122
+ strip_insignificant_zeros: true
116
123
  )
117
124
  end
118
125
  end