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
@@ -11,19 +11,19 @@ module Spree
11
11
  Spree.t(:flexible_rate)
12
12
  end
13
13
 
14
- def self.available?(object)
14
+ def self.available?(_object)
15
15
  true
16
16
  end
17
17
 
18
18
  def compute(object)
19
19
  sum = 0
20
- max = self.preferred_max_items.to_i
20
+ max = preferred_max_items.to_i
21
21
  items_count = object.quantity
22
22
  items_count.times do |i|
23
23
  if i == 0
24
- sum += self.preferred_first_item.to_f
24
+ sum += preferred_first_item.to_f
25
25
  elsif ((max > 0) && (i <= (max - 1))) || (max == 0)
26
- sum += self.preferred_additional_item.to_f
26
+ sum += preferred_additional_item.to_f
27
27
  end
28
28
  end
29
29
 
@@ -1,5 +1,4 @@
1
1
  module Spree
2
-
3
2
  # A calculator for promotions that calculates a percent-off discount
4
3
  # for all matching products in an order. This should not be used as a
5
4
  # shipping calculator since it would be the same thing as a flat percent
@@ -15,21 +14,21 @@ module Spree
15
14
  Spree.t(:percent_per_item)
16
15
  end
17
16
 
18
- def compute(object=nil)
17
+ def compute(object = nil)
19
18
  return 0 if object.nil?
20
- object.line_items.reduce(0) do |sum, line_item|
21
- sum += value_for_line_item(line_item)
22
- end
19
+ object.line_items.map { |line_item|
20
+ value_for_line_item(line_item)
21
+ }.sum
23
22
  end
24
23
 
25
- private
24
+ private
26
25
 
27
26
  # Returns all products that match this calculator, but only if the calculator
28
27
  # is attached to a promotion. If attached to a ShippingMethod, nil is returned.
29
28
  # Copied from per_item.rb
30
29
  def matching_products
31
30
  if compute_on_promotion?
32
- self.calculable.promotion.rules.map do |rule|
31
+ calculable.promotion.rules.map do |rule|
33
32
  rule.respond_to?(:products) ? rule.products : []
34
33
  end.flatten
35
34
  end
@@ -37,14 +36,14 @@ module Spree
37
36
 
38
37
  def value_for_line_item(line_item)
39
38
  if compute_on_promotion?
40
- return 0 unless matching_products.blank? or matching_products.include?(line_item.product)
39
+ return 0 unless matching_products.blank? || matching_products.include?(line_item.product)
41
40
  end
42
41
  ((line_item.price * line_item.quantity) * preferred_percent) / 100
43
42
  end
44
43
 
45
44
  # Determines wether or not the calculable object is a promotion
46
45
  def compute_on_promotion?
47
- @compute_on_promotion ||= self.calculable.respond_to?(:promotion)
46
+ @compute_on_promotion ||= calculable.respond_to?(:promotion)
48
47
  end
49
48
  end
50
49
  end
@@ -19,10 +19,10 @@ module Spree
19
19
  base = object.respond_to?(:amount) ? object.amount : BigDecimal(object.to_s)
20
20
  end
21
21
 
22
- if base < self.preferred_minimal_amount
23
- self.preferred_normal_amount
22
+ if base < preferred_minimal_amount
23
+ preferred_normal_amount
24
24
  else
25
- self.preferred_discount_amount
25
+ preferred_discount_amount
26
26
  end
27
27
  end
28
28
  end
@@ -3,14 +3,13 @@ require_dependency 'spree/returns_calculator'
3
3
  module Spree
4
4
  module Calculator::Returns
5
5
  class DefaultRefundAmount < ReturnsCalculator
6
-
7
6
  def self.description
8
7
  Spree.t(:default_refund_amount)
9
8
  end
10
9
 
11
10
  def compute(return_item)
12
11
  return 0.0.to_d if return_item.part_of_exchange?
