solidus_core 1.2.3 → 1.3.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 (573) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +1 -1
  4. data/app/assets/javascripts/spree.js.coffee.erb +1 -1
  5. data/app/helpers/spree/base_helper.rb +21 -43
  6. data/app/helpers/spree/orders_helper.rb +0 -1
  7. data/app/helpers/spree/products_helper.rb +10 -12
  8. data/app/helpers/spree/taxons_helper.rb +4 -4
  9. data/app/mailers/spree/base_mailer.rb +1 -3
  10. data/app/mailers/spree/carton_mailer.rb +2 -2
  11. data/app/mailers/spree/order_mailer.rb +2 -2
  12. data/app/models/concerns/spree/adjustment_source.rb +12 -16
  13. data/app/models/concerns/spree/calculated_adjustments.rb +17 -14
  14. data/app/models/concerns/spree/default_price.rb +10 -26
  15. data/app/models/concerns/spree/display_money.rb +1 -1
  16. data/app/models/concerns/spree/ordered_property_value_list.rb +10 -12
  17. data/app/models/concerns/spree/ransackable_attributes.rb +6 -5
  18. data/app/models/concerns/spree/user_address_book.rb +87 -81
  19. data/app/models/concerns/spree/user_methods.rb +2 -2
  20. data/app/models/concerns/spree/user_payment_source.rb +12 -8
  21. data/app/models/spree/ability.rb +2 -2
  22. data/app/models/spree/address.rb +37 -38
  23. data/app/models/spree/adjustment.rb +2 -6
  24. data/app/models/spree/app_configuration.rb +60 -5
  25. data/app/models/spree/base.rb +1 -1
  26. data/app/models/spree/calculator/default_tax.rb +28 -24
  27. data/app/models/spree/calculator/flat_percent_item_total.rb +1 -1
  28. data/app/models/spree/calculator/flat_rate.rb +2 -2
  29. data/app/models/spree/calculator/flexi_rate.rb +4 -4
  30. data/app/models/spree/calculator/percent_per_item.rb +8 -9
  31. data/app/models/spree/calculator/price_sack.rb +3 -3
  32. data/app/models/spree/calculator/returns/default_refund_amount.rb +11 -12
  33. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -1
  34. data/app/models/spree/calculator/shipping/flat_rate.rb +2 -2
  35. data/app/models/spree/calculator/shipping/flexi_rate.rb +3 -3
  36. data/app/models/spree/calculator/shipping/per_item.rb +1 -1
  37. data/app/models/spree/calculator/shipping/price_sack.rb +3 -3
  38. data/app/models/spree/calculator/tiered_flat_rate.rb +2 -1
  39. data/app/models/spree/calculator/tiered_percent.rb +2 -1
  40. data/app/models/spree/calculator.rb +3 -3
  41. data/app/models/spree/carton.rb +2 -2
  42. data/app/models/spree/country.rb +7 -4
  43. data/app/models/spree/credit_card.rb +26 -22
  44. data/app/models/spree/customer_return.rb +8 -7
  45. data/app/models/spree/exchange.rb +1 -9
  46. data/app/models/spree/gateway/bogus.rb +31 -31
  47. data/app/models/spree/gateway/bogus_simple.rb +6 -8
  48. data/app/models/spree/gateway.rb +9 -15
  49. data/app/models/spree/image.rb +3 -3
  50. data/app/models/spree/inventory_unit.rb +23 -23
  51. data/app/models/spree/item_adjustments.rb +3 -2
  52. data/app/models/spree/legacy_user.rb +1 -5
  53. data/app/models/spree/line_item.rb +95 -84
  54. data/app/models/spree/option_type.rb +1 -1
  55. data/app/models/spree/option_value.rb +3 -1
  56. data/app/models/spree/order/checkout.rb +45 -44
  57. data/app/models/spree/order/payments.rb +42 -45
  58. data/app/models/spree/order.rb +70 -75
  59. data/app/models/spree/order_cancellations.rb +4 -4
  60. data/app/models/spree/order_capturing.rb +3 -2
  61. data/app/models/spree/order_contents.rb +61 -59
  62. data/app/models/spree/order_inventory.rb +59 -54
  63. data/app/models/spree/order_mutex.rb +0 -1
  64. data/app/models/spree/order_shipping.rb +8 -9
  65. data/app/models/spree/order_stock_location.rb +3 -3
  66. data/app/models/spree/order_update_attributes.rb +0 -2
  67. data/app/models/spree/order_updater.rb +11 -24
  68. data/app/models/spree/payment/processing.rb +26 -37
  69. data/app/models/spree/payment.rb +68 -71
  70. data/app/models/spree/payment_method/check.rb +2 -2
  71. data/app/models/spree/payment_method/store_credit.rb +6 -7
  72. data/app/models/spree/payment_method.rb +11 -8
  73. data/app/models/spree/preferences/configuration.rb +2 -2
  74. data/app/models/spree/preferences/preferable.rb +1 -1
  75. data/app/models/spree/preferences/preferable_class_methods.rb +1 -1
  76. data/app/models/spree/preferences/scoped_store.rb +6 -5
  77. data/app/models/spree/preferences/static_model_preferences.rb +1 -1
  78. data/app/models/spree/preferences/statically_configurable.rb +2 -2
  79. data/app/models/spree/preferences/store.rb +2 -6
  80. data/app/models/spree/price.rb +17 -19
  81. data/app/models/spree/product/scopes.rb +18 -17
  82. data/app/models/spree/product.rb +28 -11
  83. data/app/models/spree/product_property.rb +2 -0
  84. data/app/models/spree/product_scope/scopes.rb +22 -22
  85. data/app/models/spree/promotion/actions/create_adjustment.rb +3 -4
  86. data/app/models/spree/promotion/actions/create_item_adjustments.rb +8 -8
  87. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +3 -3
  88. data/app/models/spree/promotion/actions/free_shipping.rb +4 -4
  89. data/app/models/spree/promotion/rules/first_order.rb +7 -6
  90. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +2 -3
  91. data/app/models/spree/promotion/rules/item_total.rb +5 -2
  92. data/app/models/spree/promotion/rules/nth_order.rb +3 -4
  93. data/app/models/spree/promotion/rules/one_use_per_user.rb +1 -2
  94. data/app/models/spree/promotion/rules/option_value.rb +1 -2
  95. data/app/models/spree/promotion/rules/product.rb +4 -4
  96. data/app/models/spree/promotion/rules/taxon.rb +5 -5
  97. data/app/models/spree/promotion/rules/user.rb +1 -1
  98. data/app/models/spree/promotion/rules/user_logged_in.rb +1 -1
  99. data/app/models/spree/promotion.rb +8 -8
  100. data/app/models/spree/promotion_action.rb +1 -1
  101. data/app/models/spree/promotion_builder.rb +2 -2
  102. data/app/models/spree/promotion_chooser.rb +1 -0
  103. data/app/models/spree/promotion_code/code_builder.rb +3 -3
  104. data/app/models/spree/promotion_handler/cart.rb +17 -16
  105. data/app/models/spree/promotion_handler/coupon.rb +10 -14
  106. data/app/models/spree/promotion_handler/page.rb +4 -4
  107. data/app/models/spree/promotion_rule.rb +4 -3
  108. data/app/models/spree/prototype.rb +0 -1
  109. data/app/models/spree/refund.rb +3 -3
  110. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -3
  111. data/app/models/spree/reimbursement.rb +3 -5
  112. data/app/models/spree/reimbursement_performer.rb +0 -5
  113. data/app/models/spree/reimbursement_tax_calculator.rb +2 -7
  114. data/app/models/spree/reimbursement_type/credit.rb +1 -1
  115. data/app/models/spree/reimbursement_type/original_payment.rb +1 -1
  116. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +3 -3
  117. data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
  118. data/app/models/spree/reimbursement_type.rb +1 -1
  119. data/app/models/spree/return_authorization.rb +38 -37
  120. data/app/models/spree/return_item/eligibility_validator/default.rb +4 -4
  121. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +0 -1
  122. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +0 -1
  123. data/app/models/spree/return_item.rb +24 -23
  124. data/app/models/spree/returns_calculator.rb +1 -2
  125. data/app/models/spree/shipment.rb +80 -74
  126. data/app/models/spree/shipping_calculator.rb +4 -5
  127. data/app/models/spree/shipping_manifest.rb +3 -4
  128. data/app/models/spree/shipping_method.rb +54 -23
  129. data/app/models/spree/shipping_method_stock_location.rb +4 -0
  130. data/app/models/spree/shipping_rate.rb +24 -29
  131. data/app/models/spree/shipping_rate_tax.rb +41 -0
  132. data/app/models/spree/state.rb +1 -1
  133. data/app/models/spree/state_change.rb +1 -1
  134. data/app/models/spree/stock/availability_validator.rb +2 -2
  135. data/app/models/spree/stock/coordinator.rb +12 -13
  136. data/app/models/spree/stock/differentiator.rb +1 -0
  137. data/app/models/spree/stock/estimator.rb +18 -25
  138. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  139. data/app/models/spree/stock/package.rb +19 -9
  140. data/app/models/spree/stock/packer.rb +2 -3
  141. data/app/models/spree/stock/prioritizer.rb +3 -2
  142. data/app/models/spree/stock/quantifier.rb +2 -3
  143. data/app/models/spree/stock/shipping_rate_selector.rb +0 -1
  144. data/app/models/spree/stock/shipping_rate_sorter.rb +0 -1
  145. data/app/models/spree/stock/splitter/backordered.rb +0 -2
  146. data/app/models/spree/stock/splitter/base.rb +3 -2
  147. data/app/models/spree/stock/splitter/shipping_category.rb +2 -1
  148. data/app/models/spree/stock/splitter/weight.rb +2 -2
  149. data/app/models/spree/stock_item.rb +36 -37
  150. data/app/models/spree/stock_location.rb +17 -13
  151. data/app/models/spree/stock_movement.rb +1 -3
  152. data/app/models/spree/stock_transfer.rb +8 -8
  153. data/app/models/spree/store.rb +6 -0
  154. data/app/models/spree/store_credit.rb +24 -24
  155. data/app/models/spree/store_credit_category.rb +1 -2
  156. data/app/models/spree/tax/item_adjuster.rb +37 -0
  157. data/app/models/spree/tax/order_adjuster.rb +38 -0
  158. data/app/models/spree/tax/shipping_rate_taxer.rb +31 -0
  159. data/app/models/spree/tax/tax_helpers.rb +49 -0
  160. data/app/models/spree/tax/tax_location.rb +33 -0
  161. data/app/models/spree/tax_category.rb +1 -1
  162. data/app/models/spree/tax_rate.rb +46 -111
  163. data/app/models/spree/taxon.rb +36 -12
  164. data/app/models/spree/taxonomy.rb +10 -10
  165. data/app/models/spree/validations/db_maximum_length_validator.rb +0 -1
  166. data/app/models/spree/variant/pricer.rb +19 -0
  167. data/app/models/spree/variant/pricing_options.rb +31 -0
  168. data/app/models/spree/variant/scopes.rb +9 -9
  169. data/app/models/spree/variant.rb +95 -89
  170. data/app/models/spree/variant_property_rule.rb +1 -1
  171. data/app/models/spree/variant_property_rule_value.rb +2 -0
  172. data/app/models/spree/zone.rb +60 -24
  173. data/config/initializers/friendly_id.rb +1 -1
  174. data/config/locales/en.yml +337 -51
  175. data/config/routes.rb +1 -1
  176. data/db/default/spree/countries.rb +9 -15
  177. data/db/default/spree/roles.rb +1 -2
  178. data/db/default/spree/states.rb +7 -11
  179. data/db/default/spree/store_credit.rb +2 -2
  180. data/db/default/spree/stores.rb +2 -1
  181. data/db/migrate/20120831092320_spree_one_two.rb +100 -101
  182. data/db/migrate/20120831092359_spree_promo_one_two.rb +12 -12
  183. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +1 -1
  184. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +1 -1
  185. data/db/migrate/20121010142909_add_states_required_to_countries.rb +1 -1
  186. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +2 -2
  187. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +4 -4
  188. data/db/migrate/20121031162139_split_prices_from_variants.rb +8 -8
  189. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +2 -2
  190. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +1 -1
  191. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +1 -1
  192. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +1 -2
  193. data/db/migrate/20130211190146_create_spree_stock_items.rb +1 -1
  194. data/db/migrate/20130213191427_create_default_stock.rb +12 -21
  195. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +1 -1
  196. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +2 -2
  197. data/db/migrate/20130228210442_create_shipping_method_zone.rb +1 -1
  198. data/db/migrate/20130301162924_create_shipping_method_categories.rb +2 -2
  199. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +4 -4
  200. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +2 -3
  201. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +1 -1
  202. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +1 -1
  203. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +1 -1
  204. data/db/migrate/20130319062004_change_orders_total_precision.rb +4 -4
  205. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +1 -3
  206. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +2 -4
  207. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +1 -3
  208. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +2 -2
  209. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +2 -2
  210. data/db/migrate/20130417120035_update_adjustment_states.rb +2 -2
  211. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +3 -3
  212. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +1 -1
  213. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +3 -3
  214. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +1 -1
  215. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +2 -2
  216. data/db/migrate/20130807024301_upgrade_adjustments.rb +3 -3
  217. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +1 -1
  218. data/db/migrate/20130813140619_expand_order_number_size.rb +2 -2
  219. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +1 -1
  220. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +1 -1
  221. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +1 -1
  222. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +1 -1
  223. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +1 -1
  224. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +1 -0
  225. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +1 -1
  226. data/db/migrate/20131118043959_add_included_to_adjustments.rb +1 -1
  227. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +0 -1
  228. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +1 -1
  229. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +1 -1
  230. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +1 -0
  231. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +1 -1
  232. data/db/migrate/20140309023735_migrate_old_preferences.rb +4 -3
  233. data/db/migrate/20140309033438_create_store_from_preferences.rb +2 -2
  234. data/db/migrate/20140410141842_add_many_missing_indexes.rb +13 -15
  235. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +38 -40
  236. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +4 -4
  237. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +1 -1
  238. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +0 -1
  239. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +4 -4
  240. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +4 -6
  241. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +1 -0
  242. data/db/migrate/20141217215630_update_product_slug_index.rb +2 -4
  243. data/db/migrate/20150112194216_add_position_to_stock_location.rb +2 -2
  244. data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +0 -1
  245. data/db/migrate/20150313201503_copy_shipped_shipments_to_cartons.rb +0 -1
  246. data/db/migrate/20150506181611_create_spree_store_credit_payment_method.rb +3 -3
  247. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -1
  248. data/db/migrate/20150612205731_remove_spree_configurations.rb +2 -2
  249. data/db/migrate/20150619160613_create_adjustment_reason.rb +1 -1
  250. data/db/migrate/20150723224133_remove_unnecessary_indexes.rb +10 -2
  251. data/db/migrate/20150731201146_add_spree_user_addresses.rb +0 -1
  252. data/db/migrate/20150811211025_add_finalized_to_spree_adjustments.rb +1 -1
  253. data/db/migrate/20151001121454_create_spree_shipping_method_stock_locations.rb +13 -0
  254. data/db/migrate/20151002023248_add_foreign_key_to_shipping_method_stock_location.rb +6 -0
  255. data/db/migrate/20151026093607_change_return_item_pre_tax_amount_to_amount.rb +29 -0
  256. data/db/migrate/20160111091912_add_column_available_to_all_on_spree_shipping_method.rb +5 -0
  257. data/db/migrate/20160116133604_add_position_to_spree_payment_methods.rb +5 -0
  258. data/db/migrate/20160122182105_add_carrier_and_service_level_to_spree_shipping_methods.rb +6 -0
  259. data/db/migrate/20160224201413_create_spree_shipping_rate_taxes.rb +11 -0
  260. data/db/migrate/20160229133259_add_cart_tax_country_iso_to_spree_store.rb +5 -0
  261. data/db/migrate/20160301103333_remove_pre_tax_amount_on_line_item_and_shipment.rb +6 -0
  262. data/db/migrate/20160308000300_disallow_adjustment_finalized_nulls.rb +19 -0
  263. data/db/migrate/20160318145302_add_timestamps_to_prices.rb +5 -0
  264. data/db/migrate/20160330204846_add_missing_timestamp_columns.rb +20 -0
  265. data/lib/generators/spree/custom_user/custom_user_generator.rb +3 -8
  266. data/lib/generators/spree/dummy/dummy_generator.rb +17 -19
  267. data/lib/generators/spree/install/install_generator.rb +15 -15
  268. data/lib/generators/spree/install/templates/config/initializers/spree.rb +1 -0
  269. data/lib/spree/core/controller_helpers/auth.rb +2 -4
  270. data/lib/spree/core/controller_helpers/common.rb +42 -43
  271. data/lib/spree/core/controller_helpers/order.rb +5 -9
  272. data/lib/spree/core/controller_helpers/payment_parameters.rb +4 -5
  273. data/lib/spree/core/controller_helpers/pricing.rb +27 -0
  274. data/lib/spree/core/controller_helpers/respond_with.rb +4 -4
  275. data/lib/spree/core/controller_helpers/search.rb +2 -2
  276. data/lib/spree/core/controller_helpers/store.rb +3 -3
  277. data/lib/spree/core/controller_helpers/strong_parameters.rb +4 -4
  278. data/lib/spree/core/current_store.rb +1 -1
  279. data/lib/spree/core/delegate_belongs_to.rb +19 -21
  280. data/lib/spree/core/engine.rb +12 -8
  281. data/lib/spree/core/environment/calculators.rb +0 -1
  282. data/lib/spree/core/environment_extension.rb +4 -4
  283. data/lib/spree/core/importer/order.rb +17 -22
  284. data/lib/spree/core/importer/product.rb +10 -9
  285. data/lib/spree/core/permalinks.rb +16 -16
  286. data/lib/spree/core/product_duplicator.rb +2 -3
  287. data/lib/spree/core/product_filters.rb +15 -16
  288. data/lib/spree/core/role_configuration.rb +2 -2
  289. data/lib/spree/core/search/base.rb +71 -57
  290. data/lib/spree/core/search/variant.rb +2 -4
  291. data/lib/spree/core/unreturned_item_charger.rb +1 -2
  292. data/lib/spree/core/validators/email.rb +2 -2
  293. data/lib/spree/core/version.rb +1 -1
  294. data/lib/spree/core.rb +2 -4
  295. data/lib/spree/i18n.rb +1 -1
  296. data/lib/spree/localized_number.rb +3 -1
  297. data/lib/spree/migrations.rb +27 -26
  298. data/lib/spree/money.rb +19 -4
  299. data/lib/spree/permission_sets/base.rb +1 -1
  300. data/lib/spree/permitted_attributes.rb +7 -7
  301. data/lib/spree/responder.rb +4 -5
  302. data/lib/spree/testing_support/authorization_helpers.rb +1 -1
  303. data/lib/spree/testing_support/caching.rb +8 -8
  304. data/lib/spree/testing_support/capybara_ext.rb +11 -13
  305. data/lib/spree/testing_support/common_rake.rb +4 -4
  306. data/lib/spree/testing_support/controller_requests.rb +1 -1
  307. data/lib/spree/testing_support/extension_rake.rb +1 -2
  308. data/lib/spree/testing_support/factories/address_factory.rb +14 -3
  309. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
  310. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  311. data/lib/spree/testing_support/factories/credit_card_factory.rb +4 -0
  312. data/lib/spree/testing_support/factories/customer_return_factory.rb +4 -6
  313. data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
  314. data/lib/spree/testing_support/factories/order_factory.rb +10 -11
  315. data/lib/spree/testing_support/factories/payment_factory.rb +5 -0
  316. data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -1
  317. data/lib/spree/testing_support/factories/promotion_factory.rb +0 -1
  318. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  319. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  320. data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
  321. data/lib/spree/testing_support/factories/shipping_method_factory.rb +5 -2
  322. data/lib/spree/testing_support/factories/state_factory.rb +17 -7
  323. data/lib/spree/testing_support/factories/stock_location_factory.rb +4 -4
  324. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +1 -1
  325. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -1
  326. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -2
  327. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -2
  328. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  329. data/lib/spree/testing_support/factories/variant_factory.rb +1 -2
  330. data/lib/spree/testing_support/factories/zone_factory.rb +2 -1
  331. data/lib/spree/testing_support/i18n.rb +4 -5
  332. data/lib/spree/testing_support/order_walkthrough.rb +8 -9
  333. data/lib/spree/testing_support/preferences.rb +1 -1
  334. data/lib/spree/testing_support/sequences.rb +5 -4
  335. data/lib/tasks/core.rake +15 -19
  336. data/lib/tasks/email.rake +3 -3
  337. data/lib/tasks/exchanges.rake +12 -14
  338. data/lib/tasks/migrations/assure_store_on_orders.rake +38 -0
  339. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +2 -2
  340. data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +1 -11
  341. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +17 -0
  342. data/lib/tasks/migrations/migrate_user_addresses.rake +1 -1
  343. data/lib/tasks/order_capturing.rake +1 -1
  344. data/lib/tasks/upgrade.rake +11 -0
  345. data/script/rails +0 -1
  346. data/solidus_core.gemspec +6 -8
  347. data/spec/helpers/base_helper_spec.rb +15 -18
  348. data/spec/helpers/order_helper_spec.rb +2 -2
  349. data/spec/helpers/products_helper_spec.rb +43 -51
  350. data/spec/helpers/taxons_helper_spec.rb +1 -1
  351. data/spec/lib/i18n_spec.rb +11 -11
  352. data/spec/lib/search/base_spec.rb +12 -14
  353. data/spec/lib/search/variant_spec.rb +1 -0
  354. data/spec/lib/spree/core/controller_helpers/order_spec.rb +1 -7
  355. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +26 -28
  356. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +63 -0
  357. data/spec/lib/spree/core/controller_helpers/search_spec.rb +4 -2
  358. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +1 -1
  359. data/spec/lib/spree/core/importer/order_spec.rb +95 -90
  360. data/spec/lib/spree/core/role_configuration_spec.rb +16 -16
  361. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +35 -0
  362. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +10 -1
  363. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -1
  364. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +6 -1
  365. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +37 -1
  366. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +2 -2
  367. data/spec/lib/spree/core/testing_support/factories/stock_packer_factory_spec.rb +1 -1
  368. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +1 -2
  369. data/spec/lib/spree/core/testing_support/preferences_spec.rb +26 -0
  370. data/spec/lib/spree/core/unreturned_item_charger_spec.rb +7 -9
  371. data/spec/lib/spree/core/validators/email_spec.rb +8 -6
  372. data/spec/lib/spree/localized_number_spec.rb +1 -3
  373. data/spec/lib/spree/migrations_spec.rb +2 -2
  374. data/spec/lib/spree/money_spec.rb +75 -6
  375. data/spec/lib/tasks/exchanges_spec.rb +2 -12
  376. data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +0 -1
  377. data/spec/lib/tasks/order_capturing_spec.rb +1 -1
  378. data/spec/mailers/carton_mailer_spec.rb +3 -3
  379. data/spec/mailers/order_mailer_spec.rb +9 -11
  380. data/spec/mailers/reimbursement_mailer_spec.rb +2 -2
  381. data/spec/mailers/test_mailer_spec.rb +1 -1
  382. data/spec/models/spree/ability_spec.rb +4 -7
  383. data/spec/models/spree/address_spec.rb +32 -35
  384. data/spec/models/spree/adjustment_reason_spec.rb +0 -2
  385. data/spec/models/spree/adjustment_spec.rb +2 -2
  386. data/spec/models/spree/app_configuration_spec.rb +33 -3
  387. data/spec/models/spree/asset_spec.rb +1 -2
  388. data/spec/models/spree/calculator/default_tax_spec.rb +141 -52
  389. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +1 -1
  390. data/spec/models/spree/calculator/flexi_rate_spec.rb +6 -6
  391. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +1 -1
  392. data/spec/models/spree/calculator/price_sack_spec.rb +2 -2
  393. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +9 -11
  394. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +4 -4
  395. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +2 -2
  396. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +6 -7
  397. data/spec/models/spree/calculator/shipping/per_item_spec.rb +2 -2
  398. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +2 -2
  399. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +1 -2
  400. data/spec/models/spree/calculator/tiered_percent_spec.rb +1 -1
  401. data/spec/models/spree/calculator_spec.rb +3 -8
  402. data/spec/models/spree/carton_spec.rb +1 -1
  403. data/spec/models/spree/classification_spec.rb +1 -1
  404. data/spec/models/spree/concerns/display_money_spec.rb +0 -1
  405. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +26 -1
  406. data/spec/models/spree/concerns/user_address_book_spec.rb +19 -12
  407. data/spec/models/spree/concerns/user_methods_spec.rb +1 -1
  408. data/spec/models/spree/country_spec.rb +52 -0
  409. data/spec/models/spree/credit_card_spec.rb +17 -12
  410. data/spec/models/spree/customer_return_spec.rb +27 -23
  411. data/spec/models/spree/exchange_spec.rb +2 -7
  412. data/spec/models/spree/gateway/bogus_simple.rb +2 -4
  413. data/spec/models/spree/gateway/bogus_spec.rb +4 -2
  414. data/spec/models/spree/gateway_spec.rb +8 -3
  415. data/spec/models/spree/inventory_unit_spec.rb +13 -14
  416. data/spec/models/spree/item_adjustments_spec.rb +36 -40
  417. data/spec/models/spree/line_item_spec.rb +92 -48
  418. data/spec/models/spree/option_type_spec.rb +1 -1
  419. data/spec/models/spree/option_value_spec.rb +1 -1
  420. data/spec/models/spree/order/address_spec.rb +1 -1
  421. data/spec/models/spree/order/callbacks_spec.rb +3 -3
  422. data/spec/models/spree/order/checkout_spec.rb +55 -48
  423. data/spec/models/spree/order/finalizing_spec.rb +8 -9
  424. data/spec/models/spree/order/payment_spec.rb +20 -20
  425. data/spec/models/spree/order/risk_assessment_spec.rb +1 -1
  426. data/spec/models/spree/order/state_machine_spec.rb +40 -131
  427. data/spec/models/spree/order/tax_spec.rb +11 -12
  428. data/spec/models/spree/order/totals_spec.rb +3 -3
  429. data/spec/models/spree/order/updating_spec.rb +2 -2
  430. data/spec/models/spree/order/validations_spec.rb +2 -2
  431. data/spec/models/spree/order_cancellations_spec.rb +1 -1
  432. data/spec/models/spree/order_capturing_spec.rb +1 -1
  433. data/spec/models/spree/order_contents_spec.rb +10 -11
  434. data/spec/models/spree/order_inventory_spec.rb +11 -11
  435. data/spec/models/spree/order_merger_spec.rb +1 -0
  436. data/spec/models/spree/order_shipping_spec.rb +8 -10
  437. data/spec/models/spree/order_spec.rb +137 -124
  438. data/spec/models/spree/order_stock_location_spec.rb +2 -2
  439. data/spec/models/spree/order_update_attributes_spec.rb +6 -10
  440. data/spec/models/spree/order_updater_spec.rb +4 -8
  441. data/spec/models/spree/payment_create_spec.rb +11 -12
  442. data/spec/models/spree/payment_method/store_credit_spec.rb +10 -6
  443. data/spec/models/spree/payment_method_spec.rb +4 -5
  444. data/spec/models/spree/payment_spec.rb +61 -69
  445. data/spec/models/spree/permission_sets/base_spec.rb +1 -1
  446. data/spec/models/spree/permission_sets/configuration_display.rb +0 -1
  447. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -1
  448. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -1
  449. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -1
  450. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -1
  451. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -1
  452. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -1
  453. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -1
  454. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -1
  455. data/spec/models/spree/permission_sets/report_display_spec.rb +0 -1
  456. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -1
  457. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -1
  458. data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +0 -1
  459. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +6 -6
  460. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -1
  461. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -1
  462. data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +0 -1
  463. data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +0 -2
  464. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -1
  465. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -1
  466. data/spec/models/spree/preference_spec.rb +1 -4
  467. data/spec/models/spree/preferences/configuration_spec.rb +2 -7
  468. data/spec/models/spree/preferences/preferable_spec.rb +13 -24
  469. data/spec/models/spree/preferences/scoped_store_spec.rb +1 -1
  470. data/spec/models/spree/preferences/static_model_preferences_spec.rb +5 -6
  471. data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -6
  472. data/spec/models/spree/preferences/store_spec.rb +2 -3
  473. data/spec/models/spree/price_spec.rb +6 -6
  474. data/spec/models/spree/product/scopes_spec.rb +20 -20
  475. data/spec/models/spree/product_duplicator_spec.rb +16 -29
  476. data/spec/models/spree/product_filter_spec.rb +2 -2
  477. data/spec/models/spree/product_spec.rb +53 -20
  478. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +10 -12
  479. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +4 -4
  480. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +9 -9
  481. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +1 -1
  482. data/spec/models/spree/promotion/rules/first_order_spec.rb +10 -10
  483. data/spec/models/spree/promotion/rules/item_total_spec.rb +63 -19
  484. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +1 -1
  485. data/spec/models/spree/promotion/rules/product_spec.rb +8 -8
  486. data/spec/models/spree/promotion/rules/taxon_spec.rb +4 -4
  487. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +3 -4
  488. data/spec/models/spree/promotion/rules/user_spec.rb +7 -7
  489. data/spec/models/spree/promotion_builder_spec.rb +10 -8
  490. data/spec/models/spree/promotion_category_spec.rb +1 -1
  491. data/spec/models/spree/promotion_code/code_builder_spec.rb +1 -3
  492. data/spec/models/spree/promotion_code_spec.rb +8 -7
  493. data/spec/models/spree/promotion_handler/cart_spec.rb +1 -1
  494. data/spec/models/spree/promotion_handler/coupon_spec.rb +28 -28
  495. data/spec/models/spree/promotion_handler/page_spec.rb +6 -7
  496. data/spec/models/spree/promotion_rule_spec.rb +1 -2
  497. data/spec/models/spree/promotion_spec.rb +25 -21
  498. data/spec/models/spree/refund_spec.rb +8 -11
  499. data/spec/models/spree/reimbursement/credit_spec.rb +2 -2
  500. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +6 -4
  501. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +1 -1
  502. data/spec/models/spree/reimbursement_performer_spec.rb +2 -2
  503. data/spec/models/spree/reimbursement_spec.rb +9 -11
  504. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +4 -5
  505. data/spec/models/spree/reimbursement_type/credit_spec.rb +2 -2
  506. data/spec/models/spree/reimbursement_type/exchange_spec.rb +2 -3
  507. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +4 -4
  508. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +1 -1
  509. data/spec/models/spree/return_authorization_spec.rb +18 -21
  510. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +7 -7
  511. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -1
  512. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -1
  513. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
  514. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +1 -1
  515. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +1 -2
  516. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +3 -5
  517. data/spec/models/spree/return_item_spec.rb +29 -31
  518. data/spec/models/spree/returns_calculator_spec.rb +1 -1
  519. data/spec/models/spree/shipment_spec.rb +59 -43
  520. data/spec/models/spree/shipping_calculator_spec.rb +3 -3
  521. data/spec/models/spree/shipping_manifest_spec.rb +8 -7
  522. data/spec/models/spree/shipping_method_spec.rb +149 -24
  523. data/spec/models/spree/shipping_rate_spec.rb +116 -76
  524. data/spec/models/spree/shipping_rate_tax_spec.rb +83 -0
  525. data/spec/models/spree/state_spec.rb +2 -2
  526. data/spec/models/spree/stock/availability_validator_spec.rb +4 -4
  527. data/spec/models/spree/stock/coordinator_spec.rb +33 -49
  528. data/spec/models/spree/stock/differentiator_spec.rb +1 -1
  529. data/spec/models/spree/stock/estimator_spec.rb +83 -54
  530. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +1 -3
  531. data/spec/models/spree/stock/package_spec.rb +27 -10
  532. data/spec/models/spree/stock/packer_spec.rb +4 -4
  533. data/spec/models/spree/stock/prioritizer_spec.rb +1 -1
  534. data/spec/models/spree/stock/quantifier_spec.rb +2 -6
  535. data/spec/models/spree/stock/splitter/backordered_spec.rb +1 -1
  536. data/spec/models/spree/stock/splitter/base_spec.rb +1 -2
  537. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +1 -3
  538. data/spec/models/spree/stock/splitter/weight_spec.rb +3 -3
  539. data/spec/models/spree/stock_item_spec.rb +16 -16
  540. data/spec/models/spree/stock_location_spec.rb +6 -8
  541. data/spec/models/spree/stock_movement_spec.rb +1 -1
  542. data/spec/models/spree/stock_transfer_spec.rb +1 -3
  543. data/spec/models/spree/store_credit_category_spec.rb +1 -1
  544. data/spec/models/spree/store_credit_event_spec.rb +3 -5
  545. data/spec/models/spree/store_credit_spec.rb +24 -23
  546. data/spec/models/spree/store_spec.rb +21 -2
  547. data/spec/models/spree/tax/item_adjuster_spec.rb +74 -0
  548. data/spec/models/spree/tax/order_adjuster_spec.rb +49 -0
  549. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +50 -0
  550. data/spec/models/spree/tax/tax_location_spec.rb +68 -0
  551. data/spec/models/spree/tax/taxation_integration_spec.rb +787 -0
  552. data/spec/models/spree/tax_category_spec.rb +2 -2
  553. data/spec/models/spree/tax_rate_spec.rb +185 -536
  554. data/spec/models/spree/taxon_spec.rb +69 -5
  555. data/spec/models/spree/taxonomy_spec.rb +2 -3
  556. data/spec/models/spree/tracker_spec.rb +1 -1
  557. data/spec/models/spree/transfer_item_spec.rb +1 -1
  558. data/spec/models/spree/unit_cancel_spec.rb +9 -14
  559. data/spec/models/spree/user_spec.rb +19 -24
  560. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +1 -1
  561. data/spec/models/spree/variant/pricer_spec.rb +48 -0
  562. data/spec/models/spree/variant/pricing_options_spec.rb +106 -0
  563. data/spec/models/spree/variant/scopes_spec.rb +31 -8
  564. data/spec/models/spree/variant_property_rule_spec.rb +1 -1
  565. data/spec/models/spree/variant_spec.rb +166 -52
  566. data/spec/models/spree/zone_spec.rb +135 -10
  567. data/spec/support/big_decimal.rb +1 -1
  568. data/spec/support/concerns/working_factories.rb +2 -2
  569. data/spec/support/dummy_ability.rb +0 -1
  570. metadata +55 -44
  571. data/lib/generators/spree/dummy/templates/initializers/devise.rb +0 -3
  572. data/lib/spree/migration_helpers.rb +0 -19
  573. data/vendor/assets/stylesheets/skeleton.css +0 -242
