spree_core 3.0.9 → 3.2.0

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 (627) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/{spree.js.coffee.erb → spree.js.coffee} +13 -4
  3. data/app/helpers/spree/base_helper.rb +5 -2
  4. data/app/helpers/spree/products_helper.rb +37 -12
  5. data/app/mailers/spree/base_mailer.rb +11 -2
  6. data/app/mailers/spree/reimbursement_mailer.rb +6 -6
  7. data/app/models/concerns/spree/acts_as_taggable.rb +11 -0
  8. data/app/models/concerns/spree/adjustment_source.rb +3 -10
  9. data/app/models/concerns/spree/default_price.rb +7 -1
  10. data/app/models/concerns/spree/named_type.rb +1 -1
  11. data/app/models/concerns/spree/ransackable_attributes.rb +6 -1
  12. data/app/models/concerns/spree/user_api_authentication.rb +7 -1
  13. data/app/models/concerns/spree/user_methods.rb +57 -0
  14. data/app/models/concerns/spree/user_reporting.rb +2 -2
  15. data/app/models/concerns/spree/vat_price_calculation.rb +47 -0
  16. data/app/models/spree/ability.rb +9 -1
  17. data/app/models/spree/address.rb +75 -45
  18. data/app/models/spree/adjustable/adjuster/base.rb +25 -0
  19. data/app/models/spree/adjustable/adjuster/promotion.rb +41 -0
  20. data/app/models/spree/adjustable/adjuster/tax.rb +26 -0
  21. data/app/models/spree/adjustable/adjustments_updater.rb +22 -45
  22. data/app/models/spree/adjustment.rb +8 -10
  23. data/app/models/spree/app_configuration.rb +14 -8
  24. data/app/models/spree/base.rb +5 -1
  25. data/app/models/spree/calculator/default_tax.rb +2 -10
  26. data/app/models/spree/calculator/free_shipping.rb +6 -5
  27. data/app/models/spree/calculator.rb +1 -6
  28. data/app/models/spree/classification.rb +7 -3
  29. data/app/models/spree/country.rb +15 -3
  30. data/app/models/spree/credit_card.rb +37 -38
  31. data/app/models/spree/customer_return.rb +7 -15
  32. data/app/models/spree/gateway/bogus.rb +12 -12
  33. data/app/models/spree/gateway/bogus_simple.rb +4 -4
  34. data/app/models/spree/gateway.rb +8 -7
  35. data/app/models/spree/image.rb +3 -3
  36. data/app/models/spree/inventory_unit.rb +13 -14
  37. data/app/models/spree/legacy_user.rb +1 -14
  38. data/app/models/spree/line_item.rb +79 -67
  39. data/app/models/spree/log_entry.rb +1 -4
  40. data/app/models/spree/option_type.rb +15 -6
  41. data/app/models/spree/option_type_prototype.rb +9 -0
  42. data/app/models/spree/option_value.rb +11 -3
  43. data/app/models/spree/option_value_variant.rb +6 -0
  44. data/app/models/spree/order/checkout.rb +10 -13
  45. data/app/models/spree/order/currency_updater.rb +1 -1
  46. data/app/models/spree/order/store_credit.rb +96 -0
  47. data/app/models/spree/order.rb +105 -68
  48. data/app/models/spree/order_contents.rb +13 -7
  49. data/app/models/spree/order_inventory.rb +16 -9
  50. data/app/models/spree/order_promotion.rb +6 -0
  51. data/app/models/spree/order_updater.rb +4 -8
  52. data/app/models/spree/payment/gateway_options.rb +8 -4
  53. data/app/models/spree/payment/processing.rb +1 -1
  54. data/app/models/spree/payment.rb +55 -29
  55. data/app/models/spree/payment_method/store_credit.rb +130 -0
  56. data/app/models/spree/payment_method.rb +18 -13
  57. data/app/models/spree/preference.rb +1 -1
  58. data/app/models/spree/preferences/store.rb +2 -2
  59. data/app/models/spree/price.rb +16 -6
  60. data/app/models/spree/product/scopes.rb +22 -13
  61. data/app/models/spree/product.rb +83 -52
  62. data/app/models/spree/product_option_type.rb +7 -2
  63. data/app/models/spree/product_promotion_rule.rb +9 -0
  64. data/app/models/spree/product_property.rb +9 -10
  65. data/app/models/spree/promotion/actions/create_adjustment.rb +1 -1
  66. data/app/models/spree/promotion/actions/create_line_items.rb +21 -3
  67. data/app/models/spree/promotion/rules/country.rb +23 -0
  68. data/app/models/spree/promotion/rules/option_value.rb +13 -10
  69. data/app/models/spree/promotion/rules/product.rb +3 -1
  70. data/app/models/spree/promotion/rules/taxon.rb +3 -2
  71. data/app/models/spree/promotion/rules/user.rb +4 -4
  72. data/app/models/spree/promotion.rb +55 -19
  73. data/app/models/spree/promotion_action.rb +3 -3
  74. data/app/models/spree/promotion_category.rb +1 -1
  75. data/app/models/spree/promotion_handler/cart.rb +3 -17
  76. data/app/models/spree/promotion_handler/coupon.rb +22 -22
  77. data/app/models/spree/promotion_handler/page.rb +2 -2
  78. data/app/models/spree/promotion_rule_taxon.rb +9 -0
  79. data/app/models/spree/promotion_rule_user.rb +9 -0
  80. data/app/models/spree/property.rb +2 -1
  81. data/app/models/spree/property_prototype.rb +9 -0
  82. data/app/models/spree/prototype.rb +8 -3
  83. data/app/models/spree/prototype_taxon.rb +9 -0
  84. data/app/models/spree/refund.rb +10 -7
  85. data/app/models/spree/refund_reason.rb +2 -2
  86. data/app/models/spree/reimbursement.rb +12 -16
  87. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +23 -6
  88. data/app/models/spree/reimbursement_type/store_credit.rb +28 -0
  89. data/app/models/spree/reimbursement_type.rb +5 -1
  90. data/app/models/spree/return_authorization.rb +8 -13
  91. data/app/models/spree/return_authorization_reason.rb +1 -1
  92. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  93. data/app/models/spree/return_item.rb +14 -13
  94. data/app/models/spree/role.rb +3 -2
  95. data/app/models/spree/role_user.rb +6 -0
  96. data/app/models/spree/shipment.rb +23 -30
  97. data/app/models/spree/shipment_handler.rb +2 -2
  98. data/app/models/spree/shipping_category.rb +6 -3
  99. data/app/models/spree/shipping_method.rb +12 -11
  100. data/app/models/spree/shipping_method_zone.rb +6 -0
  101. data/app/models/spree/shipping_rate.rb +16 -29
  102. data/app/models/spree/state.rb +3 -2
  103. data/app/models/spree/state_change.rb +1 -1
  104. data/app/models/spree/stock/adjuster.rb +9 -2
  105. data/app/models/spree/stock/content_item.rb +10 -12
  106. data/app/models/spree/stock/coordinator.rb +21 -15
  107. data/app/models/spree/stock/estimator.rb +28 -30
  108. data/app/models/spree/stock/inventory_unit_builder.rb +2 -10
  109. data/app/models/spree/stock/package.rb +11 -3
  110. data/app/models/spree/stock/packer.rb +16 -6
  111. data/app/models/spree/stock/prioritizer.rb +25 -15
  112. data/app/models/spree/stock/quantifier.rb +5 -5
  113. data/app/models/spree/stock/splitter/backordered.rb +2 -2
  114. data/app/models/spree/stock/splitter/shipping_category.rb +6 -1
  115. data/app/models/spree/stock_item.rb +15 -18
  116. data/app/models/spree/stock_location.rb +4 -7
  117. data/app/models/spree/stock_movement.rb +16 -9
  118. data/app/models/spree/stock_transfer.rb +11 -12
  119. data/app/models/spree/store.rb +15 -6
  120. data/app/models/spree/store_credit.rb +252 -0
  121. data/app/models/spree/store_credit_category.rb +22 -0
  122. data/app/models/spree/store_credit_event.rb +38 -0
  123. data/app/models/spree/store_credit_type.rb +6 -0
  124. data/app/models/spree/tag.rb +4 -0
  125. data/app/models/spree/tax_category.rb +3 -8
  126. data/app/models/spree/tax_rate.rb +61 -121
  127. data/app/models/spree/taxon.rb +12 -6
  128. data/app/models/spree/tracker.rb +12 -1
  129. data/app/models/spree/validations/db_maximum_length_validator.rb +2 -1
  130. data/app/models/spree/variant.rb +94 -49
  131. data/app/models/spree/zone.rb +23 -19
  132. data/app/models/spree/zone_member.rb +6 -0
  133. data/app/validators/db_maximum_length_validator.rb +11 -0
  134. data/app/views/layouts/spree/base_mailer.html.erb +38 -781
  135. data/app/views/spree/order_mailer/_adjustment.html.erb +8 -0
  136. data/app/views/spree/order_mailer/_subtotal.html.erb +8 -0
  137. data/app/views/spree/order_mailer/_total.html.erb +8 -0
  138. data/app/views/spree/order_mailer/cancel_email.html.erb +13 -28
  139. data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
  140. data/app/views/spree/order_mailer/confirm_email.html.erb +49 -63
  141. data/app/views/spree/order_mailer/confirm_email.text.erb +1 -1
  142. data/app/views/spree/shared/_base_mailer_header.html.erb +5 -7
  143. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +777 -0
  144. data/app/views/spree/shared/_error_messages.html.erb +1 -1
  145. data/app/views/spree/shared/_mailer_line_item.html.erb +12 -0
  146. data/app/views/spree/shared/_paths.html.erb +8 -0
  147. data/app/views/spree/shipment_mailer/shipped_email.html.erb +21 -14
  148. data/app/views/spree/shipment_mailer/shipped_email.text.erb +3 -3
  149. data/config/initializers/acts_as_taggable_on.rb +9 -0
  150. data/config/initializers/friendly_id.rb +0 -81
  151. data/config/initializers/user_class_extensions.rb +7 -38
  152. data/config/locales/en.yml +137 -12
  153. data/config/routes.rb +7 -0
  154. data/db/default/spree/countries.rb +5 -1
  155. data/db/default/spree/default_reimbursement_type.rb +1 -1
  156. data/db/default/spree/roles.rb +2 -2
  157. data/db/default/spree/states.rb +1 -1
  158. data/db/default/spree/zones.rb +4 -5
  159. data/db/migrate/20120831092320_spree_one_two.rb +101 -101
  160. data/db/migrate/20120831092359_spree_promo_one_two.rb +14 -14
  161. data/db/migrate/20120905145253_add_tax_rate_label.rb +1 -1
  162. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +2 -2
  163. data/db/migrate/20120929093553_remove_unused_preference_columns.rb +4 -4
  164. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +2 -2
  165. data/db/migrate/20121010142909_add_states_required_to_countries.rb +2 -2
  166. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +3 -3
  167. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +5 -5
  168. data/db/migrate/20121031162139_split_prices_from_variants.rb +10 -10
  169. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +3 -3
  170. data/db/migrate/20121107184631_add_currency_to_line_items.rb +1 -1
  171. data/db/migrate/20121107194006_add_currency_to_orders.rb +1 -1
  172. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +2 -2
  173. data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +1 -1
  174. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +2 -2
  175. data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +1 -1
  176. data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +1 -1
  177. data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +1 -1
  178. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +2 -2
  179. data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +1 -1
  180. data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +1 -1
  181. data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +1 -1
  182. data/db/migrate/20130211190146_create_spree_stock_items.rb +2 -2
  183. data/db/migrate/20130211191120_create_spree_stock_locations.rb +1 -1
  184. data/db/migrate/20130213191427_create_default_stock.rb +1 -2
  185. data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +1 -1
  186. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +2 -2
  187. data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +1 -1
  188. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +3 -3
  189. data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +1 -1
  190. data/db/migrate/20130228210442_create_shipping_method_zone.rb +3 -3
  191. data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +1 -1
  192. data/db/migrate/20130301162924_create_shipping_method_categories.rb +3 -3
  193. data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +1 -1
  194. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +5 -5
  195. data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +1 -1
  196. data/db/migrate/20130305143310_create_stock_movements.rb +1 -1
  197. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +3 -3
  198. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +2 -2
  199. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +2 -2
  200. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +2 -2
  201. data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +1 -1
  202. data/db/migrate/20130319062004_change_orders_total_precision.rb +5 -5
  203. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +2 -2
  204. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +2 -2
  205. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +2 -2
  206. data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +1 -1
  207. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +3 -3
  208. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +3 -3
  209. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +1 -1
  210. data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +1 -1
  211. data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +1 -1
  212. data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +1 -1
  213. data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +1 -1
  214. data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +2 -2
  215. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +1 -1
  216. data/db/migrate/20130417120035_update_adjustment_states.rb +3 -3
  217. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +4 -4
  218. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +1 -1
  219. data/db/migrate/20130423110707_drop_products_count_on_hand.rb +1 -1
  220. data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +1 -1
  221. data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +1 -1
  222. data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +1 -1
  223. data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +1 -1
  224. data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +1 -1
  225. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +1 -1
  226. data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +1 -1
  227. data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +1 -1
  228. data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +1 -1
  229. data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +1 -1
  230. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +2 -2
  231. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +4 -4
  232. data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +1 -1
  233. data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +1 -1
  234. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +2 -2
  235. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +3 -3
  236. data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +1 -1
  237. data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +1 -1
  238. data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +1 -1
  239. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +1 -1
  240. data/db/migrate/20130806022521_drop_spree_mail_methods.rb +1 -1
  241. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +1 -1
  242. data/db/migrate/20130807024301_upgrade_adjustments.rb +4 -4
  243. data/db/migrate/20130807024302_rename_adjustment_fields.rb +1 -1
  244. data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +1 -1
  245. data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +1 -1
  246. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +2 -2
  247. data/db/migrate/20130813140619_expand_order_number_size.rb +3 -3
  248. data/db/migrate/20130813232134_rename_activators_to_promotions.rb +1 -1
  249. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +2 -2
  250. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +2 -2
  251. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +1 -1
  252. data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +2 -2
  253. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +2 -2
  254. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +1 -1
  255. data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +1 -1
  256. data/db/migrate/20130909115621_change_states_required_for_countries.rb +1 -1
  257. data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +1 -1
  258. data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +2 -2
  259. data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +1 -1
  260. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +2 -2
  261. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +2 -2
  262. data/db/migrate/20131107132123_add_tax_category_to_variants.rb +1 -1
  263. data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +1 -1
  264. data/db/migrate/20131118043959_add_included_to_adjustments.rb +2 -2
  265. data/db/migrate/20131118050234_rename_tax_total_fields.rb +1 -1
  266. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +1 -1
  267. data/db/migrate/20131120234456_add_updated_at_to_variants.rb +1 -1
  268. data/db/migrate/20131127001002_add_position_to_classifications.rb +1 -1
  269. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +2 -2
  270. data/db/migrate/20131211192741_unique_shipping_method_categories.rb +1 -1
  271. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +2 -2
  272. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +1 -1
  273. data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +1 -1
  274. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +1 -1
  275. data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +1 -1
  276. data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +1 -1
  277. data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +1 -1
  278. data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +1 -1
  279. data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +1 -1
  280. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +1 -1
  281. data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +1 -1
  282. data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +1 -1
  283. data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +1 -1
  284. data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +1 -1
  285. data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +1 -1
  286. data/db/migrate/20140213184916_add_more_indexes.rb +1 -1
  287. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +2 -2
  288. data/db/migrate/20140227112348_add_preference_store_to_everything.rb +1 -1
  289. data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +1 -1
  290. data/db/migrate/20140309023735_migrate_old_preferences.rb +1 -1
  291. data/db/migrate/20140309024355_create_spree_stores.rb +2 -2
  292. data/db/migrate/20140309033438_create_store_from_preferences.rb +2 -2
  293. data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +1 -1
  294. data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +1 -1
  295. data/db/migrate/20140331100557_add_additional_store_fields.rb +1 -1
  296. data/db/migrate/20140410141842_add_many_missing_indexes.rb +1 -1
  297. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +1 -1
  298. data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +1 -1
  299. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +5 -5
  300. data/db/migrate/20140518174634_add_token_to_spree_orders.rb +1 -1
  301. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +2 -2
  302. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +1 -1
  303. data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +1 -1
  304. data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +1 -1
  305. data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +1 -1
  306. data/db/migrate/20140625214618_create_spree_refunds.rb +1 -1
  307. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +1 -1
  308. data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +1 -1
  309. data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +1 -1
  310. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +2 -2
  311. data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +1 -1
  312. data/db/migrate/20140710190048_drop_return_authorization_amount.rb +1 -1
  313. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +1 -1
  314. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +1 -1
  315. data/db/migrate/20140713142214_rename_return_authorization_reason.rb +1 -1
  316. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +1 -1
  317. data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +1 -1
  318. data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +1 -1
  319. data/db/migrate/20140717155155_create_default_refund_reason.rb +1 -1
  320. data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +1 -1
  321. data/db/migrate/20140718133010_create_spree_customer_returns.rb +1 -1
  322. data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +1 -1
  323. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +5 -5
  324. data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +1 -1
  325. data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +1 -1
  326. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +2 -2
  327. data/db/migrate/20140725131539_create_spree_reimbursements.rb +1 -1
  328. data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +1 -1
  329. data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +1 -1
  330. data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +1 -1
  331. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +1 -1
  332. data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +1 -1
  333. data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +1 -1
  334. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +1 -1
  335. data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +1 -1
  336. data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +1 -1
  337. data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +1 -1
  338. data/db/migrate/20140911173301_add_kind_to_zone.rb +1 -1
  339. data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +1 -1
  340. data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +1 -1
  341. data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +1 -1
  342. data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +1 -1
  343. data/db/migrate/20141009204607_add_store_id_to_orders.rb +1 -1
  344. data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +1 -1
  345. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +1 -1
  346. data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +2 -7
  347. data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +1 -1
  348. data/db/migrate/20141105213646_update_classifications_positions.rb +1 -1
  349. data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +1 -1
  350. data/db/migrate/20141215232040_remove_token_permissions_table.rb +1 -1
  351. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +1 -1
  352. data/db/migrate/20141217215630_update_product_slug_index.rb +1 -1
  353. data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +1 -1
  354. data/db/migrate/20150118210639_create_spree_store_credits.rb +24 -0
  355. data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +8 -0
  356. data/db/migrate/20150118212051_create_spree_store_credit_events.rb +17 -0
  357. data/db/migrate/20150118212101_create_spree_store_credit_types.rb +10 -0
  358. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +1 -1
  359. data/db/migrate/20150122145607_add_resellable_to_return_items.rb +1 -1
  360. data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +1 -1
  361. data/db/migrate/20150128032538_remove_environment_from_tracker.rb +1 -1
  362. data/db/migrate/20150128060325_remove_spree_configurations.rb +1 -1
  363. data/db/migrate/20150216173445_add_index_to_spree_stock_items_variant_id.rb +1 -1
  364. data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +1 -1
  365. data/db/migrate/20150314013438_add_missing_indexes_on_spree_tables.rb +67 -0
  366. data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +18 -0
  367. data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +14 -0
  368. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +1 -1
  369. data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +5 -0
  370. data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +1 -1
  371. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +1 -1
  372. data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +19 -0
  373. data/db/migrate/20150627090949_migrate_payment_methods_display.rb +12 -0
  374. data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +1 -1
  375. data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +12 -0
  376. data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +18 -0
  377. data/db/migrate/20150727191614_spree_store_credit_types.rb +11 -0
  378. data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +68 -0
  379. data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +13 -0
  380. data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +16 -0
  381. data/db/migrate/20160219165458_add_indexes.rb +14 -0
  382. data/db/migrate/20160509064646_remove_counter_cache_from_spree_variants_to_spree_stock_items.rb +10 -0
  383. data/db/migrate/20160511071954_acts_as_taggable_on_spree_migration.rb +40 -0
  384. data/db/migrate/20160511072249_change_collation_for_spree_tag_names.rb +9 -0
  385. data/db/migrate/20160511072335_add_missing_indexes_to_spree_taggings.rb +14 -0
  386. data/db/migrate/20160608090604_add_zipcode_required_to_spree_countries.rb +7 -0
  387. data/db/migrate/20161014145148_add_created_at_to_variant.rb +8 -0
  388. data/db/migrate/20161014152814_add_null_false_to_spree_variants_timestamps.rb +6 -0
  389. data/lib/generators/spree/custom_user/custom_user_generator.rb +1 -1
  390. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +3 -3
  391. data/lib/generators/spree/custom_user/templates/migration.rb.tt +2 -2
  392. data/lib/generators/spree/dummy/dummy_generator.rb +11 -11
  393. data/lib/generators/spree/dummy/templates/rails/application.rb +1 -1
  394. data/lib/generators/spree/dummy/templates/rails/database.yml +38 -28
  395. data/lib/generators/spree/dummy/templates/rails/test.rb +4 -3
  396. data/lib/generators/spree/install/install_generator.rb +37 -13
  397. data/lib/spree/core/controller_helpers/auth.rb +1 -1
  398. data/lib/spree/core/controller_helpers/common.rb +6 -6
  399. data/lib/spree/core/controller_helpers/order.rb +9 -10
  400. data/lib/spree/core/controller_helpers/respond_with.rb +1 -1
  401. data/lib/spree/core/controller_helpers/search.rb +1 -1
  402. data/lib/spree/core/controller_helpers/store.rb +29 -0
  403. data/lib/spree/core/delegate_belongs_to.rb +4 -4
  404. data/lib/spree/core/engine.rb +39 -20
  405. data/lib/spree/core/environment.rb +1 -1
  406. data/lib/spree/core/importer/order.rb +37 -40
  407. data/lib/spree/core/importer/product.rb +2 -2
  408. data/lib/spree/core/number_generator.rb +52 -0
  409. data/lib/spree/core/product_duplicator.rb +1 -1
  410. data/lib/spree/core/product_filters.rb +2 -2
  411. data/lib/spree/core/search/base.rb +4 -3
  412. data/lib/spree/core/version.rb +1 -1
  413. data/lib/spree/core.rb +16 -0
  414. data/lib/spree/i18n/initializer.rb +1 -1
  415. data/lib/spree/localized_number.rb +3 -1
  416. data/lib/spree/permitted_attributes.rb +6 -3
  417. data/lib/spree/testing_support/caching.rb +3 -3
  418. data/lib/spree/testing_support/common_rake.rb +3 -3
  419. data/lib/spree/testing_support/controller_requests.rb +4 -4
  420. data/lib/spree/testing_support/factories/address_factory.rb +1 -1
  421. data/lib/spree/testing_support/factories/country_factory.rb +2 -2
  422. data/lib/spree/testing_support/factories/line_item_factory.rb +0 -1
  423. data/lib/spree/testing_support/factories/order_factory.rb +3 -2
  424. data/lib/spree/testing_support/factories/payment_factory.rb +5 -0
  425. data/lib/spree/testing_support/factories/payment_method_factory.rb +8 -0
  426. data/lib/spree/testing_support/factories/promotion_rule_factory.rb +5 -0
  427. data/lib/spree/testing_support/factories/refund_factory.rb +9 -1
  428. data/lib/spree/testing_support/factories/return_authorization_factory.rb +2 -0
  429. data/lib/spree/testing_support/factories/state_factory.rb +2 -2
  430. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +9 -0
  431. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -0
  432. data/lib/spree/testing_support/factories/store_credit_factory.rb +17 -0
  433. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +11 -0
  434. data/lib/spree/testing_support/factories/tag_factory.rb +5 -0
  435. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  436. data/lib/spree/testing_support/factories/zone_member_factory.rb +6 -0
  437. data/lib/spree/testing_support/factories.rb +3 -3
  438. data/lib/spree/testing_support/kernel.rb +18 -0
  439. data/lib/spree/testing_support/microdata.rb +189 -0
  440. data/lib/spree/testing_support/order_walkthrough.rb +4 -4
  441. data/lib/tasks/core.rake +69 -1
  442. data/lib/tasks/exchanges.rake +2 -2
  443. data/spec/fixtures/microdata.html +22 -0
  444. data/spec/fixtures/microdata_itemref.html +15 -0
  445. data/spec/fixtures/microdata_no_itemscope.html +20 -0
  446. data/spec/helpers/base_helper_spec.rb +74 -11
  447. data/spec/helpers/products_helper_spec.rb +80 -15
  448. data/spec/lib/i18n_spec.rb +13 -13
  449. data/spec/lib/search/base_spec.rb +18 -18
  450. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +6 -4
  451. data/spec/lib/spree/core/controller_helpers/order_spec.rb +15 -0
  452. data/spec/lib/spree/core/controller_helpers/store_spec.rb +56 -0
  453. data/spec/lib/spree/core/importer/order_spec.rb +227 -124
  454. data/spec/lib/spree/core/number_generator_spec.rb +175 -0
  455. data/spec/lib/spree/core_spec.rb +23 -0
  456. data/spec/lib/spree/localized_number_spec.rb +11 -1
  457. data/spec/lib/spree/money_spec.rb +6 -6
  458. data/spec/mailers/order_mailer_spec.rb +11 -13
  459. data/spec/mailers/reimbursement_mailer_spec.rb +2 -2
  460. data/spec/mailers/shipment_mailer_spec.rb +26 -8
  461. data/spec/mailers/test_mailer_spec.rb +16 -2
  462. data/spec/models/option_type_prototype_spec.rb +9 -0
  463. data/spec/models/spree/ability_spec.rb +20 -15
  464. data/spec/models/spree/address_spec.rb +144 -33
  465. data/spec/models/spree/adjustable/adjuster/base_spec.rb +10 -0
  466. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +211 -0
  467. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +86 -0
  468. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +2 -262
  469. data/spec/models/spree/adjustment_spec.rb +28 -2
  470. data/spec/models/spree/app_configuration_spec.rb +6 -3
  471. data/spec/models/spree/asset_spec.rb +9 -6
  472. data/spec/models/spree/calculator/default_tax_spec.rb +39 -14
  473. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +1 -1
  474. data/spec/models/spree/calculator/flexi_rate_spec.rb +6 -6
  475. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +1 -1
  476. data/spec/models/spree/calculator/price_sack_spec.rb +2 -2
  477. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +4 -8
  478. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +4 -4
  479. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +2 -2
  480. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +6 -6
  481. data/spec/models/spree/calculator/shipping/per_item_spec.rb +2 -2
  482. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +1 -1
  483. data/spec/models/spree/calculator/tiered_percent_spec.rb +1 -1
  484. data/spec/models/spree/calculator_spec.rb +3 -3
  485. data/spec/models/spree/classification_spec.rb +1 -1
  486. data/spec/models/spree/concerns/user_methods_spec.rb +82 -0
  487. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +66 -0
  488. data/spec/models/spree/country_spec.rb +45 -8
  489. data/spec/models/spree/credit_card_spec.rb +13 -9
  490. data/spec/models/spree/customer_return_spec.rb +4 -26
  491. data/spec/models/spree/exchange_spec.rb +1 -1
  492. data/spec/models/spree/gateway/bogus_simple.rb +1 -1
  493. data/spec/models/spree/gateway/bogus_spec.rb +1 -1
  494. data/spec/models/spree/gateway_spec.rb +8 -1
  495. data/spec/models/spree/image_spec.rb +4 -1
  496. data/spec/models/spree/inventory_unit_spec.rb +35 -21
  497. data/spec/models/spree/line_item_spec.rb +100 -21
  498. data/spec/models/spree/option_type_spec.rb +3 -3
  499. data/spec/models/spree/option_value_spec.rb +8 -3
  500. data/spec/models/spree/order/address_spec.rb +1 -1
  501. data/spec/models/spree/order/adjustments_spec.rb +1 -1
  502. data/spec/models/spree/order/callbacks_spec.rb +3 -3
  503. data/spec/models/spree/order/checkout_spec.rb +99 -93
  504. data/spec/models/spree/order/currency_updater_spec.rb +4 -4
  505. data/spec/models/spree/order/finalizing_spec.rb +5 -8
  506. data/spec/models/spree/order/helpers_spec.rb +1 -1
  507. data/spec/models/spree/order/payment_spec.rb +21 -21
  508. data/spec/models/spree/order/risk_assessment_spec.rb +1 -1
  509. data/spec/models/spree/order/state_machine_spec.rb +4 -8
  510. data/spec/models/spree/order/store_credit_spec.rb +426 -0
  511. data/spec/models/spree/order/tax_spec.rb +13 -13
  512. data/spec/models/spree/order/totals_spec.rb +2 -2
  513. data/spec/models/spree/order/updating_spec.rb +4 -4
  514. data/spec/models/spree/order/validations_spec.rb +2 -2
  515. data/spec/models/spree/order_contents_spec.rb +45 -4
  516. data/spec/models/spree/order_inventory_spec.rb +28 -17
  517. data/spec/models/spree/order_merger_spec.rb +3 -1
  518. data/spec/models/spree/order_spec.rb +188 -96
  519. data/spec/models/spree/order_updater_spec.rb +43 -32
  520. data/spec/models/spree/payment/gateway_options_spec.rb +10 -2
  521. data/spec/models/spree/payment/store_credit_spec.rb +60 -0
  522. data/spec/models/spree/payment_method/store_credit_spec.rb +291 -0
  523. data/spec/models/spree/payment_method_spec.rb +22 -14
  524. data/spec/models/spree/payment_spec.rb +75 -82
  525. data/spec/models/spree/preference_spec.rb +1 -1
  526. data/spec/models/spree/preferences/configuration_spec.rb +2 -2
  527. data/spec/models/spree/preferences/preferable_spec.rb +15 -19
  528. data/spec/models/spree/preferences/scoped_store_spec.rb +1 -1
  529. data/spec/models/spree/preferences/store_spec.rb +3 -3
  530. data/spec/models/spree/price_spec.rb +87 -1
  531. data/spec/models/spree/product/scopes_spec.rb +39 -4
  532. data/spec/models/spree/product_duplicator_spec.rb +2 -2
  533. data/spec/models/spree/product_filter_spec.rb +2 -2
  534. data/spec/models/spree/product_option_type_spec.rb +6 -2
  535. data/spec/models/spree/product_promotion_rule_spec.rb +9 -0
  536. data/spec/models/spree/product_property_spec.rb +16 -1
  537. data/spec/models/spree/product_spec.rb +196 -41
  538. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +63 -0
  539. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +6 -6
  540. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +1 -1
  541. data/spec/models/spree/promotion/rules/country_spec.rb +36 -0
  542. data/spec/models/spree/promotion/rules/first_order_spec.rb +11 -11
  543. data/spec/models/spree/promotion/rules/item_total_spec.rb +1 -1
  544. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +1 -1
  545. data/spec/models/spree/promotion/rules/product_spec.rb +8 -8
  546. data/spec/models/spree/promotion/rules/taxon_spec.rb +1 -1
  547. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +3 -3
  548. data/spec/models/spree/promotion/rules/user_spec.rb +15 -7
  549. data/spec/models/spree/promotion_action_spec.rb +2 -2
  550. data/spec/models/spree/promotion_category_spec.rb +1 -1
  551. data/spec/models/spree/promotion_handler/cart_spec.rb +1 -1
  552. data/spec/models/spree/promotion_handler/coupon_spec.rb +28 -28
  553. data/spec/models/spree/promotion_handler/page_spec.rb +6 -6
  554. data/spec/models/spree/promotion_rule_spec.rb +2 -2
  555. data/spec/models/spree/promotion_rule_taxon_spec.rb +9 -0
  556. data/spec/models/spree/promotion_rule_user_spec.rb +9 -0
  557. data/spec/models/spree/promotion_spec.rb +141 -65
  558. data/spec/models/spree/property_prototype_spec.rb +9 -0
  559. data/spec/models/spree/property_spec.rb +1 -1
  560. data/spec/models/spree/prototype_spec.rb +1 -1
  561. data/spec/models/spree/prototype_taxon_spec.rb +9 -0
  562. data/spec/models/spree/refund_reason_spec.rb +20 -0
  563. data/spec/models/spree/refund_spec.rb +1 -1
  564. data/spec/models/spree/reimbursement/credit_spec.rb +1 -1
  565. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +1 -1
  566. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +1 -1
  567. data/spec/models/spree/reimbursement_performer_spec.rb +1 -1
  568. data/spec/models/spree/reimbursement_spec.rb +3 -30
  569. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +18 -6
  570. data/spec/models/spree/reimbursement_type/credit_spec.rb +1 -1
  571. data/spec/models/spree/reimbursement_type/exchange_spec.rb +1 -1
  572. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +1 -1
  573. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +101 -0
  574. data/spec/models/spree/return_authorization_reason_spec.rb +7 -0
  575. data/spec/models/spree/return_authorization_spec.rb +3 -23
  576. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +1 -1
  577. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
  578. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +1 -1
  579. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +1 -1
  580. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +1 -1
  581. data/spec/models/spree/return_item_spec.rb +51 -2
  582. data/spec/models/spree/returns_calculator_spec.rb +2 -2
  583. data/spec/models/spree/role_spec.rb +7 -0
  584. data/spec/models/spree/shipment_spec.rb +24 -22
  585. data/spec/models/spree/shipping_calculator_spec.rb +5 -5
  586. data/spec/models/spree/shipping_category_spec.rb +15 -1
  587. data/spec/models/spree/shipping_method_spec.rb +11 -4
  588. data/spec/models/spree/shipping_rate_spec.rb +40 -41
  589. data/spec/models/spree/state_spec.rb +13 -2
  590. data/spec/models/spree/stock/availability_validator_spec.rb +1 -1
  591. data/spec/models/spree/stock/content_item_spec.rb +9 -0
  592. data/spec/models/spree/stock/coordinator_spec.rb +13 -3
  593. data/spec/models/spree/stock/differentiator_spec.rb +1 -1
  594. data/spec/models/spree/stock/estimator_spec.rb +60 -12
  595. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +1 -1
  596. data/spec/models/spree/stock/package_spec.rb +6 -18
  597. data/spec/models/spree/stock/packer_spec.rb +1 -1
  598. data/spec/models/spree/stock/prioritizer_spec.rb +7 -7
  599. data/spec/models/spree/stock/quantifier_spec.rb +61 -32
  600. data/spec/models/spree/stock/splitter/backordered_spec.rb +1 -1
  601. data/spec/models/spree/stock/splitter/base_spec.rb +1 -1
  602. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +3 -3
  603. data/spec/models/spree/stock_item_spec.rb +30 -8
  604. data/spec/models/spree/stock_location_spec.rb +5 -5
  605. data/spec/models/spree/stock_movement_spec.rb +101 -37
  606. data/spec/models/spree/stock_transfer_spec.rb +1 -1
  607. data/spec/models/spree/store_credit_event_spec.rb +101 -0
  608. data/spec/models/spree/store_credit_spec.rb +786 -0
  609. data/spec/models/spree/store_spec.rb +40 -12
  610. data/spec/models/spree/tax_category_spec.rb +7 -2
  611. data/spec/models/spree/tax_rate_spec.rb +288 -109
  612. data/spec/models/spree/taxon_spec.rb +15 -4
  613. data/spec/models/spree/taxonomy_spec.rb +2 -2
  614. data/spec/models/spree/tracker_spec.rb +1 -1
  615. data/spec/models/spree/user_spec.rb +114 -41
  616. data/spec/models/spree/variant_spec.rb +310 -15
  617. data/spec/models/spree/zone_member_spec.rb +38 -0
  618. data/spec/models/spree/zone_spec.rb +38 -10
  619. data/spec/spec_helper.rb +5 -0
  620. data/spec/support/concerns/{adjustment_source_spec.rb → adjustment_source.rb} +0 -0
  621. data/spec/support/concerns/{default_price_spec.rb → default_price.rb} +9 -0
  622. data/spree_core.gemspec +12 -13
  623. data/vendor/assets/javascripts/jquery.payment.js +239 -84
  624. metadata +136 -65
  625. data/CHANGELOG.md +0 -4
  626. data/app/models/concerns/spree/number_generator.rb +0 -39
  627. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -24