13
- weighted_order_adjustment_amount(return_item.inventory_unit) + weighted_line_item_pre_tax_amount(return_item.inventory_unit)
12
+ weighted_order_adjustment_amount(return_item.inventory_unit) + weighted_line_item_amount(return_item.inventory_unit)
14
13
  end
15
14
 
16
15
  private
@@ -19,18 +18,18 @@ module Spree
19
18
  inventory_unit.order.adjustments.eligible.non_tax.sum(:amount) * percentage_of_order_total(inventory_unit)
20
19
  end
21
20
 
22
- def weighted_line_item_pre_tax_amount(inventory_unit)
23
- inventory_unit.line_item.pre_tax_amount * percentage_of_line_item(inventory_unit)
21
+ def weighted_line_item_amount(inventory_unit)
22
+ inventory_unit.line_item.discounted_amount * percentage_of_line_item(inventory_unit)
24
23
  end
25
24
 
26
25
  def percentage_of_order_total(inventory_unit)
27
- return 0.0 if inventory_unit.order.pre_tax_item_amount.zero?
28
- weighted_line_item_pre_tax_amount(inventory_unit) / inventory_unit.order.pre_tax_item_amount
29
- end
26
+ return 0.0 if inventory_unit.order.discounted_item_amount.zero?
27
+ weighted_line_item_amount(inventory_unit) / inventory_unit.order.discounted_item_amount
28
+ end
30
29
 
31
- def percentage_of_line_item(inventory_unit)
32
- 1 / BigDecimal.new(inventory_unit.line_item.quantity)
33
- end
34
- end
35
- end
30
+ def percentage_of_line_item(inventory_unit)
31
+ 1 / BigDecimal.new(inventory_unit.line_item.quantity)
32
+ end
33
+ end
34
+ end
36
35
  end
@@ -14,7 +14,7 @@ module Spree
14
14
  end
15
15
 
16
16
  def compute_from_price(price)
17
- value = price * BigDecimal(self.preferred_flat_percent.to_s) / 100.0
17
+ value = price * BigDecimal(preferred_flat_percent.to_s) / 100.0
18
18
  (value * 100).round.to_f / 100
19
19
  end
20
20
  end
@@ -10,8 +10,8 @@ module Spree
10
10
  Spree.t(:shipping_flat_rate_per_order)
11
11
  end
12
12
 
13
- def compute_package(package)
14
- self.preferred_amount
13
+ def compute_package(_package)
14
+ preferred_amount
15
15
  end
16
16
  end
17
17
  end
@@ -18,13 +18,13 @@ module Spree
18
18
 
19
19
  def compute_from_quantity(quantity)
20
20
  sum = 0
21
- max = self.preferred_max_items.to_i
21
+ max = preferred_max_items.to_i
22
22
  quantity.times do |i|
23
23
  # check max value to avoid divide by 0 errors
24
24
  if (max == 0 && i == 0) || (max > 0) && (i % max == 0)
25
- sum += self.preferred_first_item.to_f
25
+ sum += preferred_first_item.to_f
26
26
  else
27
- sum += self.preferred_additional_item.to_f
27
+ sum += preferred_additional_item.to_f
28
28
  end
29
29
  end
30
30
 
@@ -15,7 +15,7 @@ module Spree
15
15
  end
16
16
 
17
17
  def compute_from_quantity(quantity)
18
- self.preferred_amount * quantity
18
+ preferred_amount * quantity
19
19
  end
20
20
  end
21
21
  end
@@ -17,10 +17,10 @@ module Spree
17
17
  end
18
18
 
19
19
  def compute_from_price(price)
20
- if price < self.preferred_minimal_amount
21
- self.preferred_normal_amount
20
+ if price < preferred_minimal_amount
21
+ preferred_normal_amount
22
22
  else
23
- self.preferred_discount_amount
23
+ preferred_discount_amount
24
24
  end
25
25
  end
26
26
  end
