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
@@ -44,18 +44,19 @@ module Spree
44
44
  end
45
45
 
46
46
  private
47
- def set_up_options
48
- options_attrs.each do |name|
49
- option_type = Spree::OptionType.where(name: name).first_or_initialize do |option_type|
50
- option_type.presentation = name
51
- option_type.save!
52
- end
53
47
 
54
- unless product.option_types.include?(option_type)
55
- product.option_types << option_type
56
- end
48
+ def set_up_options
49
+ options_attrs.each do |name|
50
+ option_type = Spree::OptionType.where(name: name).first_or_initialize do |ot|
51
+ ot.presentation = name
52
+ ot.save!
53
+ end
54
+
55
+ unless product.option_types.include?(option_type)
56
+ product.option_types << option_type
57
57
  end
58
58
  end
59
+ end
59
60
  end
60
61
  end
61
62
  end
@@ -10,19 +10,19 @@ module Spree
10
10
  end
11
11
 
12
12
  module ClassMethods
13
- def make_permalink(options={})
13
+ def make_permalink(options = {})
14
14
  options[:field] ||= :permalink
15
15
  self.permalink_options = options
16
16
 
17
- before_validation(:on => :create) { save_permalink }
17
+ before_validation(on: :create) { save_permalink }
18
18
  end
19
19
 
20
20
  def find_by_param(value, *args)
21
- self.send("find_by_#{permalink_field}", value, *args)
21
+ send("find_by_#{permalink_field}", value, *args)
22
22
  end
23
23
 
24
24
  def find_by_param!(value, *args)
25
- self.send("find_by_#{permalink_field}!", value, *args)
25
+ send("find_by_#{permalink_field}!", value, *args)
26
26
  end
27
27
 
28
28
  def permalink_field
@@ -44,22 +44,22 @@ module Spree
44
44
  end
45
45
 
46
46
  def generate_permalink
47
- "#{self.class.permalink_prefix}#{Array.new(self.class.permalink_length){rand(9)}.join}"
47
+ "#{self.class.permalink_prefix}#{Array.new(self.class.permalink_length){ rand(9) }.join}"
48
48
  end
49
49
 
50
- def save_permalink(permalink_value=self.to_param)
51
- self.with_lock do
50
+ def save_permalink(permalink_value = to_param)
51
+ with_lock do
52
52
  permalink_value ||= generate_permalink
53
53
 
54
54
  field = self.class.permalink_field
55
- # Do other links exist with this permalink?
56
- other = self.class.where("#{self.class.table_name}.#{field} LIKE ?", "#{permalink_value}%")
57
- if other.any?
58
- # Find the existing permalink with the highest number, and increment that number.
59
- # (If none of the existing permalinks have a number, this will evaluate to 1.)
60
- number = other.map { |o| o.send(field)[/-(\d+)$/, 1].to_i }.max + 1
61
- permalink_value += "-#{number.to_s}"
62
- end
55
+ # Do other links exist with this permalink?
56
+ other = self.class.where("#{self.class.table_name}.#{field} LIKE ?", "#{permalink_value}%")
57
+ if other.any?
58
+ # Find the existing permalink with the highest number, and increment that number.
59
+ # (If none of the existing permalinks have a number, this will evaluate to 1.)
60
+ number = other.map { |o| o.send(field)[/-(\d+)$/, 1].to_i }.max + 1
61
+ permalink_value += "-#{number}"
62
+ end
63
63
  write_attribute(field, permalink_value)
64
64
  end
65
65
  end
@@ -68,4 +68,4 @@ module Spree
68
68
  end
69
69
 
70
70
  ActiveRecord::Base.send :include, Spree::Core::Permalinks
71
- ActiveRecord::Relation.send :include, Spree::Core::Permalinks
71
+ ActiveRecord::Relation.send :include, Spree::Core::Permalinks
@@ -44,7 +44,6 @@ module Spree
44
44
  new_master.deleted_at = nil
45
45
  new_master.images = master.images.map { |image| duplicate_image image } if @include_images
46
46
  new_master.price = master.price
47
- new_master.currency = master.currency
48
47
  end
49
48
  end
50
49
 