@@ -5,15 +5,15 @@ require 'bundler/cli'
5
5
 
6
6
  module Spree
7
7
  class InstallGenerator < Rails::Generators::Base
8
- class_option :migrate, :type => :boolean, :default => true, :banner => 'Run Spree migrations'
9
- class_option :seed, :type => :boolean, :default => true, :banner => 'load seed data (migrations must be run)'
10
- class_option :sample, :type => :boolean, :default => true, :banner => 'load sample data (migrations must be run)'
11
- class_option :auto_accept, :type => :boolean
12
- class_option :user_class, :type => :string
13
- class_option :admin_email, :type => :string
14
- class_option :admin_password, :type => :string
15
- class_option :lib_name, :type => :string, :default => 'spree'
16
- class_option :enforce_available_locales, :type => :boolean, :default => nil
8
+ class_option :migrate, type: :boolean, default: true, banner: 'Run Spree migrations'
9
+ class_option :seed, type: :boolean, default: true, banner: 'load seed data (migrations must be run)'
10
+ class_option :sample, type: :boolean, default: true, banner: 'load sample data (migrations must be run)'
11
+ class_option :auto_accept, type: :boolean
12
+ class_option :user_class, type: :string
13
+ class_option :admin_email, type: :string
14
+ class_option :admin_password, type: :string
15
+ class_option :lib_name, type: :string, default: 'spree'
16
+ class_option :enforce_available_locales, type: :boolean, default: nil
17
17
 
