spree_core 4.3.0.rc1 → 4.4.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (537) hide show
  1. checksums.yaml +4 -4
  2. data/app/finders/spree/option_values/find_available.rb +9 -1
  3. data/app/finders/spree/products/find.rb +27 -3
  4. data/app/finders/spree/taxons/find.rb +22 -6
  5. data/app/helpers/spree/base_helper.rb +8 -10
  6. data/app/helpers/spree/currency_helper.rb +1 -1
  7. data/app/helpers/spree/products_helper.rb +1 -15
  8. data/app/jobs/spree/base_job.rb +4 -0
  9. data/app/jobs/spree/stock_locations/stock_items/create_job.rb +13 -0
  10. data/app/models/concerns/spree/default_price.rb +1 -1
  11. data/app/models/concerns/spree/display_money.rb +8 -2
  12. data/app/models/concerns/spree/image_methods.rb +24 -0
  13. data/app/models/concerns/spree/memoized_data.rb +1 -1
  14. data/app/models/concerns/spree/metadata.rb +10 -0
  15. data/app/models/concerns/spree/multi_store_resource.rb +1 -1
  16. data/app/models/concerns/spree/named_type.rb +1 -1
  17. data/app/models/concerns/spree/number_identifier.rb +18 -0
  18. data/app/models/concerns/spree/product_scopes.rb +64 -22
  19. data/app/models/concerns/spree/single_store_resource.rb +10 -0
  20. data/app/models/concerns/spree/unique_name.rb +10 -0
  21. data/app/models/concerns/spree/user_methods.rb +18 -8
  22. data/app/models/concerns/spree/user_reporting.rb +35 -10
  23. data/app/models/concerns/spree/user_roles.rb +43 -0
  24. data/app/models/spree/ability.rb +11 -3
  25. data/app/models/spree/address.rb +4 -2
  26. data/app/models/spree/adjustment.rb +1 -0
  27. data/app/models/spree/app_configuration.rb +21 -24
  28. data/app/models/spree/asset.rb +1 -0
  29. data/app/models/spree/base.rb +14 -0
  30. data/app/models/spree/calculator/flat_rate.rb +1 -1
  31. data/app/models/spree/calculator/flexi_rate.rb +1 -1
  32. data/app/models/spree/calculator/price_sack.rb +1 -1
  33. data/app/models/spree/calculator/shipping/digital_delivery.rb +22 -0
  34. data/app/models/spree/calculator/shipping/flat_rate.rb +1 -1
  35. data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -1
  36. data/app/models/spree/calculator/shipping/per_item.rb +1 -1
  37. data/app/models/spree/calculator/shipping/price_sack.rb +1 -1
  38. data/app/models/spree/calculator.rb +1 -1
  39. data/app/models/spree/cms/sections/featured_article.rb +0 -7
  40. data/app/models/spree/cms/sections/hero_image.rb +0 -9
  41. data/app/models/spree/cms/sections/image_gallery.rb +2 -2
  42. data/app/models/spree/cms/sections/side_by_side_images.rb +2 -2
  43. data/app/models/spree/cms_page.rb +3 -3
  44. data/app/models/spree/cms_section.rb +13 -1
  45. data/app/models/spree/country.rb +4 -2
  46. data/app/models/spree/credit_card.rb +10 -0
  47. data/app/models/spree/customer_return.rb +3 -1
  48. data/app/models/spree/digital.rb +15 -0
  49. data/app/models/spree/digital_link.rb +50 -0
  50. data/app/models/spree/gateway/bogus.rb +10 -4
  51. data/app/models/spree/image/configuration/active_storage.rb +2 -19
  52. data/app/models/spree/image.rb +5 -24
  53. data/app/models/spree/legacy_user.rb +1 -0
  54. data/app/models/spree/line_item.rb +11 -3
  55. data/app/models/spree/option_type.rb +4 -4
  56. data/app/models/spree/option_value.rb +2 -0
  57. data/app/models/spree/order/checkout.rb +7 -1
  58. data/app/models/spree/order/digital.rb +33 -0
  59. data/app/models/spree/order.rb +34 -22
  60. data/app/models/spree/order_inventory.rb +1 -1
  61. data/app/models/spree/order_promotion.rb +1 -1
  62. data/app/models/spree/payment/processing.rb +1 -0
  63. data/app/models/spree/payment.rb +25 -4
  64. data/app/models/spree/payment_method.rb +15 -1
  65. data/app/models/spree/preference.rb +2 -1
  66. data/app/models/spree/preferences/configuration.rb +2 -2
  67. data/app/models/spree/preferences/store.rb +1 -1
  68. data/app/models/spree/price.rb +1 -1
  69. data/app/models/spree/product.rb +28 -25
  70. data/app/models/spree/promotion/rules/product.rb +1 -1
  71. data/app/models/spree/promotion.rb +3 -1
  72. data/app/models/spree/promotion_action.rb +1 -1
  73. data/app/models/spree/property.rb +2 -1
  74. data/app/models/spree/prototype.rb +2 -0
  75. data/app/models/spree/refund.rb +2 -0
  76. data/app/models/spree/reimbursement.rb +1 -1
  77. data/app/models/spree/return_authorization.rb +3 -2
  78. data/app/models/spree/return_item.rb +1 -1
  79. data/app/models/spree/role.rb +2 -2
  80. data/app/models/spree/shipment.rb +4 -30
  81. data/app/models/spree/shipping_category.rb +1 -1
  82. data/app/models/spree/shipping_method.rb +2 -0
  83. data/app/models/spree/state.rb +1 -1
  84. data/app/models/spree/stock/quantifier.rb +1 -1
  85. data/app/models/spree/stock/splitter/digital.rb +35 -0
  86. data/app/models/spree/stock_item.rb +2 -2
  87. data/app/models/spree/stock_location.rb +15 -28
  88. data/app/models/spree/stock_movement.rb +3 -0
  89. data/app/models/spree/stock_transfer.rb +3 -6
  90. data/app/models/spree/store.rb +43 -10
  91. data/app/models/spree/store_credit.rb +5 -1
  92. data/app/models/spree/store_credit_category.rb +2 -0
  93. data/app/models/spree/store_credit_event.rb +2 -7
  94. data/app/models/spree/store_credit_type.rb +2 -0
  95. data/app/models/spree/tax_category.rb +3 -1
  96. data/app/models/spree/tax_rate.rb +3 -1
  97. data/app/models/spree/taxon.rb +12 -0
  98. data/app/models/spree/taxon_image/configuration/active_storage.rb +2 -12
  99. data/app/models/spree/taxon_image.rb +1 -0
  100. data/app/models/spree/taxonomy.rb +7 -0
  101. data/app/models/spree/variant.rb +29 -13
  102. data/app/models/spree/wished_item.rb +29 -0
  103. data/app/models/spree/wishlist.rb +35 -0
  104. data/app/models/spree/zone.rb +8 -6
  105. data/app/presenters/spree/filters/options_presenter.rb +20 -0
  106. data/app/presenters/spree/filters/property_presenter.rb +20 -0
  107. data/app/services/spree/account/addresses/create.rb +1 -17
  108. data/app/services/spree/account/addresses/update.rb +1 -22
  109. data/app/services/spree/addresses/create.rb +24 -0
  110. data/app/services/spree/addresses/helper.rb +41 -0
  111. data/app/services/spree/addresses/update.rb +27 -0
  112. data/app/services/spree/cart/add_item.rb +4 -2
  113. data/app/services/spree/cart/associate.rb +16 -0
  114. data/app/services/spree/cart/change_currency.rb +27 -0
  115. data/app/services/spree/cart/create.rb +4 -2
  116. data/app/services/spree/cart/update.rb +2 -2
  117. data/app/services/spree/checkout/add_store_credit.rb +4 -1
  118. data/app/services/spree/checkout/select_shipping_method.rb +49 -0
  119. data/app/services/spree/checkout/update.rb +3 -10
  120. data/app/services/spree/line_items/create.rb +20 -0
  121. data/app/services/spree/line_items/destroy.rb +18 -0
  122. data/app/services/spree/line_items/helper.rb +11 -0
  123. data/app/services/spree/line_items/update.rb +17 -0
  124. data/app/services/spree/orders/approve.rb +18 -0
  125. data/app/services/spree/orders/cancel.rb +18 -0
  126. data/app/services/spree/payments/create.rb +66 -0
  127. data/app/services/spree/seeds/all.rb +26 -0
  128. data/app/services/spree/seeds/countries.rb +50 -0
  129. data/app/services/spree/seeds/default_reimbursement_types.rb +12 -0
  130. data/app/services/spree/seeds/roles.rb +11 -0
  131. data/app/services/spree/seeds/shipping_categories.rb +12 -0
  132. data/app/services/spree/seeds/states.rb +72 -0
  133. data/app/services/spree/seeds/stock_locations.rb +18 -0
  134. data/app/services/spree/seeds/store_credit_categories.rb +12 -0
  135. data/app/services/spree/seeds/stores.rb +31 -0
  136. data/app/services/spree/seeds/zones.rb +39 -0
  137. data/app/services/spree/shipments/add_item.rb +32 -0
  138. data/app/services/spree/shipments/change_state.rb +14 -0
  139. data/app/services/spree/shipments/create.rb +48 -0
  140. data/app/services/spree/shipments/helper.rb +23 -0
  141. data/app/services/spree/shipments/remove_item.rb +55 -0
  142. data/app/services/spree/shipments/update.rb +40 -0
  143. data/app/services/spree/stock_locations/stock_items/create.rb +31 -0
  144. data/app/services/spree/wallet/create_payment_source.rb +26 -0
  145. data/app/sorters/spree/base_sorter.rb +23 -11
  146. data/app/sorters/spree/products/sort.rb +23 -7
  147. data/app/validators/spree/url_validator.rb +23 -0
  148. data/brakeman.ignore +20 -0
  149. data/config/initializers/active_storage.rb +0 -6
  150. data/config/locales/en.yml +24 -168
  151. data/db/migrate/20210914000000_spree_four_three.rb +1205 -0
  152. data/db/migrate/20210915064321_add_metadata_to_spree_orders.rb +13 -0
  153. data/db/migrate/20210915064322_add_metadata_to_spree_products.rb +13 -0
  154. data/db/migrate/20210915064323_add_metadata_to_spree_variants.rb +13 -0
  155. data/db/migrate/20210915064324_add_metadata_to_spree_line_items.rb +13 -0
  156. data/db/migrate/20210915064325_add_metadata_to_spree_shipments.rb +13 -0
  157. data/db/migrate/20210915064326_add_metadata_to_spree_payments.rb +13 -0
  158. data/db/migrate/20210915064327_add_metadata_to_spree_taxons_and_taxonomies.rb +18 -0
  159. data/db/migrate/20210915064328_add_metadata_to_spree_stock_transfers.rb +13 -0
  160. data/db/migrate/20210915064329_add_metadata_to_spree_multiple_tables.rb +30 -0
  161. data/db/migrate/20210920090344_add_deleted_at_to_spree_stores.rb +8 -0
  162. data/db/migrate/20210921070812_rename_column_access_hash_to_token.rb +8 -0
  163. data/db/migrate/20210921070813_create_spree_wishlists.rb +18 -0
  164. data/db/migrate/20210921070814_create_spree_wished_products.rb +16 -0
  165. data/db/migrate/20210921070815_rename_spree_wished_products_to_spree_wished_items.rb +5 -0
  166. data/db/migrate/20210921090344_add_unique_stock_item_stock_location_variant_deleted_at_index.rb +5 -0
  167. data/db/migrate/20210929090344_create_stock_item_stock_location_id_variant_id_coalesce_deleted_at_unique_index.rb +32 -0
  168. data/db/migrate/20210929091444_create_spree_digital_links.rb +13 -0
  169. data/db/migrate/20210929093238_create_spree_digitals.rb +9 -0
  170. data/db/migrate/20210930143043_rename_secret_to_token_on_spree_digital_links.rb +5 -0
  171. data/db/migrate/20210930155649_add_settings_to_spree_stores.rb +11 -0
  172. data/db/seeds.rb +1 -5
  173. data/lib/generators/spree/dummy/dummy_generator.rb +2 -2
  174. data/lib/generators/spree/dummy/templates/rails/database.yml +20 -18
  175. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  176. data/{app/models/spree → lib/spree/core}/app_dependencies.rb +34 -4
  177. data/lib/spree/core/controller_helpers/auth.rb +4 -4
  178. data/lib/spree/core/controller_helpers/common.rb +15 -1
  179. data/lib/spree/core/controller_helpers/currency.rb +1 -1
  180. data/lib/spree/core/controller_helpers/store.rb +14 -0
  181. data/lib/spree/{dependencies_helper.rb → core/dependencies_helper.rb} +0 -0
  182. data/lib/spree/core/engine.rb +10 -4
  183. data/lib/spree/core/importer/product.rb +1 -1
  184. data/lib/spree/core/number_generator.rb +0 -2
  185. data/lib/spree/core/version.rb +1 -1
  186. data/lib/spree/core.rb +21 -13
  187. data/lib/spree/money.rb +2 -2
  188. data/lib/spree/permitted_attributes.rb +38 -13
  189. data/lib/spree/testing_support/authorization_helpers.rb +3 -1
  190. data/lib/spree/testing_support/capybara_config.rb +14 -19
  191. data/lib/spree/testing_support/capybara_ext.rb +1 -6
  192. data/lib/spree/testing_support/common_rake.rb +22 -4
  193. data/lib/spree/testing_support/factories/asset_factory.rb +15 -0
  194. data/lib/spree/testing_support/factories/cms_section_factory.rb +2 -2
  195. data/lib/spree/testing_support/factories/digital_factory.rb +10 -0
  196. data/lib/spree/testing_support/factories/digital_link_factory.rb +6 -0
  197. data/lib/spree/testing_support/factories/log_entry_factory.rb +6 -0
  198. data/lib/spree/testing_support/factories/order_factory.rb +4 -1
  199. data/lib/spree/testing_support/factories/payment_capture_event_factory.rb +6 -0
  200. data/lib/spree/testing_support/factories/payment_factory.rb +3 -3
  201. data/lib/spree/testing_support/factories/product_factory.rb +6 -0
  202. data/lib/spree/testing_support/factories/promotion_action_factory.rb +5 -0
  203. data/lib/spree/testing_support/factories/reimbursement_credit_factory.rb +7 -0
  204. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +7 -0
  205. data/lib/spree/testing_support/factories/state_change_factory.rb +8 -0
  206. data/lib/spree/testing_support/factories/stock_item_factory.rb +7 -0
  207. data/lib/spree/testing_support/factories/stock_location_factory.rb +1 -1
  208. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +9 -0
  209. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
  210. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +5 -0
  211. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -0
  212. data/lib/spree/testing_support/factories/user_factory.rb +2 -0
  213. data/lib/spree/testing_support/factories/wished_variant_factory.rb +6 -0
  214. data/lib/spree/testing_support/factories/wishlist_factory.rb +18 -0
  215. data/lib/spree/testing_support/jobs.rb +9 -0
  216. data/lib/spree/testing_support/locale_helpers.rb +1 -1
  217. data/lib/spree/testing_support/rspec_retry_config.rb +5 -0
  218. data/lib/tasks/core.rake +4 -4
  219. data/spree_core.gemspec +3 -2
  220. metadata +109 -325
  221. data/app/services/spree/account/addresses/helper.rb +0 -43
  222. data/app/services/spree/build_localized_redirect_url.rb +0 -101
  223. data/app/views/spree/shared/_purchased_items_table.text.erb +0 -25
  224. data/db/default/spree/countries.rb +0 -24
  225. data/db/default/spree/default_reimbursement_type.rb +0 -1
  226. data/db/default/spree/roles.rb +0 -2
  227. data/db/default/spree/states.rb +0 -49
  228. data/db/default/spree/store_credit_categories.rb +0 -1
  229. data/db/default/spree/stores.rb +0 -21
  230. data/db/default/spree/zones.rb +0 -29
  231. data/db/migrate/20120831092320_spree_one_two.rb +0 -481
  232. data/db/migrate/20120831092359_spree_promo_one_two.rb +0 -45
  233. data/db/migrate/20120905145253_add_tax_rate_label.rb +0 -5
  234. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +0 -5
  235. data/db/migrate/20120929093553_remove_unused_preference_columns.rb +0 -8
  236. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +0 -5
  237. data/db/migrate/20121010142909_add_states_required_to_countries.rb +0 -5
  238. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +0 -6
  239. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +0 -11
  240. data/db/migrate/20121031162139_split_prices_from_variants.rb +0 -31
  241. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +0 -9
  242. data/db/migrate/20121107184631_add_currency_to_line_items.rb +0 -5
  243. data/db/migrate/20121107194006_add_currency_to_orders.rb +0 -5
  244. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +0 -5
  245. data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +0 -5
  246. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +0 -5
  247. data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +0 -5
  248. data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +0 -6
  249. data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +0 -9
  250. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +0 -6
  251. data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +0 -5
  252. data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +0 -9
  253. data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +0 -5
  254. data/db/migrate/20130211190146_create_spree_stock_items.rb +0 -14
  255. data/db/migrate/20130211191120_create_spree_stock_locations.rb +0 -11
  256. data/db/migrate/20130213191427_create_default_stock.rb +0 -33
  257. data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +0 -5
  258. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +0 -5
  259. data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +0 -5
  260. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +0 -6
  261. data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +0 -6
  262. data/db/migrate/20130228210442_create_shipping_method_zone.rb +0 -21
  263. data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +0 -5
  264. data/db/migrate/20130301162924_create_shipping_method_categories.rb +0 -13
  265. data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +0 -5
  266. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +0 -24
  267. data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +0 -7
  268. data/db/migrate/20130305143310_create_stock_movements.rb +0 -12
  269. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +0 -22
  270. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +0 -5
  271. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +0 -5
  272. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +0 -5
  273. data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +0 -8
  274. data/db/migrate/20130319062004_change_orders_total_precision.rb +0 -8
  275. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +0 -7
  276. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +0 -7
  277. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +0 -7
  278. data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +0 -7
  279. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +0 -15
  280. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +0 -9
  281. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +0 -5
  282. data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +0 -15
  283. data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +0 -9
  284. data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +0 -14
  285. data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +0 -5
  286. data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +0 -13
  287. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +0 -5
  288. data/db/migrate/20130417120035_update_adjustment_states.rb +0 -16
  289. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +0 -15
  290. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +0 -14
  291. data/db/migrate/20130423110707_drop_products_count_on_hand.rb +0 -5
  292. data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +0 -5
  293. data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +0 -23
  294. data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +0 -5
  295. data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +0 -5
  296. data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +0 -5
  297. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +0 -5
  298. data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +0 -5
  299. data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +0 -9
  300. data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +0 -9
  301. data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +0 -6
  302. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +0 -5
  303. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +0 -7
  304. data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +0 -5
  305. data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +0 -6
  306. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +0 -5
  307. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +0 -6
  308. data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +0 -5
  309. data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +0 -5
  310. data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +0 -5
  311. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +0 -10
  312. data/db/migrate/20130806022521_drop_spree_mail_methods.rb +0 -12
  313. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +0 -8
  314. data/db/migrate/20130807024301_upgrade_adjustments.rb +0 -46
  315. data/db/migrate/20130807024302_rename_adjustment_fields.rb +0 -20
  316. data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +0 -5
  317. data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +0 -5
  318. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +0 -5
  319. data/db/migrate/20130813140619_expand_order_number_size.rb +0 -9
  320. data/db/migrate/20130813232134_rename_activators_to_promotions.rb +0 -5
  321. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +0 -5
  322. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +0 -5
  323. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +0 -16
  324. data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +0 -8
  325. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +0 -15
  326. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +0 -19
  327. data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +0 -5
  328. data/db/migrate/20130909115621_change_states_required_for_countries.rb +0 -9
  329. data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +0 -5
  330. data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +0 -5
  331. data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +0 -7
  332. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +0 -16
  333. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +0 -5
  334. data/db/migrate/20131107132123_add_tax_category_to_variants.rb +0 -6
  335. data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +0 -5
  336. data/db/migrate/20131118043959_add_included_to_adjustments.rb +0 -5
  337. data/db/migrate/20131118050234_rename_tax_total_fields.rb +0 -11
  338. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +0 -21
  339. data/db/migrate/20131120234456_add_updated_at_to_variants.rb +0 -5
  340. data/db/migrate/20131127001002_add_position_to_classifications.rb +0 -5
  341. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +0 -8
  342. data/db/migrate/20131211192741_unique_shipping_method_categories.rb +0 -24
  343. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +0 -5
  344. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +0 -8
  345. data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +0 -5
  346. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +0 -5
  347. data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +0 -6
  348. data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +0 -5
  349. data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +0 -6
  350. data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +0 -5
  351. data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +0 -5
  352. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +0 -12
  353. data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +0 -5
  354. data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +0 -11
  355. data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +0 -5
  356. data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +0 -5
  357. data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +0 -6
  358. data/db/migrate/20140213184916_add_more_indexes.rb +0 -13
  359. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +0 -5
  360. data/db/migrate/20140227112348_add_preference_store_to_everything.rb +0 -8
  361. data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +0 -13
  362. data/db/migrate/20140309023735_migrate_old_preferences.rb +0 -27
  363. data/db/migrate/20140309024355_create_spree_stores.rb +0 -25
  364. data/db/migrate/20140309033438_create_store_from_preferences.rb +0 -42
  365. data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +0 -6
  366. data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +0 -8
  367. data/db/migrate/20140331100557_add_additional_store_fields.rb +0 -8
  368. data/db/migrate/20140410141842_add_many_missing_indexes.rb +0 -18
  369. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +0 -66
  370. data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +0 -5
  371. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +0 -8
  372. data/db/migrate/20140518174634_add_token_to_spree_orders.rb +0 -5
  373. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +0 -29
  374. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +0 -10
  375. data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +0 -6
  376. data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +0 -6
  377. data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +0 -5
  378. data/db/migrate/20140625214618_create_spree_refunds.rb +0 -12
  379. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +0 -12
  380. data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +0 -5
  381. data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +0 -10
  382. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +0 -55
  383. data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +0 -7
  384. data/db/migrate/20140710190048_drop_return_authorization_amount.rb +0 -5
  385. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +0 -28
  386. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +0 -14
  387. data/db/migrate/20140713142214_rename_return_authorization_reason.rb +0 -5
  388. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +0 -11
  389. data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +0 -9
  390. data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +0 -6
  391. data/db/migrate/20140717155155_create_default_refund_reason.rb +0 -9
  392. data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +0 -7
  393. data/db/migrate/20140718133010_create_spree_customer_returns.rb +0 -9
  394. data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +0 -6
  395. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +0 -15
  396. data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +0 -5
  397. data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +0 -13
  398. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +0 -15
  399. data/db/migrate/20140725131539_create_spree_reimbursements.rb +0 -21
  400. data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +0 -5
  401. data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +0 -7
  402. data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +0 -5
  403. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +0 -20
  404. data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +0 -10
  405. data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +0 -5
  406. data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +0 -9
  407. data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +0 -10
  408. data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +0 -7
  409. data/db/migrate/20140911173301_add_kind_to_zone.rb +0 -11
  410. data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +0 -5
  411. data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +0 -6
  412. data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +0 -5
  413. data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +0 -6
  414. data/db/migrate/20141009204607_add_store_id_to_orders.rb +0 -8
  415. data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +0 -8
  416. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +0 -5
  417. data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +0 -8
  418. data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +0 -13
  419. data/db/migrate/20141105213646_update_classifications_positions.rb +0 -9
  420. data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +0 -5
  421. data/db/migrate/20141215232040_remove_token_permissions_table.rb +0 -6
  422. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +0 -5
  423. data/db/migrate/20141217215630_update_product_slug_index.rb +0 -6
  424. data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +0 -5
  425. data/db/migrate/20150118210639_create_spree_store_credits.rb +0 -24
  426. data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +0 -8
  427. data/db/migrate/20150118212051_create_spree_store_credit_events.rb +0 -17
  428. data/db/migrate/20150118212101_create_spree_store_credit_types.rb +0 -10
  429. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +0 -6
  430. data/db/migrate/20150122145607_add_resellable_to_return_items.rb +0 -5
  431. data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +0 -5
  432. data/db/migrate/20150128032538_remove_environment_from_tracker.rb +0 -8
  433. data/db/migrate/20150128060325_remove_spree_configurations.rb +0 -16
  434. data/db/migrate/20150216173445_add_index_to_spree_stock_items_variant_id.rb +0 -13
  435. data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +0 -13
  436. data/db/migrate/20150314013438_add_missing_indexes_on_spree_tables.rb +0 -67
  437. data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +0 -18
  438. data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +0 -14
  439. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -70
  440. data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +0 -5
  441. data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +0 -6
  442. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +0 -16
  443. data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +0 -19
  444. data/db/migrate/20150627090949_migrate_payment_methods_display.rb +0 -12
  445. data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +0 -6
  446. data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +0 -12
  447. data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +0 -18
  448. data/db/migrate/20150727191614_spree_store_credit_types.rb +0 -11
  449. data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +0 -68
  450. data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +0 -13
  451. data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +0 -16
  452. data/db/migrate/20160219165458_add_indexes.rb +0 -14
  453. data/db/migrate/20160509064646_remove_counter_cache_from_spree_variants_to_spree_stock_items.rb +0 -10
  454. data/db/migrate/20160608090604_add_zipcode_required_to_spree_countries.rb +0 -7
  455. data/db/migrate/20161014145148_add_created_at_to_variant.rb +0 -8
  456. data/db/migrate/20161014152814_add_null_false_to_spree_variants_timestamps.rb +0 -6
  457. data/db/migrate/20161125065505_add_quantity_to_inventory_units.rb +0 -5
  458. data/db/migrate/20170119122701_add_original_return_item_id_to_spree_inventory_units.rb +0 -29
  459. data/db/migrate/20170315152755_add_unique_index_on_number_to_spree_orders.rb +0 -16
  460. data/db/migrate/20170316154338_add_unique_index_on_number_to_spree_stock_transfer.rb +0 -16
  461. data/db/migrate/20170316205511_add_unique_index_on_number_to_spree_shipment.rb +0 -16
  462. data/db/migrate/20170320134043_add_unique_index_on_number_to_spree_payments.rb +0 -17
  463. data/db/migrate/20170320142750_add_unique_index_on_number_to_spree_return_authorizations.rb +0 -16
  464. data/db/migrate/20170320145040_add_unique_index_on_number_to_spree_customer_returns.rb +0 -16
  465. data/db/migrate/20170320145518_add_unique_index_on_number_to_spree_reimbursements.rb +0 -16
  466. data/db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb +0 -37
  467. data/db/migrate/20170329110859_add_index_on_stock_location_to_spree_customer_returns.rb +0 -5
  468. data/db/migrate/20170329113917_add_index_on_prototype_to_spree_option_type_prototype.rb +0 -19
  469. data/db/migrate/20170330082155_add_indexes_to_spree_option_value_variant.rb +0 -19
  470. data/db/migrate/20170330132215_add_index_on_promotion_id_to_order_promotions.rb +0 -5
  471. data/db/migrate/20170331101758_add_indexes_for_property_prototype.rb +0 -20
  472. data/db/migrate/20170331103334_add_index_for_prototype_id_to_prototype_taxons.rb +0 -5
  473. data/db/migrate/20170331110454_add_indexes_to_refunds.rb +0 -6
  474. data/db/migrate/20170331111757_add_indexes_to_reimbursement_credits.rb +0 -6
  475. data/db/migrate/20170331115246_add_indexes_to_return_authorizations.rb +0 -6
  476. data/db/migrate/20170331120125_add_indexes_to_return_items.rb +0 -11
  477. data/db/migrate/20170331121725_add_index_to_role_users.rb +0 -18
  478. data/db/migrate/20170331123625_add_index_to_shipping_method_categories.rb +0 -5
  479. data/db/migrate/20170331123832_add_index_to_shipping_method_zones.rb +0 -20
  480. data/db/migrate/20170331124251_add_index_to_spree_shipping_rates.rb +0 -6
  481. data/db/migrate/20170331124513_add_index_to_spree_stock_items.rb +0 -5
  482. data/db/migrate/20170331124924_add_index_to_spree_stock_movement.rb +0 -5
  483. data/db/migrate/20170413211707_change_indexes_on_friendly_id_slugs.rb +0 -10
  484. data/db/migrate/20170722102643_add_analytics_kind_to_spree_trackers.rb +0 -5
  485. data/db/migrate/20170727103056_rename_tracker_kind_field.rb +0 -5
  486. data/db/migrate/20171004223836_remove_icon_from_taxons.rb +0 -8
  487. data/db/migrate/20180222133746_add_unique_index_on_spree_promotions_code.rb +0 -6
  488. data/db/migrate/20180613080857_rename_guest_token_to_token_in_orders.rb +0 -5
  489. data/db/migrate/20180915160001_add_timestamps_to_spree_prices.rb +0 -12
  490. data/db/migrate/20181024100754_add_deleted_at_to_spree_credit_cards.rb +0 -6
  491. data/db/migrate/20190305121659_add_iso_and_iso3_validation_on_presence_and_uniqueness.rb +0 -18
  492. data/db/migrate/20190523092729_add_user_id_and_deleted_at_to_spree_addresses.rb +0 -12
  493. data/db/migrate/20191005121504_add_store_id_to_payment_methods.rb +0 -7
  494. data/db/migrate/20191016134113_add_deafult_value_for_store_default_currency.rb +0 -5
  495. data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +0 -11
  496. data/db/migrate/20200102141311_add_social_to_spree_stores.rb +0 -10
  497. data/db/migrate/20200212144523_add_hide_from_nav_to_taxons.rb +0 -5
  498. data/db/migrate/20200308210757_add_default_locale_to_spree_store.rb +0 -7
  499. data/db/migrate/20200310145140_add_customer_support_email_to_spree_store.rb +0 -7
  500. data/db/migrate/20200421095017_add_compare_at_amount_to_spree_prices.rb +0 -7
  501. data/db/migrate/20200423123001_add_default_country_id_to_spree_store.rb +0 -9
  502. data/db/migrate/20200430072209_add_footer_fields_to_spree_stores.rb +0 -8
  503. data/db/migrate/20200513154939_add_show_property_to_spree_product_properties.rb +0 -5
  504. data/db/migrate/20200607161221_add_store_owner_order_notification_delivered_to_spree_orders.rb +0 -7
  505. data/db/migrate/20200607161222_add_new_order_notifications_email_to_spree_stores.rb +0 -7
  506. data/db/migrate/20200610113542_add_label_to_spree_addresses.rb +0 -5
  507. data/db/migrate/20200826075557_add_unique_index_on_taxon_id_and_product_id_to_spree_products_taxons.rb +0 -5
  508. data/db/migrate/20201006110150_add_checkout_zone_field_to_store.rb +0 -12
  509. data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +0 -10
  510. data/db/migrate/20201013084504_add_seo_robots_to_spree_stores.rb +0 -5
  511. data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +0 -8
  512. data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +0 -5
  513. data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +0 -5
  514. data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +0 -10
  515. data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +0 -15
  516. data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +0 -5
  517. data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +0 -5
  518. data/db/migrate/20210205211040_add_supported_locales_to_spree_stores.rb +0 -11
  519. data/db/migrate/20210215202602_migrate_spree_i18n_globalize_config.rb +0 -22
  520. data/db/migrate/20210407200948_create_spree_menus.rb +0 -16
  521. data/db/migrate/20210408092939_create_spree_menu_items.rb +0 -31
  522. data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +0 -8
  523. data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +0 -8
  524. data/db/migrate/20210512191732_create_spree_cms_pages.rb +0 -24
  525. data/db/migrate/20210514204251_create_spree_cms_sections.rb +0 -22
  526. data/db/migrate/20210527094055_create_spree_products_stores.rb +0 -29
  527. data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +0 -5
  528. data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +0 -46
  529. data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +0 -29
  530. data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +0 -10
  531. data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +0 -11
  532. data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +0 -31
  533. data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +0 -31
  534. data/db/migrate/20210721125657_create_spree_promotions_stores.rb +0 -29
  535. data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +0 -11
  536. data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +0 -305
  537. data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +0 -9