@@ -52,13 +51,13 @@ module Spree
52
51
  new_variant = variant.dup
53
52
  new_variant.sku = "COPY OF #{new_variant.sku}"
54
53
  new_variant.deleted_at = nil
55
- new_variant.option_values = variant.option_values.map { |option_value| option_value}
54
+ new_variant.option_values = variant.option_values.map { |option_value| option_value }
56
55
  new_variant
57
56
  end
58
57
 
59
58
  def duplicate_image(image)
60
59
  new_image = image.dup
61
- new_image.assign_attributes(:attachment => image.attachment.clone)
60
+ new_image.assign_attributes(attachment: image.attachment.clone)
62
61
  new_image
63
62
  end
64
63
 
@@ -53,7 +53,7 @@ module Spree
53
53
  # below scope would be something like ["$10 - $15", "$15 - $18", "$18 - $20"]
54
54
  #
55
55
  Spree::Product.add_search_scope :price_range_any do |*opts|
56
- conds = opts.map {|o| Spree::Core::ProductFilters.price_filter[:conds][o]}.reject { |c| c.nil? }
56
+ conds = opts.map { |o| Spree::Core::ProductFilters.price_filter[:conds][o] }.reject(&:nil?)
57
57
  scope = conds.shift
58
58
  conds.each do |new_scope|
59
59
  scope = scope.or(new_scope)
@@ -61,26 +61,25 @@ module Spree
61
61
  Spree::Product.joins(master: :default_price).where(scope)
62
62
  end
63
63
 
64
- def ProductFilters.format_price(amount)
64
+ def self.format_price(amount)
65
65
  Spree::Money.new(amount)
66
66
  end
67
67
 
68
- def ProductFilters.price_filter
68
+ def self.price_filter
69
69
  v = Spree::Price.arel_table
70
- conds = [ [ Spree.t(:under_price, price: format_price(10)) , v[:amount].lteq(10)],
71
- [ "#{format_price(10)} - #{format_price(15)}" , v[:amount].in(10..15)],
72
- [ "#{format_price(15)} - #{format_price(18)}" , v[:amount].in(15..18)],
73
- [ "#{format_price(18)} - #{format_price(20)}" , v[:amount].in(18..20)],
74
- [ Spree.t(:or_over_price, price: format_price(20)) , v[:amount].gteq(20)]]
70
+ conds = [[Spree.t(:under_price, price: format_price(10)), v[:amount].lteq(10)],
71
+ ["#{format_price(10)} - #{format_price(15)}", v[:amount].in(10..15)],
72
+ ["#{format_price(15)} - #{format_price(18)}", v[:amount].in(15..18)],
73
+ ["#{format_price(18)} - #{format_price(20)}", v[:amount].in(18..20)],
74
+ [Spree.t(:or_over_price, price: format_price(20)), v[:amount].gteq(20)]]
75
75
  {
76
76
  name: Spree.t(:price_range),
77
77
  scope: :price_range_any,
78
78
  conds: Hash[*conds.flatten],
79
- labels: conds.map { |k,v| [k, k] }
79
+ labels: conds.map { |k, _v| [k, k] }
80
80
  }
81
81
  end
82
82
 
83
-
84
83
  # Example: filtering by possible brands
85
84
  #
86
85
  # First, we define the scope. Two interesting points here: (a) we run our conditions
@@ -94,7 +93,7 @@ module Spree
94
93
  # being blank: note that this relies on with_property doing a left outer join
95
94
  # rather than an inner join.
96
95
  Spree::Product.add_search_scope :brand_any do |*opts|
97
- conds = opts.map {|o| ProductFilters.brand_filter[:conds][o]}.reject { |c| c.nil? }
96
+ conds = opts.map { |o| ProductFilters.brand_filter[:conds][o] }.reject(&:nil?)
98
97
  scope = conds.shift
99
98
  conds.each do |new_scope|
100
99
  scope = scope.or(new_scope)
@@ -102,7 +101,7 @@ module Spree
102
101
  Spree::Product.with_property('brand').where(scope)
103
102
  end
104
103
 