@@ -16,7 +16,7 @@ module Spree
16
16
  has_many :offsets, -> { offset_payment }, class_name: "Spree::Payment", foreign_key: :source_id
17
17
  has_many :log_entries, as: :source
18
18
  has_many :state_changes, as: :stateful
19
- has_many :capture_events, :class_name => 'Spree::PaymentCaptureEvent'
19
+ has_many :capture_events, class_name: 'Spree::PaymentCaptureEvent'
20
20
  has_many :refunds, inverse_of: :payment
21
21
 
22
22
  before_validation :validate_source, unless: :invalid?
@@ -39,7 +39,6 @@ module Spree
39
39
 
40
40
  validates :amount, numericality: true
41
41
  validates :source, presence: true, if: :source_required?
42
- validates :payment_method, presence: true
43
42
 
44
43
  default_scope -> { order(:created_at) }
45
44
 
@@ -94,7 +93,7 @@ module Spree
94
93
  payment.state_changes.create!(
95
94
  previous_state: transition.from,
96
95
  next_state: transition.to,
97
- name: 'payment',
96
+ name: 'payment'
98
97
  )
99
98
  end
100
99
  end
@@ -162,7 +161,7 @@ deprecated. Instead use either the PaymentCreate class or the
162
161
  OrderUpdateAttributes class.