@@ -0,0 +1,43 @@
1
+ module Spree
2
+ module UserRoles
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ has_many :role_users, class_name: 'Spree::RoleUser', foreign_key: :user_id, dependent: :destroy
7
+ has_many :spree_roles, through: :role_users, class_name: 'Spree::Role', source: :role
8
+
9
+ scope :spree_admin, -> { joins(:spree_roles).where(Spree::Role.table_name => { name: 'admin' }) }
10
+
11
+ # has_spree_role? simply needs to return true or false whether a user has a role or not.
12
+ def has_spree_role?(role_name)
13
+ spree_roles.exists?(name: role_name)
14
+ end
15
+
16
+ def self.admin
17
+ ActiveSupport::Deprecation.warn('`User#admin` is deprecated and will be removed in Spree 5. Please use `User#spree_admin`')
18
+
19
+ spree_admin
20
+ end
21
+
22
+ def self.admin_created?
23
+ ActiveSupport::Deprecation.warn('`User#admin_created?` is deprecated and will be removed in Spree 5. Please use `User#spree_admin_created?`')
24
+
25
+ spree_admin_created?
26
+ end
27
+
28
+ def admin?
29
+ ActiveSupport::Deprecation.warn('`User#admin?` is deprecated and will be removed in Spree 5. Please use `User#spree_admin?`')
30
+
31
+ spree_admin?
32
+ end
33
+
34
+ def self.spree_admin_created?
35
+ spree_admin.exists?
36
+ end
37
+
38
+ def spree_admin?
39
+ has_spree_role?('admin')
40
+ end
41
+ end
42
+ end
43
+ end
@@ -1,8 +1,9 @@
1
- # Implementation class for Cancan gem. Instead of overriding this class, consider adding new permissions
1
+ # Implementation class for Cancan gem. Instead of overriding this class, consider adding new permissions
2
2
  # using the special +register_ability+ method which allows extensions to add their own abilities.