105
- def ProductFilters.brand_filter
104
+ def self.brand_filter
106
105
  brand_property = Spree::Property.find_by(name: 'brand')
107
106
  brands = brand_property ? Spree::ProductProperty.where(property_id: brand_property.id).pluck(:value).uniq.map(&:to_s) : []
108
107
  pp = Spree::ProductProperty.arel_table
@@ -111,7 +110,7 @@ module Spree
111
110
  name: 'Brands',
112
111
  scope: :brand_any,
113
112
  conds: conds,
114
- labels: (brands.sort).map { |k| [k, k] }
113
+ labels: brands.sort.map { |k| [k, k] }
115
114
  }
116
115
  end
117
116
 
@@ -138,7 +137,7 @@ module Spree
138
137
  Spree::Product.brand_any(*opts)
139
138
  end
140
139
 
141
- def ProductFilters.selective_brand_filter(taxon = nil)
140
+ def self.selective_brand_filter(taxon = nil)
142
141
  taxon ||= Spree::Taxonomy.first.root
143
142
  brand_property = Spree::Property.find_by(name: 'brand')
144
143
  scope = Spree::ProductProperty.where(property: brand_property).
@@ -164,7 +163,7 @@ module Spree
164
163
  #
165
164
  # This scope selects products in any of the active taxons or their children.
166
165
  #
167
- def ProductFilters.taxons_below(taxon)
166
+ def self.taxons_below(taxon)
168
167
  return Spree::Core::ProductFilters.all_taxons if taxon.nil?