@@ -19,11 +19,12 @@ module Spree
19
19
  end
20
20
 
21
21
  def compute(object)
22
- base, amount = preferred_tiers.sort.reverse.detect{ |b,_| object.amount >= b }
22
+ _base, amount = preferred_tiers.sort.reverse.detect{ |b, _| object.amount >= b }
23
23
  amount || preferred_base_amount
24
24
  end
25
25
 
26
26
  private
27
+
27
28
  def preferred_tiers_content
28
29
  if preferred_tiers.is_a? Hash
29
30
  unless preferred_tiers.keys.all?{ |k| k.is_a?(Numeric) && k > 0 }
@@ -24,11 +24,12 @@ module Spree
24
24
 
25
25
  def compute(object)
26
26
  order = object.is_a?(Order) ? object : object.order
27
- base, percent = preferred_tiers.sort.reverse.detect{ |b,_| order.item_total >= b }
27
+ _base, percent = preferred_tiers.sort.reverse.detect{ |b, _| order.item_total >= b }
28
28
  (object.amount * (percent || preferred_base_percent) / 100).round(2)
29
29
  end
30
30
 
31
31
  private
32
+
32
33
  def preferred_tiers_content
33
34
  if preferred_tiers.is_a? Hash
34
35
  unless preferred_tiers.keys.all?{ |k| k.is_a?(Numeric) && k > 0 }
@@ -11,7 +11,7 @@ module Spree
11
11
  method = "compute_#{computable_name}".to_sym
12
12
  calculator_class = self.class
13
13
  if respond_to?(method)
14
- self.send(method, computable)
14
+ send(method, computable)
15
15
  else
16
16
  raise NotImplementedError, "Please implement '#{method}(#{computable_name})' in your calculator: #{calculator_class.name}"
17
17
  end
@@ -24,7 +24,7 @@ module Spree
24
24
 
25
25
  ###################################################################
26
26
 
27
- def self.register(*klasses)
27
+ def self.register(*_klasses)
28
28
  end
29
29
 
30
30
  # Returns all calculators applicable for kind of work
@@ -40,7 +40,7 @@ module Spree
40
40
  self.class.description
41
41
  end
42
42
 
43
- def available?(object)
43
+ def available?(_object)
44
44
  true
45
45
  end
46
46
  end
@@ -4,8 +4,8 @@ class Spree::Carton < Spree::Base
4
4
  belongs_to :shipping_method, class_name: 'Spree::ShippingMethod', inverse_of: :cartons
5
5
 
6
6
  has_many :inventory_units, class_name: "Spree::InventoryUnit", inverse_of: :carton, dependent: :nullify
7
- has_many :orders, -> { uniq }, through: :inventory_units
8
- has_many :shipments, -> { uniq }, through: :inventory_units
7
+ has_many :orders, -> { distinct }, through: :inventory_units
8
+ has_many :shipments, -> { distinct }, through: :inventory_units
9
9
 
10
10
  validates :address, presence: true
11
11
  validates :stock_location, presence: true
@@ -8,14 +8,17 @@ module Spree
8
8
  def self.states_required_by_country_id
9
9
  ActiveSupport::Deprecation.warn "Spree::Country.states_required_by_country_id is deprecated and will be removed from future releases, Implement it yourself.", caller
10
10
  states_required = Hash.new(true)
11
- all.each { |country| states_required[country.id.to_s]= country.states_required }
11
+ all.each { |country| states_required[country.id.to_s] = country.states_required }
12
12
  states_required
13
13
  end
14
14
 
15
15
  def self.default
16
- if default_country_id = Spree::Config[:default_country_id]
17
- find_by_id(default_country_id)
18
- end || first
16
+ if Spree::Config.default_country_id
17
+ ActiveSupport::Deprecation.warn("Setting your default country via its ID is deprecated. Please set your default country via the `default_country_iso` setting.", caller)
18
+ find_by(id: Spree::Config.default_country_id) || find_by!(iso: Spree::Config.default_country_iso)
19
+ else
20
+ find_by!(iso: Spree::Config.default_country_iso)
21
+ end
19
22
  end
