goca-spree-core 3.1.14.rails.5.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 (594) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE +26 -0
  4. data/Rakefile +15 -0
  5. data/app/assets/images/logo/spree_50.png +0 -0
  6. data/app/assets/images/noimage/large.png +0 -0
  7. data/app/assets/images/noimage/mini.png +0 -0
  8. data/app/assets/images/noimage/product.png +0 -0
  9. data/app/assets/images/noimage/small.png +0 -0
  10. data/app/assets/javascripts/spree.js.coffee.erb +59 -0
  11. data/app/controllers/spree/base_controller.rb +15 -0
  12. data/app/helpers/spree/base_helper.rb +123 -0
  13. data/app/helpers/spree/products_helper.rb +91 -0
  14. data/app/mailers/spree/base_mailer.rb +27 -0
  15. data/app/mailers/spree/order_mailer.rb +17 -0
  16. data/app/mailers/spree/reimbursement_mailer.rb +10 -0
  17. data/app/mailers/spree/shipment_mailer.rb +10 -0
  18. data/app/mailers/spree/test_mailer.rb +8 -0
  19. data/app/models/concerns/spree/adjustment_source.rb +53 -0
  20. data/app/models/concerns/spree/calculated_adjustments.rb +34 -0
  21. data/app/models/concerns/spree/default_price.rb +40 -0
  22. data/app/models/concerns/spree/display_money.rb +32 -0
  23. data/app/models/concerns/spree/named_type.rb +12 -0
  24. data/app/models/concerns/spree/ransackable_attributes.rb +24 -0
  25. data/app/models/concerns/spree/user_address.rb +30 -0
  26. data/app/models/concerns/spree/user_api_authentication.rb +19 -0
  27. data/app/models/concerns/spree/user_methods.rb +57 -0
  28. data/app/models/concerns/spree/user_payment_source.rb +19 -0
  29. data/app/models/concerns/spree/user_reporting.rb +22 -0
  30. data/app/models/concerns/spree/vat_price_calculation.rb +47 -0
  31. data/app/models/friendly_id/slug_decorator.rb +3 -0
  32. data/app/models/spree/ability.rb +80 -0
  33. data/app/models/spree/address.rb +145 -0
  34. data/app/models/spree/adjustable/adjuster/base.rb +25 -0
  35. data/app/models/spree/adjustable/adjuster/promotion.rb +41 -0
  36. data/app/models/spree/adjustable/adjuster/tax.rb +26 -0
  37. data/app/models/spree/adjustable/adjustments_updater.rb +47 -0
  38. data/app/models/spree/adjustable/promotion_accumulator.rb +75 -0
  39. data/app/models/spree/adjustment.rb +104 -0
  40. data/app/models/spree/app_configuration.rb +74 -0
  41. data/app/models/spree/asset.rb +6 -0
  42. data/app/models/spree/base.rb +24 -0
  43. data/app/models/spree/calculator/default_tax.rb +59 -0
  44. data/app/models/spree/calculator/flat_percent_item_total.rb +22 -0
  45. data/app/models/spree/calculator/flat_rate.rb +20 -0
  46. data/app/models/spree/calculator/flexi_rate.rb +33 -0
  47. data/app/models/spree/calculator/free_shipping.rb +22 -0
  48. data/app/models/spree/calculator/percent_on_line_item.rb +15 -0
  49. data/app/models/spree/calculator/percent_per_item.rb +50 -0
  50. data/app/models/spree/calculator/price_sack.rb +29 -0
  51. data/app/models/spree/calculator/returns/default_refund_amount.rb +36 -0
  52. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +22 -0
  53. data/app/models/spree/calculator/shipping/flat_rate.rb +18 -0
  54. data/app/models/spree/calculator/shipping/flexi_rate.rb +35 -0
  55. data/app/models/spree/calculator/shipping/per_item.rb +22 -0
  56. data/app/models/spree/calculator/shipping/price_sack.rb +28 -0
  57. data/app/models/spree/calculator/tiered_flat_rate.rb +37 -0
  58. data/app/models/spree/calculator/tiered_percent.rb +44 -0
  59. data/app/models/spree/calculator.rb +47 -0
  60. data/app/models/spree/classification.rb +15 -0
  61. data/app/models/spree/country.rb +40 -0
  62. data/app/models/spree/credit_card.rb +166 -0
  63. data/app/models/spree/customer_return.rb +67 -0
  64. data/app/models/spree/exchange.rb +46 -0
  65. data/app/models/spree/gateway/bogus.rb +91 -0
  66. data/app/models/spree/gateway/bogus_simple.rb +26 -0
  67. data/app/models/spree/gateway.rb +80 -0
  68. data/app/models/spree/image.rb +43 -0
  69. data/app/models/spree/inventory_unit.rb +105 -0
  70. data/app/models/spree/legacy_user.rb +13 -0
  71. data/app/models/spree/line_item.rb +158 -0
  72. data/app/models/spree/log_entry.rb +17 -0
  73. data/app/models/spree/option_type.rb +32 -0
  74. data/app/models/spree/option_type_prototype.rb +9 -0
  75. data/app/models/spree/option_value.rb +26 -0
  76. data/app/models/spree/option_value_variant.rb +6 -0
  77. data/app/models/spree/order/checkout.rb +336 -0
  78. data/app/models/spree/order/currency_updater.rb +40 -0
  79. data/app/models/spree/order/payments.rb +66 -0
  80. data/app/models/spree/order/store_credit.rb +96 -0
  81. data/app/models/spree/order.rb +685 -0
  82. data/app/models/spree/order_contents.rb +120 -0
  83. data/app/models/spree/order_inventory.rb +103 -0
  84. data/app/models/spree/order_merger.rb +65 -0
  85. data/app/models/spree/order_promotion.rb +6 -0
  86. data/app/models/spree/order_updater.rb +177 -0
  87. data/app/models/spree/payment/gateway_options.rb +90 -0
  88. data/app/models/spree/payment/processing.rb +175 -0
  89. data/app/models/spree/payment.rb +276 -0
  90. data/app/models/spree/payment_capture_event.rb +9 -0
  91. data/app/models/spree/payment_method/check.rb +43 -0
  92. data/app/models/spree/payment_method/store_credit.rb +130 -0
  93. data/app/models/spree/payment_method.rb +71 -0
  94. data/app/models/spree/preference.rb +5 -0
  95. data/app/models/spree/preferences/configuration.rb +71 -0
  96. data/app/models/spree/preferences/preferable.rb +133 -0
  97. data/app/models/spree/preferences/preferable_class_methods.rb +51 -0
  98. data/app/models/spree/preferences/scoped_store.rb +33 -0
  99. data/app/models/spree/preferences/store.rb +98 -0
  100. data/app/models/spree/price.rb +53 -0
  101. data/app/models/spree/product/scopes.rb +271 -0
  102. data/app/models/spree/product.rb +384 -0
  103. data/app/models/spree/product_option_type.rb +12 -0
  104. data/app/models/spree/product_promotion_rule.rb +9 -0
  105. data/app/models/spree/product_property.rb +28 -0
  106. data/app/models/spree/promotion/actions/create_adjustment.rb +21 -0
  107. data/app/models/spree/promotion/actions/create_item_adjustments.rb +24 -0
  108. data/app/models/spree/promotion/actions/create_line_items.rb +62 -0
  109. data/app/models/spree/promotion/actions/free_shipping.rb +18 -0
  110. data/app/models/spree/promotion/rules/first_order.rb +37 -0
  111. data/app/models/spree/promotion/rules/item_total.rb +61 -0
  112. data/app/models/spree/promotion/rules/one_use_per_user.rb +24 -0
  113. data/app/models/spree/promotion/rules/option_value.rb +50 -0
  114. data/app/models/spree/promotion/rules/product.rb +65 -0
  115. data/app/models/spree/promotion/rules/taxon.rb +70 -0
  116. data/app/models/spree/promotion/rules/user.rb +30 -0
  117. data/app/models/spree/promotion/rules/user_logged_in.rb +18 -0
  118. data/app/models/spree/promotion.rb +198 -0
  119. data/app/models/spree/promotion_action.rb +25 -0
  120. data/app/models/spree/promotion_action_line_item.rb +6 -0
  121. data/app/models/spree/promotion_category.rb +6 -0
  122. data/app/models/spree/promotion_handler/cart.rb +51 -0
  123. data/app/models/spree/promotion_handler/coupon.rb +107 -0
  124. data/app/models/spree/promotion_handler/free_shipping.rb +33 -0
  125. data/app/models/spree/promotion_handler/page.rb +24 -0
  126. data/app/models/spree/promotion_rule.rb +43 -0
  127. data/app/models/spree/promotion_rule_taxon.rb +9 -0
  128. data/app/models/spree/promotion_rule_user.rb +9 -0
  129. data/app/models/spree/property.rb +23 -0
  130. data/app/models/spree/property_prototype.rb +9 -0
  131. data/app/models/spree/prototype.rb +14 -0
  132. data/app/models/spree/prototype_taxon.rb +9 -0
  133. data/app/models/spree/refund.rb +89 -0
  134. data/app/models/spree/refund_reason.rb +13 -0
  135. data/app/models/spree/reimbursement/credit.rb +25 -0
  136. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +56 -0
  137. data/app/models/spree/reimbursement/reimbursement_type_validator.rb +15 -0
  138. data/app/models/spree/reimbursement.rb +164 -0
  139. data/app/models/spree/reimbursement_performer.rb +43 -0
  140. data/app/models/spree/reimbursement_tax_calculator.rb +44 -0
  141. data/app/models/spree/reimbursement_type/credit.rb +13 -0
  142. data/app/models/spree/reimbursement_type/exchange.rb +9 -0
  143. data/app/models/spree/reimbursement_type/original_payment.rb +13 -0
  144. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +67 -0
  145. data/app/models/spree/reimbursement_type/store_credit.rb +28 -0
  146. data/app/models/spree/reimbursement_type.rb +16 -0
  147. data/app/models/spree/return_authorization.rb +98 -0
  148. data/app/models/spree/return_authorization_reason.rb +7 -0
  149. data/app/models/spree/return_item/eligibility_validator/base_validator.rb +24 -0
  150. data/app/models/spree/return_item/eligibility_validator/default.rb +30 -0
  151. data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +16 -0
  152. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +16 -0
  153. data/app/models/spree/return_item/eligibility_validator/order_completed.rb +16 -0
  154. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +17 -0
  155. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +16 -0
  156. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +34 -0
  157. data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +9 -0
  158. data/app/models/spree/return_item.rb +236 -0
  159. data/app/models/spree/returns_calculator.rb +8 -0
  160. data/app/models/spree/role.rb +8 -0
  161. data/app/models/spree/role_user.rb +6 -0
  162. data/app/models/spree/shipment.rb +419 -0
  163. data/app/models/spree/shipment_handler.rb +43 -0
  164. data/app/models/spree/shipping_calculator.rb +22 -0
  165. data/app/models/spree/shipping_category.rb +11 -0
  166. data/app/models/spree/shipping_method.rb +69 -0
  167. data/app/models/spree/shipping_method_category.rb +6 -0
  168. data/app/models/spree/shipping_method_zone.rb +6 -0
  169. data/app/models/spree/shipping_rate.rb +44 -0
  170. data/app/models/spree/state.rb +41 -0
  171. data/app/models/spree/state_change.rb +10 -0
  172. data/app/models/spree/stock/adjuster.rb +27 -0
  173. data/app/models/spree/stock/availability_validator.rb +30 -0
  174. data/app/models/spree/stock/content_item.rb +54 -0
  175. data/app/models/spree/stock/coordinator.rb +65 -0
  176. data/app/models/spree/stock/differentiator.rb +44 -0
  177. data/app/models/spree/stock/estimator.rb +70 -0
  178. data/app/models/spree/stock/inventory_unit_builder.rb +22 -0
  179. data/app/models/spree/stock/package.rb +104 -0
  180. data/app/models/spree/stock/packer.rb +48 -0
  181. data/app/models/spree/stock/prioritizer.rb +47 -0
  182. data/app/models/spree/stock/quantifier.rb +29 -0
  183. data/app/models/spree/stock/splitter/backordered.rb +23 -0
  184. data/app/models/spree/stock/splitter/base.rb +28 -0
  185. data/app/models/spree/stock/splitter/shipping_category.rb +32 -0
  186. data/app/models/spree/stock/splitter/weight.rb +34 -0
  187. data/app/models/spree/stock_item.rb +90 -0
  188. data/app/models/spree/stock_location.rb +115 -0
  189. data/app/models/spree/stock_movement.rb +35 -0
  190. data/app/models/spree/stock_transfer.rb +50 -0
  191. data/app/models/spree/store.rb +48 -0
  192. data/app/models/spree/store_credit.rb +252 -0
  193. data/app/models/spree/store_credit_category.rb +22 -0
  194. data/app/models/spree/store_credit_event.rb +38 -0
  195. data/app/models/spree/store_credit_type.rb +6 -0
  196. data/app/models/spree/tax_category.rb +18 -0
  197. data/app/models/spree/tax_rate.rb +110 -0
  198. data/app/models/spree/taxon.rb +102 -0
  199. data/app/models/spree/taxonomy.rb +24 -0
  200. data/app/models/spree/tracker.rb +19 -0
  201. data/app/models/spree/validations/db_maximum_length_validator.rb +23 -0
  202. data/app/models/spree/variant.rb +312 -0
  203. data/app/models/spree/zone.rb +190 -0
  204. data/app/models/spree/zone_member.rb +12 -0
  205. data/app/validators/db_maximum_length_validator.rb +11 -0
  206. data/app/views/layouts/spree/base_mailer.html.erb +41 -0
  207. data/app/views/spree/admin/orders/customer_details/_autocomplete.js.erb +19 -0
  208. data/app/views/spree/order_mailer/_adjustment.html.erb +8 -0
  209. data/app/views/spree/order_mailer/_subtotal.html.erb +8 -0
  210. data/app/views/spree/order_mailer/_total.html.erb +8 -0
  211. data/app/views/spree/order_mailer/cancel_email.html.erb +30 -0
  212. data/app/views/spree/order_mailer/cancel_email.text.erb +16 -0
  213. data/app/views/spree/order_mailer/confirm_email.html.erb +70 -0
  214. data/app/views/spree/order_mailer/confirm_email.text.erb +38 -0
  215. data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +22 -0
  216. data/app/views/spree/shared/_base_mailer_footer.html.erb +20 -0
  217. data/app/views/spree/shared/_base_mailer_header.html.erb +29 -0
  218. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +777 -0
  219. data/app/views/spree/shared/_error_messages.html.erb +11 -0
  220. data/app/views/spree/shared/_mailer_line_item.html.erb +12 -0
  221. data/app/views/spree/shipment_mailer/shipped_email.html.erb +41 -0
  222. data/app/views/spree/shipment_mailer/shipped_email.text.erb +16 -0
  223. data/app/views/spree/test_mailer/test_email.html.erb +40 -0
  224. data/app/views/spree/test_mailer/test_email.text.erb +4 -0
  225. data/config/initializers/assets.rb +1 -0
  226. data/config/initializers/friendly_id.rb +88 -0
  227. data/config/initializers/premailer_assets.rb +1 -0
  228. data/config/initializers/premailer_rails.rb +3 -0
  229. data/config/initializers/user_class_extensions.rb +10 -0
  230. data/config/locales/en.yml +1499 -0
  231. data/config/routes.rb +8 -0
  232. data/db/default/spree/countries.rb +29 -0
  233. data/db/default/spree/default_reimbursement_type.rb +1 -0
  234. data/db/default/spree/roles.rb +2 -0
  235. data/db/default/spree/states.rb +28 -0
  236. data/db/default/spree/stores.rb +9 -0
  237. data/db/default/spree/zones.rb +11 -0
  238. data/db/migrate/20120831092320_spree_one_two.rb +481 -0
  239. data/db/migrate/20120831092359_spree_promo_one_two.rb +45 -0
  240. data/db/migrate/20120905145253_add_tax_rate_label.rb +5 -0
  241. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +5 -0
  242. data/db/migrate/20120929093553_remove_unused_preference_columns.rb +8 -0
  243. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +5 -0
  244. data/db/migrate/20121010142909_add_states_required_to_countries.rb +5 -0
  245. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +6 -0
  246. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +11 -0
  247. data/db/migrate/20121031162139_split_prices_from_variants.rb +31 -0
  248. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +9 -0
  249. data/db/migrate/20121107184631_add_currency_to_line_items.rb +5 -0
  250. data/db/migrate/20121107194006_add_currency_to_orders.rb +5 -0
  251. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +5 -0
  252. data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +5 -0
  253. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +5 -0
  254. data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +5 -0
  255. data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +6 -0
  256. data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +9 -0
  257. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +6 -0
  258. data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +5 -0
  259. data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +9 -0
  260. data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +5 -0
  261. data/db/migrate/20130211190146_create_spree_stock_items.rb +14 -0
  262. data/db/migrate/20130211191120_create_spree_stock_locations.rb +11 -0
  263. data/db/migrate/20130213191427_create_default_stock.rb +33 -0
  264. data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +5 -0
  265. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +5 -0
  266. data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +5 -0
  267. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +6 -0
  268. data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +6 -0
  269. data/db/migrate/20130228210442_create_shipping_method_zone.rb +21 -0
  270. data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +5 -0
  271. data/db/migrate/20130301162924_create_shipping_method_categories.rb +13 -0
  272. data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +5 -0
  273. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +24 -0
  274. data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +7 -0
  275. data/db/migrate/20130305143310_create_stock_movements.rb +12 -0
  276. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +22 -0
  277. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +5 -0
  278. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +5 -0
  279. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +5 -0
  280. data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +8 -0
  281. data/db/migrate/20130319062004_change_orders_total_precision.rb +8 -0
  282. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +7 -0
  283. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +7 -0
  284. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +7 -0
  285. data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +7 -0
  286. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +15 -0
  287. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +9 -0
  288. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +5 -0
  289. data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +15 -0
  290. data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +9 -0
  291. data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +14 -0
  292. data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +5 -0
  293. data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +13 -0
  294. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +5 -0
  295. data/db/migrate/20130417120035_update_adjustment_states.rb +16 -0
  296. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +15 -0
  297. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +14 -0
  298. data/db/migrate/20130423110707_drop_products_count_on_hand.rb +5 -0
  299. data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +5 -0
  300. data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +23 -0
  301. data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +5 -0
  302. data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +5 -0
  303. data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +5 -0
  304. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +5 -0
  305. data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +5 -0
  306. data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +9 -0
  307. data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +9 -0
  308. data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +6 -0
  309. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +5 -0
  310. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +7 -0
  311. data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +5 -0
  312. data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +6 -0
  313. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +5 -0
  314. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +6 -0
  315. data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +5 -0
  316. data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +5 -0
  317. data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +5 -0
  318. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +10 -0
  319. data/db/migrate/20130806022521_drop_spree_mail_methods.rb +12 -0
  320. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +8 -0
  321. data/db/migrate/20130807024301_upgrade_adjustments.rb +40 -0
  322. data/db/migrate/20130807024302_rename_adjustment_fields.rb +14 -0
  323. data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +5 -0
  324. data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +5 -0
  325. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +5 -0
  326. data/db/migrate/20130813140619_expand_order_number_size.rb +9 -0
  327. data/db/migrate/20130813232134_rename_activators_to_promotions.rb +5 -0
  328. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +5 -0
  329. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +5 -0
  330. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +16 -0
  331. data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +8 -0
  332. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +15 -0
  333. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +19 -0
  334. data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +5 -0
  335. data/db/migrate/20130909115621_change_states_required_for_countries.rb +9 -0
  336. data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +5 -0
  337. data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +5 -0
  338. data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +7 -0
  339. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +16 -0
  340. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +5 -0
  341. data/db/migrate/20131107132123_add_tax_category_to_variants.rb +6 -0
  342. data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +5 -0
  343. data/db/migrate/20131118043959_add_included_to_adjustments.rb +5 -0
  344. data/db/migrate/20131118050234_rename_tax_total_fields.rb +11 -0
  345. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +21 -0
  346. data/db/migrate/20131120234456_add_updated_at_to_variants.rb +5 -0
  347. data/db/migrate/20131127001002_add_position_to_classifications.rb +5 -0
  348. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +8 -0
  349. data/db/migrate/20131211192741_unique_shipping_method_categories.rb +24 -0
  350. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +5 -0
  351. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +8 -0
  352. data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +5 -0
  353. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +5 -0
  354. data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +6 -0
  355. data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +5 -0
  356. data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +6 -0
  357. data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +5 -0
  358. data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +5 -0
  359. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +12 -0
  360. data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +5 -0
  361. data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +11 -0
  362. data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +5 -0
  363. data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +5 -0
  364. data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +6 -0
  365. data/db/migrate/20140213184916_add_more_indexes.rb +13 -0
  366. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +5 -0
  367. data/db/migrate/20140227112348_add_preference_store_to_everything.rb +8 -0
  368. data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +13 -0
  369. data/db/migrate/20140309023735_migrate_old_preferences.rb +23 -0
  370. data/db/migrate/20140309024355_create_spree_stores.rb +25 -0
  371. data/db/migrate/20140309033438_create_store_from_preferences.rb +37 -0
  372. data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +6 -0
  373. data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +8 -0
  374. data/db/migrate/20140331100557_add_additional_store_fields.rb +8 -0
  375. data/db/migrate/20140410141842_add_many_missing_indexes.rb +18 -0
  376. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +66 -0
  377. data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +5 -0
  378. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +8 -0
  379. data/db/migrate/20140518174634_add_token_to_spree_orders.rb +5 -0
  380. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +29 -0
  381. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +10 -0
  382. data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +6 -0
  383. data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +6 -0
  384. data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +5 -0
  385. data/db/migrate/20140625214618_create_spree_refunds.rb +12 -0
  386. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +12 -0
  387. data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +5 -0
  388. data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +10 -0
  389. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +55 -0
  390. data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +7 -0
  391. data/db/migrate/20140710190048_drop_return_authorization_amount.rb +5 -0
  392. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +28 -0
  393. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +14 -0
  394. data/db/migrate/20140713142214_rename_return_authorization_reason.rb +5 -0
  395. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +11 -0
  396. data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +9 -0
  397. data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +6 -0
  398. data/db/migrate/20140717155155_create_default_refund_reason.rb +9 -0
  399. data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +7 -0
  400. data/db/migrate/20140718133010_create_spree_customer_returns.rb +9 -0
  401. data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +6 -0
  402. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +15 -0
  403. data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +5 -0
  404. data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +13 -0
  405. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +15 -0
  406. data/db/migrate/20140725131539_create_spree_reimbursements.rb +21 -0
  407. data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +5 -0
  408. data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +7 -0
  409. data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +5 -0
  410. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +20 -0
  411. data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +10 -0
  412. data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +5 -0
  413. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +10 -0
  414. data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +9 -0
  415. data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +10 -0
  416. data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +7 -0
  417. data/db/migrate/20140911173301_add_kind_to_zone.rb +11 -0
  418. data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +5 -0
  419. data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +6 -0
  420. data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +5 -0
  421. data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +6 -0
  422. data/db/migrate/20141009204607_add_store_id_to_orders.rb +8 -0
  423. data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +8 -0
  424. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +5 -0
  425. data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +13 -0
  426. data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +13 -0
  427. data/db/migrate/20141105213646_update_classifications_positions.rb +9 -0
  428. data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +5 -0
  429. data/db/migrate/20141215232040_remove_token_permissions_table.rb +6 -0
  430. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +5 -0
  431. data/db/migrate/20141217215630_update_product_slug_index.rb +6 -0
  432. data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +5 -0
  433. data/db/migrate/20150118210639_create_spree_store_credits.rb +24 -0
  434. data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +8 -0
  435. data/db/migrate/20150118212051_create_spree_store_credit_events.rb +17 -0
  436. data/db/migrate/20150118212101_create_spree_store_credit_types.rb +10 -0
  437. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +6 -0
  438. data/db/migrate/20150122145607_add_resellable_to_return_items.rb +5 -0
  439. data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +5 -0
  440. data/db/migrate/20150128032538_remove_environment_from_tracker.rb +6 -0
  441. data/db/migrate/20150128060325_remove_spree_configurations.rb +16 -0
  442. data/db/migrate/20150216173445_add_index_to_spree_stock_items_variant_id.rb +13 -0
  443. data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +9 -0
  444. data/db/migrate/20150314013438_add_missing_indexes_on_spree_tables.rb +67 -0
  445. data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +18 -0
  446. data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +14 -0
  447. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +70 -0
  448. data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +5 -0
  449. data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +6 -0
  450. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +16 -0
  451. data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +19 -0
  452. data/db/migrate/20150627090949_migrate_payment_methods_display.rb +12 -0
  453. data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +6 -0
  454. data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +12 -0
  455. data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +18 -0
  456. data/db/migrate/20150727191614_spree_store_credit_types.rb +11 -0
  457. data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +68 -0
  458. data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +13 -0
  459. data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +16 -0
  460. data/db/migrate/20160219165458_add_indexes.rb +14 -0
  461. data/db/seeds.rb +5 -0
  462. data/lib/generators/spree/custom_user/custom_user_generator.rb +56 -0
  463. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +36 -0
  464. data/lib/generators/spree/custom_user/templates/initializer.rb.tt +1 -0
  465. data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -0
  466. data/lib/generators/spree/dummy/dummy_generator.rb +140 -0
  467. data/lib/generators/spree/dummy/templates/initializers/custom_user.rb +1 -0
  468. data/lib/generators/spree/dummy/templates/initializers/devise.rb +3 -0
  469. data/lib/generators/spree/dummy/templates/rails/application.rb +10 -0
  470. data/lib/generators/spree/dummy/templates/rails/boot.rb +6 -0
  471. data/lib/generators/spree/dummy/templates/rails/database.yml +72 -0
  472. data/lib/generators/spree/dummy/templates/rails/routes.rb +2 -0
  473. data/lib/generators/spree/dummy/templates/rails/script/rails +6 -0
  474. data/lib/generators/spree/dummy/templates/rails/test.rb +35 -0
  475. data/lib/generators/spree/install/install_generator.rb +233 -0
  476. data/lib/generators/spree/install/templates/config/initializers/spree.rb +18 -0
  477. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +17 -0
  478. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +17 -0
  479. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +16 -0
  480. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +16 -0
  481. data/lib/spree/core/controller_helpers/auth.rb +84 -0
  482. data/lib/spree/core/controller_helpers/common.rb +74 -0
  483. data/lib/spree/core/controller_helpers/order.rb +103 -0
  484. data/lib/spree/core/controller_helpers/respond_with.rb +65 -0
  485. data/lib/spree/core/controller_helpers/search.rb +14 -0
  486. data/lib/spree/core/controller_helpers/store.rb +51 -0
  487. data/lib/spree/core/controller_helpers/strong_parameters.rb +42 -0
  488. data/lib/spree/core/delegate_belongs_to.rb +95 -0
  489. data/lib/spree/core/engine.rb +134 -0
  490. data/lib/spree/core/environment/calculators.rb +12 -0
  491. data/lib/spree/core/environment.rb +15 -0
  492. data/lib/spree/core/environment_extension.rb +25 -0
  493. data/lib/spree/core/importer/order.rb +284 -0
  494. data/lib/spree/core/importer/product.rb +62 -0
  495. data/lib/spree/core/importer.rb +9 -0
  496. data/lib/spree/core/number_generator.rb +52 -0
  497. data/lib/spree/core/product_duplicator.rb +74 -0
  498. data/lib/spree/core/product_filters.rb +194 -0
  499. data/lib/spree/core/routes.rb +46 -0
  500. data/lib/spree/core/search/base.rb +102 -0
  501. data/lib/spree/core/token_generator.rb +22 -0
  502. data/lib/spree/core/validators/email.rb +11 -0
  503. data/lib/spree/core/version.rb +5 -0
  504. data/lib/spree/core.rb +96 -0
  505. data/lib/spree/i18n/base.rb +17 -0
  506. data/lib/spree/i18n/initializer.rb +1 -0
  507. data/lib/spree/i18n.rb +37 -0
  508. data/lib/spree/localized_number.rb +22 -0
  509. data/lib/spree/migrations.rb +77 -0
  510. data/lib/spree/money.rb +61 -0
  511. data/lib/spree/permitted_attributes.rb +115 -0
  512. data/lib/spree/promo/environment.rb +9 -0
  513. data/lib/spree/responder.rb +45 -0
  514. data/lib/spree/testing_support/ability_helpers.rb +105 -0
  515. data/lib/spree/testing_support/authorization_helpers.rb +63 -0
  516. data/lib/spree/testing_support/bar_ability.rb +14 -0
  517. data/lib/spree/testing_support/caching.rb +47 -0
  518. data/lib/spree/testing_support/capybara_ext.rb +179 -0
  519. data/lib/spree/testing_support/common_rake.rb +39 -0
  520. data/lib/spree/testing_support/controller_requests.rb +93 -0
  521. data/lib/spree/testing_support/extension_rake.rb +10 -0
  522. data/lib/spree/testing_support/factories/address_factory.rb +22 -0
  523. data/lib/spree/testing_support/factories/adjustment_factory.rb +26 -0
  524. data/lib/spree/testing_support/factories/calculator_factory.rb +20 -0
  525. data/lib/spree/testing_support/factories/country_factory.rb +9 -0
  526. data/lib/spree/testing_support/factories/credit_card_factory.rb +10 -0
  527. data/lib/spree/testing_support/factories/customer_return_factory.rb +31 -0
  528. data/lib/spree/testing_support/factories/image_factory.rb +5 -0
  529. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +10 -0
  530. data/lib/spree/testing_support/factories/line_item_factory.rb +12 -0
  531. data/lib/spree/testing_support/factories/options_factory.rb +13 -0
  532. data/lib/spree/testing_support/factories/order_factory.rb +91 -0
  533. data/lib/spree/testing_support/factories/payment_factory.rb +28 -0
  534. data/lib/spree/testing_support/factories/payment_method_factory.rb +23 -0
  535. data/lib/spree/testing_support/factories/price_factory.rb +7 -0
  536. data/lib/spree/testing_support/factories/product_factory.rb +36 -0
  537. data/lib/spree/testing_support/factories/product_option_type_factory.rb +6 -0
  538. data/lib/spree/testing_support/factories/product_property_factory.rb +6 -0
  539. data/lib/spree/testing_support/factories/promotion_category_factory.rb +6 -0
  540. data/lib/spree/testing_support/factories/promotion_factory.rb +52 -0
  541. data/lib/spree/testing_support/factories/promotion_rule_factory.rb +5 -0
  542. data/lib/spree/testing_support/factories/property_factory.rb +6 -0
  543. data/lib/spree/testing_support/factories/prototype_factory.rb +11 -0
  544. data/lib/spree/testing_support/factories/refund_factory.rb +22 -0
  545. data/lib/spree/testing_support/factories/reimbursement_factory.rb +16 -0
  546. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +7 -0
  547. data/lib/spree/testing_support/factories/return_authorization_factory.rb +20 -0
  548. data/lib/spree/testing_support/factories/return_item_factory.rb +14 -0
  549. data/lib/spree/testing_support/factories/role_factory.rb +9 -0
  550. data/lib/spree/testing_support/factories/shipment_factory.rb +23 -0
  551. data/lib/spree/testing_support/factories/shipping_category_factory.rb +5 -0
  552. data/lib/spree/testing_support/factories/shipping_method_factory.rb +21 -0
  553. data/lib/spree/testing_support/factories/state_factory.rb +13 -0
  554. data/lib/spree/testing_support/factories/stock_factory.rb +31 -0
  555. data/lib/spree/testing_support/factories/stock_item_factory.rb +9 -0
  556. data/lib/spree/testing_support/factories/stock_location_factory.rb +28 -0
  557. data/lib/spree/testing_support/factories/stock_movement_factory.rb +11 -0
  558. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +9 -0
  559. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -0
  560. data/lib/spree/testing_support/factories/store_credit_factory.rb +17 -0
  561. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +11 -0
  562. data/lib/spree/testing_support/factories/store_factory.rb +8 -0
  563. data/lib/spree/testing_support/factories/tax_category_factory.rb +6 -0
  564. data/lib/spree/testing_support/factories/tax_rate_factory.rb +8 -0
  565. data/lib/spree/testing_support/factories/taxon_factory.rb +7 -0
  566. data/lib/spree/testing_support/factories/taxonomy_factory.rb +5 -0
  567. data/lib/spree/testing_support/factories/tracker_factory.rb +6 -0
  568. data/lib/spree/testing_support/factories/user_factory.rb +22 -0
  569. data/lib/spree/testing_support/factories/variant_factory.rb +39 -0
  570. data/lib/spree/testing_support/factories/zone_factory.rb +25 -0
  571. data/lib/spree/testing_support/factories/zone_member_factory.rb +6 -0
  572. data/lib/spree/testing_support/factories.rb +19 -0
  573. data/lib/spree/testing_support/flash.rb +27 -0
  574. data/lib/spree/testing_support/i18n.rb +97 -0
  575. data/lib/spree/testing_support/microdata.rb +189 -0
  576. data/lib/spree/testing_support/order_walkthrough.rb +72 -0
  577. data/lib/spree/testing_support/preferences.rb +31 -0
  578. data/lib/spree/testing_support/url_helpers.rb +9 -0
  579. data/lib/spree_core.rb +1 -0
  580. data/lib/tasks/core.rake +169 -0
  581. data/lib/tasks/email.rake +10 -0
  582. data/lib/tasks/exchanges.rake +70 -0
  583. data/script/rails +9 -0
  584. data/spec/fixtures/microdata.html +22 -0
  585. data/spec/fixtures/microdata_itemref.html +15 -0
  586. data/spec/fixtures/microdata_no_itemscope.html +20 -0
  587. data/spec/fixtures/thinking-cat.jpg +0 -0
  588. data/spree_core.gemspec +47 -0
  589. data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
  590. data/vendor/assets/javascripts/jquery.payment.js +652 -0
  591. data/vendor/assets/javascripts/jsuri.js +2 -0
  592. data/vendor/assets/stylesheets/normalize.css +375 -0
  593. data/vendor/assets/stylesheets/skeleton.css +242 -0
  594. metadata +971 -0
