solidus_core 1.0.7 → 1.1.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 (349) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/spree/base_controller.rb +1 -2
  3. data/app/helpers/spree/base_helper.rb +4 -5
  4. data/app/helpers/spree/products_helper.rb +0 -8
  5. data/app/mailers/spree/carton_mailer.rb +17 -5
  6. data/app/mailers/spree/order_mailer.rb +12 -4
  7. data/app/models/concerns/spree/adjustment_source.rb +7 -8
  8. data/app/models/concerns/spree/default_price.rb +8 -2
  9. data/app/models/concerns/spree/named_type.rb +1 -1
  10. data/app/models/concerns/spree/ordered_property_value_list.rb +28 -0
  11. data/app/models/concerns/spree/user_address_book.rb +125 -0
  12. data/app/models/concerns/spree/user_api_authentication.rb +6 -2
  13. data/app/models/concerns/spree/user_methods.rb +5 -6
  14. data/app/models/spree/ability.rb +1 -38
  15. data/app/models/spree/address.rb +79 -36
  16. data/app/models/spree/adjustment.rb +74 -25
  17. data/app/models/spree/adjustment_reason.rb +1 -1
  18. data/app/models/spree/app_configuration.rb +35 -0
  19. data/app/models/spree/carton.rb +3 -3
  20. data/app/models/spree/country.rb +7 -1
  21. data/app/models/spree/credit_card.rb +5 -1
  22. data/app/models/spree/gateway.rb +0 -8
  23. data/app/models/spree/inventory_unit.rb +1 -1
  24. data/app/models/spree/item_adjustments.rb +1 -1
  25. data/app/models/spree/line_item_action.rb +1 -1
  26. data/app/models/spree/option_type.rb +3 -2
  27. data/app/models/spree/option_value.rb +1 -1
  28. data/app/models/spree/option_values_variant.rb +1 -1
  29. data/app/models/spree/order.rb +28 -56
  30. data/app/models/spree/order/checkout.rb +18 -20
  31. data/app/models/spree/order_mutex.rb +1 -1
  32. data/app/models/spree/order_promotion.rb +1 -1
  33. data/app/models/spree/order_shipping.rb +6 -12
  34. data/app/models/spree/order_stock_location.rb +1 -1
  35. data/app/models/spree/payment.rb +3 -14
  36. data/app/models/spree/payment/processing.rb +7 -14
  37. data/app/models/spree/payment_method.rb +5 -5
  38. data/app/models/spree/permission_sets/default_customer.rb +31 -0
  39. data/app/models/spree/permission_sets/order_display.rb +4 -0
  40. data/app/models/spree/permission_sets/order_management.rb +3 -0
  41. data/app/models/spree/permission_sets/promotion_display.rb +2 -1
  42. data/app/models/spree/permission_sets/restricted_stock_display.rb +16 -0
  43. data/app/models/spree/permission_sets/restricted_stock_management.rb +16 -0
  44. data/app/models/spree/permission_sets/restricted_stock_transfer_display.rb +17 -0
  45. data/app/models/spree/permission_sets/restricted_stock_transfer_management.rb +51 -0
  46. data/app/models/spree/permission_sets/stock_display.rb +1 -1
  47. data/app/models/spree/permission_sets/stock_management.rb +1 -2
  48. data/app/models/spree/permission_sets/stock_transfer_display.rb +10 -0
  49. data/app/models/spree/permission_sets/stock_transfer_management.rb +11 -0
  50. data/app/models/spree/permission_sets/super_user.rb +9 -0
  51. data/app/models/spree/product.rb +66 -28
  52. data/app/models/spree/product/scopes.rb +7 -22
  53. data/app/models/spree/product_option_type.rb +1 -1
  54. data/app/models/spree/product_promotion_rule.rb +6 -0
  55. data/app/models/spree/product_property.rb +2 -20
  56. data/app/models/spree/promotion/rules/product.rb +2 -1
  57. data/app/models/spree/refund.rb +0 -10
  58. data/app/models/spree/reimbursement.rb +1 -1
  59. data/app/models/spree/return_item.rb +5 -3
  60. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +13 -4
  61. data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +2 -2
  62. data/app/models/spree/return_reason.rb +1 -1
  63. data/app/models/spree/role.rb +1 -1
  64. data/app/models/spree/role_user.rb +1 -1
  65. data/app/models/spree/shipment.rb +13 -4
  66. data/app/models/spree/shipping_manifest.rb +9 -3
  67. data/app/models/spree/shipping_method.rb +2 -3
  68. data/app/models/spree/shipping_method_zone.rb +6 -0
  69. data/app/models/spree/state.rb +1 -1
  70. data/app/models/spree/stock_item.rb +15 -3
  71. data/app/models/spree/stock_movement.rb +1 -1
  72. data/app/models/spree/store.rb +3 -0
  73. data/app/models/spree/store_credit.rb +1 -1
  74. data/app/models/spree/store_credit_category.rb +1 -1
  75. data/app/models/spree/store_credit_event.rb +1 -1
  76. data/app/models/spree/store_credit_type.rb +1 -1
  77. data/app/models/spree/store_credit_update_reason.rb +1 -1
  78. data/app/models/spree/store_payment_method.rb +6 -0
  79. data/app/models/spree/tax_rate.rb +3 -10
  80. data/app/models/spree/taxonomy.rb +1 -1
  81. data/app/models/spree/transfer_item.rb +1 -1
  82. data/app/models/spree/unit_cancel.rb +2 -2
  83. data/app/models/spree/user_address.rb +21 -0
  84. data/app/models/spree/user_stock_location.rb +1 -1
  85. data/app/models/spree/variant.rb +28 -13
  86. data/app/models/spree/variant_property_rule.rb +42 -0
  87. data/app/models/spree/variant_property_rule_condition.rb +8 -0
  88. data/app/models/spree/variant_property_rule_value.rb +8 -0
  89. data/app/models/spree/zone.rb +4 -2
  90. data/app/views/spree/carton_mailer/shipped_email.text.erb +1 -1
  91. data/config/locales/en.yml +13 -0
  92. data/db/default/spree/store_credit.rb +0 -1
  93. data/db/default/spree/zones.rb +1 -1
  94. data/db/migrate/20130228210442_create_shipping_method_zone.rb +1 -1
  95. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +6 -0
  96. data/db/migrate/20150506181611_create_spree_store_credit_payment_method.rb +9 -5
  97. data/db/migrate/20150731201146_add_spree_user_addresses.rb +16 -0
  98. data/db/migrate/20150811210350_remove_mandatory_from_adjustments.rb +5 -0
  99. data/db/migrate/20150811211025_add_finalized_to_spree_adjustments.rb +11 -0
  100. data/db/migrate/20150820160821_add_store_payment_methods.rb +10 -0
  101. data/db/migrate/20150824213633_convert_habtm_to_hmt_for_shipping_methods_zones.rb +17 -0
  102. data/db/migrate/20150824214129_convert_habtm_to_hmt_for_products_promotion_rules.rb +17 -0
  103. data/db/migrate/20150825204216_drop_spree_gateways.rb +20 -0
  104. data/db/migrate/20150909123605_create_variant_properties_and_rules.rb +28 -0
  105. data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
  106. data/lib/generators/spree/install/templates/config/initializers/spree.rb +4 -3
  107. data/lib/spree/core.rb +4 -0
  108. data/lib/spree/core/controller_helpers/payment_parameters.rb +67 -0
  109. data/lib/spree/core/delegate_belongs_to.rb +1 -0
  110. data/lib/spree/core/engine.rb +9 -1
  111. data/lib/spree/core/importer/order.rb +1 -1
  112. data/lib/spree/core/role_configuration.rb +1 -1
  113. data/lib/spree/core/search/variant.rb +20 -2
  114. data/lib/spree/core/unreturned_item_charger.rb +21 -16
  115. data/lib/spree/i18n.rb +6 -24
  116. data/lib/spree/mailer_previews/carton_preview.rb +10 -0
  117. data/lib/spree/mailer_previews/order_preview.rb +18 -0
  118. data/lib/spree/permitted_attributes.rb +4 -1
  119. data/lib/spree/testing_support/capybara_ext.rb +2 -1
  120. data/lib/spree/testing_support/factories/address_factory.rb +9 -1
  121. data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -0
  122. data/lib/spree/testing_support/factories/image_factory.rb +5 -0
  123. data/lib/spree/testing_support/factories/payment_method_factory.rb +4 -8
  124. data/lib/spree/testing_support/factories/user_factory.rb +8 -2
  125. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +6 -0
  126. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +16 -0
  127. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +6 -0
  128. data/lib/tasks/migrations/migrate_user_addresses.rake +29 -0
  129. data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
  130. metadata +40 -238
  131. data/CHANGELOG.md +0 -1
  132. data/Gemfile +0 -3
  133. data/Rakefile +0 -16
  134. data/app/models/concerns/spree/user_address.rb +0 -30
  135. data/app/models/spree/permission_sets/restricted_transfer_management.rb +0 -35
  136. data/app/views/spree/admin/orders/customer_details/_autocomplete.js.erb +0 -19
  137. data/lib/spree/i18n/base.rb +0 -17
  138. data/lib/spree/i18n/initializer.rb +0 -1
  139. data/lib/spree/testing_support/mail.rb +0 -20
  140. data/script/rails +0 -9
  141. data/solidus_core.gemspec +0 -48
  142. data/spec/fixtures/thinking-cat.jpg +0 -0
  143. data/spec/helpers/base_helper_spec.rb +0 -173
  144. data/spec/helpers/order_helper_spec.rb +0 -12
  145. data/spec/helpers/products_helper_spec.rb +0 -220
  146. data/spec/helpers/taxons_helper_spec.rb +0 -17
  147. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  148. data/spec/lib/i18n_spec.rb +0 -123
  149. data/spec/lib/search/base_spec.rb +0 -86
  150. data/spec/lib/search/variant_spec.rb +0 -92
  151. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -66
  152. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -92
  153. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  154. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -16
  155. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  156. data/spec/lib/spree/core/current_store_spec.rb +0 -36
  157. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  158. data/spec/lib/spree/core/importer/order_spec.rb +0 -431
  159. data/spec/lib/spree/core/role_configuration_spec.rb +0 -138
  160. data/spec/lib/spree/core/validators/email_spec.rb +0 -48
  161. data/spec/lib/spree/localized_number_spec.rb +0 -38
  162. data/spec/lib/spree/migrations_spec.rb +0 -36
  163. data/spec/lib/spree/money_spec.rb +0 -127
  164. data/spec/lib/tasks/exchanges_spec.rb +0 -231
  165. data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +0 -115
  166. data/spec/lib/tasks/order_capturing_spec.rb +0 -56
  167. data/spec/mailers/carton_mailer_spec.rb +0 -43
  168. data/spec/mailers/order_mailer_spec.rb +0 -122
  169. data/spec/mailers/reimbursement_mailer_spec.rb +0 -40
  170. data/spec/mailers/test_mailer_spec.rb +0 -15
  171. data/spec/models/spree/ability_spec.rb +0 -276
  172. data/spec/models/spree/address_spec.rb +0 -250
  173. data/spec/models/spree/adjustment_reason_spec.rb +0 -13
  174. data/spec/models/spree/adjustment_spec.rb +0 -177
  175. data/spec/models/spree/app_configuration_spec.rb +0 -20
  176. data/spec/models/spree/asset_spec.rb +0 -24
  177. data/spec/models/spree/calculator/default_tax_spec.rb +0 -127
  178. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  179. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  180. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  181. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  182. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  183. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -51
  184. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  185. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  186. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  187. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  188. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -30
  189. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -36
  190. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -47
  191. data/spec/models/spree/calculator_spec.rb +0 -36
  192. data/spec/models/spree/carton_spec.rb +0 -133
  193. data/spec/models/spree/classification_spec.rb +0 -15
  194. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  195. data/spec/models/spree/concerns/user_methods_spec.rb +0 -41
  196. data/spec/models/spree/credit_card_spec.rb +0 -334
  197. data/spec/models/spree/customer_return_spec.rb +0 -276
  198. data/spec/models/spree/exchange_spec.rb +0 -79
  199. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  200. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  201. data/spec/models/spree/gateway_spec.rb +0 -82
  202. data/spec/models/spree/inventory_unit_spec.rb +0 -307
  203. data/spec/models/spree/item_adjustments_spec.rb +0 -256
  204. data/spec/models/spree/line_item_spec.rb +0 -191
  205. data/spec/models/spree/option_type_spec.rb +0 -14
  206. data/spec/models/spree/option_value_spec.rb +0 -22
  207. data/spec/models/spree/order/address_spec.rb +0 -50
  208. data/spec/models/spree/order/adjustments_spec.rb +0 -39
  209. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  210. data/spec/models/spree/order/checkout_spec.rb +0 -902
  211. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  212. data/spec/models/spree/order/finalizing_spec.rb +0 -111
  213. data/spec/models/spree/order/payment_spec.rb +0 -210
  214. data/spec/models/spree/order/risk_assessment_spec.rb +0 -68
  215. data/spec/models/spree/order/state_machine_spec.rb +0 -221
  216. data/spec/models/spree/order/tax_spec.rb +0 -84
  217. data/spec/models/spree/order/totals_spec.rb +0 -24
  218. data/spec/models/spree/order/updating_spec.rb +0 -18
  219. data/spec/models/spree/order/validations_spec.rb +0 -15
  220. data/spec/models/spree/order_cancellations_spec.rb +0 -120
  221. data/spec/models/spree/order_capturing_spec.rb +0 -116
  222. data/spec/models/spree/order_contents_spec.rb +0 -265
  223. data/spec/models/spree/order_inventory_spec.rb +0 -228
  224. data/spec/models/spree/order_mutex_spec.rb +0 -85
  225. data/spec/models/spree/order_promotion_spec.rb +0 -31
  226. data/spec/models/spree/order_shipping_spec.rb +0 -247
  227. data/spec/models/spree/order_spec.rb +0 -1464
  228. data/spec/models/spree/order_stock_location_spec.rb +0 -18
  229. data/spec/models/spree/order_updater_spec.rb +0 -299
  230. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -294
  231. data/spec/models/spree/payment_method_spec.rb +0 -96
  232. data/spec/models/spree/payment_spec.rb +0 -1045
  233. data/spec/models/spree/permission_sets/base_spec.rb +0 -12
  234. data/spec/models/spree/permission_sets/configuration_display.rb +0 -82
  235. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -50
  236. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -22
  237. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -49
  238. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -36
  239. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -60
  240. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -40
  241. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -34
  242. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -26
  243. data/spec/models/spree/permission_sets/report_display_spec.rb +0 -24
  244. data/spec/models/spree/permission_sets/restricted_transfer_management_spec.rb +0 -132
  245. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -26
  246. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -24
  247. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -36
  248. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -28
  249. data/spec/models/spree/preference_spec.rb +0 -80
  250. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  251. data/spec/models/spree/preferences/preferable_spec.rb +0 -294
  252. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  253. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -78
  254. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -60
  255. data/spec/models/spree/preferences/store_spec.rb +0 -39
  256. data/spec/models/spree/price_spec.rb +0 -42
  257. data/spec/models/spree/product/scopes_spec.rb +0 -148
  258. data/spec/models/spree/product_duplicator_spec.rb +0 -103
  259. data/spec/models/spree/product_filter_spec.rb +0 -26
  260. data/spec/models/spree/product_property_spec.rb +0 -20
  261. data/spec/models/spree/product_spec.rb +0 -437
  262. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -96
  263. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -165
  264. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -115
  265. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -40
  266. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  267. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -67
  268. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -70
  269. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  270. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -94
  271. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  272. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  273. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  274. data/spec/models/spree/promotion/rules/user_spec.rb +0 -37
  275. data/spec/models/spree/promotion_builder_spec.rb +0 -118
  276. data/spec/models/spree/promotion_category_spec.rb +0 -17
  277. data/spec/models/spree/promotion_code/code_builder_spec.rb +0 -79
  278. data/spec/models/spree/promotion_code_spec.rb +0 -187
  279. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -114
  280. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -335
  281. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -47
  282. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  283. data/spec/models/spree/promotion_rule_spec.rb +0 -28
  284. data/spec/models/spree/promotion_spec.rb +0 -767
  285. data/spec/models/spree/refund_spec.rb +0 -204
  286. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  287. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  288. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  289. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  290. data/spec/models/spree/reimbursement_spec.rb +0 -231
  291. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -51
  292. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  293. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  294. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -107
  295. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -97
  296. data/spec/models/spree/return_authorization_spec.rb +0 -290
  297. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  298. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  299. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -85
  300. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  301. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  302. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  303. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  304. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  305. data/spec/models/spree/return_item_spec.rb +0 -775
  306. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  307. data/spec/models/spree/shipment_spec.rb +0 -709
  308. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  309. data/spec/models/spree/shipping_method_spec.rb +0 -88
  310. data/spec/models/spree/shipping_rate_spec.rb +0 -142
  311. data/spec/models/spree/state_spec.rb +0 -14
  312. data/spec/models/spree/stock/availability_validator_spec.rb +0 -83
  313. data/spec/models/spree/stock/coordinator_spec.rb +0 -116
  314. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  315. data/spec/models/spree/stock/estimator_spec.rb +0 -146
  316. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -38
  317. data/spec/models/spree/stock/package_spec.rb +0 -163
  318. data/spec/models/spree/stock/packer_spec.rb +0 -91
  319. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  320. data/spec/models/spree/stock/quantifier_spec.rb +0 -115
  321. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  322. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  323. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -50
  324. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -29
  325. data/spec/models/spree/stock_item_spec.rb +0 -426
  326. data/spec/models/spree/stock_location_spec.rb +0 -279
  327. data/spec/models/spree/stock_movement_spec.rb +0 -56
  328. data/spec/models/spree/stock_transfer_spec.rb +0 -290
  329. data/spec/models/spree/store_credit_category_spec.rb +0 -17
  330. data/spec/models/spree/store_credit_event_spec.rb +0 -314
  331. data/spec/models/spree/store_credit_spec.rb +0 -876
  332. data/spec/models/spree/store_spec.rb +0 -55
  333. data/spec/models/spree/tax_category_spec.rb +0 -27
  334. data/spec/models/spree/tax_rate_spec.rb +0 -378
  335. data/spec/models/spree/taxon_spec.rb +0 -74
  336. data/spec/models/spree/taxonomy_spec.rb +0 -18
  337. data/spec/models/spree/tracker_spec.rb +0 -21
  338. data/spec/models/spree/transfer_item_spec.rb +0 -264
  339. data/spec/models/spree/unit_cancel_spec.rb +0 -148
  340. data/spec/models/spree/user_spec.rb +0 -223
  341. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -23
  342. data/spec/models/spree/variant/scopes_spec.rb +0 -55
  343. data/spec/models/spree/variant_spec.rb +0 -546
  344. data/spec/models/spree/zone_spec.rb +0 -305
  345. data/spec/spec_helper.rb +0 -78
  346. data/spec/support/big_decimal.rb +0 -5
  347. data/spec/support/concerns/default_price.rb +0 -34
  348. data/spec/support/dummy_ability.rb +0 -4
  349. data/spec/support/test_gateway.rb +0 -2
