solidus_core 2.4.2 → 2.5.0.beta1

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 (313) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +1 -5
  3. data/Rakefile +23 -6
  4. data/app/helpers/spree/base_helper.rb +15 -10
  5. data/app/helpers/spree/checkout_helper.rb +1 -1
  6. data/app/helpers/spree/products_helper.rb +2 -2
  7. data/app/mailers/spree/carton_mailer.rb +2 -2
  8. data/app/mailers/spree/order_mailer.rb +4 -4
  9. data/app/mailers/spree/reimbursement_mailer.rb +2 -2
  10. data/app/mailers/spree/test_mailer.rb +1 -1
  11. data/app/models/concerns/spree/adjustment_source.rb +17 -11
  12. data/app/models/concerns/spree/calculated_adjustments.rb +2 -2
  13. data/app/models/spree/ability.rb +1 -1
  14. data/app/models/spree/address.rb +7 -0
  15. data/app/models/spree/adjustment.rb +6 -2
  16. data/app/models/spree/calculator.rb +1 -1
  17. data/app/models/spree/calculator/flexi_rate.rb +1 -0
  18. data/app/models/spree/calculator/free_shipping.rb +2 -0
  19. data/app/models/spree/calculator/percent_on_line_item.rb +6 -6
  20. data/app/models/spree/calculator/percent_per_item.rb +2 -0
  21. data/app/models/spree/calculator/returns/default_refund_amount.rb +4 -4
  22. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -0
  23. data/app/models/spree/calculator/shipping/flat_rate.rb +1 -0
  24. data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -0
  25. data/app/models/spree/calculator/shipping/per_item.rb +1 -0
  26. data/app/models/spree/calculator/shipping/price_sack.rb +1 -0
  27. data/app/models/spree/classification.rb +1 -1
  28. data/app/models/spree/customer_return.rb +1 -1
  29. data/app/models/spree/inventory_unit.rb +8 -2
  30. data/app/models/spree/log_entry.rb +0 -11
  31. data/app/models/spree/order.rb +31 -16
  32. data/app/models/spree/order_contents.rb +0 -14
  33. data/app/models/spree/order_shipping.rb +0 -5
  34. data/app/models/spree/order_updater.rb +0 -4
  35. data/app/models/spree/payment.rb +6 -1
  36. data/app/models/spree/payment/processing.rb +4 -4
  37. data/app/models/spree/payment_method.rb +8 -3
  38. data/app/models/spree/payment_method/credit_card.rb +1 -1
  39. data/app/models/spree/payment_method/store_credit.rb +4 -4
  40. data/app/models/spree/price.rb +7 -1
  41. data/app/models/spree/product.rb +34 -6
  42. data/app/models/spree/product/scopes.rb +2 -2
  43. data/app/models/spree/promotion.rb +1 -2
  44. data/app/models/spree/promotion/actions/create_adjustment.rb +3 -2
  45. data/app/models/spree/promotion/actions/create_item_adjustments.rb +7 -8
  46. data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
  47. data/app/models/spree/promotion/rules/taxon.rb +25 -24
  48. data/app/models/spree/promotion_action.rb +7 -1
  49. data/app/models/spree/promotion_chooser.rb +1 -1
  50. data/app/models/spree/promotion_code.rb +3 -3
  51. data/app/models/spree/promotion_handler/coupon.rb +8 -29
  52. data/app/models/spree/promotion_rule.rb +1 -1
  53. data/app/models/spree/refund.rb +3 -3
  54. data/app/models/spree/reimbursement.rb +1 -1
  55. data/app/models/spree/return_authorization.rb +2 -2
  56. data/app/models/spree/return_item.rb +3 -3
  57. data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
  58. data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +1 -1
  59. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +1 -1
  60. data/app/models/spree/return_item/eligibility_validator/order_completed.rb +1 -1
  61. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +1 -1
  62. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  63. data/app/models/spree/shipment.rb +16 -6
  64. data/app/models/spree/shipping_method.rb +7 -0
  65. data/app/models/spree/shipping_rate.rb +6 -6
  66. data/app/models/spree/shipping_rate_tax.rb +2 -2
  67. data/app/models/spree/stock/availability_validator.rb +2 -2
  68. data/app/models/spree/stock/estimator.rb +9 -1
  69. data/app/models/spree/stock/inventory_unit_builder.rb +1 -2
  70. data/app/models/spree/stock/inventory_validator.rb +2 -2
  71. data/app/models/spree/stock/package.rb +1 -1
  72. data/app/models/spree/stock/simple_coordinator.rb +2 -2
  73. data/app/models/spree/stock_item.rb +6 -0
  74. data/app/models/spree/stock_location.rb +2 -2
  75. data/app/models/spree/store_credit.rb +19 -12
  76. data/app/models/spree/store_credit_category.rb +1 -1
  77. data/app/models/spree/store_credit_event.rb +7 -1
  78. data/app/models/spree/tax/shipping_rate_taxer.rb +1 -1
  79. data/app/models/spree/tax_calculator/shipping_rate.rb +12 -3
  80. data/app/models/spree/tax_rate.rb +10 -3
  81. data/app/models/spree/taxon.rb +14 -4
  82. data/app/models/spree/taxonomy.rb +1 -1
  83. data/app/models/spree/unit_cancel.rb +1 -1
  84. data/app/models/spree/variant.rb +33 -1
  85. data/app/models/spree/variant/price_selector.rb +1 -1
  86. data/app/models/spree/variant/pricing_options.rb +1 -1
  87. data/app/models/spree/variant/scopes.rb +1 -1
  88. data/app/models/spree/variant/vat_price_generator.rb +1 -1
  89. data/app/views/spree/carton_mailer/shipped_email.html.erb +6 -6
  90. data/app/views/spree/carton_mailer/shipped_email.text.erb +6 -6
  91. data/app/views/spree/order_mailer/cancel_email.html.erb +5 -5
  92. data/app/views/spree/order_mailer/cancel_email.text.erb +5 -5
  93. data/app/views/spree/order_mailer/confirm_email.html.erb +9 -9
  94. data/app/views/spree/order_mailer/confirm_email.text.erb +9 -9
  95. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +3 -3
  96. data/app/views/spree/order_mailer/inventory_cancellation_email.text.erb +3 -3
  97. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +1 -1
  98. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +1 -1
  99. data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +5 -5
  100. data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +5 -5
  101. data/app/views/spree/shared/_error_messages.html.erb +2 -2
  102. data/app/views/spree/test_mailer/test_email.html.erb +2 -2
  103. data/app/views/spree/test_mailer/test_email.text.erb +2 -2
  104. data/config/initializers/assets.rb +3 -1
  105. data/config/locales/en.yml +44 -48
  106. data/db/default/spree/store_credit.rb +1 -1
  107. data/db/default/spree/stores.rb +7 -8
  108. data/db/migrate/20160101010000_solidus_one_four.rb +4 -46
  109. data/db/migrate/20170317035819_add_lft_and_rgt_indexes_to_taxons.rb +6 -0
  110. data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +28 -0
  111. data/db/migrate/20170608074534_rename_bogus_gateways.rb +4 -2
  112. data/db/migrate/20170831201542_remove_default_tax_from_spree_zones.rb +1 -1
  113. data/lib/generators/spree/custom_user/custom_user_generator.rb +11 -22
  114. data/lib/generators/spree/install/install_generator.rb +10 -5
  115. data/lib/spree/app_configuration.rb +103 -5
  116. data/lib/spree/core.rb +3 -2
  117. data/lib/spree/core/active_merchant_dependencies.rb +11 -0
  118. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  119. data/lib/spree/core/controller_helpers/common.rb +3 -7
  120. data/lib/spree/core/engine.rb +18 -100
  121. data/lib/spree/core/environment.rb +3 -3
  122. data/lib/spree/core/importer/order.rb +0 -1
  123. data/lib/spree/core/permalinks.rb +9 -15
  124. data/lib/spree/core/product_filters.rb +5 -3
  125. data/lib/spree/core/role_configuration.rb +23 -7
  126. data/lib/spree/core/search/base.rb +16 -13
  127. data/lib/spree/core/version.rb +1 -1
  128. data/lib/spree/paranoia_deprecations.rb +19 -0
  129. data/lib/spree/permission_sets.rb +0 -4
  130. data/lib/spree/permitted_attributes.rb +0 -3
  131. data/lib/spree/preferences/preferable.rb +70 -34
  132. data/lib/spree/preferences/preferable_class_methods.rb +22 -0
  133. data/lib/spree/testing_support/authorization_helpers.rb +2 -0
  134. data/lib/spree/testing_support/common_rake.rb +0 -1
  135. data/lib/spree/testing_support/dummy_app.rb +100 -0
  136. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +10 -0
  137. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +10 -0
  138. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/backend/all.css +9 -0
  139. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +9 -0
  140. data/lib/spree/testing_support/dummy_app/database.yml +31 -0
  141. data/lib/spree/testing_support/dummy_app/migrations.rb +35 -0
  142. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +60 -0
  143. data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +1 -0
  144. data/lib/spree/testing_support/factories.rb +1 -1
  145. data/lib/spree/testing_support/factories/address_factory.rb +2 -2
  146. data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -2
  147. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
  148. data/lib/spree/testing_support/factories/calculator_factory.rb +1 -1
  149. data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/country_factory.rb +1 -1
  151. data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
  152. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
  153. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  154. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +13 -4
  155. data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
  156. data/lib/spree/testing_support/factories/option_type_factory.rb +1 -1
  157. data/lib/spree/testing_support/factories/option_value_factory.rb +1 -1
  158. data/lib/spree/testing_support/factories/order_factory.rb +5 -1
  159. data/lib/spree/testing_support/factories/order_promotion_factory.rb +1 -1
  160. data/lib/spree/testing_support/factories/payment_factory.rb +1 -1
  161. data/lib/spree/testing_support/factories/payment_method_factory.rb +1 -1
  162. data/lib/spree/testing_support/factories/price_factory.rb +1 -1
  163. data/lib/spree/testing_support/factories/product_factory.rb +1 -1
  164. data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
  165. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
  166. data/lib/spree/testing_support/factories/promotion_category_factory.rb +1 -1
  167. data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
  168. data/lib/spree/testing_support/factories/promotion_factory.rb +1 -1
  169. data/lib/spree/testing_support/factories/property_factory.rb +1 -1
  170. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  171. data/lib/spree/testing_support/factories/refund_reason_factory.rb +1 -1
  172. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  173. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
  174. data/lib/spree/testing_support/factories/return_authorization_factory.rb +1 -1
  175. data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
  176. data/lib/spree/testing_support/factories/return_reason_factory.rb +1 -1
  177. data/lib/spree/testing_support/factories/role_factory.rb +1 -1
  178. data/lib/spree/testing_support/factories/shipment_factory.rb +1 -2
  179. data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
  180. data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -2
  181. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
  182. data/lib/spree/testing_support/factories/state_factory.rb +1 -7
  183. data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
  184. data/lib/spree/testing_support/factories/stock_location_factory.rb +1 -1
  185. data/lib/spree/testing_support/factories/stock_movement_factory.rb +1 -1
  186. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  187. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
  188. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -1
  189. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
  190. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +2 -2
  191. data/lib/spree/testing_support/factories/store_credit_update_reason_factory.rb +1 -1
  192. data/lib/spree/testing_support/factories/store_factory.rb +1 -1
  193. data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -2
  194. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
  195. data/lib/spree/testing_support/factories/taxon_factory.rb +1 -1
  196. data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
  197. data/lib/spree/testing_support/factories/user_factory.rb +4 -10
  198. data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
  199. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +1 -1
  200. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +1 -1
  201. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +1 -1
  202. data/lib/spree/testing_support/factories/zone_factory.rb +2 -4
  203. data/lib/spree/testing_support/flash.rb +2 -2
  204. data/lib/spree/testing_support/order_walkthrough.rb +9 -9
  205. data/lib/spree/testing_support/preferences.rb +4 -0
  206. data/lib/spree/testing_support/sequences.rb +3 -12
  207. data/solidus_core.gemspec +12 -8
  208. data/spec/helpers/base_helper_spec.rb +19 -3
  209. data/spec/helpers/products_helper_spec.rb +1 -1
  210. data/spec/lib/calculated_adjustments_spec.rb +20 -0
  211. data/spec/lib/i18n_spec.rb +4 -69
  212. data/spec/lib/search/base_spec.rb +1 -0
  213. data/spec/lib/search/variant_spec.rb +4 -4
  214. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +6 -6
  215. data/spec/lib/spree/core/importer/order_spec.rb +2 -2
  216. data/spec/lib/spree/core/role_configuration_spec.rb +6 -9
  217. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +12 -8
  218. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +1 -1
  219. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +1 -1
  220. data/spec/mailers/carton_mailer_spec.rb +3 -7
  221. data/spec/mailers/order_mailer_spec.rb +7 -11
  222. data/spec/mailers/reimbursement_mailer_spec.rb +1 -5
  223. data/spec/mailers/test_mailer_spec.rb +0 -4
  224. data/spec/models/spree/ability_spec.rb +2 -1
  225. data/spec/models/spree/address_spec.rb +32 -19
  226. data/spec/models/spree/app_configuration_spec.rb +1 -1
  227. data/spec/models/spree/calculator/distributed_amount_spec.rb +1 -1
  228. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +8 -10
  229. data/spec/models/spree/calculator/percent_per_item_spec.rb +4 -4
  230. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +10 -3
  231. data/spec/models/spree/classification_spec.rb +19 -0
  232. data/spec/models/spree/credit_card_spec.rb +1 -1
  233. data/spec/models/spree/customer_return_spec.rb +17 -6
  234. data/spec/models/spree/distributed_amounts_handler_spec.rb +1 -1
  235. data/spec/models/spree/exchange_spec.rb +1 -1
  236. data/spec/models/spree/inventory_unit_spec.rb +3 -7
  237. data/spec/models/spree/line_item_spec.rb +6 -6
  238. data/spec/models/spree/option_value_spec.rb +11 -6
  239. data/spec/models/spree/order/callbacks_spec.rb +2 -2
  240. data/spec/models/spree/order/checkout_spec.rb +31 -31
  241. data/spec/models/spree/order/risk_assessment_spec.rb +9 -9
  242. data/spec/models/spree/order_contents_spec.rb +1 -9
  243. data/spec/models/spree/order_inventory_spec.rb +2 -2
  244. data/spec/models/spree/order_mutex_spec.rb +3 -1
  245. data/spec/models/spree/order_shipping_spec.rb +7 -4
  246. data/spec/models/spree/order_spec.rb +36 -13
  247. data/spec/models/spree/order_taxation_spec.rb +7 -7
  248. data/spec/models/spree/order_updater_spec.rb +6 -4
  249. data/spec/models/spree/payment/cancellation_spec.rb +1 -1
  250. data/spec/models/spree/payment_create_spec.rb +2 -2
  251. data/spec/models/spree/payment_method/store_credit_spec.rb +13 -13
  252. data/spec/models/spree/payment_spec.rb +23 -4
  253. data/spec/models/spree/preferences/preferable_spec.rb +44 -0
  254. data/spec/models/spree/preferences/statically_configurable_spec.rb +1 -0
  255. data/spec/models/spree/price_spec.rb +6 -4
  256. data/spec/models/spree/product/scopes_spec.rb +1 -1
  257. data/spec/models/spree/product_spec.rb +49 -9
  258. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +13 -3
  259. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +146 -134
  260. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +6 -6
  261. data/spec/models/spree/promotion/rules/taxon_spec.rb +14 -14
  262. data/spec/models/spree/promotion_code_spec.rb +31 -19
  263. data/spec/models/spree/promotion_handler/coupon_spec.rb +42 -17
  264. data/spec/models/spree/promotion_handler/shipping_spec.rb +1 -6
  265. data/spec/models/spree/promotion_spec.rb +14 -14
  266. data/spec/models/spree/refund_spec.rb +1 -1
  267. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +1 -1
  268. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +1 -1
  269. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +3 -2
  270. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
  271. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +2 -2
  272. data/spec/models/spree/return_item_spec.rb +6 -6
  273. data/spec/models/spree/shipment_spec.rb +14 -10
  274. data/spec/models/spree/shipping_manifest_spec.rb +22 -9
  275. data/spec/models/spree/shipping_method_spec.rb +9 -5
  276. data/spec/models/spree/stock/availability_spec.rb +16 -2
  277. data/spec/models/spree/stock/estimator_spec.rb +11 -12
  278. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -4
  279. data/spec/models/spree/stock/package_spec.rb +3 -2
  280. data/spec/models/spree/stock/simple_coordinator_spec.rb +1 -24
  281. data/spec/models/spree/stock_item_spec.rb +6 -6
  282. data/spec/models/spree/stock_location_spec.rb +16 -3
  283. data/spec/models/spree/store_credit_spec.rb +12 -6
  284. data/spec/models/spree/tax/taxation_integration_spec.rb +6 -6
  285. data/spec/models/spree/tax_calculator/default_spec.rb +7 -7
  286. data/spec/models/spree/taxon_spec.rb +42 -19
  287. data/spec/models/spree/variant/vat_price_generator_spec.rb +1 -1
  288. data/spec/models/spree/variant_spec.rb +69 -11
  289. data/spec/rails_helper.rb +7 -13
  290. data/spec/spec_helper.rb +3 -12
  291. data/spec/support/concerns/default_price.rb +1 -1
  292. data/spec/support/dummy_ability.rb +2 -0
  293. metadata +144 -73
  294. data/Gemfile +0 -3
  295. data/app/models/spree/order_stock_location.rb +0 -15
  296. data/app/models/spree/stock_transfer.rb +0 -110
  297. data/app/models/spree/transfer_item.rb +0 -54
  298. data/lib/generators/spree/custom_user/templates/initializer.rb.tt +0 -1
  299. data/lib/spree/permission_sets/restricted_stock_transfer_display.rb +0 -17
  300. data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +0 -52
  301. data/lib/spree/permission_sets/stock_transfer_display.rb +0 -10
  302. data/lib/spree/permission_sets/stock_transfer_management.rb +0 -11
  303. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +0 -28
  304. data/lib/spree/testing_support/i18n.rb +0 -97
  305. data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +0 -12
  306. data/spec/models/spree/order_stock_location_spec.rb +0 -18
  307. data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +0 -49
  308. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +0 -218
  309. data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +0 -23
  310. data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +0 -23
  311. data/spec/models/spree/stock_transfer_spec.rb +0 -308
  312. data/spec/models/spree/transfer_item_spec.rb +0 -275
  313. data/spec/support/test_gateway.rb +0 -2