3
3
  #
4
- # See http://github.com/ryanb/cancan for more details on cancan.
4
+ # See https://github.com/CanCanCommunity/cancancan for more details.
5
5
  require 'cancan'
6
+
6
7
  module Spree
7
8
  class Ability
8
9
  include CanCan::Ability
@@ -27,7 +28,7 @@ module Spree
27
28
 
28
29
  user ||= Spree.user_class.new
29
30
 
30
- if user.respond_to?(:has_spree_role?) && user.has_spree_role?('admin')
31
+ if user.persisted? && user.try(:spree_admin?)
31
32
  apply_admin_permissions(user)
32
33
  else
33
34
  apply_user_permissions(user)
@@ -85,6 +86,13 @@ module Spree
85
86
  can :read, ::Spree::Taxonomy
86
87
  can :read, ::Spree::Variant
87
88
  can :read, ::Spree::Zone
89
+ can :manage, ::Spree::Wishlist, user_id: user.id
90
+ can :show, ::Spree::Wishlist do |wishlist|
91
+ wishlist.user == user || wishlist.is_private == false
92
+ end
93
+ can [:create, :update, :destroy], ::Spree::WishedItem do |wished_item|
94
+ wished_item.wishlist.user == user
95
+ end
88
96
  end
89
97
 