20
23
 
21
24
  def <=>(other)
@@ -48,11 +48,11 @@ module Spree
48
48
  return unless expiry.present?
49
49
 
50
50
  self[:month], self[:year] =
51
- if expiry.match(/\d{2}\s?\/\s?\d{2,4}/) # will match mm/yy and mm / yyyy
52
- expiry.delete(' ').split('/')
53
- elsif match = expiry.match(/(\d{2})(\d{2,4})/) # will match mmyy and mmyyyy
54
- [match[1], match[2]]
55
- end
51
+ if expiry =~ /\d{2}\s?\/\s?\d{2,4}/ # will match mm/yy and mm / yyyy
52
+ expiry.delete(' ').split('/')
53
+ elsif match = expiry.match(/(\d{2})(\d{2,4})/) # will match mmyy and mmyyyy
54
+ [match[1], match[2]]
55
+ end
56
56
  if self[:year]
57
57
  self[:year] = "20" + self[:year] if self[:year].length == 2
58
58
  self[:year] = self[:year].to_i
@@ -64,7 +64,11 @@ module Spree
64
64
  #
65
65
  # @param num [String] the desired credit card number
66
66
  def number=(num)
67
- @number = num.gsub(/[^0-9]/, '') rescue nil
67
+ @number = begin
68
+ num.gsub(/[^0-9]/, '')
69
+ rescue
70
+ nil
71
+ end
68
72
  end
69
73
 
70
74
  # Sets the credit card type, converting it to the preferred internal
@@ -75,18 +79,18 @@ module Spree
75
79
  # cc_type is set by jquery.payment, which helpfully provides different
76
80
  # types from Active Merchant. Converting them is necessary.
77
81
  self[:cc_type] = case type
78
- when 'mastercard', 'maestro' then 'master'
79
- when 'amex' then 'american_express'
80
- when 'dinersclub' then 'diners_club'
81
- when '' then try_type_from_number
82
+ when 'mastercard', 'maestro' then 'master'
83
+ when 'amex' then 'american_express'
84
+ when 'dinersclub' then 'diners_club'
85
+ when '' then try_type_from_number
82
86
  else type
83
87
  end
84
88
  end
85
89
 
86
90
  # Sets the last digits field based on the assigned credit card number.
87
91
  def set_last_digits
88
- number.to_s.gsub!(/\s/,'')
89
- verification_value.to_s.gsub!(/\s/,'')
92
+ number.to_s.gsub!(/\s/, '')
93
+ verification_value.to_s.gsub!(/\s/, '')
90
94
  self.last_digits ||= number.to_s.length <= 4 ? number : number.to_s.slice(-4..-1)
91
95
  end
92
96
 
@@ -94,7 +98,7 @@ module Spree
94
98
  # number, otherwise the empty string
95
99
  def try_type_from_number
96
100
  numbers = number.delete(' ') if number
97
- CARD_TYPES.find{|type, pattern| return type.to_s if numbers =~ pattern}.to_s
101
+ CARD_TYPES.find{ |type, pattern| return type.to_s if numbers =~ pattern }.to_s
98
102
  end
99
103
 
100
104
  # @return [Boolean] true when a verification value is present
@@ -163,24 +167,24 @@ module Spree
163
167
  # card that represents this credit card
164
168
  def to_active_merchant
165
169
  ActiveMerchant::Billing::CreditCard.new(
166
- :number => number,
167
- :month => month,
168
- :year => year,
169
- :verification_value => verification_value,
170
- :first_name => first_name,
171
- :last_name => last_name,
170
+ number: number,
171
+ month: month,
172
+ year: year,
173
+ verification_value: verification_value,
174
+ first_name: first_name,
175
+ last_name: last_name
172
176
  )