169
168
  {
170
169
  name: 'Taxons under ' + taxon.name,
@@ -180,7 +179,7 @@ module Spree
180
179
  # it uses one of the auto-generated scopes from Ransack.
181
180
  #
182
181
  # idea: expand the format to allow nesting of labels?
183
- def ProductFilters.all_taxons
182
+ def self.all_taxons
184
183
  taxons = Spree::Taxonomy.all.map { |t| [t.root] + t.root.descendants }.flatten
185
184
  {
186
185
  name: 'All taxons',
@@ -35,7 +35,7 @@ module Spree
35
35
  #
36
36
  # @param ability [CanCan::Ability] the ability to invoke declarations on
37
37
  # @param user [#spree_roles] the user that holds the spree_roles association.
38
- def activate_permissions! ability, user
38
+ def activate_permissions!(ability, user)
39
39
  spree_roles = ['default'] | user.spree_roles.map(&:name)
40
40
  applicable_permissions = Set.new
41
41
 
@@ -60,7 +60,7 @@ module Spree
60
60
  # @param role_name [Symbol, String] The name of the role to associate permissions with
61
61
  # @param permission_sets [Array<Spree::PermissionSets::Base>, Set<Spree::PermissionSets::Base>]
62
62
  # A list of permission sets to activate if the user has the role indicated by role_name
63
- def assign_permissions role_name, permission_sets
63
+ def assign_permissions(role_name, permission_sets)
64
64
  name = role_name.to_s
65
65
 
66
66
  roles[name].permission_sets |= permission_sets
@@ -1,29 +1,42 @@
1
+ require 'spree/deprecation'
2
+
1
3
  module Spree
2
4
  module Core
3
5
  module Search
4
6
  class Base
5
7
  attr_accessor :properties
6
8
  attr_accessor :current_user
7
- attr_accessor :current_currency
9
+ attr_accessor :pricing_options
8
10
 
9
11
  def initialize(params)
10
- self.current_currency = Spree::Config[:currency]
12
+ self.pricing_options = Spree::Config.default_pricing_options
11
13
  @properties = {}
12
14
  prepare(params)
13
15
  end
14
16
 
17
+ def current_currency=(currency)
18
+ self.pricing_options = Spree::Config.pricing_options_class.new(
19
+ pricing_options.desired_attributes.merge(currency: currency)
20
+ )
21
+ end
22
+
23
+ def current_currency
24
+ pricing_options.currency
25
+ end
26
+ deprecate :current_currency, :current_currency=, deprecator: Spree::Deprecation
27
+
15
28
  def retrieve_products
16
29
  @products = get_base_scope
17
30
  curr_page = page || 1
18
31
 
19
32
  unless Spree::Config.show_products_without_price
20
- @products = @products.where("spree_prices.amount IS NOT NULL").where("spree_prices.currency" => current_currency)
33
+ @products = @products.joins(:prices).merge(Spree::Price.where(pricing_options.desired_attributes)).uniq
21
34
  end
22
35
  @products = @products.page(curr_page).per(per_page)
23
36
  end
24
37
 
25
38
  def method_missing(name)
26
- if @properties.has_key? name
39
+ if @properties.key? name
27
40
  @properties[name]
28
41
  else
29
42
  super
@@ -31,66 +44,67 @@ module Spree
31
44
  end
32
45
 
33
46
  protected
34
- def get_base_scope
35
- base_scope = Spree::Product.active
36
- base_scope = base_scope.in_taxon(taxon) unless taxon.blank?
37
- base_scope = get_products_conditions_for(base_scope, keywords)
38
- base_scope = add_search_scopes(base_scope)
39
- base_scope = add_eagerload_scopes(base_scope)
40
- base_scope
41
- end
42
47
 
43
- def add_eagerload_scopes scope
44
- # TL;DR Switch from `preload` to `includes` as soon as Rails starts honoring
45
- # `order` clauses on `has_many` associations when a `where` constraint
46
- # affecting a joined table is present (see
47
- # https://github.com/rails/rails/issues/6769).
48
- #
49
- # Ideally this would use `includes` instead of `preload` calls, leaving it
50
- # up to Rails whether associated objects should be fetched in one big join
51
- # or multiple independent queries. However as of Rails 4.1.8 any `order`
52
- # defined on `has_many` associations are ignored when Rails builds a join
53
- # query.
54
- #
55
- # Would we use `includes` in this particular case, Rails would do
56
- # separate queries most of the time but opt for a join as soon as any
57
- # `where` constraints affecting joined tables are added to the search;
58
- # which is the case as soon as a taxon is added to the base scope.
59
- scope = scope.preload(master: :prices)
60
- scope = scope.preload(master: :images) if include_images
61
- scope
62
- end
48
+ def get_base_scope
49
+ base_scope = Spree::Product.available
50
+ base_scope = base_scope.in_taxon(taxon) unless taxon.blank?
51
+ base_scope = get_products_conditions_for(base_scope, keywords)
52
+ base_scope = add_search_scopes(base_scope)
53
+ base_scope = add_eagerload_scopes(base_scope)
54
+ base_scope
55
+ end
63
56
 
64
- def add_search_scopes(base_scope)
65
- search.each do |name, scope_attribute|
66
- scope_name = name.to_sym
67
- if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym)
68
- base_scope = base_scope.send(scope_name, *scope_attribute)
69
- else
70
- base_scope = base_scope.merge(Spree::Product.ransack({scope_name => scope_attribute}).result)
71
- end
72
- end if search
73
- base_scope
74
- end
57
+ def add_eagerload_scopes(scope)
58
+ # TL;DR Switch from `preload` to `includes` as soon as Rails starts honoring
59
+ # `order` clauses on `has_many` associations when a `where` constraint
60
+ # affecting a joined table is present (see
61
+ # https://github.com/rails/rails/issues/6769).
62
+ #
63
+ # Ideally this would use `includes` instead of `preload` calls, leaving it
64
+ # up to Rails whether associated objects should be fetched in one big join
65
+ # or multiple independent queries. However as of Rails 4.1.8 any `order`
66
+ # defined on `has_many` associations are ignored when Rails builds a join
67
+ # query.
68
+ #
69
+ # Would we use `includes` in this particular case, Rails would do
70
+ # separate queries most of the time but opt for a join as soon as any
71
+ # `where` constraints affecting joined tables are added to the search;
72
+ # which is the case as soon as a taxon is added to the base scope.
73
+ scope = scope.preload(master: :prices)
74
+ scope = scope.preload(master: :images) if include_images
75
+ scope
76
+ end
75
77
 
76
- # method should return new scope based on base_scope
77
- def get_products_conditions_for(base_scope, query)
78
- unless query.blank?
79
- base_scope = base_scope.like_any([:name, :description], query.split)
78
+ def add_search_scopes(base_scope)
79
+ search.each do |name, scope_attribute|
80
+ scope_name = name.to_sym
81
+ if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym)
82
+ base_scope = base_scope.send(scope_name, *scope_attribute)
83
+ else
84
+ base_scope = base_scope.merge(Spree::Product.ransack({ scope_name => scope_attribute }).result)
80
85
  end