90
98
  def protect_admin_role
@@ -2,6 +2,8 @@ module Spree
2
2
  class Address < Spree::Base
3
3
  require 'validates_zipcode'
4
4
 
5
+ include Metadata
6
+
5
7
  if Rails::VERSION::STRING >= '6.1'
6
8
  serialize :preferences, Hash, default: {}
7
9
  end
@@ -23,7 +25,7 @@ module Spree
23
25
  # we're not freezing this on purpose so developers can extend and manage
24
26
  # those attributes depending of the logic of their applications
25
27
  ADDRESS_FIELDS = %w(firstname lastname company address1 address2 city state zipcode country phone)
26
- EXCLUDED_KEYS_FOR_COMPARISION = %w(id updated_at created_at deleted_at label user_id)
28
+ EXCLUDED_KEYS_FOR_COMPARISON = %w(id updated_at created_at deleted_at label user_id)
27
29
 
28
30
  scope :not_deleted, -> { where(deleted_at: nil) }
29
31
 
@@ -117,7 +119,7 @@ module Spree
117
119
  end
118
120
 
119
121
  def value_attributes
120
- attributes.except(*EXCLUDED_KEYS_FOR_COMPARISION)
122
+ attributes.except(*EXCLUDED_KEYS_FOR_COMPARISON)
121
123
  end