@@ -5,11 +5,7 @@ module Spree
5
5
  belongs_to :country, class_name: "Spree::Country"
6
6
  belongs_to :state, class_name: "Spree::State"
7
7
 
8
- has_many :shipments, inverse_of: :address
9
- has_many :cartons, inverse_of: :address
10
- has_many :credit_cards, inverse_of: :address
11
-
12
- validates :firstname, :lastname, :address1, :city, :country, presence: true
8
+ validates :firstname, :lastname, :address1, :city, :country_id, presence: true
13
9
  validates :zipcode, presence: true, if: :require_zipcode?
14
10
  validates :phone, presence: true, if: :require_phone?
15
11
 
@@ -18,22 +14,70 @@ module Spree
18
14
  alias_attribute :first_name, :firstname
19
15
  alias_attribute :last_name, :lastname
20
16
 
17
+ DB_ONLY_ATTRS = %w(id updated_at created_at)
21
18
 
22
19
  self.whitelisted_ransackable_attributes = %w[firstname lastname]
23
20
 
21
+ scope :with_values, ->(attributes) do
22
+ where(value_attributes(attributes))
23
+ end
24
+
24
25
  def self.build_default
25
- country = Spree::Country.find(Spree::Config[:default_country_id]) rescue Spree::Country.first
26
- new(country: country)
26
+ new(country: Spree::Country.default)
27
27
  end