173
177
  end
174
178
 
175
179
  private
176
180
 
177
181
  def require_card_numbers?
178
- !self.encrypted_data.present? && !self.has_payment_profile?
182
+ !encrypted_data.present? && !has_payment_profile?
179
183
  end
180
184
 
181
185
  def ensure_one_default
182
- if self.user_id && self.default
183
- CreditCard.where(default: true).where.not(id: self.id).where(user_id: self.user_id).each do |ucc|
186
+ if user_id && default
187
+ CreditCard.where(default: true).where.not(id: id).where(user_id: user_id).each do |ucc|
184
188
  ucc.update_columns(default: false, updated_at: Time.current)
185
189
  end
186
190
  end
@@ -16,10 +16,9 @@ module Spree
16
16
  accepts_nested_attributes_for :return_items
17
17
 
18
18
  extend DisplayMoney
19
- money_methods pre_tax_total: { currency: Spree::Config[:currency] },
20
- total: { currency: Spree::Config[:currency] }
21
-
19
+ money_methods :pre_tax_total, :total, :amount
22
20
 
21
+ delegate :currency, to: :order
23
22
  delegate :id, to: :order, prefix: true, allow_nil: true
24
23
 
25
24
  def total
@@ -27,7 +26,11 @@ module Spree
27
26
  end
28
27
 
29
28
  def pre_tax_total
30
- return_items.sum(:pre_tax_amount)
29
+ return_items.map(&:pre_tax_amount).sum
30
+ end
31
+
32
+ def amount
33
+ return_items.sum(:amount)
31
34
  end
32
35
 
33
36
  # Temporarily tie a customer_return to one order
@@ -52,7 +55,7 @@ module Spree
52
55
 
53
56
  def generate_number
54
57
  self.number ||= loop do
55
- random = "CR#{Array.new(9){rand(9)}.join}"
58
+ random = "CR#{Array.new(9){ rand(9) }.join}"
56
59
  break random unless self.class.exists?(number: random)
57
60
  end
58
61
  end
@@ -66,7 +69,5 @@ module Spree
66
69
  def inventory_units
67
70
  return_items.flat_map(&:inventory_unit)
68
71
  end
69
-
70
72
  end
71
73
  end
72
-
@@ -1,6 +1,7 @@
1
1
  module Spree
2
2
  class Exchange
3
3
  class UnableToCreateShipments < StandardError; end
4
+ extend ActiveModel::Naming
4
5
 
5
6
  def initialize(order, reimbursement_objects)
6
7
  @order = order
@@ -38,14 +39,5 @@ module Spree
38
39
  def self.param_key
39
40
  "spree_exchange"
40
41
  end
41
-
42
- def self.model_name
43
- Spree::Exchange
44
- end
45
-
46
- def model_name
47
- self.class.model_name
48
- end
49
-
50
42
  end
51
43
  end
@@ -1,9 +1,9 @@
1
1
  module Spree
2
2
  class Gateway::Bogus < Gateway
3
- TEST_VISA = ['4111111111111111','4012888888881881','4222222222222']
4
- TEST_MC = ['5500000000000004','5555555555554444','5105105105105100']
5
- TEST_AMEX = ['378282246310005','371449635398431','378734493671000','340000000000009']
6
- TEST_DISC = ['6011000000000004','6011111111111117','6011000990139424']
3
+ TEST_VISA = ['4111111111111111', '4012888888881881', '4222222222222']
4
+ TEST_MC = ['5500000000000004', '5555555555554444', '5105105105105100']
5
+ TEST_AMEX = ['378282246310005', '371449635398431', '378734493671000', '340000000000009']
6
+ TEST_DISC = ['6011000000000004', '6011111111111117', '6011000990139424']
7
7
 
8
8
  VALID_CCS = ['1', TEST_VISA, TEST_MC, TEST_AMEX, TEST_DISC].flatten