@@ -1,4 +1,4 @@
1
- require 'spree/config'
1
+ require 'spree/core/environment_extension'
2
2
 
3
3
  module Spree
4
4
  module Core
@@ -10,9 +10,9 @@ module Spree
10
10
 
11
11
  attr_accessor :calculators, :preferences, :promotions
12
12
 
13
- def initialize
13
+ def initialize(spree_config)
14
14
  @calculators = Calculators.new
15
- @preferences = Spree::Config
15
+ @preferences = spree_config
16
16
  @promotions = Spree::Promo::Environment.new
17
17
  end
18
18
  end
@@ -69,7 +69,6 @@ module Spree
69
69
  # trying to view these units. Note the Importer might not be
70
70
  # able to find the line item if line_item.variant_id |= iu.variant_id
71
71
  shipment.inventory_units.new(
72
- order: order,
73
72
  variant_id: iu[:variant_id],
74
73
  line_item: line_item
75
74
  )
@@ -1,5 +1,3 @@
1
- require 'stringex'
2
-
3
1
  module Spree
4
2
  module Core
5
3
  module Permalinks
@@ -48,24 +46,20 @@ module Spree
48
46
  end
49
47
 
50
48
  def save_permalink(permalink_value = to_param)
51
- with_lock do
52
- permalink_value ||= generate_permalink
49
+ permalink_value ||= generate_permalink
50
+ permalink_field = self.class.permalink_field
51
+
52
+ loop do
53
+ other = self.class.where(permalink_field => permalink_value)
54
+ break unless other.exists?
53
55
 