18
18
  def self.source_paths
19
19
  paths = self.superclass.source_paths
@@ -125,7 +125,11 @@ Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
125
125
  def run_migrations
126
126
  if @run_migrations
127
127
  say_status :running, "migrations"
128
- quietly { rake 'db:migrate' }
128
+ silence_stream(STDOUT) do
129
+ silence_stream(STDERR) do
130
+ silence_warnings { rake 'db:migrate' }
131
+ end
132
+ end
129
133
  else
130
134
  say_status :skipping, "migrations (don't forget to run rake db:migrate)"
131
135
  end
@@ -141,7 +145,11 @@ Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
141
145
 
142
146
  cmd = lambda { rake("db:seed #{rake_options.join(' ')}") }
143
147
  if options[:auto_accept] || (options[:admin_email] && options[:admin_password])
144
- quietly &cmd
148
+ silence_stream(STDOUT) do
149
+ silence_stream(STDERR) do
150
+ silence_warnings &cmd
151
+ end
152
+ end
145
153
  else
146
154
  cmd.call
147
155
  end
@@ -153,14 +161,18 @@ Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
153
161
  def load_sample_data
154
162
  if @load_sample_data
155
163
  say_status :loading, "sample data"
156
- quietly { rake 'spree_sample:load' }
164
+ silence_stream(STDOUT) do
165
+ silence_stream(STDERR) do
166
+ silence_warnings { rake 'spree_sample:load' }
167
+ end
168
+ end
157
169
  else