163
162
  WARN
164
163
 
165
- PaymentCreate.new(order, {source_attributes: source_attributes}, payment: self, request_env: request_env).build
164
+ PaymentCreate.new(order, { source_attributes: source_attributes }, payment: self, request_env: request_env).build
166
165
  end
167
166
 
168
167
  # @return [Array<String>] the actions available on this payment
@@ -181,7 +180,7 @@ WARN
181
180
  # @return [Boolean] true when this payment is risky based on address
182
181
  def is_avs_risky?
183
182
  return false if avs_response.blank? || NON_RISKY_AVS_CODES.include?(avs_response)
184
- return true
183
+ true
185
184
  end
186
185
 
187
186
  # @return [Boolean] true when this payment is risky based on cvv
@@ -189,7 +188,7 @@ WARN
189
188
  return false if cvv_response_code == "M"
190
189
  return false if cvv_response_code.nil?
191
190
  return false if cvv_response_message.present?
192
- return true
191
+ true
193
192
  end
194
193
 
195
194
  # @return [BigDecimal] the total amount captured on this payment
@@ -209,85 +208,83 @@ WARN
209
208
 
210
209
  private
211
210
 
212
- def source_actions
213
- return [] unless payment_source and payment_source.respond_to? :actions
214
- payment_source.actions.select { |action| !payment_source.respond_to?("can_#{action}?") or payment_source.send("can_#{action}?", self) }
215
- end
211
+ def source_actions
212
+ return [] unless payment_source && payment_source.respond_to?(:actions)
213
+ payment_source.actions.select { |action| !payment_source.respond_to?("can_#{action}?") || payment_source.send("can_#{action}?", self) }
214
+ end
216
215
 