81
- base_scope
86
+ end if search
87
+ base_scope
88
+ end
89
+
90
+ # method should return new scope based on base_scope
91
+ def get_products_conditions_for(base_scope, query)
92
+ unless query.blank?
93
+ base_scope = base_scope.like_any([:name, :description], query.split)
82
94
  end
95
+ base_scope
96
+ end
83
97
 
84
- def prepare(params)
85
- @properties[:taxon] = params[:taxon].blank? ? nil : Spree::Taxon.find(params[:taxon])
86
- @properties[:keywords] = params[:keywords]
87
- @properties[:search] = params[:search]
88
- @properties[:include_images] = params[:include_images]
98
+ def prepare(params)
99
+ @properties[:taxon] = params[:taxon].blank? ? nil : Spree::Taxon.find(params[:taxon])
100
+ @properties[:keywords] = params[:keywords]
101
+ @properties[:search] = params[:search]
102
+ @properties[:include_images] = params[:include_images]
89
103
 
90
- per_page = params[:per_page].to_i
91
- @properties[:per_page] = per_page > 0 ? per_page : Spree::Config[:products_per_page]
92
- @properties[:page] = (params[:page].to_i <= 0) ? 1 : params[:page].to_i
93
- end
104
+ per_page = params[:per_page].to_i
105
+ @properties[:per_page] = per_page > 0 ? per_page : Spree::Config[:products_per_page]
106
+ @properties[:page] = (params[:page].to_i <= 0) ? 1 : params[:page].to_i
107
+ end
94
108
  end
95
109
  end
96
110
  end
@@ -1,21 +1,19 @@
1
1
  module Spree
2
2
  module Core
3
3
  module Search
4
-
5
4
  #
6
5
  # NOTE: Use Spree::Config.variant_search_class rather than referencing this
7
6
  # directly.
8
7
  #
9
8
 
10
9
  class Variant
11
-
12
10
  class_attribute :search_terms
13
11
  self.search_terms = [
14
12
  :sku_cont,
15
13
  :product_name_cont,
16
14
  :product_slug_cont,
17
15
  :option_values_presentation_cont,
18
- :option_values_name_cont,
16
+ :option_values_name_cont
19
17
  ]
20
18
 
21
19
  def initialize(query_string, scope: Spree::Variant.all)
@@ -50,7 +48,7 @@ module Spree
50
48
  # @param word [String] One of the search words provided by the user.
51
49
  # e.g. a SKU
52
50
  # @return [Array<Symbol>] the list of search terms to use for this word
53
- def search_terms(word)
51
+ def search_terms(_word)
54
52
  self.class.search_terms
55
53
  end
56
54
 
@@ -42,7 +42,7 @@ module Spree
42
42
 
43
43
  new_order.contents.approve(name: self.class.name)
44
44
  new_order.complete!
45
- Spree::OrderCapturing.new(new_order).capture_payments if (Spree::Config[:auto_capture_exchanges] && !Spree::Config[:auto_capture])
45
+ Spree::OrderCapturing.new(new_order).capture_payments if Spree::Config[:auto_capture_exchanges] && !Spree::Config[:auto_capture]
46
46
 
47
47
  @return_items.each(&:expired!)
48
48
  create_new_rma if Spree::Config[:create_rma_for_unreturned_exchange]
@@ -52,7 +52,6 @@ module Spree
52
52
  elsif !new_order.valid?
53
53
  raise ChargeFailure.new('order not valid', new_order)
54
54
  end
55
-
56
55
  end
57
56
 
58
57
  private
@@ -1,7 +1,7 @@
1
1
  class EmailValidator < ActiveModel::EachValidator