158
170
  say_status :skipping, "sample data (you can always run rake spree_sample:load)"
159
171
  end
160
172
  end
161
173
 
162
174
  def notify_about_routes
163
- insert_into_file File.join('config', 'routes.rb'), :after => "Rails.application.routes.draw do\n" do
175
+ insert_into_file File.join('config', 'routes.rb'), after: "Rails.application.routes.draw do\n" do
164
176
  %Q{
165
177
  # This line mounts Spree's routes at the root of your application.
166
178
  # This means, any requests to URLs such as /products, will go to Spree::ProductsController.
@@ -205,5 +217,17 @@ Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
205
217
  File.exists?("#{filename}#{extension}")
206
218
  end
207
219
  end
220
+
221
+ private
222
+
223
+ def silence_stream(stream)
224
+ old_stream = stream.dup
225
+ stream.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')
226
+ stream.sync = true
227
+ yield
228
+ ensure
229
+ stream.reopen(old_stream)
230
+ old_stream.close
231
+ end
208
232
  end
209
233
  end
@@ -67,7 +67,7 @@ module Spree
67
67
  def redirect_unauthorized_access
68
68
  if try_spree_current_user
69
69
  flash[:error] = Spree.t(:authorization_failure)
70
- redirect_to '/unauthorized'
70
+ redirect_to spree.forbidden_path
71
71
  else
72
72
  store_location
73
73
  if respond_to?(:spree_login_path)
@@ -22,7 +22,7 @@ module Spree
22
22
  title_string = @title.present? ? @title : accurate_title
23
23
  if title_string.present?
24
24
  if Spree::Config[:always_put_site_name_in_title]
25
- [title_string, default_title].join(' - ')
25
+ [title_string, default_title].join(" #{Spree::Config[:title_site_name_separator]} ")
26
26
  else
27
27
  title_string
28
28
  end
@@ -42,8 +42,8 @@ module Spree
42
42
 
43
43
  def render_404(exception = nil)
44
44
  respond_to do |type|
45
- type.html { render :status => :not_found, :file => "#{::Rails.root}/public/404", :formats => [:html], :layout => nil}
46
- type.all { render :status => :not_found, :nothing => true }
45
+ type.html { render status: :not_found, file: "#{::Rails.root}/public/404", formats: [:html], layout: nil}
46
+ type.all { head :not_found }
47
47
  end
48
48
  end
49
49
 
@@ -51,9 +51,9 @@ module Spree
51
51
 
52
52
  def set_user_language
53
53
  locale = session[:locale]
54
- locale ||= config_locale if respond_to?(:config_locale, true)
55
- locale ||= Rails.application.config.i18n.default_locale
56
- locale ||= I18n.default_locale unless I18n.available_locales.map(&:to_s).include?(locale)
54
+ locale = config_locale if respond_to?(:config_locale, true) && locale.blank?
55
+ locale = Rails.application.config.i18n.default_locale if locale.blank?
56
+ locale = I18n.default_locale unless I18n.available_locales.map(&:to_s).include?(locale.to_s)
57
57
  I18n.locale = locale
58
58
  end
59
59
 
@@ -35,11 +35,8 @@ module Spree
35
35
  @current_order = find_order_by_token_or_user(options, true)
36
36
 
37
37
  if options[:create_order_if_necessary] && (@current_order.nil? || @current_order.completed?)
38
- @current_order = Spree::Order.new(current_order_params)
39
- @current_order.user ||= try_spree_current_user
40
- # See issue #3346 for reasons why this line is here
41
- @current_order.created_by ||= try_spree_current_user
42
- @current_order.save!
38
+ @current_order = Spree::Order.create!(current_order_params)
39
+ @current_order.associate_user! try_spree_current_user if try_spree_current_user
43
40
  end
44
41
 
45
42
  if @current_order
@@ -81,11 +78,13 @@ module Spree
81
78
  options[:lock] ||= false
82
79
 
83
80
  # Find any incomplete orders for the guest_token
84
- if with_adjustments
85
- order = Spree::Order.incomplete.includes(:adjustments).lock(options[:lock]).find_by(current_order_params)
86
- else
87
- order = Spree::Order.incomplete.lock(options[:lock]).find_by(current_order_params)
88
- end
81
+ incomplete_orders = Spree::Order.incomplete.includes(line_items: [variant: [:images, :option_values, :product]])
82
+ guest_token_order_params = current_order_params.except(:user_id)
83
+ order = if with_adjustments
84
+ incomplete_orders.includes(:adjustments).lock(options[:lock]).find_by(guest_token_order_params)
85
+ else
86
+ incomplete_orders.lock(options[:lock]).find_by(guest_token_order_params)
87
+ end
89
88
 
90
89
  # Find any incomplete orders for the current user
91
90
  if order.nil? && try_spree_current_user
@@ -52,7 +52,7 @@ module Spree
52
52
  end
53
53
 
54
54
  if format_value.is_a?(Proc)
55
- options = {action_name.to_sym => {format_name.to_sym => {:success => format_value}}}
55
+ options = {action_name.to_sym => {format_name.to_sym => {success: format_value}}}
56
56
  end
57
57
 
58
58
  self.spree_responders.deep_merge!(self.name.to_sym => options)
@@ -2,7 +2,7 @@ module Spree
2
2
  module Core
3
3
  module ControllerHelpers
4
4
  module Search
5
- def build_searcher params
5
+ def build_searcher(params)
6
6
  Spree::Config.searcher_class.new(params).tap do |searcher|
7
7
  searcher.current_user = try_spree_current_user
8
8
  searcher.current_currency = current_currency
@@ -7,6 +7,7 @@ module Spree
7
7
  included do
8
8
  helper_method :current_currency
9
9
  helper_method :current_store
10
+ helper_method :current_price_options
10
11
  end
11
12
 
12
13
  def current_currency
@@ -16,6 +17,34 @@ module Spree
16
17
  def current_store
17
18
  @current_store ||= Spree::Store.current(request.env['SERVER_NAME'])
18
19
  end
20
+
21
+ # Return a Hash of things that influence the prices displayed in your shop.
22
+ #
23
+ # By default, the only thing that influences prices that is the current order's +tax_zone+
24
+ # (to facilitate differing prices depending on VAT rate for digital products in Europe, see
25
+ # https://github.com/spree/spree/pull/6295 and https://github.com/spree/spree/pull/6662).
26
+ #
27
+ # If your prices depend on something else, overwrite this method and add
28
+ # more key/value pairs to the Hash it returns.
29
+ #
30
+ # Be careful though to also patch the following parts of Spree accordingly:
31
+ #
32
+ # * `Spree::VatPriceCalculation#gross_amount`
33
+ # * `Spree::LineItem#update_price`
34
+ # * `Spree::Stock::Estimator#taxation_options_for`
35
+ # * Subclass the `DefaultTax` calculator
36
+ #
37
+ def current_price_options
38
+ {
39
+ tax_zone: current_tax_zone
40
+ }
41
+ end
42
+
43
+ private
44
+
45
+ def current_tax_zone
46
+ current_order.try(:tax_zone) || Spree::Zone.default_tax
47
+ end
19
48
  end
20
49
  end
21
50
  end
@@ -29,7 +29,7 @@ module DelegateBelongsTo
29
29
  # @todo Integrate this with ActiveRecord::Dirty, so if you set a property through one of these setters and then call save on this object, it will save the associated object automatically.
30
30
  # delegate_belongs_to :contact
31
31
  # delegate_belongs_to :contact, [:defaults] ## same as above, and useless
32
- # delegate_belongs_to :contact, [:defaults, :address, :fullname], :class_name => 'VCard'
32
+ # delegate_belongs_to :contact, [:defaults, :address, :fullname], class_name: 'VCard'
33
33
  ##
34
34
  def delegate_belongs_to(association, *attrs)
35
35
  opts = attrs.extract_options!
@@ -75,7 +75,7 @@ module DelegateBelongsTo
75
75
 
76
76
  def delegator_for(association, attr, *args)
77
77
  return if self.class.column_names.include?(attr.to_s)
78
- send("#{association}=", self.class.reflect_on_association(association).klass.new) if send(association).nil?
78
+ send "build_#{association}" if send(association).nil?
79
79
  if args.empty?
80
80
  send(association).send(attr)
81
81
  else
@@ -85,11 +85,11 @@ module DelegateBelongsTo
85
85
 
86
86
  def delegator_for_setter(association, attr, val)
87
87
  return if self.class.column_names.include?(attr.to_s)
88
- send("#{association}=", self.class.reflect_on_association(association).klass.new) if send(association).nil?
88
+ send "build_#{association}" if send(association).nil?
89
89
  send(association).send("#{attr}=", val)
90
90
  end
91
91
  protected :delegator_for
92
92
  protected :delegator_for_setter
93
93
  end
94
94
 
95
- ActiveRecord::Base.send :include, DelegateBelongsTo
95
+ ActiveRecord::Base.include DelegateBelongsTo
@@ -5,38 +5,49 @@ module Spree
5
5
  engine_name 'spree'
6
6
 
7
7
  rake_tasks do
8
- load File.join(root, "lib", "tasks", "exchanges.rake")
8
+ load File.join(root, 'lib', 'tasks', 'exchanges.rake')
9
9
  end
10
10
 
11
- initializer "spree.environment", :before => :load_config_initializers do |app|
11
+ initializer 'spree.environment', before: :load_config_initializers do |app|
12
12
  app.config.spree = Spree::Core::Environment.new
13
- Spree::Config = app.config.spree.preferences #legacy access
13
+ Spree::Config = app.config.spree.preferences # legacy access
14
14
  end
15
15
 
16
- initializer "spree.register.calculators" do |app|
16
+ initializer 'spree.register.calculators' do |app|
17
17
  app.config.spree.calculators.shipping_methods = [
18
- Spree::Calculator::Shipping::FlatPercentItemTotal,
19
- Spree::Calculator::Shipping::FlatRate,
20
- Spree::Calculator::Shipping::FlexiRate,
21
- Spree::Calculator::Shipping::PerItem,
22
- Spree::Calculator::Shipping::PriceSack]
23
-
24
- app.config.spree.calculators.tax_rates = [
25
- Spree::Calculator::DefaultTax]
18
+ Spree::Calculator::Shipping::FlatPercentItemTotal,
19
+ Spree::Calculator::Shipping::FlatRate,
20
+ Spree::Calculator::Shipping::FlexiRate,
21
+ Spree::Calculator::Shipping::PerItem,
22
+ Spree::Calculator::Shipping::PriceSack
23
+ ]
24
+
25
+ app.config.spree.calculators.tax_rates = [
26
+ Spree::Calculator::DefaultTax
27
+ ]
26
28
  end