217
- def validate_source
218
- if source && !source.valid?
219
- source.errors.each do |field, error|
220
- field_name = I18n.t("activerecord.attributes.#{source.class.to_s.underscore}.#{field}")
221
- self.errors.add(Spree.t(source.class.to_s.demodulize.underscore), "#{field_name} #{error}")
222
- end
216
+ def validate_source
217
+ if source && !source.valid?
218
+ source.errors.each do |field, error|
219
+ field_name = I18n.t("activerecord.attributes.#{source.class.to_s.underscore}.#{field}")
220
+ errors.add(Spree.t(source.class.to_s.demodulize.underscore), "#{field_name} #{error}")
223
221
  end
224
- return !errors.present?
225
222
  end
223
+ !errors.present?
224
+ end
226
225
 
227
- def source_required?
228
- payment_method.present? && payment_method.source_required?
229
- end
226
+ def source_required?
227
+ payment_method.present? && payment_method.source_required?
228
+ end
230
229
 
231
- def profiles_supported?
232
- payment_method.respond_to?(:payment_profiles_supported?) && payment_method.payment_profiles_supported?
233
- end
230
+ def profiles_supported?
231
+ payment_method.respond_to?(:payment_profiles_supported?) && payment_method.payment_profiles_supported?
232
+ end
234
233
 