28
28
 
29
29
  def self.default(user = nil, kind = "bill")
30
- if user && user_address = user.send(:"#{kind}_address")
31
- user_address.dup
30
+ ActiveSupport::Deprecation.warn("Address.default is deprecated. Use User.default_address or Address.build_default", caller)
31
+ if user
32
+ user.send(:"#{kind}_address") || build_default
32
33
  else
33
34
  build_default
34
35
  end
35
36
  end
36
37
 
38
+ # @return [Address] an equal address already in the database or a newly created one
39
+ def self.factory(attributes)
40
+ full_attributes = value_attributes(column_defaults, new(attributes).attributes)
41
+ find_or_initialize_by(full_attributes)
42
+ end
43
+
44
+ # @return [Address] address from existing address plus new_attributes as diff
45
+ # @note, this may return existing_address if there are no changes to value equality
46
+ def self.immutable_merge(existing_address, new_attributes)
47
+ return factory(new_attributes) if existing_address.nil?
48
+
49
+ merged_attributes = value_attributes(existing_address.attributes, new_attributes)
50
+ new_address = factory(merged_attributes)
51
+ if existing_address == new_address
52
+ existing_address
53
+ else
54
+ new_address
55
+ end
56
+ end
57
+
58
+ # @return [Hash] hash of attributes contributing to value equality with optional merge
59
+ def self.value_attributes(base_attributes, merge_attributes = nil)
60
+ # dup because we may modify firstname/lastname.
61
+ base = base_attributes.dup
62
+
63
+ base.stringify_keys!
64
+
65
+ if merge_attributes
66
+ base.merge!(merge_attributes.stringify_keys)
67
+ end
68
+
69
+ # TODO: Deprecate these aliased attributes
70
+ base['firstname'] = base.delete('first_name') if base.key?('first_name')
71
+ base['lastname'] = base.delete('last_name') if base.key?('last_name')
72
+
73
+ base.except!(*DB_ONLY_ATTRS)
74
+ end
75
+
76
+ # @return [Hash] hash of attributes contributing to value equality
77
+ def value_attributes
78
+ self.class.value_attributes(attributes)
79
+ end
80
+
37
81
  # @return [String] the full name on this address