27
29
 
28
- initializer "spree.register.stock_splitters" do |app|
30
+ initializer 'spree.register.stock_splitters' do |app|
29
31
  app.config.spree.stock_splitters = [
30
32
  Spree::Stock::Splitter::ShippingCategory,
31
33
  Spree::Stock::Splitter::Backordered
32
34
  ]
33
35
  end
34
36
 
35
- initializer "spree.register.payment_methods" do |app|
37
+ initializer 'spree.register.payment_methods', after: 'acts_as_list.insert_into_active_record' do |app|
36
38
  app.config.spree.payment_methods = [
37
- Spree::Gateway::Bogus,
38
- Spree::Gateway::BogusSimple,
39
- Spree::PaymentMethod::Check ]
39
+ Spree::Gateway::Bogus,
40
+ Spree::Gateway::BogusSimple,
41
+ Spree::PaymentMethod::Check,
42
+ Spree::PaymentMethod::StoreCredit
43
+ ]
44
+ end
45
+
46
+ initializer 'spree.register.adjustable_adjusters' do |app|
47
+ app.config.spree.adjusters = [
48
+ Spree::Adjustable::Adjuster::Promotion,
49
+ Spree::Adjustable::Adjuster::Tax
50
+ ]
40
51
  end
41
52
 
42
53
  # We need to define promotions rules here so extensions and existing apps