2
- def validate_each(record,attribute,value)
2
+ def validate_each(record, attribute, value)
3
3
  unless value =~ /\A([^@\.]|[^@\.]([^@\s]*)[^@\.])@([^@\s]+\.)+[^@\s]+\z/
4
- record.errors.add(attribute, :invalid, {:value => value}.merge!(options))
4
+ record.errors.add(attribute, :invalid, { value: value }.merge!(options))
5
5
  end
6
6
  end
7
7
  end
@@ -5,7 +5,7 @@ module Spree
5
5
  end
6
6
 
7
7
  def self.solidus_version
8
- "1.2.3"
8
+ "1.3.0.beta1"
9
9
  end
10
10
 
11
11
  def self.solidus_gem_version
data/lib/spree/core.rb CHANGED
@@ -4,7 +4,6 @@ require 'acts_as_list'
4
4
  require 'awesome_nested_set'
5
5
  require 'cancan'
6
6
  require 'friendly_id'
7
- require 'font-awesome-rails'
8
7
  require 'kaminari'
9
8
  require 'mail'
10
9
  require 'monetize'
@@ -20,7 +19,6 @@ require 'responders'
20
19
  StateMachines::Machine.ignore_method_conflicts = true
21
20
 
22
21
  module Spree
23
-
24
22
  mattr_accessor :user_class
25
23
 
26
24
  def self.user_class
@@ -41,7 +39,7 @@ module Spree
41
39
  #
42
40
  # This method is defined within the core gem on purpose.
43
41
  # Some people may only wish to use the Core part of Spree.
44
- def self.config(&block)
42
+ def self.config(&_block)
45
43
  yield(Spree::Config)
46
44
  end
47
45
 
@@ -70,7 +68,6 @@ require 'spree/core/environment/calculators'
70
68
  require 'spree/core/environment'
71
69
  require 'spree/promo/environment'
72
70
  require 'spree/migrations'
73
- require 'spree/migration_helpers'
74
71
  require 'spree/core/engine'
75
72
 
76
73
  require 'spree/i18n'
@@ -87,6 +84,7 @@ require 'spree/core/controller_helpers/auth'
87
84
  require 'spree/core/controller_helpers/common'
88
85
  require 'spree/core/controller_helpers/order'
89
86
  require 'spree/core/controller_helpers/payment_parameters'
87
+ require 'spree/core/controller_helpers/pricing'
90
88
  require 'spree/core/controller_helpers/respond_with'
91
89
  require 'spree/core/controller_helpers/search'
92
90
  require 'spree/core/controller_helpers/store'
data/lib/spree/i18n.rb CHANGED
@@ -9,7 +9,7 @@ module Spree
9
9
  class << self
10
10
  # Add spree namespace and delegate to Rails TranslationHelper for some nice
11
11
  # extra functionality. e.g return reasonable strings for missing translations
12
- def translate(key, options={})
12
+ def translate(key, options = {})
13
13
  options[:scope] = [:spree, *options[:scope]]
14
14
  TranslationHelperWrapper.new.translate(key, options)
15
15
  end
@@ -10,7 +10,9 @@ module Spree
10
10
  def self.parse(number)
11
11
  return number unless number.is_a?(String)
12
12
 