54
- field = self.class.permalink_field
55
- # Do other links exist with this permalink?
56
- other = self.class.where("#{self.class.table_name}.#{field} LIKE ?", "#{permalink_value}%")
57
- if other.any?
58
- # Find the existing permalink with the highest number, and increment that number.
59
- # (If none of the existing permalinks have a number, this will evaluate to 1.)
60
- number = other.map { |o| o.send(field)[/-(\d+)$/, 1].to_i }.max + 1
61
- permalink_value += "-#{number}"
62
- end
63
- write_attribute(field, permalink_value)
56
+ # Try again with a new value
57
+ permalink_value = generate_permalink
64
58
  end
59
+ write_attribute(permalink_field, permalink_value)
65
60
  end
66
61
  end
67
62
  end
68
63
  end
69
64
 
70
65
  ActiveRecord::Base.send :include, Spree::Core::Permalinks
71
- ActiveRecord::Relation.send :include, Spree::Core::Permalinks
@@ -67,13 +67,13 @@ module Spree
67
67
 
68
68
  def self.price_filter
69
69
  v = Spree::Price.arel_table
70
- conds = [[Spree.t(:under_price, price: format_price(10)), v[:amount].lteq(10)],
70
+ conds = [[I18n.t('spree.under_price', price: format_price(10)), v[:amount].lteq(10)],
71
71
  ["#{format_price(10)} - #{format_price(15)}", v[:amount].in(10..15)],
72
72
  ["#{format_price(15)} - #{format_price(18)}", v[:amount].in(15..18)],
73
73
  ["#{format_price(18)} - #{format_price(20)}", v[:amount].in(18..20)],
74
- [Spree.t(:or_over_price, price: format_price(20)), v[:amount].gteq(20)]]
74
+ [I18n.t('spree.or_over_price', price: format_price(20)), v[:amount].gteq(20)]]
75
75
  {
76
- name: Spree.t(:price_range),
76
+ name: I18n.t('spree.price_range'),
77
77
  scope: :price_range_any,
78
78
  conds: Hash[*conds.flatten],
79
79
  labels: conds.map { |k, _v| [k, k] }
@@ -164,6 +164,7 @@ module Spree
164
164
  # This scope selects products in any of the active taxons or their children.
165
165
  #
166
166
  def self.taxons_below(taxon)
167
+ Spree::Deprecation.warn "taxons_below is deprecated in solidus_core. Please add it to your own application to continue using it."
167
168
  return Spree::Core::ProductFilters.all_taxons if taxon.nil?
168
169
  {
169
170
  name: 'Taxons under ' + taxon.name,
@@ -180,6 +181,7 @@ module Spree
180
181
  #
181
182
  # idea: expand the format to allow nesting of labels?
182
183
  def self.all_taxons
184
+ Spree::Deprecation.warn "all_taxons is deprecated in solidus_core. Please add it to your own application to continue using it."
183
185
  taxons = Spree::Taxonomy.all.map { |t| [t.root] + t.root.descendants }.flatten
184
186
  {
185
187
  name: 'All taxons',
@@ -1,4 +1,5 @@
1
1
  require 'singleton'
2
+ require 'spree/core/class_constantizer'
2
3
 
3
4
  module Spree
4
5
  # A class responsible for associating {Spree::Role} with a list of permission sets.
@@ -16,15 +17,30 @@ module Spree
16
17
  class RoleConfiguration
17
18
  # An internal structure for the association between a role and a
18
19
  # set of permissions.
19
- Role = Struct.new(:name, :permission_sets)
20
+ class Role
21
+ attr_reader :name, :permission_sets
22
+
23
+ def initialize(name, permission_sets)
24
+ @name = name
25
+ @permission_sets = Spree::Core::ClassConstantizer::Set.new
26
+ @permission_sets.concat permission_sets
27
+ end
28
+ end
20
29
 
21
- include Singleton
22
30
  attr_accessor :roles
23
31
 
24
- # Yields the instance of the singleton, used for configuration
25
- # @yield_param instance [Spree::RoleConfiguration]
26
- def self.configure
27
- yield(instance)
32
+ class << self
33
+ def instance
34
+ Spree::Deprecation.warn "Spree::RoleConfiguration.instance is DEPRECATED use Spree::Config.roles instead"
35
+ Spree::Config.roles
36
+ end
37
+
38
+ # Yields the instance of the singleton, used for configuration
39
+ # @yield_param instance [Spree::RoleConfiguration]
40
+ def configure
41
+ Spree::Deprecation.warn "Spree::RoleConfiguration.configure is deprecated. Call Spree::Config.roles.assign_permissions instead"
42
+ yield(Spree::Config.roles)
43
+ end
28
44
  end
29
45
 
30
46
  # Given a CanCan::Ability, and a user, determine what permissions sets can
@@ -63,7 +79,7 @@ module Spree
63
79
  def assign_permissions(role_name, permission_sets)
64
80
  name = role_name.to_s
65
81
 
66
- roles[name].permission_sets |= permission_sets
82
+ roles[name].permission_sets.concat permission_sets
67
83
  roles[name]
68
84
  end
69
85
  end
@@ -27,16 +27,17 @@ module Spree
27
27
 
28
28
  def retrieve_products
29
29
  @products = get_base_scope
30
- curr_page = page || 1
30
+ curr_page = @properties[:page] || 1
31
31
 
32
32
  unless Spree::Config.show_products_without_price
33
33
  @products = @products.joins(:prices).merge(Spree::Price.where(pricing_options.search_arguments)).distinct
34
34
  end
35
- @products = @products.page(curr_page).per(per_page)
35
+ @products = @products.page(curr_page).per(@properties[:per_page])
36
36
  end
37
37
 
38
38
  def method_missing(name)
39
- if @properties.key? name
39
+ if @properties.key?(name)
40
+ Spree::Deprecation.warn "Accessing Searcher's #{name} property using #{self.class.name}##{name} is deprecated without replacement"
40
41
  @properties[name]
41
42
  else
42
43
  super
@@ -47,8 +48,8 @@ module Spree
47
48
 
48
49
  def get_base_scope
49
50
  base_scope = Spree::Product.display_includes.available
50
- base_scope = base_scope.in_taxon(taxon) unless taxon.blank?
51
- base_scope = get_products_conditions_for(base_scope, keywords)
51
+ base_scope = base_scope.in_taxon(@properties[:taxon]) unless @properties[:taxon].blank?
52
+ base_scope = get_products_conditions_for(base_scope, @properties[:keywords])
52
53
  base_scope = add_search_scopes(base_scope)
53
54
  base_scope = add_eagerload_scopes(base_scope)
54
55
  base_scope
@@ -71,19 +72,21 @@ module Spree
71
72
  # `where` constraints affecting joined tables are added to the search;
72
73
  # which is the case as soon as a taxon is added to the base scope.
73
74
  scope = scope.preload(master: :currently_valid_prices)
74
- scope = scope.preload(master: :images) if include_images
75
+ scope = scope.preload(master: :images) if @properties[:include_images]
75
76
  scope
76
77
  end
77
78
 
78
79
  def add_search_scopes(base_scope)
79
- search.each do |name, scope_attribute|
80
- scope_name = name.to_sym
81
- if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym)
82
- base_scope = base_scope.send(scope_name, *scope_attribute)
83
- else
84
- base_scope = base_scope.merge(Spree::Product.ransack({ scope_name => scope_attribute }).result)
80
+ if @properties[:search]
81
+ @properties[:search].each do |name, scope_attribute|
82
+ scope_name = name.to_sym
83
+ if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym)
84
+ base_scope = base_scope.send(scope_name, *scope_attribute)
85
+ else
86
+ base_scope = base_scope.merge(Spree::Product.ransack({ scope_name => scope_attribute }).result)
87
+ end
85
88
  end
86
- end if search
89
+ end
87
90
  base_scope
88
91
  end
89
92
 
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  def self.solidus_version
3
- "2.4.2"
3
+ "2.5.0.beta1"
4
4
  end
5
5
 
6
6
  def self.solidus_gem_version
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module ParanoiaDeprecations
3
+ def paranoia_destroy
4
+ Spree::Deprecation.warn <<-WARN.strip_heredoc, caller
5
+ Calling #destroy (or #paranoia_destroy) on a #{self.class} currently performs a soft-destroy using the paranoia gem.
6
+ In Solidus 3.0, paranoia will be removed, and this will perform a HARD destroy instead. To continue soft-deleting, use #discard instead.
7
+ WARN
8
+ super
9
+ end
10
+
11
+ def paranoia_delete
12
+ Spree::Deprecation.warn <<-WARN.strip_heredoc, caller
13
+ Calling #delete (or #paranoia_delete) on a #{self.class} currently performs a soft-destroy using the paranoia gem.
14
+ In Solidus 3.0, paranoia will be removed, and this will perform a HARD destroy instead. To continue soft-deleting, use #discard instead.
15
+ WARN
16
+ super
17
+ end
18
+ end
19
+ end
@@ -12,12 +12,8 @@ require 'spree/permission_sets/promotion_management'
12
12
  require 'spree/permission_sets/report_display'
13
13
  require 'spree/permission_sets/restricted_stock_display'
14
14
  require 'spree/permission_sets/restricted_stock_management'
15
- require 'spree/permission_sets/restricted_stock_transfer_display'
16
- require 'spree/permission_sets/restricted_stock_transfer_management'
17
15
  require 'spree/permission_sets/stock_display'
18
16
  require 'spree/permission_sets/stock_management'
19
- require 'spree/permission_sets/stock_transfer_display'
20
- require 'spree/permission_sets/stock_transfer_management'
21
17
  require 'spree/permission_sets/super_user'
22
18
  require 'spree/permission_sets/user_display'
23
19
  require 'spree/permission_sets/user_management'
@@ -27,7 +27,6 @@ module Spree
27
27
  :store_attributes,
28
28
  :taxon_attributes,
29
29
  :taxonomy_attributes,
30
- :transfer_item_attributes,
31
30
  :user_attributes,
32
31
  :variant_attributes
33
32
  ]