122
124
 
123
125
  def empty?
@@ -42,6 +42,7 @@ module Spree
42
42
  end
43
43
  end
44
44
 
45
+ # FIXME: we should check if we also need to fire this action after update
45
46
  after_create :update_adjustable_adjustment_total
46
47
  after_destroy :update_adjustable_adjustment_total
47
48
 
@@ -22,49 +22,46 @@ module Spree
22
22
  # Alphabetized to more easily lookup particular preferences
23
23
  preference :address_requires_state, :boolean, default: true # should state/state_name be required
24
24
  preference :address_requires_phone, :boolean, default: true # Determines whether we require phone in address
25
- preference :admin_interface_logo, :string, default: 'admin/logo.png'
26
- preference :admin_path, :string, default: '/admin'
27
- preference :admin_products_per_page, :integer, default: Kaminari.config.default_per_page
28
- preference :admin_orders_per_page, :integer, default: Kaminari.config.default_per_page
29
- preference :admin_properties_per_page, :integer, default: Kaminari.config.default_per_page
30
- preference :admin_promotions_per_page, :integer, default: Kaminari.config.default_per_page
31
- preference :admin_customer_returns_per_page, :integer, default: Kaminari.config.default_per_page
32
- preference :admin_users_per_page, :integer, default: Kaminari.config.default_per_page
33
- preference :admin_show_version, :boolean, default: true
25
+ preference :admin_path, :string, deprecated: true
26
+ preference :admin_products_per_page, :integer, deprecated: true
27
+ preference :admin_orders_per_page, :integer, deprecated: true
28
+ preference :admin_properties_per_page, :integer, deprecated: true
29
+ preference :admin_promotions_per_page, :integer, deprecated: true
30
+ preference :admin_customer_returns_per_page, :integer, deprecated: true
31
+ preference :admin_users_per_page, :integer, deprecated: true
32
+ preference :admin_show_version, :boolean, deprecated: true
34
33
  preference :allow_checkout_on_gateway_error, :boolean, default: false