@@ -0,0 +1,62 @@
1
+ module Spree
2
+ module Core
3
+ module Importer
4
+ class Product
5
+ attr_reader :product, :product_attrs, :variants_attrs, :options_attrs
6
+
7
+ def initialize(product, product_params, options = {})
8
+ @product = product || Spree::Product.new(product_params)
9
+
10
+ @product_attrs = product_params
11
+ @variants_attrs = options[:variants_attrs] || []
12
+ @options_attrs = options[:options_attrs] || []
13
+ end
14
+
15
+ def create
16
+ if product.save
17
+ variants_attrs.each do |variant_attribute|
18
+ # make sure the product is assigned before the options=
19
+ product.variants.create({ product: product }.merge(variant_attribute))
20
+ end
21
+
22
+ set_up_options
23
+ end
24
+
25
+ product
26
+ end
27
+
28
+ def update
29
+ if product.update_attributes(product_attrs)
30
+ variants_attrs.each do |variant_attribute|
31
+ # update the variant if the id is present in the payload
32
+ if variant_attribute['id'].present?
33
+ product.variants.find(variant_attribute['id'].to_i).update_attributes(variant_attribute)
34
+ else
35
+ # make sure the product is assigned before the options=
36
+ product.variants.create({ product: product }.merge(variant_attribute))
37
+ end
38
+ end
39
+
40
+ set_up_options
41
+ end
42
+
43
+ product
44
+ end
45
+
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
+
54
+ unless product.option_types.include?(option_type)
55
+ product.option_types << option_type
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,9 @@
1
+ module Spree
2
+ module Core
3
+ module Importer
4
+ end
5
+ end
6
+ end
7
+
8
+ require 'spree/core/importer/order'
9
+ require 'spree/core/importer/product'
@@ -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
@@ -0,0 +1,74 @@
1
+ module Spree
2
+ class ProductDuplicator
3
+ attr_accessor :product
4
+
5
+ @@clone_images_default = true
6
+ mattr_accessor :clone_images_default
7
+
8
+ def initialize(product, include_images = @@clone_images_default)
9
+ @product = product
10
+ @include_images = include_images
11
+ end
12
+
13
+ def duplicate
14
+ new_product = duplicate_product
15
+
16
+ # don't dup the actual variants, just the characterising types
17
+ new_product.option_types = product.option_types if product.has_variants?
18
+
19
+ # allow site to do some customization
20
+ new_product.send(:duplicate_extra, product) if new_product.respond_to?(:duplicate_extra)
21
+ new_product.save!
22
+ new_product
23
+ end
24
+
25
+ protected
26
+
27
+ def duplicate_product
28
+ product.dup.tap do |new_product|
29
+ new_product.name = "COPY OF #{product.name}"
30
+ new_product.taxons = product.taxons
31
+ new_product.created_at = nil
32
+ new_product.deleted_at = nil
33
+ new_product.updated_at = nil
34
+ new_product.product_properties = reset_properties
35
+ new_product.master = duplicate_master
36
+ new_product.variants = product.variants.map { |variant| duplicate_variant variant }
37
+ end
38
+ end
39
+
40
+ def duplicate_master
41
+ master = product.master
42
+ master.dup.tap do |new_master|
43
+ new_master.sku = "COPY OF #{master.sku}"
44
+ new_master.deleted_at = nil
45
+ new_master.images = master.images.map { |image| duplicate_image image } if @include_images
46
+ new_master.price = master.price
47
+ new_master.currency = master.currency
48
+ end
49
+ end
50
+
51
+ def duplicate_variant(variant)
52
+ new_variant = variant.dup
53
+ new_variant.sku = "COPY OF #{new_variant.sku}"
54
+ new_variant.deleted_at = nil
55
+ new_variant.option_values = variant.option_values.map { |option_value| option_value}
56
+ new_variant
57
+ end
58
+
59
+ def duplicate_image(image)
60
+ new_image = image.dup
61
+ new_image.assign_attributes(:attachment => image.attachment.clone)
62
+ new_image
63
+ end
64
+
65
+ def reset_properties
66
+ product.product_properties.map do |prop|
67
+ prop.dup.tap do |new_prop|
68
+ new_prop.created_at = nil
69
+ new_prop.updated_at = nil
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,194 @@
1
+ module Spree
2
+ module Core
3
+ # THIS FILE SHOULD BE OVER-RIDDEN IN YOUR SITE EXTENSION!
4
+ # the exact code probably won't be useful, though you're welcome to modify and reuse
5
+ # the current contents are mainly for testing and documentation
6
+
7
+ # To override this file...
8
+ # 1) Make a copy of it in your sites local /lib/spree folder
9
+ # 2) Add it to the config load path, or require it in an initializer, e.g...
10
+ #
11
+ # # config/initializers/spree.rb
12
+ # require 'spree/core/product_filters'
13
+ #
14
+
15
+ # set up some basic filters for use with products
16
+ #
17
+ # Each filter has two parts
18
+ # * a parametrized named scope which expects a list of labels
19
+ # * an object which describes/defines the filter
20
+ #
21
+ # The filter description has three components
22
+ # * a name, for displaying on pages
23
+ # * a named scope which will 'execute' the filter
24
+ # * a mapping of presentation labels to the relevant condition (in the context of the named scope)
25
+ # * an optional list of labels and values (for use with object selection - see taxons examples below)
26
+ #
27
+ # The named scopes here have a suffix '_any', following Ransack's convention for a
28
+ # scope which returns results which match any of the inputs. This is purely a convention,
29
+ # but might be a useful reminder.
30
+ #
31
+ # When creating a form, the name of the checkbox group for a filter F should be
32
+ # the name of F's scope with [] appended, eg "price_range_any[]", and for
33
+ # each label you should have a checkbox with the label as its value. On submission,
34
+ # Rails will send the action a hash containing (among other things) an array named
35
+ # after the scope whose values are the active labels.
36
+ #
37
+ # Ransack will then convert this array to a call to the named scope with the array
38
+ # contents, and the named scope will build a query with the disjunction of the conditions
39
+ # relating to the labels, all relative to the scope's context.
40
+ #
41
+ # The details of how/when filters are used is a detail for specific models (eg products
42
+ # or taxons), eg see the taxon model/controller.
43
+
44
+ # See specific filters below for concrete examples.
45
+ module ProductFilters
46
+ # Example: filtering by price
47
+ # The named scope just maps incoming labels onto their conditions, and builds the conjunction
48
+ # 'price' is in the base scope's context (ie, "select foo from products where ...") so
49
+ # we can access the field right away
50
+ # The filter identifies which scope to use, then sets the conditions for each price range
51
+ #
52
+ # If user checks off three different price ranges then the argument passed to
53
+ # below scope would be something like ["$10 - $15", "$15 - $18", "$18 - $20"]
54
+ #
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? }
57
+ scope = conds.shift
58
+ conds.each do |new_scope|
59
+ scope = scope.or(new_scope)
60
+ end
61
+ Spree::Product.joins(master: :default_price).where(scope)
62
+ end
63
+
64
+ def ProductFilters.format_price(amount)
65
+ Spree::Money.new(amount)
66
+ end
67
+
68
+ def ProductFilters.price_filter
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)]]
75
+ {
76
+ name: Spree.t(:price_range),
77
+ scope: :price_range_any,
78
+ conds: Hash[*conds.flatten],
79
+ labels: conds.map { |k,v| [k, k] }
80
+ }
81
+ end
82
+
83
+
84
+ # Example: filtering by possible brands
85
+ #
86
+ # First, we define the scope. Two interesting points here: (a) we run our conditions
87
+ # in the scope where the info for the 'brand' property has been loaded; and (b)
88
+ # because we may want to filter by other properties too, we give this part of the
89
+ # query a unique name (which must be used in the associated conditions too).
90
+ #
91
+ # Secondly, the filter. Instead of a static list of values, we pull out all existing
92
+ # brands from the db, and then build conditions which test for string equality on
93
+ # the (uniquely named) field "p_brand.value". There's also a test for brand info
94
+ # being blank: note that this relies on with_property doing a left outer join
95
+ # rather than an inner join.
96
+ Spree::Product.add_search_scope :brand_any do |*opts|
97
+ conds = opts.map {|o| ProductFilters.brand_filter[:conds][o]}.reject { |c| c.nil? }
98
+ scope = conds.shift
99
+ conds.each do |new_scope|
100
+ scope = scope.or(new_scope)
101
+ end
102
+ Spree::Product.with_property('brand').where(scope)
103
+ end
104
+
105
+ def ProductFilters.brand_filter
106
+ brand_property = Spree::Property.find_by(name: 'brand')
107
+ brands = brand_property ? Spree::ProductProperty.where(property_id: brand_property.id).pluck(:value).uniq.map(&:to_s) : []
108
+ pp = Spree::ProductProperty.arel_table
109
+ conds = Hash[*brands.map { |b| [b, pp[:value].eq(b)] }.flatten]
110
+ {
111
+ name: 'Brands',
112
+ scope: :brand_any,
113
+ conds: conds,
114
+ labels: (brands.sort).map { |k| [k, k] }
115
+ }
116
+ end
117
+
118
+ # Example: a parameterized filter
119
+ # The filter above may show brands which aren't applicable to the current taxon,
120
+ # so this one only shows the brands that are relevant to a particular taxon and
121
+ # its descendants.
122
+ #
123
+ # We don't have to give a new scope since the conditions here are a subset of the
124
+ # more general filter, so decoding will still work - as long as the filters on a
125
+ # page all have unique names (ie, you can't use the two brand filters together
126
+ # if they use the same scope). To be safe, the code uses a copy of the scope.
127
+ #
128
+ # HOWEVER: what happens if we want a more precise scope? we can't pass
129
+ # parametrized scope names to Ransack, only atomic names, so couldn't ask
130
+ # for taxon T's customized filter to be used. BUT: we can arrange for the form
131
+ # to pass back a hash instead of an array, where the key acts as the (taxon)
132
+ # parameter and value is its label array, and then get a modified named scope
133
+ # to get its conditions from a particular filter.
134
+ #
135
+ # The brand-finding code can be simplified if a few more named scopes were added to
136
+ # the product properties model.
137
+ Spree::Product.add_search_scope :selective_brand_any do |*opts|
138
+ Spree::Product.brand_any(*opts)
139
+ end
140
+
141
+ def ProductFilters.selective_brand_filter(taxon = nil)
142
+ taxon ||= Spree::Taxonomy.first.root
143
+ brand_property = Spree::Property.find_by(name: 'brand')
144
+ scope = Spree::ProductProperty.where(property: brand_property).
145
+ joins(product: :taxons).
146
+ where("#{Spree::Taxon.table_name}.id" => [taxon] + taxon.descendants)
147
+ brands = scope.pluck(:value).uniq
148
+ {
149
+ name: 'Applicable Brands',
150
+ scope: :selective_brand_any,
151
+ labels: brands.sort.map { |k| [k, k] }
152
+ }
153
+ end
154
+
155
+ # Provide filtering on the immediate children of a taxon
156
+ #
157
+ # This doesn't fit the pattern of the examples above, so there's a few changes.
158
+ # Firstly, it uses an existing scope which was not built for filtering - and so
159
+ # has no need of a conditions mapping, and secondly, it has a mapping of name
160
+ # to the argument type expected by the other scope.
161
+ #
162
+ # This technique is useful for filtering on objects (by passing ids) or with a
163
+ # scope that can be used directly (eg. testing only ever on a single property).
164
+ #
165
+ # This scope selects products in any of the active taxons or their children.
166
+ #
167
+ def ProductFilters.taxons_below(taxon)
168
+ return Spree::Core::ProductFilters.all_taxons if taxon.nil?
169
+ {
170
+ name: 'Taxons under ' + taxon.name,
171
+ scope: :taxons_id_in_tree_any,
172
+ labels: taxon.children.sort_by(&:position).map { |t| [t.name, t.id] },
173
+ conds: nil
174
+ }
175
+ end
176
+
177
+ # Filtering by the list of all taxons
178
+ #
179
+ # Similar idea as above, but we don't want the descendants' products, hence
180
+ # it uses one of the auto-generated scopes from Ransack.
181
+ #
182
+ # idea: expand the format to allow nesting of labels?
183
+ def ProductFilters.all_taxons
184
+ taxons = Spree::Taxonomy.all.map { |t| [t.root] + t.root.descendants }.flatten
185
+ {
186
+ name: 'All taxons',
187
+ scope: :taxons_id_equals_any,
188
+ labels: taxons.sort_by(&:name).map { |t| [t.name, t.id] },
189
+ conds: nil # not needed
190
+ }
191
+ end
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,46 @@
1
+ module Spree
2
+ module Core
3
+ class Engine < ::Rails::Engine
4
+ def self.add_routes(&block)
5
+ @spree_routes ||= []
6
+
7
+ # Anything that causes the application's routes to be reloaded,
8
+ # will cause this method to be called more than once
9
+ # i.e. https://github.com/plataformatec/devise/blob/31971e69e6a1bcf6c7f01eaaa44f227c4af5d4d2/lib/devise/rails.rb#L14
10
+ # In the case of Devise, this *only* happens in the production env
11
+ # This coupled with Rails 4's insistence that routes are not drawn twice,
12
+ # poses quite a serious problem.
13
+ #
14
+ # This is mainly why this whole file exists in the first place.
15
+ #
16
+ # Thus we need to make sure that the routes aren't drawn twice.
17
+ unless @spree_routes.include?(block)
18
+ @spree_routes << block
19
+ end
20
+ end
21
+
22
+ def self.append_routes(&block)
23
+ @append_routes ||= []
24
+ # See comment in add_routes.
25
+ unless @append_routes.include?(block)
26
+ @append_routes << block
27
+ end
28
+ end
29
+
30
+ def self.draw_routes(&block)
31
+ @spree_routes ||= []
32
+ @append_routes ||= []
33
+ eval_block(block) if block_given?
34
+ @spree_routes.each { |r| eval_block(&r) }
35
+ @append_routes.each { |r| eval_block(&r) }
36
+ # # Clear out routes so that they aren't drawn twice.
37
+ @spree_routes = []
38
+ @append_routes = []
39
+ end
40
+
41
+ def eval_block(&block)
42
+ Spree::Core::Engine.routes.send :eval_block, block
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,102 @@
1
+ module Spree
2
+ module Core
3
+ module Search
4
+ class Base
5
+ attr_accessor :properties
6
+ attr_accessor :current_user
7
+ attr_accessor :current_currency
8
+
9
+ def initialize(params)
10
+ self.current_currency = Spree::Config[:currency]
11
+ @properties = {}
12
+ prepare(params)
13
+ end
14
+
15
+ def retrieve_products
16
+ @products = get_base_scope
17
+ curr_page = page || 1
18
+
19
+ unless Spree::Config.show_products_without_price
20
+ @products = @products.where("spree_prices.amount IS NOT NULL").
21
+ where("spree_prices.currency" => current_currency)
22
+ end
23
+ @products = @products.page(curr_page).per(per_page)
24
+ end
25
+
26
+ def method_missing(name)
27
+ if @properties.has_key? name
28
+ @properties[name]
29
+ else
30
+ super
31
+ end
32
+ end
33
+
34
+ protected
35
+ def get_base_scope
36
+ base_scope = Spree::Product.spree_base_scopes.active
37
+ base_scope = base_scope.in_taxon(taxon) unless taxon.blank?
38
+ base_scope = get_products_conditions_for(base_scope, keywords)
39
+ base_scope = add_search_scopes(base_scope)
40
+ base_scope = add_eagerload_scopes(base_scope)
41
+ base_scope
42
+ end
43
+
44
+ def add_eagerload_scopes scope
45
+ # TL;DR Switch from `preload` to `includes` as soon as Rails starts honoring
46
+ # `order` clauses on `has_many` associations when a `where` constraint
47
+ # affecting a joined table is present (see
48
+ # https://github.com/rails/rails/issues/6769).
49
+ #
50
+ # Ideally this would use `includes` instead of `preload` calls, leaving it
51
+ # up to Rails whether associated objects should be fetched in one big join
52
+ # or multiple independent queries. However as of Rails 4.1.8 any `order`
53
+ # defined on `has_many` associations are ignored when Rails builds a join
54
+ # query.
55
+ #
56
+ # Would we use `includes` in this particular case, Rails would do
57
+ # separate queries most of the time but opt for a join as soon as any
58
+ # `where` constraints affecting joined tables are added to the search;
59
+ # which is the case as soon as a taxon is added to the base scope.
60
+ scope = scope.preload(master: :prices)
61
+ scope = scope.preload(master: :images) if include_images
62
+ scope
63
+ end
64
+
65
+ def add_search_scopes(base_scope)
66
+ search.each do |name, scope_attribute|
67
+ scope_name = name.to_sym
68
+ if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym)
69
+ base_scope = base_scope.send(scope_name, *scope_attribute)
70
+ else
71
+ base_scope = base_scope.merge(Spree::Product.ransack({scope_name => scope_attribute}).result)
72
+ end
73
+ end if search.is_a?(Hash)
74
+ base_scope
75
+ end
76
+
77
+ # method should return new scope based on base_scope
78
+ def get_products_conditions_for(base_scope, query)
79
+ unless query.blank?
80
+ base_scope = base_scope.like_any([:name, :description], query.split)
81
+ end
82
+ base_scope
83
+ end
84
+
85
+ def prepare(params)
86
+ @properties[:taxon] = params[:taxon].blank? ? nil : Spree::Taxon.find(params[:taxon])
87
+ @properties[:keywords] = params[:keywords]
88
+ @properties[:search] = params[:search]
89
+ @properties[:include_images] = params[:include_images]
90
+
91
+ per_page = params[:per_page].to_i
92
+ @properties[:per_page] = per_page > 0 ? per_page : Spree::Config[:products_per_page]
93
+ if params[:page].respond_to?(:to_i)
94
+ @properties[:page] = (params[:page].to_i <= 0) ? 1 : params[:page].to_i
95
+ else
96
+ @properties[:page] = 1
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,22 @@
1
+ module Spree
2
+ module Core
3
+ module TokenGenerator
4
+ def generate_guest_token(model_class = Spree::Order)
5
+ loop do
6
+ token = "#{random_token}#{unique_ending}"
7
+ break token unless model_class.exists?(guest_token: token)
8
+ end
9
+ end
10
+
11
+ private
12
+
13
+ def random_token
14
+ SecureRandom.urlsafe_base64(nil, false)
15
+ end
16
+
17
+ def unique_ending
18
+ (Time.now.to_f * 1000).to_i
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ class EmailValidator < ActiveModel::EachValidator
2
+ def validate_each(record, attribute, value)
3
+ unless value =~ %r{\A(([A-Za-z0-9]+_+)|
4
+ ([A-Za-z0-9]+\-+)|
5
+ ([A-Za-z0-9]+\.+)|
6
+ ([A-Za-z0-9]+\++))*[A-Za-z0-9_]+@((\w+\-+)|
7
+ (\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}\z}xi
8
+ record.errors.add(attribute, :invalid, { value: value }.merge!(options))
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ module Spree
2
+ def self.version
3
+ "3.1.14.rails.5.0"
4
+ end
5
+ end
data/lib/spree/core.rb ADDED
@@ -0,0 +1,96 @@
1
+ require 'rails/all'
2
+ require 'active_merchant'
3
+ require 'acts_as_list'
4
+ require 'awesome_nested_set'
5
+ require 'cancan'
6
+ require 'friendly_id'
7
+ require 'font-awesome-rails'
8
+ require 'kaminari'
9
+ require 'mail'
10
+ require 'monetize'
11
+ require 'paperclip'
12
+ require 'paranoia'
13
+ require 'premailer/rails'
14
+ require 'ransack'
15
+ require 'responders'
16
+ require 'state_machines-activerecord'
17
+
18
+ # This is required because ActiveModel::Validations#invalid? conflicts with the
19
+ # invalid state of a Payment. In the future this should be removed.
20
+ StateMachines::Machine.ignore_method_conflicts = true
21
+
22
+ module Spree
23
+
24
+ mattr_accessor :user_class
25
+
26
+ def self.user_class
27
+ if @@user_class.is_a?(Class)
28
+ raise "Spree.user_class MUST be a String or Symbol object, not a Class object."
29
+ elsif @@user_class.is_a?(String) || @@user_class.is_a?(Symbol)
30
+ @@user_class.to_s.constantize
31
+ end
32
+ end
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
+
49
+ # Used to configure Spree.
50
+ #
51
+ # Example:
52
+ #
53
+ # Spree.config do |config|
54
+ # config.track_inventory_levels = false
55
+ # end
56
+ #
57
+ # This method is defined within the core gem on purpose.
58
+ # Some people may only wish to use the Core part of Spree.
59
+ def self.config(&block)
60
+ yield(Spree::Config)
61
+ end
62
+
63
+ module Core
64
+ autoload :ProductFilters, "spree/core/product_filters"
65
+ autoload :TokenGenerator, "spree/core/token_generator"
66
+
67
+ class GatewayError < RuntimeError; end
68
+ class DestroyWithOrdersError < StandardError; end
69
+ end
70
+ end
71
+
72
+ require 'spree/core/version'
73
+
74
+ require 'spree/core/environment_extension'
75
+ require 'spree/core/environment/calculators'
76
+ require 'spree/core/environment'
77
+ require 'spree/core/number_generator'
78
+ require 'spree/promo/environment'
79
+ require 'spree/migrations'
80
+ require 'spree/core/engine'
81
+
82
+ require 'spree/i18n'
83
+ require 'spree/localized_number'
84
+ require 'spree/money'
85
+ require 'spree/permitted_attributes'
86
+
87
+ require 'spree/core/delegate_belongs_to'
88
+ require 'spree/core/importer'
89
+ require 'spree/core/product_duplicator'
90
+ require 'spree/core/controller_helpers/auth'
91
+ require 'spree/core/controller_helpers/common'
92
+ require 'spree/core/controller_helpers/order'
93
+ require 'spree/core/controller_helpers/respond_with'
94
+ require 'spree/core/controller_helpers/search'
95
+ require 'spree/core/controller_helpers/store'
96
+ require 'spree/core/controller_helpers/strong_parameters'