@@ -78,7 +89,8 @@ module Spree
78
89
  Spree::Promotion::Rules::UserLoggedIn,
79
90
  Spree::Promotion::Rules::OneUsePerUser,
80
91
  Spree::Promotion::Rules::Taxon,
81
- Spree::Promotion::Rules::OptionValue
92
+ Spree::Promotion::Rules::OptionValue,
93
+ Spree::Promotion::Rules::Country
82
94
  ]
83
95
  end
84
96
 
@@ -91,7 +103,7 @@ module Spree
91
103
  end
92
104
 
93
105
  # filter sensitive information during logging
94
- initializer "spree.params.filter" do |app|
106
+ initializer 'spree.params.filter' do |app|
95
107
  app.config.filter_parameters += [
96
108
  :password,
97
109
  :password_confirmation,
@@ -99,11 +111,18 @@ module Spree
99
111
  :verification_value]
100
112
  end
101
113
 
102
- initializer "spree.core.checking_migrations" do |app|
114
+ initializer 'spree.core.checking_migrations' do
103
115
  Migrations.new(config, engine_name).check
104
116
  end
105
117
 
106
118
  config.to_prepare do
119
+ # Load spree locales before decorators
120
+ I18n.load_path += Dir.glob(
121
+ File.join(
122
+ File.dirname(__FILE__), '../../../config/locales', '*.{rb,yml}'
123
+ )
124
+ )
125
+
107
126
  # Load application's model / class decorators