35
34
  preference :allow_guest_checkout, :boolean, default: true
36
35
  preference :alternative_shipping_phone, :boolean, default: false # Request extra phone for ship addr
37
36
  preference :always_include_confirm_step, :boolean, default: false # Ensures confirmation step is always in checkout_progress bar, but does not force a confirm step if your payment methods do not support it.
38
- preference :always_put_site_name_in_title, :boolean, default: true
39
- preference :title_site_name_separator, :string, default: '-' # When always_put_site_name_in_title is true, insert a separator character before the site name in the title
37
+ preference :always_put_site_name_in_title, :boolean, deprecated: true
38
+ preference :title_site_name_separator, :string, deprecated: true
40
39
  preference :auto_capture, :boolean, default: false # automatically capture the credit card (as opposed to just authorize and capture later)
41
40
  preference :auto_capture_on_dispatch, :boolean, default: false # Captures payment for each shipment in Shipment#after_ship callback, and makes Shipment.ready when payment authorized.
42
41
  preference :binary_inventory_cache, :boolean, default: false # only invalidate product cache when a stock item changes whether it is in_stock
43
- preference :checkout_zone, :string, default: nil # replace with the name of a zone if you would like to limit the countries
42
+ preference :checkout_zone, :string, default: nil, deprecated: true # replace with the name of a zone if you would like to limit the countries
44
43
  preference :company, :boolean, default: false # Request company field for billing and shipping addr
45
- preference :currency, :string, default: 'USD'
46
- preference :default_country_id, :integer
44
+ preference :currency, :string, default: 'USD', deprecated: true
45
+ preference :default_country_id, :integer, deprecated: true
47
46
  preference :disable_sku_validation, :boolean, default: false # when turned off disables the built-in SKU uniqueness validation
48
47
  preference :disable_store_presence_validation, :boolean, default: false # when turned off disables Store presence validation for Products and Payment Methods
49
48
  preference :expedited_exchanges, :boolean, default: false # NOTE this requires payment profiles to be supported on your gateway of choice as well as a delayed job handler to be configured with activejob. kicks off an exchange shipment upon return authorization save. charge customer if they do not return items within timely manner.
50
49
  preference :expedited_exchanges_days_window, :integer, default: 14 # the amount of days the customer has to return their item after the expedited exchange is shipped in order to avoid being charged
51
- preference :layout, :string, default: 'spree/layouts/spree_application'
52
- preference :logo, :string, default: 'logo/spree_50.png'
53
- preference :mailer_logo, :string, default: 'logo/spree_50.png'
54
- preference :max_level_in_taxons_menu, :integer, default: 1 # maximum nesting level in taxons menu
50
+ preference :layout, :string, deprecated: 'Please use Spree::Frontend::Config[:layout] instead'
51
+ preference :logo, :string, deprecated: true
52
+ preference :mailer_logo, :string, deprecated: true
53
+ preference :max_level_in_taxons_menu, :integer, deprecated: true
55
54
  preference :products_per_page, :integer, default: 12
56
- preference :product_wysiwyg_editor_enabled, :boolean, default: true
57
55
  preference :require_master_price, :boolean, default: true
58
56
  preference :restock_inventory, :boolean, default: true # Determines if a return item is restocked automatically once it has been received
59
57
  preference :return_eligibility_number_of_days, :integer, default: 365
60
58
  preference :send_core_emails, :boolean, default: true # Default mail headers settings
61
- preference :shipping_instructions, :boolean, default: false # Request instructions/info for shipping
62
- preference :show_only_complete_orders_by_default, :boolean, default: true
59
+ preference :shipping_instructions, :boolean, deprecated: true
60
+ preference :show_only_complete_orders_by_default, :boolean, deprecated: true
63
61
  preference :show_variant_full_price, :boolean, default: false # Displays variant full price or difference with product price. Default false to be compatible with older behavior
64
62
  preference :show_products_without_price, :boolean, default: false
65
- preference :show_raw_product_description, :boolean, default: false
63
+ preference :show_raw_product_description, :boolean, deprecated: true
66
64
  preference :tax_using_ship_address, :boolean, default: true
67
- preference :taxon_wysiwyg_editor_enabled, :boolean, default: true
68
65
  preference :track_inventory_levels, :boolean, default: true # Determines whether to track on_hand values for variants / products.
69
66
 
70
67
  # Store credits configurations
@@ -72,7 +69,7 @@ module Spree
72
69
  preference :credit_to_new_allocation, :boolean, default: false
73
70
 
74
71
  # Multi store configurations
75
- preference :show_store_selector, :boolean, default: false
72
+ preference :show_store_selector, :boolean, deprecated: true
76
73
 
77
74
  # searcher_class allows spree extension writers to provide their own Search class
78
75
  def searcher_class
@@ -1,6 +1,7 @@
1
1
  module Spree
2
2
  class Asset < Spree::Base
3
3
  include Support::ActiveStorage
4
+ include Metadata
4
5
 
5
6
  belongs_to :viewable, polymorphic: true, touch: true
6
7
  acts_as_list scope: [:viewable_id, :viewable_type]
@@ -36,6 +36,10 @@ class Spree::Base < ApplicationRecord
36
36
  where(nil)
37
37
  end
38
38
 
39
+ def self.spree_base_uniqueness_scope
40
+ ApplicationRecord.try(:spree_base_uniqueness_scope) || []
41
+ end
42
+
39
43
  # FIXME: https://github.com/rails/rails/issues/40943
40
44
  def self.has_many_inversing
41
45
  false
@@ -45,6 +49,16 @@ class Spree::Base < ApplicationRecord
45
49
  column_names.reject { |c| c.match(/_id$|id|preferences|(.*)password|(.*)token|(.*)api_key/) }
46
50
  end
47
51
 
52
+ def self.json_api_permitted_attributes
53
+ skipped_attributes = %w[id]
54
+
55
+ if included_modules.include?(CollectiveIdea::Acts::NestedSet::Model)
56
+ skipped_attributes.push('lft', 'rgt', 'depth')
57
+ end
58
+
59
+ column_names.reject { |c| skipped_attributes.include?(c.to_s) }
60
+ end
61
+
48
62
  def self.json_api_type
49
63
  to_s.demodulize.underscore
50
64
  end
@@ -3,7 +3,7 @@ require_dependency 'spree/calculator'
3
3
  module Spree
4
4
  class Calculator::FlatRate < Calculator
5
5
  preference :amount, :decimal, default: 0
6
- preference :currency, :string, default: -> { Spree::Config[:currency] }
6
+ preference :currency, :string, default: -> { Spree::Store.default.default_currency }
7
7
 
8
8
  def self.description
9
9
  Spree.t(:flat_rate_per_order)
@@ -5,7 +5,7 @@ module Spree
5
5
  preference :first_item, :decimal, default: 0.0