9
9
 
@@ -17,47 +17,46 @@ module Spree
17
17
  return if payment.source.has_payment_profile?
18
18
  # simulate the storage of credit card profile using remote service
19
19
  if success = VALID_CCS.include?(payment.source.number)
20
- payment.source.update_attributes(:gateway_customer_profile_id => generate_profile_id(success))
20
+ payment.source.update_attributes(gateway_customer_profile_id: generate_profile_id(success))
21
21
  end
22
22
  end
23
23
 
24
- def authorize(money, credit_card, options = {})
24
+ def authorize(_money, credit_card, _options = {})
25
25
  profile_id = credit_card.gateway_customer_profile_id
26
- if VALID_CCS.include? credit_card.number or (profile_id and profile_id.starts_with? 'BGS-')
27
- ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, :test => true, :authorization => '12345', :avs_result => { :code => 'D' })
26
+ if VALID_CCS.include?(credit_card.number) || (profile_id && profile_id.starts_with?('BGS-'))
27
+ ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true, authorization: '12345', avs_result: { code: 'D' })
28
28
  else
29
- ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', { :message => 'Bogus Gateway: Forced failure' }, :test => true)
29
+ ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', { message: 'Bogus Gateway: Forced failure' }, test: true)
30
30
  end
31
31
  end
32
32
 
33
- def purchase(money, credit_card, options = {})
33
+ def purchase(_money, credit_card, _options = {})
34
34
  profile_id = credit_card.gateway_customer_profile_id
35
- if VALID_CCS.include? credit_card.number or (profile_id and profile_id.starts_with? 'BGS-')
36
- ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, :test => true, :authorization => '12345', :avs_result => { :code => 'M' })
35
+ if VALID_CCS.include?(credit_card.number) || (profile_id && profile_id.starts_with?('BGS-'))
36
+ ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true, authorization: '12345', avs_result: { code: 'M' })
37
37
  else
38
- ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', :message => 'Bogus Gateway: Forced failure', :test => true)
38
+ ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', message: 'Bogus Gateway: Forced failure', test: true)
39
39
  end
40
40
  end
41
41
 
42
- def credit(money, credit_card, response_code, options = {})
43
- ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, :test => true, :authorization => '12345')
42
+ def credit(_money, _credit_card, _response_code, _options = {})
43
+ ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true, authorization: '12345')
44
44
  end
45
45
 
46
- def capture(money, authorization, gateway_options)
46
+ def capture(_money, authorization, _gateway_options)
47
47
  if authorization == '12345'
48
- ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, :test => true)
48
+ ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true)
49
49
  else
50
- ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', :error => 'Bogus Gateway: Forced failure', :test => true)
50
+ ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', error: 'Bogus Gateway: Forced failure', test: true)
51
51
  end
52
-
53
52
  end
54
53
 
55
- def void(response_code, credit_card, options = {})
56
- ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, :test => true, :authorization => '12345')
54
+ def void(_response_code, _credit_card, _options = {})
55
+ ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true, authorization: '12345')
57
56
  end
58
57
 
59
- def cancel(response_code)
60
- ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, :test => true, :authorization => '12345')
58
+ def cancel(_response_code)
59
+ ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true, authorization: '12345')
61
60
  end
62
61
 
63
62
  def test?
@@ -74,14 +73,15 @@ module Spree
74
73
  end
75
74
 
76
75
  private
77
- def generate_profile_id(success)
78
- record = true
79
- prefix = success ? 'BGS' : 'FAIL'
80
- while record
81
- random = "#{prefix}-#{Array.new(6){rand(6)}.join}"
82
- record = CreditCard.where(:gateway_customer_profile_id => random).first
83
- end
84
- random
76
+
77
+ def generate_profile_id(success)
78
+ record = true
79
+ prefix = success ? 'BGS' : 'FAIL'
80
+ while record
81
+ random = "#{prefix}-#{Array.new(6){ rand(6) }.join}"
82
+ record = CreditCard.where(gateway_customer_profile_id: random).first
85
83
  end