@@ -116,8 +115,6 @@ module Spree
116
115
  :meta_description, :meta_keywords, :meta_title, :child_index
117
116
  ]
118
117
 
119
- @@transfer_item_attributes = [:variant_id, :expected_quantity, :received_quantity]
120
-
121
118
  # intentionally leaving off email here to prevent privilege escalation
122
119
  # by changing a user with higher priveleges' email to one a lower-priveleged
123
120
  # admin owns. creating a user with an email is handled separate at the
@@ -1,43 +1,55 @@
1
- # Preferable allows defining preference accessor methods.
2
- #
3
- # A class including Preferable must implement #preferences which should return
4
- # an object responding to .fetch(key), []=(key, val), and .delete(key).
5
- #
6
- # The generated writer method performs typecasting before assignment into the
7
- # preferences object.
8
- #
9
- # Examples:
10
- #
11
- # # Spree::Base includes Preferable and defines preferences as a serialized
12
- # # column.
13
- # class Settings < Spree::Base
14
- # preference :color, :string, default: 'red'
15
- # preference :temperature, :integer, default: 21
16
- # end
17
- #
18
- # s = Settings.new
19
- # s.preferred_color # => 'red'
20
- # s.preferred_temperature # => 21
21
- #
22
- # s.preferred_color = 'blue'
23
- # s.preferred_color # => 'blue'
24
- #
25
- # # Typecasting is performed on assignment
26
- # s.preferred_temperature = '24'
27
- # s.preferred_color # => 24
28
- #
29
- # # Modifications have been made to the .preferences hash
30
- # s.preferences #=> {color: 'blue', temperature: 24}
31
- #
32
- # # Save the changes. All handled by activerecord
33
- # s.save!
34
-
35
1
  require 'spree/preferences/preferable_class_methods'