38
82
  def full_name
39
83
  "#{firstname} #{lastname}".strip
@@ -44,45 +88,30 @@ module Spree
44
88
  state.try(:abbr) || state.try(:name) || state_name
45
89
  end
46
90
 
47
- # @param other [Spree::Address, nil] the address we are comparing with
48
- # @return [Boolean] true if this fields on this address match the fields on
49
- # the other address
50
- def same_as?(other)
51
- return false if other.nil?
52
- attributes.except('id', 'updated_at', 'created_at') == other.attributes.except('id', 'updated_at', 'created_at')
53
- end
54
-
55
- alias same_as same_as?
56
-
57
- # @return [String] the full name on the address followed by the first line
58
- # of the address
59
91
  def to_s
60
92
  "#{full_name}: #{address1}"
61
93
  end
62
94
 
63
- # @return [Spree::Address] a new address that is the same_as? this address
64
- def clone
65
- ActiveSupport::Deprecation.warn "Spree::Address.clone is deprecated and may be removed from future releases, Use Spree::Address.dup instead", caller
66
- self.dup
67
- end
68
-
69
95
  # @note This compares the addresses based on only the fields that make up
70
- # the logical "address" and excludes their order IDs. Use #same_as? to
71
- # include the order IDs in the comparison
96
+ # the logical "address" and excludes the database specific fields (id, created_at, updated_at).
72
97
  # @return [Boolean] true if the two addresses have the same address fields