84
+ random
85
+ end
86
86
  end
87
87
  end
@@ -1,26 +1,24 @@
1
1
  module Spree
2
2
  # Bogus Gateway that doesn't support payment profiles.
3
3
  class Gateway::BogusSimple < Gateway::Bogus
4
-
5
4
  def payment_profiles_supported?
6
5
  false
7
6
  end
8
7
 
9
- def authorize(money, credit_card, options = {})
8
+ def authorize(_money, credit_card, _options = {})
10
9
  if VALID_CCS.include? credit_card.number
11
- ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, :test => true, :authorization => '12345', :avs_result => { :code => 'A' })
10
+ ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true, authorization: '12345', avs_result: { code: 'A' })
12
11
  else
13
- ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', { :message => 'Bogus Gateway: Forced failure' }, :test => true)
12
+ ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', { message: 'Bogus Gateway: Forced failure' }, test: true)
14
13
  end
15
14
  end
16
15
 
17
- def purchase(money, credit_card, options = {})
16
+ def purchase(_money, credit_card, _options = {})
18
17
  if VALID_CCS.include? credit_card.number
19
- ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, :test => true, :authorization => '12345', :avs_result => { :code => 'A' })
18
+ ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, test: true, authorization: '12345', avs_result: { code: 'A' })
20
19
  else
21
- ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', :message => 'Bogus Gateway: Forced failure', :test => true)
20
+ ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', message: 'Bogus Gateway: Forced failure', test: true)
22
21
  end
23
22
  end
24
-
25
23
  end
26
24
  end
@@ -11,14 +11,9 @@ module Spree
11
11
  CreditCard
12
12
  end
13
13
 
14
- # instantiates the selected gateway and configures with the options stored in the database
15
- def self.current
16
- super
17
- end
18
-
19
14
  def provider
20
15
  gateway_options = options
21
- gateway_options.delete :login if gateway_options.has_key?(:login) and gateway_options[:login].nil?
16
+ gateway_options.delete :login if gateway_options.key?(:login) && gateway_options[:login].nil?
22
17
  if gateway_options[:server]
23
18
  ActiveMerchant::Billing::Base.gateway_mode = gateway_options[:server].to_sym
24
19
  end
@@ -39,11 +34,12 @@ module Spree
39
34
 
40
35
  def supports?(source)
41
36
  return true unless provider_class.respond_to? :supports?
42
- return false unless source.brand
43
- provider_class.supports?(source.brand)
37
+ return true if source.brand && provider_class.supports?(source.brand)
38
+ source.has_payment_profile?
44
39
  end
45
40
 
46
41
  def disable_customer_profile(source)
42
+ ActiveSupport::Deprecation.warn("Gateway#disable_customer_profile is deprecated")
47
43
  if source.is_a? CreditCard
48
44
  source.update_column :gateway_customer_profile_id, nil
49
45
  else
@@ -52,19 +48,17 @@ module Spree
52
48
  end
53
49
 
54
50
  def sources_by_order(order)
55
- source_ids = order.payments.where(payment_method_id: self.id).pluck(:source_id).uniq
51
+ source_ids = order.payments.where(payment_method_id: id).pluck(:source_id).uniq
56
52
  payment_source_class.where(id: source_ids).with_payment_profile
57
53
  end
58
54
 
59
55
  def reusable_sources(order)
60
56
  if order.completed?
61
- sources_by_order order
57
+ sources_by_order(order)
58
+ elsif order.user_id
59
+ credit_cards.where(user_id: order.user_id).with_payment_profile
62
60
  else
63
- if order.user_id
64
- self.credit_cards.where(user_id: order.user_id).with_payment_profile
65
- else
66
- []
67
- end
61
+ []
68
62
  end
69
63
  end
70
64
  end