235
- def create_payment_profile
236
- # Don't attempt to create on bad payments.
237
- return if %w(invalid failed).include?(state)
238
- # Payment profile cannot be created without source
239
- return unless source
240
- # Imported payments shouldn't create a payment profile.
241
- return if source.imported
242
-
243
- payment_method.create_profile(self)
244
- rescue ActiveMerchant::ConnectionError => e
245
- gateway_error e
246
- end
234
+ def create_payment_profile
235
+ # Don't attempt to create on bad payments.
236
+ return if %w(invalid failed).include?(state)
237
+ # Payment profile cannot be created without source
238
+ return unless source
239
+ # Imported payments shouldn't create a payment profile.
240
+ return if source.imported
241
+
242
+ payment_method.create_profile(self)
243
+ rescue ActiveMerchant::ConnectionError => e
244
+ gateway_error e
245
+ end
247
246
 
248
- def invalidate_old_payments
249
- if !store_credit? && !['invalid', 'failed'].include?(state)
250
- order.payments.checkout.where(payment_method: payment_method).where("id != ?", self.id).each do |payment|
251
- payment.invalidate!
252
- end
253
- end
247
+ def invalidate_old_payments
248
+ if !store_credit? && !['invalid', 'failed'].include?(state)
249
+ order.payments.checkout.where(payment_method: payment_method).where("id != ?", id).each(&:invalidate!)
254
250
  end