73
98
  def ==(other_address)
74
- self_attrs = self.attributes
75
- other_attrs = other_address.respond_to?(:attributes) ? other_address.attributes : {}
99
+ return false unless other_address && other_address.respond_to?(:value_attributes)
100
+ self.value_attributes == other_address.value_attributes
101
+ end
76
102
 
77
- [self_attrs, other_attrs].each { |attrs| attrs.except!('id', 'created_at', 'updated_at', 'order_id') }
103
+ def same_as?(other_address)
104
+ ActiveSupport::Deprecation.warn("Address.same_as? is deprecated. It's equivalent to Address.==", caller)
105
+ self == other_address
106
+ end
78
107
 
79
- self_attrs == other_attrs
108
+ def same_as(other_address)
109
+ ActiveSupport::Deprecation.warn("Address.same_as is deprecated. It's equivalent to Address.==", caller)
110
+ self == other_address
80
111
  end
81
112
 
82
- # @return [Boolean] true if the order is missing all of the address fields
83
- # are nil
84
113
  def empty?
85
- attributes.except('id', 'created_at', 'updated_at', 'order_id', 'country_id').all? { |_, v| v.nil? }
114
+ attributes.except('id', 'created_at', 'updated_at', 'country_id').all? { |_, v| v.nil? }
86
115
  end