108
127
  Dir.glob(File.join(File.dirname(__FILE__), '../../../app/**/*_decorator*.rb')) do |c|
109
128
  Rails.configuration.cache_classes ? require(c) : load(c)
@@ -4,7 +4,7 @@ module Spree
4
4
  include EnvironmentExtension
5
5
 
6
6
  attr_accessor :calculators, :payment_methods, :preferences,
7
- :stock_splitters
7
+ :adjusters, :stock_splitters
8
8
 
9
9
  def initialize
10
10
  @calculators = Calculators.new
@@ -82,7 +82,7 @@ module Spree
82
82
  shipment.shipped_at = s[:shipped_at]
83
83
  shipment.state = 'shipped'
84
84
  end
85
-
85
+
86
86
  shipment.save!
87
87
 
88
88
  shipping_method = Spree::ShippingMethod.find_by_name(s[:shipping_method]) || Spree::ShippingMethod.find_by_admin_name!(s[:shipping_method])
@@ -91,6 +91,8 @@ module Spree
91
91
  shipment.selected_shipping_rate_id = rate.id
92
92
  shipment.update_amounts
93
93
 
94
+ adjustments = s.delete(:adjustments_attributes)
95
+ create_adjustments_from_params(adjustments, order, shipment)
94
96
  rescue Exception => e
95
97
  raise "Order import shipments: #{e.message} #{s}"
96
98
  end
@@ -99,10 +101,10 @@ module Spree
99
101
 
100
102
  def self.create_line_items_from_params(line_items, order)
101
103
  return {} unless line_items
102
- case line_items
104
+ iterator = case line_items
103
105
  when Hash
104
106
  ActiveSupport::Deprecation.warn(<<-EOS, caller)
105
- Passing a hash is now deprecated and will be removed in Spree 3.1.
107
+ Passing a hash is now deprecated and will be removed in Spree 4.0.
106
108
  It is recommended that you pass it as an array instead.
107
109
 
108
110
  New Syntax:
@@ -127,53 +129,41 @@ module Spree
127
129
  }
128
130
  }
129
131
  EOS
130
-
131
- line_items.each_key do |k|
132
- begin
133
- extra_params = line_items[k].except(:variant_id, :quantity, :sku)
134
- line_item = ensure_variant_id_from_params(line_items[k])
135
- variant = Spree::Variant.find(line_item[:variant_id])
136
- line_item = order.contents.add(variant, line_item[:quantity])
137
- # Raise any errors with saving to prevent import succeeding with line items
138
- # failing silently.
139
- if extra_params.present?
140
- line_item.update_attributes!(extra_params)
141
- else
142
- line_item.save!
143
- end
144
- rescue Exception => e
145
- raise "Order import line items: #{e.message} #{line_item}"
146
- end
147
- end
132
+ :each_value
148
133
  when Array