36
2
  require 'active_support/concern'
37
3
  require 'active_support/core_ext/hash/keys'
38
4
 
39
5
  module Spree
40
6
  module Preferences
7
+ # Preferable allows defining preference accessor methods.
8
+ #
9
+ # A class including Preferable must implement #preferences which should return
10
+ # an object responding to .fetch(key), []=(key, val), and .delete(key).
11
+ #
12
+ # The generated writer method performs typecasting before assignment into the
13
+ # preferences object.
14
+ #
15
+ # Examples:
16
+ #
17
+ # # Spree::Base includes Preferable and defines preferences as a serialized
18
+ # # column.
19
+ # class Settings < Spree::Base
20
+ # preference :color, :string, default: 'red'
21
+ # preference :temperature, :integer, default: 21
22
+ # end
23
+ #
24
+ # s = Settings.new
25
+ # s.preferred_color # => 'red'
26
+ # s.preferred_temperature # => 21
27
+ #
28
+ # s.preferred_color = 'blue'
29
+ # s.preferred_color # => 'blue'
30
+ #
31
+ # # Typecasting is performed on assignment
32
+ # s.preferred_temperature = '24'
33
+ # s.preferred_color # => 24
34
+ #
35
+ # # Modifications have been made to the .preferences hash
36
+ # s.preferences #=> {color: 'blue', temperature: 24}
37
+ #
38
+ # # Save the changes. All handled by activerecord
39
+ # s.save!
40
+ #
41
+ # Each preference gets rendered as a form field in Solidus backend.
42
+ #
43
+ # As not all supported preference types are representable as a form field, only
44
+ # some of them get rendered per default. Arrays and Hashes for instance are
45
+ # supported preference field types, but do not represent well as a form field.
46
+ #
47
+ # Overwrite +allowed_admin_form_preference_types+ in your class if you want to
48
+ # provide more fields. If you do so, you also need to provide a preference field
49
+ # partial that lives in:
50
+ #
51
+ # +app/views/spree/admin/shared/preference_fields/+
52
+ #
41
53
  module Preferable