87
116
 
88
117
  # @return [Hash] an ActiveMerchant compatible address hash
@@ -112,6 +141,20 @@ module Spree
112
141
  true
113
142
  end
114
143
 
144
+ # This is set in order to preserve immutability of Addresses. Use #dup to create
145
+ # new records as required, but it probably won't be required as often as you think.
146
+ # Since addresses do not change, you won't accidentally alter historical data.
147
+ def readonly?
148
+ persisted?
149
+ end
150
+
151
+ # @param iso [String] 2 letter Country ISO
152
+ # @return [Country] setter that sets self.country to the Country with a matching 2 letter iso
153
+ # @raise [ActiveRecord::RecordNotFound] if country with the iso doesn't exist
154
+ def country_iso=(iso)
155
+ self.country = Country.find_by!(iso: iso)
156
+ end
157
+
115
158
  private
116
159
  def state_validate
117
160
  # Skip state validation without country (also required)
@@ -7,16 +7,7 @@ module Spree
7
7
  #
8
8
  # == Boolean attributes
9
9
  #
10
- # 1. *mandatory*
11
- #
12
- # If this flag is set to true then it means the the charge is required and
13
- # will not be removed from the order, even if the amount is zero. In other
14
- # words a record will be created even if the amount is zero. This is
15
- # useful for representing things such as shipping and tax charges where
16
- # you may want to make it explicitly clear that no charge was made for
17
- # such things.
18
- #
19
- # 2. *eligible?*
10
+ # 1. *eligible?*
20
11
  #
21
12
  # This boolean attributes stores whether this adjustment is currently
22
13
  # eligible for its order. Only eligible adjustments count towards the
@@ -35,21 +26,19 @@ module Spree
35
26
  validates :amount, numericality: true
36
27
  validates :promotion_code, presence: true, if: :require_promotion_code?
37
28
 
38
- state_machine :state, initial: :open do
39
- event :close do
40
- transition from: :open, to: :closed
41
- end
42
-
43
- event :open do
44
- transition from: :closed, to: :open
45
- end
46
- end
47
-
48
29
  after_create :update_adjustable_adjustment_total
49
30
  after_destroy :update_adjustable_adjustment_total
50
31
 
51
- scope :open, -> { where(state: 'open') }
52
- scope :closed, -> { where(state: 'closed') }
32
+ scope :not_finalized, -> { where(finalized: false) }
33
+ scope :open, -> do
34
+ ActiveSupport::Deprecation.warn "Adjustment.open is deprecated. Instead use Adjustment.not_finalized", caller
35
+ where(finalized: false)
36
+ end
37
+ scope :finalized, -> { where(finalized: true) }
38
+ scope :closed, -> do
39
+ ActiveSupport::Deprecation.warn "Adjustment.closed is deprecated. Instead use Adjustment.finalized", caller
40
+ where(finalized: true)
41
+ end
53
42
  scope :cancellation, -> { where(source_type: 'Spree::UnitCancel') }
54
43
  scope :tax, -> { where(source_type: 'Spree::TaxRate') }
55
44
  scope :non_tax, -> do
@@ -58,7 +47,6 @@ module Spree
58
47
  end
59
48
  scope :price, -> { where(adjustable_type: 'Spree::LineItem') }
60
49
  scope :shipping, -> { where(adjustable_type: 'Spree::Shipment') }
61
- scope :optional, -> { where(mandatory: false) }
62
50
  scope :eligible, -> { where(eligible: true) }