251
+ end
255
252
 
256
- def update_order
257
- if order.completed? || completed? || void?
258
- order.update!
259
- end
253
+ def update_order
254
+ if order.completed? || completed? || void?
255
+ order.update!
260
256
  end
257
+ end
261
258
 
262
- # Necessary because some payment gateways will refuse payments with
263
- # duplicate IDs. We *were* using the Order number, but that's set once and
264
- # is unchanging. What we need is a unique identifier on a per-payment basis,
265
- # and this is it. Related to https://github.com/spree/spree/issues/1998.
266
- # See https://github.com/spree/spree/issues/1998#issuecomment-12869105
267
- def set_unique_identifier
268
- begin
269
- self.number = generate_identifier
270
- end while self.class.exists?(number: self.number)
259
+ # Necessary because some payment gateways will refuse payments with
260
+ # duplicate IDs. We *were* using the Order number, but that's set once and
261
+ # is unchanging. What we need is a unique identifier on a per-payment basis,
262
+ # and this is it. Related to https://github.com/spree/spree/issues/1998.
263
+ # See https://github.com/spree/spree/issues/1998#issuecomment-12869105
264
+ def set_unique_identifier
265
+ loop do
266
+ self.number = generate_identifier
267
+ break unless self.class.exists?(number: number)
271
268
  end
269
+ end
272
270
 
273
- def generate_identifier
274
- Array.new(8){ IDENTIFIER_CHARS.sample }.join
275
- end
271
+ def generate_identifier
272
+ Array.new(8){ IDENTIFIER_CHARS.sample }.join
273
+ end
276
274
 
277
- def create_eligible_credit_event
278
- # When cancelling an order, a payment with the negative amount
279
- # of the payment total is created to refund the customer. That
280
- # payment has a source of itself (Spree::Payment) no matter the
281
- # type of payment getting refunded, hence the additional check
282
- # if the source is a store credit.
283
- if store_credit? && source.is_a?(Spree::StoreCredit)
284
- source.update_attributes!({
285
- action: Spree::StoreCredit::ELIGIBLE_ACTION,
286
- action_amount: amount,
287
- action_authorization_code: response_code,
288
- })
289
- end
275
+ def create_eligible_credit_event
276
+ # When cancelling an order, a payment with the negative amount
277
+ # of the payment total is created to refund the customer. That
278
+ # payment has a source of itself (Spree::Payment) no matter the
279
+ # type of payment getting refunded, hence the additional check
280
+ # if the source is a store credit.
281
+ if store_credit? && source.is_a?(Spree::StoreCredit)
282
+ source.update_attributes!({
283
+ action: Spree::StoreCredit::ELIGIBLE_ACTION,
284
+ action_amount: amount,
285
+ action_authorization_code: response_code
286
+ })
290
287
  end
291
-
288
+ end
292
289
  end
293
290
  end
@@ -14,13 +14,13 @@ module Spree
14
14
  payment.state != 'void'
15
15
  end
16
16
 
17
- def capture(*args)
17
+ def capture(*_args)
18
18
  ActiveMerchant::Billing::Response.new(true, "", {}, {})
19
19
  end
20
20
 
21
21
  def cancel(response); end
22
22
 
23
- def void(*args)
23
+ def void(*_args)
24
24
  ActiveMerchant::Billing::Response.new(true, "", {}, {})
25
25
  end
26
26
 
@@ -1,6 +1,5 @@
1
1
  module Spree
2
2
  class PaymentMethod::StoreCredit < PaymentMethod
3
-
4
3
  def payment_source_class
5
4
  ::Spree::StoreCredit
6
5
  end
@@ -13,8 +12,8 @@ module Spree
13
12
  payment.pending?
14
13
  end
15
14
 
16
- def authorize(amount_in_cents, store_credit, gateway_options = {})
17
- if store_credit.nil?
15
+ def authorize(amount_in_cents, provided_store_credit, gateway_options = {})
16
+ if provided_store_credit.nil?
18
17
  ActiveMerchant::Billing::Response.new(false, Spree.t('store_credit.unable_to_find'), {}, {})
19
18
  else
20
19
  action = -> (store_credit) {
@@ -24,7 +23,7 @@ module Spree
24
23
  action_originator: gateway_options[:originator]
25
24
  )
26
25
  }
27
- handle_action_call(store_credit, action, :authorize)
26
+ handle_action_call(provided_store_credit, action, :authorize)
28
27
  end
29
28
  end
30
29
 
@@ -55,7 +54,7 @@ module Spree
55
54
  end
56
55
  end
57
56
 
58
- def void(auth_code, gateway_options={})
57
+ def void(auth_code, gateway_options = {})
59
58
  action = -> (store_credit) {
60
59
  store_credit.void(auth_code, action_originator: gateway_options[:originator])
61
60
  }