42
54
  extend ActiveSupport::Concern
43
55
 
@@ -101,6 +113,30 @@ module Spree
101
113
  ]
102
114
  end
103
115
 
116
+ # Preference names representable as form fields in Solidus backend
117
+ #
118
+ # Not all preferences are representable as a form field.
119
+ #
120
+ # Arrays and Hashes for instance are supported preference field types,
121
+ # but do not represent well as a form field.
122
+ #
123
+ # As these kind of preferences are mostly developer facing
124
+ # and not admin facing we should not render them.
125
+ #
126
+ # Overwrite +allowed_admin_form_preference_types+ in your class that
127
+ # includes +Spree::Preferable+ if you want to provide more fields.
128
+ # If you do so, you also need to provide a preference field partial
129
+ # that lives in:
130
+ #
131
+ # +app/views/spree/admin/shared/preference_fields/+
132
+ #
133
+ # @return [Array]
134
+ def admin_form_preference_names
135
+ defined_preferences.keep_if do |type|
136
+ preference_type(type).in? self.class.allowed_admin_form_preference_types
137
+ end
138
+ end
139
+
104
140
  private
105
141
 
106
142
  def convert_preference_value(value, type)
@@ -1,5 +1,14 @@
1
1
  module Spree::Preferences
2
2
  module PreferableClassMethods