6
6
  preference :additional_item, :decimal, default: 0.0
7
7
  preference :max_items, :integer, default: 0
8
- preference :currency, :string, default: -> { Spree::Config[:currency] }
8
+ preference :currency, :string, default: -> { Spree::Store.default.default_currency }
9
9
 
10
10
  def self.description
11
11
  Spree.t(:flexible_rate)
@@ -5,7 +5,7 @@ module Spree
5
5
  preference :minimal_amount, :decimal, default: 0
6
6
  preference :normal_amount, :decimal, default: 0
7
7
  preference :discount_amount, :decimal, default: 0
8
- preference :currency, :string, default: -> { Spree::Config[:currency] }
8
+ preference :currency, :string, default: -> { Spree::Store.default.default_currency }
9
9
 
10
10
  def self.description
11
11
  Spree.t(:price_sack)
@@ -0,0 +1,22 @@
1
+ require_dependency 'spree/shipping_calculator'
2
+
3
+ module Spree
4
+ module Calculator::Shipping
5
+ class DigitalDelivery < ShippingCalculator
6
+ preference :amount, :decimal, default: 0
7
+ preference :currency, :string, default: -> { Spree::Store.default.default_currency }
8
+
9
+ def self.description
10
+ Spree.t('digital.digital_delivery')
11
+ end
12
+
13
+ def compute_package(_package = nil)
14
+ preferred_amount
15
+ end
16
+
17
+ def available?(package)
18
+ package.contents.all? { |content| content.variant.digital? }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -4,7 +4,7 @@ module Spree
4
4
  module Calculator::Shipping
5
5
  class FlatRate < ShippingCalculator
6
6
  preference :amount, :decimal, default: 0
7
- preference :currency, :string, default: -> { Spree::Config[:currency] }
7
+ preference :currency, :string, default: -> { Spree::Store.default.default_currency }
8
8
 
9
9
  def self.description
10
10
  Spree.t(:shipping_flat_rate_per_order)
@@ -6,7 +6,7 @@ module Spree
6
6
  preference :first_item, :decimal, default: 0.0
7
7
  preference :additional_item, :decimal, default: 0.0
8
8
  preference :max_items, :integer, default: 0
9
- preference :currency, :string, default: -> { Spree::Config[:currency] }
9
+ preference :currency, :string, default: -> { Spree::Store.default.default_currency }
10
10
 
11
11
  def self.description
12
12
  Spree.t(:shipping_flexible_rate)
@@ -4,7 +4,7 @@ module Spree
4
4
  module Calculator::Shipping
5
5
  class PerItem < ShippingCalculator
6
6
  preference :amount, :decimal, default: 0
7
- preference :currency, :string, default: -> { Spree::Config[:currency] }
7
+ preference :currency, :string, default: -> { Spree::Store.default.default_currency }
8
8
 
9
9
  def self.description
10
10
  Spree.t(:shipping_flat_rate_per_item)
@@ -6,7 +6,7 @@ module Spree
6
6
  preference :minimal_amount, :decimal, default: 0
7
7
  preference :normal_amount, :decimal, default: 0
8
8
  preference :discount_amount, :decimal, default: 0
9
- preference :currency, :string, default: -> { Spree::Config[:currency] }
9
+ preference :currency, :string, default: -> { Spree::Store.default.default_currency }
10
10
 
11
11
  def self.description
12
12
  Spree.t(:shipping_price_sack)
@@ -4,7 +4,7 @@ module Spree
4
4
 
5
5
  belongs_to :calculable, polymorphic: true, optional: true
6
6
 
7
- # This method calls a compute_<computable> method. must be overriden in concrete calculator.
7
+ # This method calls a compute_<computable> method. must be overridden in concrete calculator.
8
8
  #
9
9
  # It should return amount computed based on #calculable and the computable parameter
10
10
  def compute(computable)
@@ -1,6 +1,5 @@
1
1
  module Spree::Cms::Sections
2
2
  class FeaturedArticle < Spree::CmsSection
3
- before_save :reset_link_attributes
4
3
  after_initialize :default_values
5
4
 
6
5
  store :content, accessors: [:title, :subtitle, :button_text, :rte_content], coder: JSON
@@ -14,12 +13,6 @@ module Spree::Cms::Sections
14
13
 
15
14
  private
16
15
 
17
- def reset_link_attributes
18
- if linked_resource_type_changed?
19
- self.linked_resource_id = nil
20
- end
21
- end
22
-
23
16
  def default_values
24
17
  self.gutters ||= 'No Gutters'
25
18
  self.fit ||= 'Screen'
@@ -1,6 +1,5 @@
1
1
  module Spree::Cms::Sections
2
2
  class HeroImage < Spree::CmsSection
3
- before_save :reset_link_attributes
4
3
  after_initialize :default_values
5
4
 
6
5
  store :content, accessors: [:title, :button_text], coder: JSON
@@ -30,14 +29,6 @@ module Spree::Cms::Sections
30
29
 
31
30
  private
32
31
 
33
- def reset_link_attributes
34
- if linked_resource_type_changed?
35
- return if linked_resource_id_was.nil?
36
-
37
- self.linked_resource_id = nil
38
- end
39
- end
40
-
41
32
  def default_values
42
33
  self.gutters ||= 'No Gutters'
43
34
  self.fit ||= 'Screen'
@@ -1,7 +1,7 @@
1
1
  module Spree::Cms::Sections
2
2
  class ImageGallery < Spree::CmsSection
3
3
  after_initialize :default_values
4
- before_save :reset_link_attributes
4
+ validate :reset_multiple_link_attributes
5
5
 
6
6
  LINKED_RESOURCE_TYPE = if Rails::VERSION::STRING < '6.0'
7
7
  ['Spree::Taxon'].freeze
@@ -70,7 +70,7 @@ module Spree::Cms::Sections
70
70
 
71
71
  private
72
72
 
73
- def reset_link_attributes
73
+ def reset_multiple_link_attributes
74
74
  return if Rails::VERSION::STRING < '6.0'
75
75
 
76
76
  if link_type_one_changed?
@@ -1,7 +1,7 @@
1
1
  module Spree::Cms::Sections
2
2
  class SideBySideImages < Spree::CmsSection
3
3
  after_initialize :default_values
4
- before_save :reset_link_attributes
4
+ validate :reset_multiple_link_attributes
5
5
 
6
6
  LINKED_RESOURCE_TYPE = if Rails::VERSION::STRING < '6.0'
7
7
  ['Spree::Taxon'].freeze
@@ -48,7 +48,7 @@ module Spree::Cms::Sections
48
48
 
49
49
  private
50
50
 
51
- def reset_link_attributes
51
+ def reset_multiple_link_attributes
52
52
  return if Rails::VERSION::STRING < '6.0'
53
53
 
54
54
  if link_type_one_changed?
@@ -16,7 +16,7 @@ module Spree
16
16
 
17
17
  before_validation :handle_slug
18
18
 
19
- validates :title, :store, :locale, presence: true
19
+ validates :title, :store, :locale, :type, presence: true
20
20
  validates :slug, uniqueness: { scope: :store_id, allow_nil: true, case_sensitive: true }
21
21
  validates :locale, uniqueness: { scope: [:store, :type] }, if: :homepage?
22
22
 
@@ -28,7 +28,7 @@ module Spree
28
28
  scope :standard, -> { where(type: 'Spree::Cms::Pages::StandardPage') }
29
29
  scope :feature, -> { where(type: 'Spree::Cms::Pages::FeaturePage') }
30
30
 
31
- self.whitelisted_ransackable_attributes = %w[title type locale store_id]
31
+ self.whitelisted_ransackable_attributes = %w[title type locale]
32
32
 