@@ -94,7 +93,7 @@ module Spree
94
93
 
95
94
  private
96
95
 
97
- def handle_action_call(store_credit, action, action_name, auth_code=nil)
96
+ def handle_action_call(store_credit, action, action_name, auth_code = nil)
98
97
  store_credit.with_lock do
99
98
  if response = action.call(store_credit)
100
99
  # note that we only need to return the auth code on an 'auth', but it's innocuous to always return
@@ -121,7 +120,7 @@ module Spree
121
120
  def auth_or_capture_event(auth_code)
122
121
  capture_event = StoreCreditEvent.find_by(authorization_code: auth_code, action: Spree::StoreCredit::CAPTURE_ACTION)
123
122
  auth_event = StoreCreditEvent.find_by(authorization_code: auth_code, action: Spree::StoreCredit::AUTHORIZE_ACTION)
124
- return capture_event || auth_event
123
+ capture_event || auth_event
125
124
  end
126
125
  end
127
126
  end
@@ -1,6 +1,7 @@
1
1
  module Spree
2
2
  class PaymentMethod < Spree::Base
3
3
  acts_as_paranoid
4
+ acts_as_list
4
5
  DISPLAY = [:both, :front_end, :back_end]
5
6
 
6
7
  validates :name, presence: true
@@ -10,6 +11,8 @@ module Spree
10
11
  has_many :store_payment_methods, inverse_of: :payment_method
11
12
  has_many :payment_methods, through: :store_payment_methods
12
13
 
14
+ scope :ordered_by_position, -> { order(:position) }
15
+
13
16
  include Spree::Preferences::StaticallyConfigurable
14
17
 
15
18
  def self.providers
@@ -30,20 +33,20 @@ module Spree
30
33
  def self.available(display_on = 'both', store: nil)
31
34
  all.select do |p|
32
35
  p.active &&
33
- (p.display_on == display_on.to_s || p.display_on.blank?) &&
34
- (store.nil? || store.payment_methods.empty? || store.payment_methods.include?(p))
36
+ (p.display_on == display_on.to_s || p.display_on.blank?) &&
37
+ (store.nil? || store.payment_methods.empty? || store.payment_methods.include?(p))
35
38
  end
36
39
  end
37
40
 
38
41
  def self.active?
39
- where(type: self.to_s, active: true).count > 0
42
+ where(type: to_s, active: true).count > 0
40
43
  end
41
44
 
42
45
  def method_type
43
46
  type.demodulize.downcase
44
47
  end
45
48
 
46
- def self.find_with_destroyed *args
49
+ def self.find_with_destroyed(*args)
47
50
  unscoped { find(*args) }
48
51
  end
49
52
 
@@ -57,19 +60,19 @@ module Spree
57
60
 
58
61
  # Custom gateways should redefine this method. See Gateway implementation
59
62
  # as an example
60
- def reusable_sources(order)
63
+ def reusable_sources(_order)
61
64
  []
62
65
  end
63
66
 
64
67
  def auto_capture?
65
- self.auto_capture.nil? ? Spree::Config[:auto_capture] : self.auto_capture
68
+ auto_capture.nil? ? Spree::Config[:auto_capture] : auto_capture
66
69
  end
67
70
 
68
- def supports?(source)
71
+ def supports?(_source)
69
72
  true
70
73
  end
71
74
 
72
- def cancel(response)
75
+ def cancel(_response)
73
76
  raise ::NotImplementedError, 'You must implement cancel method for this payment method.'
74
77
  end
75
78
 
@@ -69,9 +69,9 @@ module Spree::Preferences
69
69
  end
70
70
  end
71
71
 
72
- def self.preference name, type, options={}
72
+ def self.preference(name, type, options = {})
73
73
  super
74
- alias_method "#{name}", "preferred_#{name}"
74
+ alias_method name.to_s, "preferred_#{name}"
75
75
  alias_method "#{name}=", "preferred_#{name}="
76
76
  end
77
77
  end
@@ -110,7 +110,7 @@ module Spree::Preferences::Preferable
110
110
  if !value ||
111
111
  value == 0 ||
112
112
  value =~ /\A(f|false|0)\Z/i ||
113
- (value.respond_to? :empty? and value.empty?)
113
+ (value.respond_to?(:empty?) && value.empty?)
114
114
  false
115
115
  else
116
116
  true
@@ -4,7 +4,7 @@ module Spree::Preferences
4
4
  []
5
5
  end
6
6
 
7
- def preference(name, type, options={})
7
+ def preference(name, type, options = {})
8
8
  options.assert_valid_keys(:default)
9
9
  default = options[:default]
10
10
  default = ->{ options[:default] } unless default.is_a?(Proc)
@@ -1,6 +1,6 @@
1
1
  module Spree::Preferences
2
2
  class ScopedStore
3
- def initialize prefix, suffix=nil
3
+ def initialize(prefix, suffix = nil)
4
4
  @prefix = prefix
5
5
  @suffix = suffix
6
6
  end
@@ -9,20 +9,21 @@ module Spree::Preferences
9
9
  Spree::Preferences::Store.instance
10
10
  end
11
11
 
12
- def fetch key, &block
12
+ def fetch(key, &block)
13
13
  store.fetch(key_for(key), &block)
14
14
  end
15
15
 
16
- def []= key, value
16
+ def []=(key, value)
17
17
  store[key_for(key)] = value
18
18
  end
19
19
 
20
- def delete key
20
+ def delete(key)
21
21
  store.delete(key_for(key))
22
22
  end
23
23
 
24
24
  private
25
- def key_for key
25
+
26
+ def key_for(key)
26
27
  [rails_cache_id, @prefix, key, @suffix].compact.join('/')
27
28
  end
28
29
 
@@ -28,7 +28,7 @@ module Spree
28
28
  end
29
29
 
30
30
  def initialize
31
- @store = Hash.new do |h,klass|
31
+ @store = Hash.new do |h, klass|
32
32
  h[klass] = {}
33
33
  end
34
34
  end
@@ -22,14 +22,14 @@ module Spree
22
22
  if respond_to?(:preference_source) && preference_source
23
23
  self.class.preference_sources[preference_source] || {}
24
24
  else
25
- self[:preferences]
25
+ super
26
26
  end
27
27
  end
28
28
 
29
29
  def preferences=(val)
30
30
  if respond_to?(:preference_source) && preference_source
31
31
  else
32
- self[:preferences] = val
32
+ super
33
33
  end
34
34
  end
35
35
  end
@@ -4,9 +4,7 @@
4
4
  require 'singleton'
5
5
 
6
6
  module Spree::Preferences
7
-
8
7
  class StoreInstance
9
-
10
8
  def initialize
11
9
  @cache = Rails.cache
12
10
  end
@@ -19,7 +17,7 @@ module Spree::Preferences
19
17
 
20
18
  def exist?(key)
21
19
  @cache.exist?(key) ||
22
- should_persist? && Spree::Preference.where(:key => key).exists?
20
+ should_persist? && Spree::Preference.where(key: key).exists?
23
21
  end
24
22
 
25
23
  def get(key)
@@ -68,7 +66,7 @@ module Spree::Preferences
68
66
  def persist(cache_key, value)
69
67
  return unless should_persist?
70
68
 
71
- preference = Spree::Preference.where(:key => cache_key).first_or_initialize
69
+ preference = Spree::Preference.where(key: cache_key).first_or_initialize
72
70
  preference.value = value
73
71
  preference.save
74
72
  end
@@ -83,11 +81,9 @@ module Spree::Preferences
83
81
  def should_persist?
84
82
  Spree::Preference.table_exists?
85
83
  end
86
-
87
84
  end
88
85
 