3
+ DEFAULT_ADMIN_FORM_PREFERENCE_TYPES = %i(
4
+ boolean
5
+ decimal
6
+ integer
7
+ password
8
+ string
9
+ text
10
+ )
11
+
3
12
  def defined_preferences
4
13
  []
5
14
  end
@@ -60,5 +69,18 @@ module Spree::Preferences
60
69
  def preference_type_getter_method(name)
61
70
  "preferred_#{name}_type".to_sym
62
71
  end
72
+
73
+ # List of preference types allowed as form fields in the Solidus admin
74
+ #
75
+ # Overwrite this method in your class that includes +Spree::Preferable+
76
+ # if you want to provide more fields. If you do so, you also need to provide
77
+ # a preference field partial that lives in:
78
+ #
79
+ # +app/views/spree/admin/shared/preference_fields/+
80
+ #
81
+ # @return [Array]
82
+ def allowed_admin_form_preference_types
83
+ DEFAULT_ADMIN_FORM_PREFERENCE_TYPES
84
+ end
63
85
  end
64
86
  end
@@ -1,3 +1,5 @@
1
+ require 'cancan'
2
+
1
3
  module Spree
2
4
  module TestingSupport
3
5
  module AuthorizationHelpers
@@ -4,7 +4,6 @@ end
4
4
 
5
5
  require 'generators/spree/dummy/dummy_generator'
6
6
 
7
- desc "Generates a dummy app for testing"
8
7
  namespace :common do
9
8
  task :test_app, :user_class do |_t, args|
10
9
  args.with_defaults(user_class: "Spree::LegacyUser")