63
51
  scope :charge, -> { where("#{quoted_table_name}.amount >= 0") }
64
52
  scope :credit, -> { where("#{quoted_table_name}.amount < 0") }
@@ -72,9 +60,70 @@ module Spree
72
60
  extend DisplayMoney
73
61
  money_methods :amount
74
62
 
63
+ def finalize!
64
+ update_attributes!(finalized: true)
65
+ end
66
+
67
+ def unfinalize!
68
+ update_attributes!(finalized: false)
69
+ end
70
+
71
+ def finalize
72
+ update_attributes(finalized: true)
73
+ end
74
+
75
+ def unfinalize
76
+ update_attributes(finalized: false)
77
+ end
78
+
79
+ # Deprecated methods
80
+ def state
81
+ ActiveSupport::Deprecation.warn "Adjustment#state is deprecated. Instead use Adjustment#finalized?", caller
82
+ finalized? ? "closed" : "open"
83
+ end
84
+
85
+ def state=(new_state)
86
+ ActiveSupport::Deprecation.warn "Adjustment#state= is deprecated. Instead use Adjustment#finalized=", caller
87
+ case new_state
88
+ when "open"
89
+ self.finalized = false
90
+ when "closed"
91
+ self.finalized = true
92
+ else
93
+ raise "invaliid adjustment state #{new_state}"
94
+ end
95
+ end
96
+
97
+ def open?
98
+ ActiveSupport::Deprecation.warn "Adjustment#open? is deprecated. Instead use Adjustment#finalized?", caller
99
+ !closed?
100
+ end
101
+
75
102
  def closed?
76
- state == "closed"
103
+ ActiveSupport::Deprecation.warn "Adjustment#closed? is deprecated. Instead use Adjustment#finalized?", caller
104
+ finalized?
105
+ end
106
+
107
+ def open
108
+ ActiveSupport::Deprecation.warn "Adjustment#open is deprecated. Instead use Adjustment#unfinalize", caller
109
+ unfinalize
110
+ end
111
+
112
+ def open!
113
+ ActiveSupport::Deprecation.warn "Adjustment#open! is deprecated. Instead use Adjustment#unfinalize!", caller
114
+ unfinalize!
115
+ end
116
+
117
+ def close
118
+ ActiveSupport::Deprecation.warn "Adjustment#close is deprecated. Instead use Adjustment#finalize", caller
119
+ finalize
120
+ end
121
+
122
+ def close!
123
+ ActiveSupport::Deprecation.warn "Adjustment#close! is deprecated. Instead use Adjustment#finalize!", caller
124
+ finalize!
77
125
  end
126
+ # End deprecated methods
78
127
 
79
128
  def currency
80
129
  adjustable ? adjustable.currency : Spree::Config[:currency]
@@ -107,7 +156,7 @@ module Spree
107
156
  if target
108
157
  ActiveSupport::Deprecation.warn("Passing a target to Adjustment#update! is deprecated. The adjustment will use the correct target from it's adjustable association.", caller)
109
158
  end
110
- return amount if closed?
159
+ return amount if finalized?
111
160
 
112
161
  # If the adjustment has no source, do not attempt to re-calculate the amount.
113
162
  # Chances are likely that this was a manually created adjustment in the admin backend.
@@ -1,5 +1,5 @@
1
1
  module Spree
2
- class AdjustmentReason < ActiveRecord::Base
2
+ class AdjustmentReason < Spree::Base
3
3
  has_many :adjustments, inverse_of: :adjustment_reason
4
4
 
5
5
  validates :name, presence: true
@@ -80,9 +80,25 @@ module Spree
80
80
  # quantity. Setting this to true should make operations on inventory
81
81
  # faster.
82
82
  # (default: +false+)
83
+ # @deprecated - use inventory_cache_threshold instead
83
84
  # @return [Boolean]
84
85
  preference :binary_inventory_cache, :boolean, default: false
85
86
 
87
+ # @!attribute [rw] completable_order_created_cutoff
88
+ # @return [Integer] the number of days to look back for created orders which get returned to the user as last completed
89
+ preference :completable_order_created_cutoff_days, :integer, default: nil
90
+
91
+ # @!attribute [rw] completable_order_created_cutoff
92
+ # @return [Integer] the number of days to look back for updated orders which get returned to the user as last completed
93
+ preference :completable_order_updated_cutoff_days, :integer, default: nil
94
+
95
+ # @!attribute [rw] inventory_cache_threshold
96
+ # Only invalidate product caches when the count on hand for a stock item
97
+ # falls below or rises about the inventory_cache_threshold. When undefined, the
98
+ # product caches will be invalidated anytime the count on hand is changed.
99
+ # @return [Integer]
100
+ preference :inventory_cache_threshold, :integer
101
+
86
102
  # @!attribute [rw] checkout_zone
87
103
  # @return [String] Name of a {Zone}, which limits available countries to those included in that zone. (default: +nil+)