89
86
  class Store < StoreInstance
90
87
  include Singleton
91
88
  end
92
-
93
89
  end
@@ -1,23 +1,27 @@
1
1
  module Spree
2
2
  class Price < Spree::Base
3
3
  acts_as_paranoid
4
+
5
+ MAXIMUM_AMOUNT = BigDecimal('99_999_999.99')
6
+
4
7
  belongs_to :variant, -> { with_deleted }, class_name: 'Spree::Variant', touch: true
5
8
 
6
9
  validate :check_price
7
- validates :amount, numericality: { greater_than_or_equal_to: 0 }, allow_nil: true
8
- validate :validate_amount_maximum
10
+ validates :amount, allow_nil: true, numericality: {
11
+ greater_than_or_equal_to: 0,
12
+ less_than_or_equal_to: MAXIMUM_AMOUNT
13
+ }
14
+
15
+ scope :currently_valid, -> { where(is_default: true) }
16
+ scope :with_default_attributes, -> { where(Spree::Config.default_pricing_options.desired_attributes) }
9
17
  after_save :set_default_price
10
18
 
11
19
  extend DisplayMoney
12
20
  money_methods :amount, :price
21
+ alias_method :money, :display_amount
13
22
 
14
23
  self.whitelisted_ransackable_attributes = ['amount']
15
24
 
16
- # @return [Spree::Money] this price as a Spree::Money object
17
- def money
18
- Spree::Money.new(amount || 0, { currency: currency })
19
- end
20
-
21
25
  # An alias for #amount
22
26
  def price
23
27
  amount
@@ -37,21 +41,15 @@ module Spree
37
41
  self.currency ||= Spree::Config[:currency]
38
42
  end
39
43
 
40
- def maximum_amount
41
- BigDecimal '999999.99'
42
- end
43
-
44
- def validate_amount_maximum
45
- if amount && amount > maximum_amount
46
- errors.add :amount, I18n.t('errors.messages.less_than_or_equal_to', count: maximum_amount)
47
- end
48
- end
49
-
50
44
  def set_default_price
51
45
  if is_default?
52
- other_default_prices = variant.prices.where(currency: self.currency, is_default: true).where.not(id: self.id)
53
- other_default_prices.each { |p| p.update_attributes!(is_default: false) }
46
+ other_default_prices = variant.prices.currently_valid.where(pricing_options.desired_attributes).where.not(id: id)
47
+ other_default_prices.update_all(is_default: false)
54
48
  end
55
49
  end
50
+
51
+ def pricing_options
52
+ Spree::Config.pricing_options_class.from_price(self)
53
+ end
56
54
  end
57
55
  end
@@ -5,16 +5,16 @@ module Spree
5
5
  end
6
6
 
7
7
  def self.add_search_scope(name, &block)
8
- self.singleton_class.send(:define_method, name.to_sym, &block)
8
+ singleton_class.send(:define_method, name.to_sym, &block)
9
9
  search_scopes << name.to_sym
10
10
  end
11
11
 
12
12
  def self.property_conditions(property)
13
13
  properties = Property.table_name
14
- conditions = case property
14
+ case property
15
15
  when String then { "#{properties}.name" => property }
16
16
  when Property then { "#{properties}.id" => property.id }
17
- else { "#{properties}.id" => property.to_i }
17
+ else { "#{properties}.id" => property.to_i }
18
18
  end
19
19
  end
20
20
 
@@ -24,23 +24,23 @@ module Spree
24
24
  scope :descend_by_name, -> { order(name: :desc) }
25
25
 
26
26
  add_search_scope :ascend_by_master_price do
27
- joins(:master => :default_price).order(Spree::Price.arel_table[:amount].asc)
27
+ joins(master: :default_price).order(Spree::Price.arel_table[:amount].asc)
28
28
  end
29
29
 
30
30
  add_search_scope :descend_by_master_price do
31
- joins(:master => :default_price).order(Spree::Price.arel_table[:amount].desc)
31
+ joins(master: :default_price).order(Spree::Price.arel_table[:amount].desc)
32
32
  end
33
33
 
34
34
  add_search_scope :price_between do |low, high|
35
- joins(:master => :default_price).where(Price.table_name => { :amount => low..high })
35
+ joins(master: :default_price).where(Price.table_name => { amount: low..high })
36
36
  end
37
37
 
38
38
  add_search_scope :master_price_lte do |price|
39
- joins(:master => :default_price).where("#{price_table_name}.amount <= ?", price)
39
+ joins(master: :default_price).where("#{price_table_name}.amount <= ?", price)
40
40
  end
41
41
 
42
42
  add_search_scope :master_price_gte do |price|
43
- joins(:master => :default_price).where("#{price_table_name}.amount >= ?", price)
43
+ joins(master: :default_price).where("#{price_table_name}.amount >= ?", price)
44
44
  end
45
45
 
46
46
  # This scope selects products in taxon AND all its descendants
@@ -91,9 +91,9 @@ module Spree
91
91
  add_search_scope :with_option do |option|
92
92
  option_types = OptionType.table_name
93
93
  conditions = case option
94
- when String then { "#{option_types}.name" => option }
95
- when OptionType then { "#{option_types}.id" => option.id }
96
- else { "#{option_types}.id" => option.to_i }
94
+ when String then { "#{option_types}.name" => option }
95
+ when OptionType then { "#{option_types}.id" => option.id }
96
+ else { "#{option_types}.id" => option.to_i }
97
97
  end
98
98
 
99
99
  joins(:option_types).where(conditions)
@@ -102,8 +102,8 @@ module Spree
102
102
  add_search_scope :with_option_value do |option, value|
103
103
  option_values = OptionValue.table_name
104
104
  option_type_id = case option
105
- when String then OptionType.find_by(name: option) || option.to_i
106
- when OptionType then option.id
105
+ when String then OptionType.find_by(name: option) || option.to_i
106
+ when OptionType then option.id
107
107
  else option.to_i
108
108
  end
109
109
 
@@ -151,7 +151,7 @@ module Spree
151
151
  # :order => 'COALESCE(cnt, 0) DESC'
152
152
  add_search_scope :descend_by_popularity do
153
153
  joins(:master).
154
- order(%Q{
154
+ order(%{
155
155
  COALESCE((
156
156
  SELECT
157
157
  COUNT(#{LineItem.quoted_table_name}.id)
@@ -172,12 +172,13 @@ module Spree
172
172
  end
173
173
 
174
174
  # Can't use add_search_scope for this as it needs a default argument
175
- def self.available(available_on = nil, currency = nil)
176
- joins(:master => :prices).where("#{Product.quoted_table_name}.available_on <= ?", available_on || Time.current)
175
+ def self.available(available_on = nil, _currency = nil)
176
+ joins(master: :prices).where("#{Product.quoted_table_name}.available_on <= ?", available_on || Time.current)
177
177
  end
178
178
  search_scopes << :available
179
179
 
180
180
  def self.active(currency = nil)
181
+ Spree::Deprecation.warn("This scope is deprecated, please use .available instead", caller)
181
182
  not_deleted.available(nil, currency)
182
183
  end
183
184
  search_scopes << :active
@@ -240,7 +241,7 @@ module Spree
240
241
  when ActiveRecord::Base then t
241
242
  when String
242
243
  Taxon.find_by(name: t) ||
243
- Taxon.where("#{taxons}.permalink LIKE ? OR #{taxons}.permalink = ?", "%/#{t}/", "#{t}/").first
244
+ Taxon.where("#{taxons}.permalink LIKE ? OR #{taxons}.permalink = ?", "%/#{t}/", "#{t}/").first
244
245
  end
245
246
  }.compact.flatten.uniq
246
247
  end