13
- separator, delimiter = I18n.t([:'number.currency.format.separator', :'number.currency.format.delimiter'])
13
+ # I18n.t('number.currency.format.delimiter') could be useful here, but is
14
+ # unnecessary as it is stripped by the non_number_characters gsub.
15
+ separator = I18n.t(:'number.currency.format.separator')
14
16
  non_number_characters = /[^0-9\-#{separator}]/
15
17
 
16
18
  # strip everything else first
@@ -41,36 +41,37 @@ module Spree
41
41
  end
42
42
 
43
43
  private
44
- def engine_migrations
45
- Dir.entries(engine_dir).map do |file_name|
46
- name = file_name.split("_", 2).last.split(".", 2).first
47
- name.empty? ? next : name
48
- end.compact! || []
49
- end
50
44
 
51
- def app_migrations
52
- Dir.entries(app_dir).map do |file_name|
53
- next if [".", ".."].include? file_name
54
- name = file_name.split("_", 2).last
55
- name.empty? ? next : name
56
- end.compact! || []
57
- end
45
+ def engine_migrations
46
+ Dir.entries(engine_dir).map do |file_name|
47
+ name = file_name.split("_", 2).last.split(".", 2).first
48
+ name.empty? ? next : name
49
+ end.compact! || []
50
+ end
58
51
 
59
- def app_dir
60
- "#{Rails.root}/db/migrate"
61
- end
52
+ def app_migrations
53
+ Dir.entries(app_dir).map do |file_name|
54
+ next if [".", ".."].include? file_name
55
+ name = file_name.split("_", 2).last
56
+ name.empty? ? next : name
57
+ end.compact! || []
58
+ end
62
59
 
63
- def engine_dir
64
- "#{config.root}/db/migrate"
65
- end
60
+ def app_dir
61
+ "#{Rails.root}/db/migrate"
62
+ end
66
63
 
67
- def match_engine?(engine)
68
- if engine_name == "spree"
69
- # Avoid stores upgrading from 1.3 getting wrong warnings
70
- ["spree.rb", "spree_promo.rb"].include? engine
71
- else
72
- engine == "#{engine_name}.rb"
73
- end
64
+ def engine_dir
65
+ "#{config.root}/db/migrate"
66
+ end
67
+
68
+ def match_engine?(engine)
69
+ if engine_name == "spree"
70
+ # Avoid stores upgrading from 1.3 getting wrong warnings
71
+ ["spree.rb", "spree_promo.rb"].include? engine
72
+ else
73
+ engine == "#{engine_name}.rb"
74
74
  end
75
+ end
75
76
  end
76
77
  end
data/lib/spree/money.rb CHANGED
@@ -8,6 +8,10 @@ module Spree
8
8
  class Money
9
9
  class <<self
10
10
  attr_accessor :default_formatting_rules
11
+
12
+ def from_money(money)
13
+ new(money.to_d, currency: money.currency.iso_code)
14
+ end
11
15
  end
12
16
  self.default_formatting_rules = {
13
17
  # Ruby money currently has this as false, which is wrong for the vast
@@ -17,7 +21,7 @@ module Spree
17
21
 
18
22
  attr_reader :money
19
23
 
20
- delegate :cents, to: :money
24
+ delegate :cents, :currency, :to_d, :zero?, to: :money
21
25
 
22
26
  # @param amount [#to_s] the value of the money object
23
27
  # @param options [Hash] the options for creating the money object
@@ -32,7 +36,7 @@ module Spree
32
36
  # value comes before the currency symbol
33
37
  # @option options [:before, :after] symbol_position the position of the
34
38
  # currency symbol
35
- def initialize(amount, options={})
39
+ def initialize(amount, options = {})
36
40
  @money = Monetize.parse([amount, (options[:currency] || Spree::Config[:currency])].join)
37
41
  @options = Spree::Money.default_formatting_rules.merge(options)
38
42
  end
@@ -65,8 +69,19 @@ module Spree
65
69
  # Delegates comparison to the internal ruby money instance.
66
70
  #
67
71
  # @see http://www.rubydoc.info/gems/money/Money/Arithmetic#%3D%3D-instance_method
68
- def ==(obj)
69
- @money == obj.money
72
+ def ==(other)
73
+ raise TypeError, "Can't compare #{other.class} to Spree::Money" if !other.respond_to?(:money)
74
+ @money == other.money
75
+ end
76
+
77
+ def -(other)
78
+ raise TypeError, "Can't subtract #{other.class} to Spree::Money" if !other.respond_to?(:money)
79
+ self.class.from_money(@money - other.money)
80
+ end
81
+
82
+ def +(other)
83
+ raise TypeError, "Can't add #{other.class} to Spree::Money" if !other.respond_to?(:money)
84
+ self.class.from_money(@money + other.money)
70
85
  end
71
86
  end
72
87
  end
@@ -11,7 +11,7 @@ module Spree
11
11
  # @param ability [CanCan::Ability]
12
12
  # The ability that will be extended with the current permission set.
13
13
  # The ability passed in must respond to #user
14
- def initialize ability
14
+ def initialize(ability)
15
15
  @ability = ability
16
16
  end
17
17