88
104
  preference :checkout_zone, :string, default: nil
@@ -224,12 +240,31 @@ module Spree
224
240
  # @return [Boolean] Creates a new allocation anytime {StoreCredit#credit} is called
225
241
  preference :credit_to_new_allocation, :boolean, default: false
226
242
 
243
+ # @!attribute [rw] automatic_default_address
244
+ # The default value of true preserves existing backwards compatible feature of
245
+ # treating the most recently used address in checkout as the user's default address.
246
+ # Setting to false means that the user should manage their own default via some
247
+ # custom UI that uses AddressBookController.
248
+ # @return [Boolean] Whether use of an address in checkout marks it as user's default
249
+ preference :automatic_default_address, :boolean, default: true
250
+
227
251
  # searcher_class allows spree extension writers to provide their own Search class
228
252
  attr_writer :searcher_class
229
253
  def searcher_class
230
254
  @searcher_class ||= Spree::Core::Search::Base
231
255
  end
232
256
 
257
+ attr_writer :variant_search_class
258
+ def variant_search_class
259
+ @variant_search_class ||= Spree::Core::Search::Variant
260
+ end
261
+
262
+ # promotion_chooser_class allows extensions to provide their own PromotionChooser
263
+ attr_writer :promotion_chooser_class
264
+ def promotion_chooser_class
265
+ @promotion_chooser_class ||= Spree::PromotionChooser
266
+ end
267
+
233
268
  def static_model_preferences
234
269
  @static_model_preferences ||= Spree::Preferences::StaticModelPreferences.new
235
270
  end
@@ -1,5 +1,5 @@
1
- class Spree::Carton < ActiveRecord::Base
2
- belongs_to :address, class_name: 'Spree::Address', inverse_of: :cartons
1
+ class Spree::Carton < Spree::Base
2
+ belongs_to :address, class_name: 'Spree::Address'
3
3
  belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :cartons
4
4
  belongs_to :shipping_method, class_name: 'Spree::ShippingMethod', inverse_of: :cartons
5
5
 
@@ -48,7 +48,7 @@ class Spree::Carton < ActiveRecord::Base
48
48
  end
49
49
 
50
50
  def manifest_for_order(order)
51
- Spree::ShippingManifest.new(inventory_units: (inventory_units & order.inventory_units)).items
51
+ Spree::ShippingManifest.new(inventory_units: inventory_units).for_order(order).items
52
52
  end
53
53
 
54
54
  def any_exchanges?
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class Country < Spree::Base
3
- has_many :states, -> { order('name ASC') }, dependent: :destroy
3
+ has_many :states, -> { order(:name) }, dependent: :destroy
4
4
  has_many :addresses, dependent: :nullify
5
5
 
6
6
  validates :name, :iso_name, presence: true
@@ -12,6 +12,12 @@ module Spree
12
12
  states_required
13
13
  end
14
14
 
15
+ def self.default
16
+ find(Spree::Config[:default_country_id])
17
+ rescue ActiveRecord::RecordNotFound
18
+ first
19
+ end
20
+
15
21
  def <=>(other)
16
22
  name <=> other.name
17
23
  end
@@ -2,7 +2,7 @@ module Spree
2
2
  class CreditCard < Spree::Base
3
3
  belongs_to :payment_method
4
4
  belongs_to :user, class_name: Spree.user_class, foreign_key: 'user_id'
5
- belongs_to :address, inverse_of: :credit_cards
5
+ belongs_to :address
6
6
  has_many :payments, as: :source
7
7
 
8
8
  before_save :set_last_digits
@@ -36,6 +36,10 @@ module Spree
36
36
  jcb: /^(?:2131|1800|35\d{3})\d{11}$/
37
37
  }
38
38
 
39
+ def address_attributes=(attributes)
40
+ self.address = Address.immutable_merge(address, attributes)
41
+ end
42
+
39
43
  # Sets the expiry date on this credit card.
40
44
  #
41
45
  # @param expiry [String] the desired new expiry date in one of the
@@ -29,14 +29,6 @@ module Spree
29
29
  preferences.to_hash
30
30
  end
31
31
 
32
- def method_missing(method, *args)
33
- if provider.nil? || !provider.respond_to?(method)
34
- super
35
- else
36
- provider.send(method, *args)
37
- end
38
- end
39
-
40
32
  def payment_profiles_supported?
41
33
  false
42
34
  end
@@ -33,7 +33,7 @@ module Spree
33
33
  .where("spree_shipments.state != 'canceled'").references(:shipment)
34
34
  .where(variant_id: stock_item.variant_id)
35
35
  .where('spree_orders.completed_at is not null')
36
- .backordered.order("spree_orders.completed_at ASC")
36
+ .backordered.order(Spree::Order.arel_table[:completed_at].asc)
37
37
  end
38
38
  scope :shippable, -> { on_hand }
39
39