33
33
  def seo_title
34
34
  if meta_title.present?
@@ -38,7 +38,7 @@ module Spree
38
38
  end
39
39
  end
40
40
 
41
- # Overide this if your page type uses cms_sections
41
+ # Override this if your page type uses cms_sections
42
42
  def sections?
43
43
  false
44
44
  end
@@ -5,6 +5,8 @@ module Spree
5
5
  acts_as_list scope: :cms_page
6
6
  belongs_to :cms_page, touch: true
7
7
 
8
+ validate :reset_link_attributes
9
+
8
10
  IMAGE_COUNT = ['one', 'two', 'three']
9
11
  IMAGE_TYPES = ['image/png', 'image/jpg', 'image/jpeg', 'image/gif'].freeze
10
12
  IMAGE_SIZE = ['sm', 'md', 'lg', 'xl']
@@ -25,7 +27,7 @@ module Spree
25
27
 
26
28
  default_scope { order(position: :asc) }
27
29
 
28
- validates :name, :cms_page, presence: true
30
+ validates :name, :cms_page, :type, presence: true
29
31
 
30
32
  validates :image_one, :image_two, :image_three, content_type: IMAGE_TYPES
31
33
 
@@ -53,5 +55,15 @@ module Spree
53
55
  def fullscreen?
54
56
  fit == 'Screen'
55
57
  end
58
+
59
+ private
60
+
61
+ def reset_link_attributes
62
+ if linked_resource_type_changed?
63
+ return if linked_resource_id_was.nil?
64
+
65
+ self.linked_resource_id = nil
66
+ end
67
+ end
56
68
  end
57
69
  end
@@ -2,7 +2,7 @@ module Spree
2
2
  class Country < Spree::Base
3
3
  # we need to have this callback before any dependent: :destroy associations
4
4
  # https://github.com/rails/rails/issues/3458
5
- before_destroy :ensure_not_default
5
+ # before_destroy :ensure_not_default
6
6
 
7
7
  has_many :addresses, dependent: :restrict_with_error
8
8
  has_many :states,
@@ -16,7 +16,7 @@ module Spree
16
16
  foreign_key: :zoneable_id
17
17
  has_many :zones, through: :zone_members, class_name: 'Spree::Zone'
18
18
 
19
- validates :name, :iso_name, :iso, :iso3, presence: true, uniqueness: { case_sensitive: false }
19
+ validates :name, :iso_name, :iso, :iso3, presence: true, uniqueness: { case_sensitive: false, scope: spree_base_uniqueness_scope }
20
20
 
21
21
  def self.default(store = nil)
22
22
  ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
@@ -49,6 +49,8 @@ module Spree
49
49
  private
50
50
 
51
51
  def ensure_not_default
52
+ ActiveSupport::Deprecation.warn('Country#ensure_not_default is deprecated and will be removed in Spree v5')
53
+
52
54
  if id.eql?(Spree::Config[:default_country_id])
53
55
  errors.add(:base, Spree.t(:default_country_cannot_be_deleted))
54
56
  throw(:abort)
@@ -1,6 +1,7 @@
1
1
  module Spree
2
2
  class CreditCard < Spree::Base
3
3
  include ActiveMerchant::Billing::CreditCardMethods
4
+ include Metadata
4
5
 
5
6
  acts_as_paranoid
6
7
 
@@ -171,6 +172,15 @@ module Spree
171
172
  )
172
173
  end
173
174
 
175
+ def self.json_api_permitted_attributes
176
+ [
177
+ 'number', 'month', 'year', 'expiry', 'verification_value', 'first_name', 'last_name',
178
+ 'cc_type', 'gateway_customer_profile_id', 'gateway_payment_profile_id', 'last_digits',
179
+ 'name', 'encrypted_data', 'address_id', 'created_at', 'updated_at', 'user_id',
180
+ 'payment_method_id', 'default', 'deleted_at'
181
+ ]
182
+ end
183
+
174
184
  private
175
185
 
176
186
  def require_card_numbers?
@@ -1,6 +1,9 @@
1
1
  module Spree
2
2
  class CustomerReturn < Spree::Base
3
3
  include Spree::Core::NumberGenerator.new(prefix: 'CR', length: 9)
4
+ include NumberIdentifier
5
+ include Metadata
6
+
4
7
  belongs_to :stock_location
5
8
  belongs_to :store, class_name: 'Spree::Store', inverse_of: :customer_returns
6
9
 
@@ -11,7 +14,6 @@ module Spree
11
14
  after_create :process_return!
12
15
 
13
16
  validates :store, presence: true
14
- validates :number, uniqueness: { case_sensitive: true }
15
17
  validates :return_items, :stock_location, presence: true
16
18
  validate :must_have_return_authorization, on: :create
17
19
  validate :return_items_belong_to_same_order
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ class Digital < Spree::Base
3
+ belongs_to :variant
4
+ has_many :digital_links, dependent: :destroy
5
+
6
+ if Spree.private_storage_service_name
7
+ has_one_attached :attachment, service: Spree.private_storage_service_name
8
+ else
9
+ has_one_attached :attachment
10
+ end
11
+
12
+ validates :attachment, attached: true
13
+ validates :variant, presence: true
14
+ end
15
+ end
@@ -0,0 +1,50 @@
1
+ module Spree
2
+ class DigitalLink < Spree::Base
3
+ has_secure_token
4
+
5
+ belongs_to :digital
6
+ belongs_to :line_item
7
+
8
+ before_validation :set_defaults, on: :create
9
+ validates :digital, :line_item, presence: true
10
+ validates :access_counter, numericality: { greater_than_or_equal_to: 0 }
11
+
12
+ def authorizable?
13
+ !(expired? || access_limit_exceeded?)
14
+ end
15
+
16
+ def expired?
17
+ if line_item.order.store.limit_digital_download_days
18
+ created_at <= line_item.order.store.digital_asset_authorized_days.day.ago
19
+ else
20
+ false
21
+ end
22
+ end
23
+
24
+ def access_limit_exceeded?
25
+ if line_item.order.store.limit_digital_download_count
26
+ access_counter >= line_item.order.store.digital_asset_authorized_clicks
27
+ else
28
+ false
29
+ end
30
+ end
31
+
32
+ # This method should be called when a download is initiated.
33
+ # It returns +true+ or +false+ depending on whether the authorization is granted.
34
+ def authorize!
35
+ authorizable? && increment!(:access_counter, touch: true) ? true : false
36
+ end
37
+
38
+ def reset!
39
+ self.access_counter = 0
40
+ self.created_at = Time.current
41
+ save!
42
+ end
43
+
44
+ private
45
+
46
+ def set_defaults
47
+ self.access_counter ||= 0
48
+ end
49
+ end
50
+ end
@@ -9,14 +9,12 @@ module Spree
9
9
 
10
10
  attr_accessor :test
11
11
 
12
+ preference :dummy_key, :string, default: 'PUBLICKEY123'
13
+
12
14
  def provider_class
13
15
  self.class
14
16
  end
15
17
 
16
- def preferences
17
- {}
18
- end
19
-
20
18
  def create_profile(payment)
21
19
  return if payment.source.has_payment_profile?
22
20
 
@@ -73,6 +71,10 @@ module Spree
73
71
  true
74
72
  end
75
73
 
74
+ def payment_source_class
75
+ CreditCard
76
+ end
77
+
76
78
  def actions
77
79
  %w(capture void credit)
78
80
  end
@@ -88,5 +90,9 @@ module Spree
88
90
  end
89
91
  random
90
92
  end
93
+
94
+ def public_preference_keys
95
+ [:dummy_key]
96
+ end
91
97
  end
92
98
  end