149
- line_items.each do |line_item|
150
- begin
151
- extra_params = line_item.except(:variant_id, :quantity, :sku)
152
- line_item = ensure_variant_id_from_params(line_item)
153
- variant = Spree::Variant.find(line_item[:variant_id])
154
- line_item = order.contents.add(variant, line_item[:quantity])
155
- # Raise any errors with saving to prevent import succeeding with line items
156
- # failing silently.
157
- if extra_params.present?
158
- line_item.update_attributes!(extra_params)
159
- else
160
- line_item.save!
161
- end
162
- rescue Exception => e
163
- raise "Order import line items: #{e.message} #{line_item}"
134
+ :each
135
+ end
136
+
137
+ line_items.send(iterator) do |line_item|
138
+ begin
139
+ adjustments = line_item.delete(:adjustments_attributes)
140
+ extra_params = line_item.except(:variant_id, :quantity, :sku)
141
+ line_item = ensure_variant_id_from_params(line_item)
142
+ variant = Spree::Variant.find(line_item[:variant_id])
143
+ line_item = order.contents.add(variant, line_item[:quantity])
144
+ # Raise any errors with saving to prevent import succeeding with line items
145
+ # failing silently.
146
+ if extra_params.present?
147
+ line_item.update_attributes!(extra_params)
148
+ else
149
+ line_item.save!
164
150
  end
151
+ create_adjustments_from_params(adjustments, order, line_item)
152
+ rescue Exception => e
153
+ raise "Order import line items: #{e.message} #{line_item}"
165
154
  end
166
155
  end
167
156
  end
168
157
 
169
- def self.create_adjustments_from_params(adjustments, order)
158
+ def self.create_adjustments_from_params(adjustments, order, adjustable = nil)
170
159
  return [] unless adjustments
171
160
  adjustments.each do |a|
172
161
  begin
173
- adjustment = order.adjustments.build(
174
- order: order,
162
+ adjustment = (adjustable || order).adjustments.build(
163
+ order: order,
175
164
  amount: a[:amount].to_f,
176
- label: a[:label]
165
+ label: a[:label],
166
+ source_type: source_type_from_adjustment(a)
177
167
  )
178
168
  adjustment.save!
179
169
  adjustment.close!
@@ -281,6 +271,13 @@ module Spree
281
271
  end
282
272
  end
283
273
 
274
+ def self.source_type_from_adjustment(adjustment)
275
+ if adjustment[:tax]
276
+ 'Spree::TaxRate'
277
+ elsif adjustment[:promotion]
278
+ 'Spree::PromotionAction'
279
+ end
280
+ end
284
281
  end
285
282
  end
286
283
  end
@@ -7,8 +7,8 @@ module Spree
7
7
  def initialize(product, product_params, options = {})
8
8
  @product = product || Spree::Product.new(product_params)
9
9
 
10
- @product_attrs = product_params
11
- @variants_attrs = options[:variants_attrs] || []
10
+ @product_attrs = product_params.to_h
11
+ @variants_attrs = (options[:variants_attrs] || []).map(&:to_h)
12
12
  @options_attrs = options[:options_attrs] || []
13
13
  end
14
14
 
@@ -0,0 +1,52 @@
1
+ module Spree
2
+ module Core
3
+ class NumberGenerator < Module
4
+ BASE = 10
5
+ DEFAULT_LENGTH = 9
6
+ NUMBERS = (0..9).to_a.freeze
7
+ LETTERS = ('A'..'Z').to_a.freeze
8
+
9
+ attr_accessor :prefix, :length
10
+
11
+ def initialize(options)
12
+ @random = Random.new
13
+ @prefix = options.fetch(:prefix)
14
+ @length = options.fetch(:length, DEFAULT_LENGTH)
15
+ @candidates = NUMBERS + (options[:letters] ? LETTERS : [])
16
+ end
17
+
18
+ def included(host)
19
+ generator_method = method(:generate_permalink)
20
+ generator_instance = self
21
+
22
+ host.class_eval do
23
+ validates(:number, presence: true, uniqueness: { allow_blank: true })
24
+
25
+ before_validation do |instance|
26
+ instance.number ||= generator_method.call(host)
27
+ end
28
+
29
+ define_singleton_method(:number_generator) { generator_instance }
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def generate_permalink(host)
36
+ length = @length
37
+
38
+ loop do
39
+ candidate = new_candidate(length)
40
+ return candidate unless host.exists?(number: candidate)
41
+
42
+ # If over half of all possible options are taken add another digit.
43
+ length += 1 if host.count > Rational(BASE**length, 2)
44
+ end
45
+ end
46
+
47
+ def new_candidate(length)
48
+ @prefix + length.times.map { @candidates.sample(random: @random) }.join
49
+ end
50
+ end # Permalink
51
+ end # Core
52
+ end # Spree
@@ -58,7 +58,7 @@ module Spree
58
58
 
59
59
  def duplicate_image(image)
60
60
  new_image = image.dup
61
- new_image.assign_attributes(:attachment => image.attachment.clone)
61
+ new_image.assign_attributes(attachment: image.attachment.clone)
62
62
  new_image
63
63
  end
64
64
 
@@ -9,7 +9,7 @@ module Spree
9
9
  # 2) Add it to the config load path, or require it in an initializer, e.g...
10
10
  #
11
11
  # # config/initializers/spree.rb
12
- # require 'spree/product_filters'
12
+ # require 'spree/core/product_filters'
13
13
  #
14
14
 
15
15
  # set up some basic filters for use with products
@@ -108,7 +108,7 @@ module Spree
108
108
  pp = Spree::ProductProperty.arel_table
109
109
  conds = Hash[*brands.map { |b| [b, pp[:value].eq(b)] }.flatten]
110
110
  {
111
- name: 'Brands',
111
+ name: I18n.t('spree.taxonomy_brands_name'),
112
112
  scope: :brand_any,
113
113
  conds: conds,
114
114
  labels: (brands.sort).map { |k| [k, k] }
@@ -17,7 +17,8 @@ module Spree
17
17
  curr_page = page || 1
18
18
 
19
19
  unless Spree::Config.show_products_without_price
20
- @products = @products.where("spree_prices.amount IS NOT NULL").where("spree_prices.currency" => current_currency)
20
+ @products = @products.where("spree_prices.amount IS NOT NULL").
21
+ where("spree_prices.currency" => current_currency)
21
22
  end
22
23
  @products = @products.page(curr_page).per(per_page)
23
24
  end
@@ -32,7 +33,7 @@ module Spree
32
33
 
33
34
  protected
34
35
  def get_base_scope
35
- base_scope = Spree::Product.active
36
+ base_scope = Spree::Product.spree_base_scopes.active
36
37
  base_scope = base_scope.in_taxon(taxon) unless taxon.blank?
37
38
  base_scope = get_products_conditions_for(base_scope, keywords)
38
39
  base_scope = add_search_scopes(base_scope)
@@ -69,7 +70,7 @@ module Spree
69
70
  else
70
71
  base_scope = base_scope.merge(Spree::Product.ransack({scope_name => scope_attribute}).result)
71
72
  end
72
- end if search
73
+ end if search.is_a?(ActionController::Parameters)
73
74
  base_scope
74
75
  end
75
76
 
@@ -1,5 +1,5 @@
1
1
  module Spree
2
2
  def self.version
3
- '3.0.9'
3
+ "3.2.0"
4
4
  end
5
5
  end
data/lib/spree/core.rb CHANGED
@@ -31,6 +31,21 @@ module Spree
31
31
  end
32
32
  end
33
33
 
34
+ def self.admin_path
35
+ Spree::Config[:admin_path]
36
+ end
37
+
38
+ # Used to configure admin_path for Spree
39
+ #
40
+ # Example:
41
+ #
42
+ # write the following line in `config/initializers/spree.rb`
43
+ # Spree.admin_path = '/custom-path'
44
+
45
+ def self.admin_path=(path)
46
+ Spree::Config[:admin_path] = path
47
+ end
48
+
34
49
  # Used to configure Spree.
35
50
  #
36
51
  # Example:
@@ -59,6 +74,7 @@ require 'spree/core/version'
59
74
  require 'spree/core/environment_extension'
60
75
  require 'spree/core/environment/calculators'
61
76
  require 'spree/core/environment'
77
+ require 'spree/core/number_generator'
62
78
  require 'spree/promo/environment'
63
79
  require 'spree/migrations'
64
80
  require 'spree/core/engine'