spree_core 0.30.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (795) hide show
  1. data/LICENSE +26 -0
  2. data/README.md +19 -0
  3. data/app/controllers/admin/adjustments_controller.rb +25 -0
  4. data/app/controllers/admin/base_controller.rb +47 -0
  5. data/app/controllers/admin/checkouts_controller.rb +58 -0
  6. data/app/controllers/admin/configurations_controller.rb +26 -0
  7. data/app/controllers/admin/general_settings_controller.rb +13 -0
  8. data/app/controllers/admin/images_controller.rb +54 -0
  9. data/app/controllers/admin/inventory_settings_controller.rb +13 -0
  10. data/app/controllers/admin/inventory_units_controller.rb +2 -0
  11. data/app/controllers/admin/line_items_controller.rb +69 -0
  12. data/app/controllers/admin/mail_settings_controller.rb +14 -0
  13. data/app/controllers/admin/option_types_controller.rb +58 -0
  14. data/app/controllers/admin/orders_controller.rb +94 -0
  15. data/app/controllers/admin/overview_controller.rb +14 -0
  16. data/app/controllers/admin/payment_methods_controller.rb +31 -0
  17. data/app/controllers/admin/payments_controller.rb +105 -0
  18. data/app/controllers/admin/product_groups_controller.rb +45 -0
  19. data/app/controllers/admin/product_properties_controller.rb +14 -0
  20. data/app/controllers/admin/product_scopes_controller.rb +19 -0
  21. data/app/controllers/admin/products_controller.rb +115 -0
  22. data/app/controllers/admin/properties_controller.rb +27 -0
  23. data/app/controllers/admin/prototypes_controller.rb +52 -0
  24. data/app/controllers/admin/reports_controller.rb +44 -0
  25. data/app/controllers/admin/return_authorizations_controller.rb +36 -0
  26. data/app/controllers/admin/shipments_controller.rb +79 -0
  27. data/app/controllers/admin/shipping_categories_controller.rb +16 -0
  28. data/app/controllers/admin/shipping_methods_controller.rb +21 -0
  29. data/app/controllers/admin/states_controller.rb +30 -0
  30. data/app/controllers/admin/tax_categories_controller.rb +13 -0
  31. data/app/controllers/admin/tax_rates_controller.rb +32 -0
  32. data/app/controllers/admin/tax_settings_controller.rb +13 -0
  33. data/app/controllers/admin/taxonomies_controller.rb +17 -0
  34. data/app/controllers/admin/taxons_controller.rb +127 -0
  35. data/app/controllers/admin/trackers_controller.rb +7 -0
  36. data/app/controllers/admin/users_controller.rb +67 -0
  37. data/app/controllers/admin/variants_controller.rb +55 -0
  38. data/app/controllers/admin/zones_controller.rb +35 -0
  39. data/app/controllers/checkout_controller.rb +68 -0
  40. data/app/controllers/content_controller.rb +13 -0
  41. data/app/controllers/countries_controller.rb +11 -0
  42. data/app/controllers/locale_controller.rb +14 -0
  43. data/app/controllers/orders_controller.rb +49 -0
  44. data/app/controllers/password_resets_controller.rb +49 -0
  45. data/app/controllers/products_controller.rb +38 -0
  46. data/app/controllers/spree/base_controller.rb +111 -0
  47. data/app/controllers/states_controller.rb +16 -0
  48. data/app/controllers/taxons_controller.rb +23 -0
  49. data/app/helpers/account_helper.rb +2 -0
  50. data/app/helpers/admin/base_helper.rb +194 -0
  51. data/app/helpers/admin/inventory_settings_helper.rb +5 -0
  52. data/app/helpers/admin/navigation_helper.rb +140 -0
  53. data/app/helpers/admin/orders_helper.rb +22 -0
  54. data/app/helpers/admin/overview_helper.rb +12 -0
  55. data/app/helpers/admin/payments_helper.rb +7 -0
  56. data/app/helpers/admin/product_groups_helper.rb +11 -0
  57. data/app/helpers/admin/product_properties_helper.rb +21 -0
  58. data/app/helpers/admin/products_helper.rb +11 -0
  59. data/app/helpers/admin/taxons_helper.rb +5 -0
  60. data/app/helpers/admin/users_helper.rb +5 -0
  61. data/app/helpers/admin/zones_helper.rb +11 -0
  62. data/app/helpers/checkout_helper.rb +32 -0
  63. data/app/helpers/hook_helper.rb +20 -0
  64. data/app/helpers/orders_helper.rb +3 -0
  65. data/app/helpers/products_helper.rb +49 -0
  66. data/app/helpers/search_helper.rb +10 -0
  67. data/app/helpers/spree/base_helper.rb +91 -0
  68. data/app/helpers/taxons_helper.rb +32 -0
  69. data/app/helpers/trackers_helper.rb +2 -0
  70. data/app/helpers/users_helper.rb +13 -0
  71. data/app/models/address.rb +88 -0
  72. data/app/models/adjustment.rb +46 -0
  73. data/app/models/app_configuration.rb +54 -0
  74. data/app/models/asset.rb +4 -0
  75. data/app/models/billing_integration.rb +23 -0
  76. data/app/models/calculator/flat_percent_item_total.rb +18 -0
  77. data/app/models/calculator/flat_rate.rb +16 -0
  78. data/app/models/calculator/flexi_rate.rb +32 -0
  79. data/app/models/calculator/per_item.rb +16 -0
  80. data/app/models/calculator/price_bucket.rb +30 -0
  81. data/app/models/calculator/sales_tax.rb +48 -0
  82. data/app/models/calculator/vat.rb +63 -0
  83. data/app/models/calculator.rb +46 -0
  84. data/app/models/checkout.rb +141 -0
  85. data/app/models/configuration.rb +3 -0
  86. data/app/models/country.rb +17 -0
  87. data/app/models/creditcard.rb +240 -0
  88. data/app/models/gateway/authorize_net.rb +8 -0
  89. data/app/models/gateway/authorize_net_cim.rb +121 -0
  90. data/app/models/gateway/beanstream.rb +164 -0
  91. data/app/models/gateway/bogus.rb +80 -0
  92. data/app/models/gateway/eway.rb +11 -0
  93. data/app/models/gateway/linkpoint.rb +8 -0
  94. data/app/models/gateway/pay_pal.rb +11 -0
  95. data/app/models/gateway/sage_pay.rb +9 -0
  96. data/app/models/gateway.rb +48 -0
  97. data/app/models/image.rb +30 -0
  98. data/app/models/inventory_unit.rb +132 -0
  99. data/app/models/line_item.rb +67 -0
  100. data/app/models/option_type.rb +8 -0
  101. data/app/models/option_value.rb +5 -0
  102. data/app/models/order.rb +536 -0
  103. data/app/models/order_mailer.rb +24 -0
  104. data/app/models/payment.rb +136 -0
  105. data/app/models/payment_method/check.rb +2 -0
  106. data/app/models/payment_method.rb +54 -0
  107. data/app/models/preference.rb +51 -0
  108. data/app/models/product.rb +239 -0
  109. data/app/models/product_group.rb +208 -0
  110. data/app/models/product_option_type.rb +5 -0
  111. data/app/models/product_property.rb +15 -0
  112. data/app/models/product_scope.rb +58 -0
  113. data/app/models/property.rb +20 -0
  114. data/app/models/prototype.rb +5 -0
  115. data/app/models/return_authorization.rb +70 -0
  116. data/app/models/role.rb +3 -0
  117. data/app/models/shipment.rb +133 -0
  118. data/app/models/shipping_category.rb +3 -0
  119. data/app/models/shipping_method.rb +20 -0
  120. data/app/models/state.rb +17 -0
  121. data/app/models/state_event.rb +16 -0
  122. data/app/models/state_monitor.rb +25 -0
  123. data/app/models/tax_category.rb +14 -0
  124. data/app/models/tax_rate.rb +17 -0
  125. data/app/models/taxon.rb +51 -0
  126. data/app/models/taxonomy.rb +17 -0
  127. data/app/models/tracker.rb +5 -0
  128. data/app/models/user.rb +13 -0
  129. data/app/models/variant.rb +104 -0
  130. data/app/models/zone.rb +84 -0
  131. data/app/models/zone_member.rb +10 -0
  132. data/app/stylesheets/_buttons.less +80 -0
  133. data/app/stylesheets/_cart.less +24 -0
  134. data/app/stylesheets/_checkout.less +76 -0
  135. data/app/stylesheets/_checkout_progress.less +62 -0
  136. data/app/stylesheets/_colors.less +16 -0
  137. data/app/stylesheets/_forms.less +50 -0
  138. data/app/stylesheets/_layout.less +77 -0
  139. data/app/stylesheets/_messages.less +32 -0
  140. data/app/stylesheets/_mixins.less +71 -0
  141. data/app/stylesheets/_navigation.less +130 -0
  142. data/app/stylesheets/_prices.less +18 -0
  143. data/app/stylesheets/_product_details.less +56 -0
  144. data/app/stylesheets/_product_lists.less +66 -0
  145. data/app/stylesheets/_registration.less +24 -0
  146. data/app/stylesheets/_reset.less +69 -0
  147. data/app/stylesheets/_typography.less +158 -0
  148. data/app/stylesheets/screen.less +13 -0
  149. data/app/views/account/login.html.erb +4 -0
  150. data/app/views/admin/adjustments/_form.html.erb +12 -0
  151. data/app/views/admin/adjustments/edit.html.erb +13 -0
  152. data/app/views/admin/adjustments/index.html.erb +34 -0
  153. data/app/views/admin/adjustments/new.html.erb +13 -0
  154. data/app/views/admin/checkouts/_form.html.erb +42 -0
  155. data/app/views/admin/checkouts/edit.html.erb +21 -0
  156. data/app/views/admin/checkouts/show.html.erb +131 -0
  157. data/app/views/admin/configurations/index.html.erb +66 -0
  158. data/app/views/admin/configurations/new.html.erb +13 -0
  159. data/app/views/admin/extensions/index.html.erb +23 -0
  160. data/app/views/admin/general_settings/edit.html.erb +35 -0
  161. data/app/views/admin/general_settings/show.html.erb +28 -0
  162. data/app/views/admin/images/_form.html.erb +16 -0
  163. data/app/views/admin/images/edit.html.erb +19 -0
  164. data/app/views/admin/images/index.html.erb +66 -0
  165. data/app/views/admin/images/new.html.erb +22 -0
  166. data/app/views/admin/inventory_settings/edit.html.erb +27 -0
  167. data/app/views/admin/inventory_settings/show.html.erb +9 -0
  168. data/app/views/admin/inventory_units/adjust.html.erb +33 -0
  169. data/app/views/admin/mail_settings/edit.html.erb +114 -0
  170. data/app/views/admin/mail_settings/show.html.erb +59 -0
  171. data/app/views/admin/option_types/_available.html.erb +27 -0
  172. data/app/views/admin/option_types/_form.html.erb +11 -0
  173. data/app/views/admin/option_types/_option_value_fields.html.erb +5 -0
  174. data/app/views/admin/option_types/_selected.html.erb +26 -0
  175. data/app/views/admin/option_types/available.js.erb +2 -0
  176. data/app/views/admin/option_types/edit.html.erb +30 -0
  177. data/app/views/admin/option_types/index.html.erb +33 -0
  178. data/app/views/admin/option_types/new.html.erb +11 -0
  179. data/app/views/admin/option_types/select.js.erb +3 -0
  180. data/app/views/admin/option_types/selected.html.erb +6 -0
  181. data/app/views/admin/orders/_add_product.html.erb +20 -0
  182. data/app/views/admin/orders/_form.html.erb +66 -0
  183. data/app/views/admin/orders/_line_item.html.erb +16 -0
  184. data/app/views/admin/orders/edit.html.erb +30 -0
  185. data/app/views/admin/orders/history.html.erb +25 -0
  186. data/app/views/admin/orders/index.html.erb +96 -0
  187. data/app/views/admin/orders/new.html.erb +19 -0
  188. data/app/views/admin/orders/show.html.erb +32 -0
  189. data/app/views/admin/payment_methods/_form.html.erb +50 -0
  190. data/app/views/admin/payment_methods/edit.html.erb +10 -0
  191. data/app/views/admin/payment_methods/index.html.erb +47 -0
  192. data/app/views/admin/payment_methods/new.html.erb +11 -0
  193. data/app/views/admin/payments/_bill_address_form.html.erb +9 -0
  194. data/app/views/admin/payments/_card_form.html.erb +49 -0
  195. data/app/views/admin/payments/_form.html.erb +15 -0
  196. data/app/views/admin/payments/_list.html.erb +24 -0
  197. data/app/views/admin/payments/_transaction_list.html.erb +24 -0
  198. data/app/views/admin/payments/credit.html.erb +14 -0
  199. data/app/views/admin/payments/index.html.erb +27 -0
  200. data/app/views/admin/payments/new.html.erb +19 -0
  201. data/app/views/admin/payments/show.html.erb +10 -0
  202. data/app/views/admin/payments/source_forms/_check.html.erb +0 -0
  203. data/app/views/admin/payments/source_forms/_gateway.html.erb +43 -0
  204. data/app/views/admin/payments/source_views/_check.html.erb +0 -0
  205. data/app/views/admin/payments/source_views/_gateway.html.erb +35 -0
  206. data/app/views/admin/product_groups/_preview.html.erb +34 -0
  207. data/app/views/admin/product_groups/_product_scope.html.erb +24 -0
  208. data/app/views/admin/product_groups/edit.html.erb +56 -0
  209. data/app/views/admin/product_groups/index.html.erb +35 -0
  210. data/app/views/admin/product_groups/new.html.erb +12 -0
  211. data/app/views/admin/product_groups/show.html.erb +32 -0
  212. data/app/views/admin/product_groups/update.js.erb +7 -0
  213. data/app/views/admin/product_properties/_product_property_fields.html.erb +11 -0
  214. data/app/views/admin/product_properties/index.html.erb +50 -0
  215. data/app/views/admin/product_scopes/_form.html.erb +106 -0
  216. data/app/views/admin/product_scopes/create.js.erb +3 -0
  217. data/app/views/admin/product_scopes/destroy.js.erb +2 -0
  218. data/app/views/admin/product_scopes/new.html.erb +1 -0
  219. data/app/views/admin/products/_form.html.erb +106 -0
  220. data/app/views/admin/products/_option_types.html.erb +40 -0
  221. data/app/views/admin/products/_properties_form.erb +7 -0
  222. data/app/views/admin/products/edit.html.erb +10 -0
  223. data/app/views/admin/products/index.html.erb +81 -0
  224. data/app/views/admin/products/new.html.erb +53 -0
  225. data/app/views/admin/products/show.html.erb +4 -0
  226. data/app/views/admin/properties/_form.html.erb +12 -0
  227. data/app/views/admin/properties/edit.html.erb +10 -0
  228. data/app/views/admin/properties/filtered.html.erb +1 -0
  229. data/app/views/admin/properties/index.html.erb +40 -0
  230. data/app/views/admin/properties/new.html.erb +11 -0
  231. data/app/views/admin/prototypes/_form.html.erb +44 -0
  232. data/app/views/admin/prototypes/available.html.erb +22 -0
  233. data/app/views/admin/prototypes/edit.html.erb +9 -0
  234. data/app/views/admin/prototypes/index.html.erb +37 -0
  235. data/app/views/admin/prototypes/new.html.erb +11 -0
  236. data/app/views/admin/prototypes/select.js.erb +4 -0
  237. data/app/views/admin/reports/index.html.erb +19 -0
  238. data/app/views/admin/reports/sales_total.html.erb +27 -0
  239. data/app/views/admin/return_authorizations/_form.html.erb +64 -0
  240. data/app/views/admin/return_authorizations/edit.html.erb +27 -0
  241. data/app/views/admin/return_authorizations/index.html.erb +43 -0
  242. data/app/views/admin/return_authorizations/new.html.erb +13 -0
  243. data/app/views/admin/shared/_additional_field.html.erb +5 -0
  244. data/app/views/admin/shared/_address.html.erb +5 -0
  245. data/app/views/admin/shared/_address_form.html.erb +76 -0
  246. data/app/views/admin/shared/_calculator_fields.html.erb +19 -0
  247. data/app/views/admin/shared/_configuration_menu.html.erb +22 -0
  248. data/app/views/admin/shared/_edit_resource_links.html.erb +4 -0
  249. data/app/views/admin/shared/_group_from_products_form.html.erb +12 -0
  250. data/app/views/admin/shared/_new_resource_links.html.erb +4 -0
  251. data/app/views/admin/shared/_order_details.html.erb +3 -0
  252. data/app/views/admin/shared/_order_sub_menu.html.erb +0 -0
  253. data/app/views/admin/shared/_order_tabs.html.erb +60 -0
  254. data/app/views/admin/shared/_product_sub_menu.html.erb +11 -0
  255. data/app/views/admin/shared/_product_tabs.html.erb +34 -0
  256. data/app/views/admin/shared/_report_criteria.html.erb +15 -0
  257. data/app/views/admin/shared/_show_resource_links.html.erb +5 -0
  258. data/app/views/admin/shared/_tabs.html.erb +6 -0
  259. data/app/views/admin/shipments/_form.html.erb +79 -0
  260. data/app/views/admin/shipments/edit.html.erb +40 -0
  261. data/app/views/admin/shipments/index.html.erb +45 -0
  262. data/app/views/admin/shipments/new.html.erb +18 -0
  263. data/app/views/admin/shipping_categories/_form.html.erb +6 -0
  264. data/app/views/admin/shipping_categories/edit.html.erb +6 -0
  265. data/app/views/admin/shipping_categories/index.html.erb +29 -0
  266. data/app/views/admin/shipping_categories/new.html.erb +8 -0
  267. data/app/views/admin/shipping_methods/_form.html.erb +24 -0
  268. data/app/views/admin/shipping_methods/edit.html.erb +16 -0
  269. data/app/views/admin/shipping_methods/index.html.erb +48 -0
  270. data/app/views/admin/shipping_methods/new.html.erb +17 -0
  271. data/app/views/admin/states/_form.html.erb +9 -0
  272. data/app/views/admin/states/_state_list.html.erb +28 -0
  273. data/app/views/admin/states/edit.html.erb +10 -0
  274. data/app/views/admin/states/index.html.erb +16 -0
  275. data/app/views/admin/states/new.html.erb +8 -0
  276. data/app/views/admin/tax_categories/_form.html.erb +12 -0
  277. data/app/views/admin/tax_categories/edit.html.erb +10 -0
  278. data/app/views/admin/tax_categories/index.html.erb +39 -0
  279. data/app/views/admin/tax_categories/new.html.erb +10 -0
  280. data/app/views/admin/tax_categories/show.html.erb +1 -0
  281. data/app/views/admin/tax_rates/_form.html.erb +16 -0
  282. data/app/views/admin/tax_rates/edit.html.erb +6 -0
  283. data/app/views/admin/tax_rates/index.html.erb +34 -0
  284. data/app/views/admin/tax_rates/new.html.erb +8 -0
  285. data/app/views/admin/tax_settings/edit.html.erb +17 -0
  286. data/app/views/admin/tax_settings/show.html.erb +14 -0
  287. data/app/views/admin/taxonomies/_form.html.erb +7 -0
  288. data/app/views/admin/taxonomies/_js_head.html.erb +11 -0
  289. data/app/views/admin/taxonomies/_list.html.erb +17 -0
  290. data/app/views/admin/taxonomies/_taxon.html.erb +12 -0
  291. data/app/views/admin/taxonomies/edit.html.erb +49 -0
  292. data/app/views/admin/taxonomies/get_children.json.erb +9 -0
  293. data/app/views/admin/taxonomies/index.html.erb +16 -0
  294. data/app/views/admin/taxonomies/new.html.erb +12 -0
  295. data/app/views/admin/taxons/_form.html.erb +23 -0
  296. data/app/views/admin/taxons/_taxon_table.html.erb +28 -0
  297. data/app/views/admin/taxons/available.js.erb +36 -0
  298. data/app/views/admin/taxons/edit.html.erb +11 -0
  299. data/app/views/admin/taxons/remove.html.erb +1 -0
  300. data/app/views/admin/taxons/select.html.erb +1 -0
  301. data/app/views/admin/taxons/selected.html.erb +42 -0
  302. data/app/views/admin/trackers/_form.html.erb +26 -0
  303. data/app/views/admin/trackers/edit.html.erb +8 -0
  304. data/app/views/admin/trackers/index.html.erb +41 -0
  305. data/app/views/admin/trackers/new.html.erb +9 -0
  306. data/app/views/admin/users/_form.html.erb +36 -0
  307. data/app/views/admin/users/edit.html.erb +14 -0
  308. data/app/views/admin/users/index.html.erb +62 -0
  309. data/app/views/admin/users/new.html.erb +14 -0
  310. data/app/views/admin/users/show.html.erb +21 -0
  311. data/app/views/admin/variants/_form.html.erb +40 -0
  312. data/app/views/admin/variants/edit.html.erb +13 -0
  313. data/app/views/admin/variants/index.html.erb +51 -0
  314. data/app/views/admin/variants/new.html.erb +11 -0
  315. data/app/views/admin/zones/_country_member.html.erb +5 -0
  316. data/app/views/admin/zones/_form.html.erb +29 -0
  317. data/app/views/admin/zones/_member_type.html.erb +15 -0
  318. data/app/views/admin/zones/_state_member.html.erb +5 -0
  319. data/app/views/admin/zones/_zone_member.html.erb +5 -0
  320. data/app/views/admin/zones/edit.html.erb +10 -0
  321. data/app/views/admin/zones/index.html.erb +40 -0
  322. data/app/views/admin/zones/new.html.erb +10 -0
  323. data/app/views/checkout/_address.html.erb +161 -0
  324. data/app/views/checkout/_complete.html.erb +1 -0
  325. data/app/views/checkout/_confirm.html.erb +11 -0
  326. data/app/views/checkout/_delivery.html.erb +25 -0
  327. data/app/views/checkout/_payment.html.erb +28 -0
  328. data/app/views/checkout/_summary.html.erb +31 -0
  329. data/app/views/checkout/edit.html.erb +18 -0
  330. data/app/views/checkout/payment/_check.html.erb +0 -0
  331. data/app/views/checkout/payment/_gateway.html.erb +31 -0
  332. data/app/views/content/cvv.html.erb +13 -0
  333. data/app/views/countries/index.js.erb +1 -0
  334. data/app/views/layouts/admin.html.erb +79 -0
  335. data/app/views/layouts/spree_application.html.erb +52 -0
  336. data/app/views/order_mailer/cancel.html.erb +16 -0
  337. data/app/views/order_mailer/confirm.html.erb +19 -0
  338. data/app/views/orders/_form.html.erb +19 -0
  339. data/app/views/orders/_line_item.html.erb +43 -0
  340. data/app/views/orders/edit.html.erb +40 -0
  341. data/app/views/orders/new.html.erb +9 -0
  342. data/app/views/orders/show.html.erb +16 -0
  343. data/app/views/password_resets/edit.html.erb +12 -0
  344. data/app/views/password_resets/new.html.erb +12 -0
  345. data/app/views/products/_cart_form.html.erb +54 -0
  346. data/app/views/products/_image.html.erb +5 -0
  347. data/app/views/products/_properties.html.erb +8 -0
  348. data/app/views/products/_taxons.html.erb +16 -0
  349. data/app/views/products/_thumbnails.html.erb +40 -0
  350. data/app/views/products/index.html.erb +30 -0
  351. data/app/views/products/show.html.erb +31 -0
  352. data/app/views/shared/_additional_field.html.erb +7 -0
  353. data/app/views/shared/_admin_head.html.erb +34 -0
  354. data/app/views/shared/_edit_resource_links.html.erb +1 -0
  355. data/app/views/shared/_error_messages.html.erb +11 -0
  356. data/app/views/shared/_filters.html.erb +52 -0
  357. data/app/views/shared/_footer.html.erb +13 -0
  358. data/app/views/shared/_google_analytics.html.erb +39 -0
  359. data/app/views/shared/_head.html.erb +10 -0
  360. data/app/views/shared/_login.html.erb +21 -0
  361. data/app/views/shared/_method_error_message.html.erb +4 -0
  362. data/app/views/shared/_nav_bar.html.erb +5 -0
  363. data/app/views/shared/_new_resource_links.html.erb +1 -0
  364. data/app/views/shared/_order_details.html.erb +50 -0
  365. data/app/views/shared/_products.html.erb +35 -0
  366. data/app/views/shared/_search.html.erb +9 -0
  367. data/app/views/shared/_show_resource_links.html.erb +3 -0
  368. data/app/views/shared/_store_menu.html.erb +3 -0
  369. data/app/views/shared/_taxonomies.html.erb +10 -0
  370. data/app/views/shared/_test_hook.html.erb +1 -0
  371. data/app/views/shared/_user_form.html.erb +17 -0
  372. data/app/views/states/index.js.erb +1 -0
  373. data/app/views/taxons/_taxon.html.erb +4 -0
  374. data/app/views/taxons/show.html.erb +17 -0
  375. data/app/views/users/edit.html.erb +9 -0
  376. data/app/views/users/show.html.erb +46 -0
  377. data/config/initializers/form_builder.rb +23 -0
  378. data/config/initializers/load_unobtrusive_date_picker.rb +8 -0
  379. data/config/initializers/spree.rb +41 -0
  380. data/config/initializers/touch.rb +14 -0
  381. data/config/initializers/workarounds_for_ruby19.rb +72 -0
  382. data/config/locales/en_spree.yml +950 -0
  383. data/config/routes.rb +186 -0
  384. data/lib/active_merchant/billing/authorize_net_cim.rb +871 -0
  385. data/lib/custom_fixtures.rb +7 -0
  386. data/lib/generators/spree_core/extension_generator.rb +57 -0
  387. data/lib/generators/spree_core/install_generator.rb +59 -0
  388. data/lib/generators/templates/LICENSE +23 -0
  389. data/lib/generators/templates/README.md +13 -0
  390. data/lib/generators/templates/Rakefile +1 -0
  391. data/lib/generators/templates/application_controller.rb +4 -0
  392. data/lib/generators/templates/config/initializers/%file_name%.rb.tt +1 -0
  393. data/lib/generators/templates/config/locales/%current_locale%.yml.tt +2 -0
  394. data/lib/generators/templates/config/routes.rb +3 -0
  395. data/lib/generators/templates/db/default/countries.yml +1583 -0
  396. data/lib/generators/templates/db/default/roles.yml +7 -0
  397. data/lib/generators/templates/db/default/states.yml +256 -0
  398. data/lib/generators/templates/db/default/zone_members.yml +169 -0
  399. data/lib/generators/templates/db/default/zones.yml +13 -0
  400. data/lib/generators/templates/db/migrate/20090823005402_spree_zero_nine_zero.rb +442 -0
  401. data/lib/generators/templates/db/migrate/20090904192342_create_indexes_for_inventory_units.rb +12 -0
  402. data/lib/generators/templates/db/migrate/20090923100315_add_count_on_hand_to_variants_and_products.rb +36 -0
  403. data/lib/generators/templates/db/migrate/20091007134354_change_taxons_to_nested_set.rb +40 -0
  404. data/lib/generators/templates/db/migrate/20091008091614_move_to_configurable_gateways.rb +55 -0
  405. data/lib/generators/templates/db/migrate/20091012120519_product_groups_and_scopes.rb +25 -0
  406. data/lib/generators/templates/db/migrate/20091015110842_add_open_id_authentication_tables.rb +20 -0
  407. data/lib/generators/templates/db/migrate/20091015153048_add_openid_field_to_users.rb +19 -0
  408. data/lib/generators/templates/db/migrate/20091016174634_change_preference_value_type.rb +9 -0
  409. data/lib/generators/templates/db/migrate/20091017175558_create_billing_integrations.rb +16 -0
  410. data/lib/generators/templates/db/migrate/20091021133257_charge_refactoring.rb +32 -0
  411. data/lib/generators/templates/db/migrate/20091104151730_add_some_indexes.rb +21 -0
  412. data/lib/generators/templates/db/migrate/20091126190904_checkout_state_machine.rb +13 -0
  413. data/lib/generators/templates/db/migrate/20091209153045_state_for_shipments.rb +9 -0
  414. data/lib/generators/templates/db/migrate/20091209202200_make_state_events_polymorphic.rb +12 -0
  415. data/lib/generators/templates/db/migrate/20091211203813_ship_address_id_for_checkouts.rb +9 -0
  416. data/lib/generators/templates/db/migrate/20091212161118_shipping_method_id_for_checkouts.rb +9 -0
  417. data/lib/generators/templates/db/migrate/20091213222815_creditcard_last_four_digits.rb +19 -0
  418. data/lib/generators/templates/db/migrate/20091214183826_populate_legacy_shipment_state.rb +19 -0
  419. data/lib/generators/templates/db/migrate/20100105090147_add_cost_price.rb +9 -0
  420. data/lib/generators/templates/db/migrate/20100105132138_shipment_id_for_inventory_units.rb +21 -0
  421. data/lib/generators/templates/db/migrate/20100111205525_cim_fields_for_creditcards.rb +11 -0
  422. data/lib/generators/templates/db/migrate/20100112151511_create_return_authorizations.rb +16 -0
  423. data/lib/generators/templates/db/migrate/20100113090919_add_return_authorization_to_inventory_units.rb +9 -0
  424. data/lib/generators/templates/db/migrate/20100113203104_create_trackers.rb +14 -0
  425. data/lib/generators/templates/db/migrate/20100121160010_creditcard_id_for_creditcard_txns.rb +9 -0
  426. data/lib/generators/templates/db/migrate/20100121183934_original_creditcard_txn_id_for_creditcard_txns.rb +9 -0
  427. data/lib/generators/templates/db/migrate/20100125145351_add_test_mode_to_billing_integration.rb +11 -0
  428. data/lib/generators/templates/db/migrate/20100126103714_create_products_product_groups.rb +12 -0
  429. data/lib/generators/templates/db/migrate/20100209025806_create_payment_methods.rb +20 -0
  430. data/lib/generators/templates/db/migrate/20100209144531_polymorphic_payments.rb +29 -0
  431. data/lib/generators/templates/db/migrate/20100213103131_change_payments_payment_method_to_belongs_to.rb +11 -0
  432. data/lib/generators/templates/db/migrate/20100214212536_assign_creditcard_txns_to_payment.rb +16 -0
  433. data/lib/generators/templates/db/migrate/20100223170312_sti_for_transactions.rb +14 -0
  434. data/lib/generators/templates/db/migrate/20100223183812_drop_billing_integrations.rb +16 -0
  435. data/lib/generators/templates/db/migrate/20100224153127_deleted_at_for_payment_methods.rb +13 -0
  436. data/lib/generators/templates/db/migrate/20100301163454_add_adjustments_index.rb +10 -0
  437. data/lib/generators/templates/db/migrate/20100306153445_fix_by_popularity.rb +8 -0
  438. data/lib/generators/templates/db/migrate/20100317120946_add_alt_text_to_images.rb +9 -0
  439. data/lib/generators/templates/db/migrate/20100427121301_add_display_to_payment_methods.rb +9 -0
  440. data/lib/generators/templates/db/migrate/20100504142133_add_addresses_checkouts_indexes.rb +16 -0
  441. data/lib/generators/templates/db/migrate/20100506180619_add_icon_to_taxons.rb +18 -0
  442. data/lib/generators/templates/db/migrate/20100506185838_add_description_to_taxons.rb +11 -0
  443. data/lib/generators/templates/db/migrate/20100528155333_index_for_shipments_number.rb +9 -0
  444. data/lib/generators/templates/db/migrate/20100528185820_add_index_on_users_persistence_token.rb +9 -0
  445. data/lib/generators/templates/db/migrate/20100605152042_add_default_to_tax_categories.rb +9 -0
  446. data/lib/generators/templates/db/migrate/20100624110730_add_display_to_shipping_methods.rb +9 -0
  447. data/lib/generators/templates/db/migrate/20100624123336_rename_payment_method_display.rb +9 -0
  448. data/lib/generators/templates/db/migrate/20100624175547_rename_preferences_field.rb +8 -0
  449. data/lib/generators/templates/db/migrate/20100811163637_add_guest_flag.rb +13 -0
  450. data/lib/generators/templates/db/migrate/20100811205836_drop_order_token.rb +11 -0
  451. data/lib/generators/templates/db/migrate/20100812162326_payments_state_and_assigned_to_order_only.rb +11 -0
  452. data/lib/generators/templates/db/migrate/20100813023502_create_address_keys_for_order.rb +15 -0
  453. data/lib/generators/templates/db/migrate/20100813185745_payment_total_for_orders.rb +9 -0
  454. data/lib/generators/templates/db/migrate/20100816212146_shipping_method_id_for_orders.rb +9 -0
  455. data/lib/generators/templates/db/migrate/20100817152723_add_shipment_and_payment_state.rb +15 -0
  456. data/lib/generators/templates/db/migrate/20100819170125_refactor_adjustments.rb +19 -0
  457. data/lib/generators/templates/db/migrate/20100820135707_response_code_and_avs_response_for_payments.rb +11 -0
  458. data/lib/generators/templates/db/migrate/20100901171814_change_guest_flag_to_anonymous.rb +13 -0
  459. data/lib/generators/templates/db/sample/users.rb +61 -0
  460. data/lib/generators/templates/extension/engine.rb.tt +14 -0
  461. data/lib/generators/templates/extension/extension.rb.tt +1 -0
  462. data/lib/generators/templates/extension.gemspec.tt +21 -0
  463. data/lib/generators/templates/lib/tasks/%file_name%.rake.tt +1 -0
  464. data/lib/generators/templates/public/images/add-to-cart.png +0 -0
  465. data/lib/generators/templates/public/images/admin/bg/active-tab.png +0 -0
  466. data/lib/generators/templates/public/images/admin/bg/admin_tab_back.png +0 -0
  467. data/lib/generators/templates/public/images/admin/bg/admin_tab_selected_back.png +0 -0
  468. data/lib/generators/templates/public/images/admin/bg/content-back-blue.png +0 -0
  469. data/lib/generators/templates/public/images/admin/bg/content-back-green.png +0 -0
  470. data/lib/generators/templates/public/images/admin/bg/content-back.png +0 -0
  471. data/lib/generators/templates/public/images/admin/bg/flash-error.png +0 -0
  472. data/lib/generators/templates/public/images/admin/bg/flash-notice.png +0 -0
  473. data/lib/generators/templates/public/images/admin/bg/green-stripes.gif +0 -0
  474. data/lib/generators/templates/public/images/admin/bg/green-stripes.png +0 -0
  475. data/lib/generators/templates/public/images/admin/bg/grid_header_back.png +0 -0
  476. data/lib/generators/templates/public/images/admin/bg/grid_header_back_green.png +0 -0
  477. data/lib/generators/templates/public/images/admin/bg/header-bg.png +0 -0
  478. data/lib/generators/templates/public/images/admin/bg/header.png +0 -0
  479. data/lib/generators/templates/public/images/admin/bg/header_bg.jpg +0 -0
  480. data/lib/generators/templates/public/images/admin/bg/menu-current.png +0 -0
  481. data/lib/generators/templates/public/images/admin/bg/red-stripes.gif +0 -0
  482. data/lib/generators/templates/public/images/admin/bg/red-stripes.png +0 -0
  483. data/lib/generators/templates/public/images/admin/bg/spree_50.png +0 -0
  484. data/lib/generators/templates/public/images/admin/bg/subnav-divider.png +0 -0
  485. data/lib/generators/templates/public/images/admin/bg/subnav.png +0 -0
  486. data/lib/generators/templates/public/images/admin/bg/tab-back.png +0 -0
  487. data/lib/generators/templates/public/images/admin/buttons/blue/left_01.png +0 -0
  488. data/lib/generators/templates/public/images/admin/buttons/blue/right_01.png +0 -0
  489. data/lib/generators/templates/public/images/admin/buttons/drag-handle-green.png +0 -0
  490. data/lib/generators/templates/public/images/admin/buttons/green/left_01.png +0 -0
  491. data/lib/generators/templates/public/images/admin/buttons/green/right_01.png +0 -0
  492. data/lib/generators/templates/public/images/admin/buttons/left_01.png +0 -0
  493. data/lib/generators/templates/public/images/admin/buttons/left_01_small.png +0 -0
  494. data/lib/generators/templates/public/images/admin/buttons/orange/left_03.png +0 -0
  495. data/lib/generators/templates/public/images/admin/buttons/orange/right_03.png +0 -0
  496. data/lib/generators/templates/public/images/admin/buttons/right_01.png +0 -0
  497. data/lib/generators/templates/public/images/admin/buttons/right_01_small.png +0 -0
  498. data/lib/generators/templates/public/images/admin/icons/16x16/1.png +0 -0
  499. data/lib/generators/templates/public/images/admin/icons/16x16/10.png +0 -0
  500. data/lib/generators/templates/public/images/admin/icons/16x16/2.png +0 -0
  501. data/lib/generators/templates/public/images/admin/icons/16x16/3.png +0 -0
  502. data/lib/generators/templates/public/images/admin/icons/16x16/4.png +0 -0
  503. data/lib/generators/templates/public/images/admin/icons/16x16/5.png +0 -0
  504. data/lib/generators/templates/public/images/admin/icons/16x16/6.png +0 -0
  505. data/lib/generators/templates/public/images/admin/icons/16x16/7.png +0 -0
  506. data/lib/generators/templates/public/images/admin/icons/16x16/8.png +0 -0
  507. data/lib/generators/templates/public/images/admin/icons/16x16/9.png +0 -0
  508. data/lib/generators/templates/public/images/admin/icons/32x32/1.png +0 -0
  509. data/lib/generators/templates/public/images/admin/icons/32x32/10.png +0 -0
  510. data/lib/generators/templates/public/images/admin/icons/32x32/11.png +0 -0
  511. data/lib/generators/templates/public/images/admin/icons/32x32/2.png +0 -0
  512. data/lib/generators/templates/public/images/admin/icons/32x32/3.png +0 -0
  513. data/lib/generators/templates/public/images/admin/icons/32x32/4.png +0 -0
  514. data/lib/generators/templates/public/images/admin/icons/32x32/5.png +0 -0
  515. data/lib/generators/templates/public/images/admin/icons/32x32/6.png +0 -0
  516. data/lib/generators/templates/public/images/admin/icons/32x32/7.png +0 -0
  517. data/lib/generators/templates/public/images/admin/icons/32x32/8.png +0 -0
  518. data/lib/generators/templates/public/images/admin/icons/32x32/9.png +0 -0
  519. data/lib/generators/templates/public/images/admin/icons/accept.png +0 -0
  520. data/lib/generators/templates/public/images/admin/icons/add.gif +0 -0
  521. data/lib/generators/templates/public/images/admin/icons/add.png +0 -0
  522. data/lib/generators/templates/public/images/admin/icons/arrow-down.gif +0 -0
  523. data/lib/generators/templates/public/images/admin/icons/cross.png +0 -0
  524. data/lib/generators/templates/public/images/admin/icons/delete.gif +0 -0
  525. data/lib/generators/templates/public/images/admin/icons/delete.png +0 -0
  526. data/lib/generators/templates/public/images/admin/icons/drag.gif +0 -0
  527. data/lib/generators/templates/public/images/admin/icons/edit.gif +0 -0
  528. data/lib/generators/templates/public/images/admin/icons/edit.png +0 -0
  529. data/lib/generators/templates/public/images/admin/icons/email.png +0 -0
  530. data/lib/generators/templates/public/images/admin/icons/error.png +0 -0
  531. data/lib/generators/templates/public/images/admin/icons/exclamation.png +0 -0
  532. data/lib/generators/templates/public/images/admin/icons/feed.png +0 -0
  533. data/lib/generators/templates/public/images/admin/icons/pdf.png +0 -0
  534. data/lib/generators/templates/public/images/admin/icons/reorder.gif +0 -0
  535. data/lib/generators/templates/public/images/admin/icons/search.gif +0 -0
  536. data/lib/generators/templates/public/images/admin/icons/send-email.png +0 -0
  537. data/lib/generators/templates/public/images/admin/icons/stop.png +0 -0
  538. data/lib/generators/templates/public/images/admin/icons/tick.png +0 -0
  539. data/lib/generators/templates/public/images/admin/icons/up.gif +0 -0
  540. data/lib/generators/templates/public/images/admin/icons/xls.png +0 -0
  541. data/lib/generators/templates/public/images/admin/tabs/off-left.png +0 -0
  542. data/lib/generators/templates/public/images/admin/tabs/off-right.png +0 -0
  543. data/lib/generators/templates/public/images/admin/tabs/on-left.png +0 -0
  544. data/lib/generators/templates/public/images/admin/tabs/on-right.png +0 -0
  545. data/lib/generators/templates/public/images/ajax_loader.gif +0 -0
  546. data/lib/generators/templates/public/images/amex_cid.gif +0 -0
  547. data/lib/generators/templates/public/images/bg-button-hover.png +0 -0
  548. data/lib/generators/templates/public/images/bg-button-pressed.png +0 -0
  549. data/lib/generators/templates/public/images/bg-button.gif +0 -0
  550. data/lib/generators/templates/public/images/bg-button.png +0 -0
  551. data/lib/generators/templates/public/images/blue/left_01.png +0 -0
  552. data/lib/generators/templates/public/images/blue/right_01.png +0 -0
  553. data/lib/generators/templates/public/images/body-back.png +0 -0
  554. data/lib/generators/templates/public/images/bottom_shine.png +0 -0
  555. data/lib/generators/templates/public/images/breadcrumb.gif +0 -0
  556. data/lib/generators/templates/public/images/button-dark-hover.png +0 -0
  557. data/lib/generators/templates/public/images/button-dark.png +0 -0
  558. data/lib/generators/templates/public/images/buttons/bg-button-hover.png +0 -0
  559. data/lib/generators/templates/public/images/buttons/bg-button-pressed.png +0 -0
  560. data/lib/generators/templates/public/images/buttons/bg-button.gif +0 -0
  561. data/lib/generators/templates/public/images/buttons/bg-button.png +0 -0
  562. data/lib/generators/templates/public/images/buttons/blue/left_01.png +0 -0
  563. data/lib/generators/templates/public/images/buttons/blue/right_01.png +0 -0
  564. data/lib/generators/templates/public/images/buttons/button-dark-hover.png +0 -0
  565. data/lib/generators/templates/public/images/buttons/button-dark.png +0 -0
  566. data/lib/generators/templates/public/images/buttons/drag-handle-green.png +0 -0
  567. data/lib/generators/templates/public/images/buttons/green/left_01.png +0 -0
  568. data/lib/generators/templates/public/images/buttons/green/right_01.png +0 -0
  569. data/lib/generators/templates/public/images/buttons/left_01.png +0 -0
  570. data/lib/generators/templates/public/images/buttons/left_01_small.png +0 -0
  571. data/lib/generators/templates/public/images/buttons/orange/left_03.png +0 -0
  572. data/lib/generators/templates/public/images/buttons/orange/right_03.png +0 -0
  573. data/lib/generators/templates/public/images/buttons/right_01.png +0 -0
  574. data/lib/generators/templates/public/images/buttons/right_01_small.png +0 -0
  575. data/lib/generators/templates/public/images/buttons/sxsw-ribbon-v1.png +0 -0
  576. data/lib/generators/templates/public/images/buttons/top-shine.png +0 -0
  577. data/lib/generators/templates/public/images/calendar_date_select/calendar.gif +0 -0
  578. data/lib/generators/templates/public/images/cart-empty.png +0 -0
  579. data/lib/generators/templates/public/images/cart-empty_x32.png +0 -0
  580. data/lib/generators/templates/public/images/cart-full.png +0 -0
  581. data/lib/generators/templates/public/images/cart-full_x32.png +0 -0
  582. data/lib/generators/templates/public/images/checkout.png +0 -0
  583. data/lib/generators/templates/public/images/creditcard.gif +0 -0
  584. data/lib/generators/templates/public/images/datepicker/backstripes.gif +0 -0
  585. data/lib/generators/templates/public/images/datepicker/bg_header.jpg +0 -0
  586. data/lib/generators/templates/public/images/datepicker/bullet1.gif +0 -0
  587. data/lib/generators/templates/public/images/datepicker/bullet2.gif +0 -0
  588. data/lib/generators/templates/public/images/datepicker/cal.gif +0 -0
  589. data/lib/generators/templates/public/images/datepicker/gradient-e5e5e5-ffffff.gif +0 -0
  590. data/lib/generators/templates/public/images/discover_cid.gif +0 -0
  591. data/lib/generators/templates/public/images/drag-handle-green.png +0 -0
  592. data/lib/generators/templates/public/images/favicon.ico +0 -0
  593. data/lib/generators/templates/public/images/green/left_01.png +0 -0
  594. data/lib/generators/templates/public/images/green/right_01.png +0 -0
  595. data/lib/generators/templates/public/images/grid.png +0 -0
  596. data/lib/generators/templates/public/images/left_01.png +0 -0
  597. data/lib/generators/templates/public/images/left_01_small.png +0 -0
  598. data/lib/generators/templates/public/images/master_cid.jpg +0 -0
  599. data/lib/generators/templates/public/images/menu-current.png +0 -0
  600. data/lib/generators/templates/public/images/menu-hover.png +0 -0
  601. data/lib/generators/templates/public/images/noimage/mini.jpg +0 -0
  602. data/lib/generators/templates/public/images/noimage/product.jpg +0 -0
  603. data/lib/generators/templates/public/images/noimage/small.jpg +0 -0
  604. data/lib/generators/templates/public/images/openid-inputicon.gif +0 -0
  605. data/lib/generators/templates/public/images/orange/left_03.png +0 -0
  606. data/lib/generators/templates/public/images/orange/right_03.png +0 -0
  607. data/lib/generators/templates/public/images/progress.gif +0 -0
  608. data/lib/generators/templates/public/images/right_01.png +0 -0
  609. data/lib/generators/templates/public/images/right_01_small.png +0 -0
  610. data/lib/generators/templates/public/images/separator.png +0 -0
  611. data/lib/generators/templates/public/images/shadow-top.png +0 -0
  612. data/lib/generators/templates/public/images/shadow_top.png +0 -0
  613. data/lib/generators/templates/public/images/spinner.gif +0 -0
  614. data/lib/generators/templates/public/images/spree/progress.gif +0 -0
  615. data/lib/generators/templates/public/images/spree/spinner.gif +0 -0
  616. data/lib/generators/templates/public/images/spree/spree.jpg +0 -0
  617. data/lib/generators/templates/public/images/spree.jpg +0 -0
  618. data/lib/generators/templates/public/images/step-progress/completed-completed.gif +0 -0
  619. data/lib/generators/templates/public/images/step-progress/completed-current.gif +0 -0
  620. data/lib/generators/templates/public/images/step-progress/completed-first.gif +0 -0
  621. data/lib/generators/templates/public/images/step-progress/current-first.gif +0 -0
  622. data/lib/generators/templates/public/images/step-progress/current-incomplete.gif +0 -0
  623. data/lib/generators/templates/public/images/step-progress/current-right.gif +0 -0
  624. data/lib/generators/templates/public/images/step-progress/incomplete-incomplete.gif +0 -0
  625. data/lib/generators/templates/public/images/step-progress/incomplete-right.gif +0 -0
  626. data/lib/generators/templates/public/images/steps/1.png +0 -0
  627. data/lib/generators/templates/public/images/steps/1_small.png +0 -0
  628. data/lib/generators/templates/public/images/steps/2.png +0 -0
  629. data/lib/generators/templates/public/images/steps/2_small.png +0 -0
  630. data/lib/generators/templates/public/images/steps/3.png +0 -0
  631. data/lib/generators/templates/public/images/steps/3_small.png +0 -0
  632. data/lib/generators/templates/public/images/steps/4.png +0 -0
  633. data/lib/generators/templates/public/images/steps/4_small.png +0 -0
  634. data/lib/generators/templates/public/images/steps/5.png +0 -0
  635. data/lib/generators/templates/public/images/steps/5_small.png +0 -0
  636. data/lib/generators/templates/public/images/steps/6.png +0 -0
  637. data/lib/generators/templates/public/images/steps/6_small.png +0 -0
  638. data/lib/generators/templates/public/images/sxsw-ribbon-v1.png +0 -0
  639. data/lib/generators/templates/public/images/tab_bottom.gif +0 -0
  640. data/lib/generators/templates/public/images/tile-header.png +0 -0
  641. data/lib/generators/templates/public/images/tile-slider.png +0 -0
  642. data/lib/generators/templates/public/images/top-shine.png +0 -0
  643. data/lib/generators/templates/public/images/tree-nav-icons/bullet.gif +0 -0
  644. data/lib/generators/templates/public/images/tree-nav-icons/minus.gif +0 -0
  645. data/lib/generators/templates/public/images/tree-nav-icons/plus.gif +0 -0
  646. data/lib/generators/templates/public/images/tree-nav-icons/treeview-loading.gif +0 -0
  647. data/lib/generators/templates/public/images/tree-nav-icons/treeview-sprite.gif +0 -0
  648. data/lib/generators/templates/public/images/update.png +0 -0
  649. data/lib/generators/templates/public/images/visa_cid.gif +0 -0
  650. data/lib/generators/templates/public/images/wrapper-back-2.png +0 -0
  651. data/lib/generators/templates/public/images/wrapper-back.png +0 -0
  652. data/lib/generators/templates/public/images/yui-menubaritem_submenuindicator.png +0 -0
  653. data/lib/generators/templates/public/images/yui-menubaritem_submenuindicator_disabled.png +0 -0
  654. data/lib/generators/templates/public/images/yui-menuitem_checkbox.png +0 -0
  655. data/lib/generators/templates/public/images/yui-menuitem_checkbox_disabled.png +0 -0
  656. data/lib/generators/templates/public/images/yui-menuitem_submenuindicator.png +0 -0
  657. data/lib/generators/templates/public/images/yui-menuitem_submenuindicator_disabled.png +0 -0
  658. data/lib/generators/templates/public/images/yui-sprite.png +0 -0
  659. data/lib/generators/templates/public/javascripts/additional-methods.js +236 -0
  660. data/lib/generators/templates/public/javascripts/admin/address_states.js +25 -0
  661. data/lib/generators/templates/public/javascripts/admin/checkouts/edit.js +129 -0
  662. data/lib/generators/templates/public/javascripts/admin/orders/edit.js +23 -0
  663. data/lib/generators/templates/public/javascripts/admin/orders/edit_form.js +15 -0
  664. data/lib/generators/templates/public/javascripts/admin/payments/new.js +9 -0
  665. data/lib/generators/templates/public/javascripts/admin/unobtrusive_handlers.js +15 -0
  666. data/lib/generators/templates/public/javascripts/admin.js +226 -0
  667. data/lib/generators/templates/public/javascripts/application.js +12 -0
  668. data/lib/generators/templates/public/javascripts/calculator.js +15 -0
  669. data/lib/generators/templates/public/javascripts/checkout.js +64 -0
  670. data/lib/generators/templates/public/javascripts/datepicker.js +1445 -0
  671. data/lib/generators/templates/public/javascripts/gateway.js +13 -0
  672. data/lib/generators/templates/public/javascripts/jquery-1.3.2.min.js +19 -0
  673. data/lib/generators/templates/public/javascripts/jquery-1.4.2.min.js +154 -0
  674. data/lib/generators/templates/public/javascripts/jquery-and-plugins.js +36 -0
  675. data/lib/generators/templates/public/javascripts/jquery-ui.js +188 -0
  676. data/lib/generators/templates/public/javascripts/jquery.alerts/images/help.gif +0 -0
  677. data/lib/generators/templates/public/javascripts/jquery.alerts/images/important.gif +0 -0
  678. data/lib/generators/templates/public/javascripts/jquery.alerts/images/info.gif +0 -0
  679. data/lib/generators/templates/public/javascripts/jquery.alerts/images/title.gif +0 -0
  680. data/lib/generators/templates/public/javascripts/jquery.alerts/jquery.alerts.css +57 -0
  681. data/lib/generators/templates/public/javascripts/jquery.alerts/jquery.alerts.js +235 -0
  682. data/lib/generators/templates/public/javascripts/jquery.alerts/jquery.alerts.spree.css +30 -0
  683. data/lib/generators/templates/public/javascripts/jquery.autocomplete.min.js +13 -0
  684. data/lib/generators/templates/public/javascripts/jquery.js +19 -0
  685. data/lib/generators/templates/public/javascripts/jquery.suggest.js +276 -0
  686. data/lib/generators/templates/public/javascripts/jquery.template.js +255 -0
  687. data/lib/generators/templates/public/javascripts/jquery.tokeninput.js +618 -0
  688. data/lib/generators/templates/public/javascripts/jquery.validate.min.js +16 -0
  689. data/lib/generators/templates/public/javascripts/jrails.autocomplete.js +274 -0
  690. data/lib/generators/templates/public/javascripts/jrails.js +1 -0
  691. data/lib/generators/templates/public/javascripts/jsTree/jquery.tree.js +2058 -0
  692. data/lib/generators/templates/public/javascripts/jsTree/plugins/jquery.tree.contextmenu.js +129 -0
  693. data/lib/generators/templates/public/javascripts/jsTree/themes/apple/bg.jpg +0 -0
  694. data/lib/generators/templates/public/javascripts/jsTree/themes/apple/dot_for_ie.gif +0 -0
  695. data/lib/generators/templates/public/javascripts/jsTree/themes/apple/icons.png +0 -0
  696. data/lib/generators/templates/public/javascripts/jsTree/themes/apple/style.css +34 -0
  697. data/lib/generators/templates/public/javascripts/jsTree/themes/apple/throbber.gif +0 -0
  698. data/lib/generators/templates/public/javascripts/lang/af.js +40 -0
  699. data/lib/generators/templates/public/javascripts/lang/ar.js +50 -0
  700. data/lib/generators/templates/public/javascripts/lang/de.js +40 -0
  701. data/lib/generators/templates/public/javascripts/lang/du.js +40 -0
  702. data/lib/generators/templates/public/javascripts/lang/en.js +42 -0
  703. data/lib/generators/templates/public/javascripts/lang/es.js +41 -0
  704. data/lib/generators/templates/public/javascripts/lang/fi.js +40 -0
  705. data/lib/generators/templates/public/javascripts/lang/fr.js +44 -0
  706. data/lib/generators/templates/public/javascripts/lang/gr.js +40 -0
  707. data/lib/generators/templates/public/javascripts/lang/he.js +49 -0
  708. data/lib/generators/templates/public/javascripts/lang/it.js +13 -0
  709. data/lib/generators/templates/public/javascripts/lang/nl.js +40 -0
  710. data/lib/generators/templates/public/javascripts/lang/no.js +40 -0
  711. data/lib/generators/templates/public/javascripts/lang/pt.js +50 -0
  712. data/lib/generators/templates/public/javascripts/lang/ro.js +40 -0
  713. data/lib/generators/templates/public/javascripts/lang/ru.js +40 -0
  714. data/lib/generators/templates/public/javascripts/lang/sp.js +40 -0
  715. data/lib/generators/templates/public/javascripts/lang/sv.js +41 -0
  716. data/lib/generators/templates/public/javascripts/lang/ua.js +40 -0
  717. data/lib/generators/templates/public/javascripts/localization/messages_cn.js +24 -0
  718. data/lib/generators/templates/public/javascripts/localization/messages_cs.js +23 -0
  719. data/lib/generators/templates/public/javascripts/localization/messages_da.js +21 -0
  720. data/lib/generators/templates/public/javascripts/localization/messages_de.js +21 -0
  721. data/lib/generators/templates/public/javascripts/localization/messages_es.js +24 -0
  722. data/lib/generators/templates/public/javascripts/localization/messages_fr.js +23 -0
  723. data/lib/generators/templates/public/javascripts/localization/messages_hu.js +21 -0
  724. data/lib/generators/templates/public/javascripts/localization/messages_it.js +26 -0
  725. data/lib/generators/templates/public/javascripts/localization/messages_kk.js +23 -0
  726. data/lib/generators/templates/public/javascripts/localization/messages_nl.js +23 -0
  727. data/lib/generators/templates/public/javascripts/localization/messages_no.js +23 -0
  728. data/lib/generators/templates/public/javascripts/localization/messages_pl.js +23 -0
  729. data/lib/generators/templates/public/javascripts/localization/messages_ptbr.js +30 -0
  730. data/lib/generators/templates/public/javascripts/localization/messages_ro.js +24 -0
  731. data/lib/generators/templates/public/javascripts/localization/messages_ru.js +23 -0
  732. data/lib/generators/templates/public/javascripts/localization/messages_se.js +23 -0
  733. data/lib/generators/templates/public/javascripts/localization/messages_sk.js +21 -0
  734. data/lib/generators/templates/public/javascripts/localization/messages_tr.js +24 -0
  735. data/lib/generators/templates/public/javascripts/localization/messages_tw.js +24 -0
  736. data/lib/generators/templates/public/javascripts/localization/messages_ua.js +24 -0
  737. data/lib/generators/templates/public/javascripts/nested-attribute.js +26 -0
  738. data/lib/generators/templates/public/javascripts/open_id.js +15 -0
  739. data/lib/generators/templates/public/javascripts/product.js +49 -0
  740. data/lib/generators/templates/public/javascripts/rails.js +127 -0
  741. data/lib/generators/templates/public/javascripts/taxonomy.js +196 -0
  742. data/lib/generators/templates/public/javascripts/zone.js +40 -0
  743. data/lib/generators/templates/public/stylesheets/admin/admin-forms.css +159 -0
  744. data/lib/generators/templates/public/stylesheets/admin/admin-reset.css +67 -0
  745. data/lib/generators/templates/public/stylesheets/admin/admin-tables.css +39 -0
  746. data/lib/generators/templates/public/stylesheets/admin/admin-typography.css +117 -0
  747. data/lib/generators/templates/public/stylesheets/admin/admin.css +576 -0
  748. data/lib/generators/templates/public/stylesheets/admin/autocomplete.css +74 -0
  749. data/lib/generators/templates/public/stylesheets/admin/dashboard.css +143 -0
  750. data/lib/generators/templates/public/stylesheets/admin/edit_checkouts.css +57 -0
  751. data/lib/generators/templates/public/stylesheets/admin/grids.css +314 -0
  752. data/lib/generators/templates/public/stylesheets/admin/reset-fonts-grids-2-6-0.css +7 -0
  753. data/lib/generators/templates/public/stylesheets/admin/token-input.css +109 -0
  754. data/lib/generators/templates/public/stylesheets/admin/yui-includes.css +14 -0
  755. data/lib/generators/templates/public/stylesheets/datepicker.css +263 -0
  756. data/lib/generators/templates/public/stylesheets/jquery.autocomplete.css +48 -0
  757. data/lib/generators/templates/public/stylesheets/scaffold.css +54 -0
  758. data/lib/generators/templates/public/stylesheets/screen.css +1195 -0
  759. data/lib/generators/templates/spree_site.rb +8 -0
  760. data/lib/product_filters.rb +174 -0
  761. data/lib/redirect_legacy_product_url.rb +13 -0
  762. data/lib/scopes/dynamic.rb +38 -0
  763. data/lib/scopes/product.rb +242 -0
  764. data/lib/scopes/variant.rb +17 -0
  765. data/lib/scopes.rb +69 -0
  766. data/lib/seo_assist.rb +38 -0
  767. data/lib/spree/calculated_adjustments.rb +66 -0
  768. data/lib/spree/config.rb +31 -0
  769. data/lib/spree/current_order.rb +14 -0
  770. data/lib/spree/file_utilz.rb +73 -0
  771. data/lib/spree/gateway_error.rb +3 -0
  772. data/lib/spree/preference_access.rb +27 -0
  773. data/lib/spree/search/base.rb +21 -0
  774. data/lib/spree/search.rb +47 -0
  775. data/lib/spree_core/delegate_belongs_to.rb +95 -0
  776. data/lib/spree_core/enumerable_constants.rb +209 -0
  777. data/lib/spree_core/ext/active_record.rb +13 -0
  778. data/lib/spree_core/ext/array.rb +14 -0
  779. data/lib/spree_core/ext/string.rb +10 -0
  780. data/lib/spree_core/find_by_param.rb +117 -0
  781. data/lib/spree_core/preferences/mail_settings.rb +57 -0
  782. data/lib/spree_core/preferences/model_hooks.rb +293 -0
  783. data/lib/spree_core/preferences/preference_definition.rb +53 -0
  784. data/lib/spree_core/ssl_requirement.rb +109 -0
  785. data/lib/spree_core/theme_support/hook.rb +51 -0
  786. data/lib/spree_core/theme_support/hook_listener.rb +68 -0
  787. data/lib/spree_core/theme_support/hook_modifier.rb +35 -0
  788. data/lib/spree_core/theme_support/more_patches.rb +118 -0
  789. data/lib/spree_core/theme_support.rb +4 -0
  790. data/lib/spree_core/validation_group.rb +143 -0
  791. data/lib/spree_core.rb +144 -0
  792. data/lib/store_helpers.rb +10 -0
  793. data/lib/tasks/core.rake +112 -0
  794. data/lib/tasks/themes.rake +34 -0
  795. metadata +1027 -0
@@ -0,0 +1,31 @@
1
+ module Spree
2
+ # Singleton class to access the configuration object (AppConfiguration.first by default) and its preferences.
3
+ #
4
+ # Usage:
5
+ # Spree::Config[:foo] # Returns the +foo+ preference
6
+ # Spree::Config[] # Returns a Hash with all the application preferences
7
+ # Spree::Config.instance # Returns the configuration object (AppConfiguration.first)
8
+ # Spree::Config.set(preferences_hash) # Set the application preferences as especified in +preference_hash+
9
+ # Spree::Config.searcher/searcher= # get/set the default product search implementation
10
+ class Config
11
+ include Singleton
12
+ include Spree::PreferenceAccess
13
+
14
+ class << self
15
+ def instance
16
+ return @configuration if @configuration
17
+ return nil unless ActiveRecord::Base.connection.tables.include?('configurations')
18
+ @configuration ||= AppConfiguration.find_or_create_by_name("Default configuration")
19
+ @configuration
20
+ end
21
+
22
+ def searcher
23
+ @searcher ||= Spree::Search::Base.new
24
+ end
25
+
26
+ def searcher=(searcher_obj)
27
+ @searcher = searcher_obj
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,14 @@
1
+ module Spree
2
+ module CurrentOrder
3
+ # The current incomplete order from the session for use in cart and during checkout
4
+ def current_order(create_order_if_necessary = false)
5
+ return @current_order if @current_order
6
+ @current_order ||= Order.find_by_id(session[:order_id], :include => :adjustments)
7
+ if create_order_if_necessary and (@current_order.nil? or @current_order.complete?)
8
+ @current_order = Order.create
9
+ end
10
+ session[:order_id] = @current_order ? @current_order.id : nil
11
+ @current_order
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,73 @@
1
+ require 'fileutils'
2
+
3
+ module Spree
4
+ class FileUtilz
5
+ # A general purpose method to mirror a directory (+source+) into a destination
6
+ # directory, including all files and subdirectories. Files will not be mirrored
7
+ # if they are identical already (checked via FileUtils#identical?).
8
+ #
9
+ # Copyright (c) 2008 James Adam (The MIT License)
10
+
11
+ # added: do mirroring with backup saving turned on
12
+ def self.mirror_with_backup(source, destination)
13
+ self.mirror_files(source, destination, true)
14
+ end
15
+
16
+ def self.mirror_files(source, destination, create_backups = false)
17
+ # TODO: use Rake::FileList#pathmap?
18
+ if File.directory?(source)
19
+ source_files = Dir[source + "/**/*"]
20
+ source_dirs = source_files.select { |d| File.directory?(d) }
21
+ source_files -= source_dirs
22
+ elsif File.exist? source
23
+ source_dirs = []
24
+ source_files = [source]
25
+ source = File.dirname source
26
+ else
27
+ puts "Could not mirror #{source} - entity does not exist"
28
+ return
29
+ end
30
+
31
+ unless source_files.empty?
32
+ base_target_dir = File.join(destination)
33
+ base_target_dir = File.dirname base_target_dir unless File.directory? base_target_dir
34
+ FileUtils.mkdir_p(base_target_dir)
35
+ end
36
+
37
+ base_target_dir ||= File.join(destination)
38
+
39
+ source_dirs.each do |dir|
40
+ # strip down these paths so we have simple, relative paths we can
41
+ # add to the destination
42
+ target_dir = File.join(base_target_dir, dir.gsub(source, ''))
43
+ begin
44
+ FileUtils.mkdir_p(target_dir)
45
+ rescue Exception => e
46
+ raise "Could not create directory #{target_dir}: \n" + e
47
+ end
48
+ end
49
+
50
+ source_files.each do |file|
51
+ begin
52
+ target = File.join(base_target_dir, file.gsub(source, ''))
53
+ unless File.exist?(target) && self.same_contents(file, target)
54
+ # WAS FileUtils.identical?(file, target), but we want to test contents too
55
+ if create_backups && File.exist?(target)
56
+ File.rename(target, target + '~')
57
+ end
58
+ FileUtils.cp(file, target)
59
+ end
60
+ rescue Exception => e
61
+ raise "Could not copy #{file} to #{target}: \n" + e
62
+ end
63
+ end
64
+ end
65
+
66
+ # for windows users...
67
+ def self.same_contents(source,destination)
68
+ File.read(source) == File.read(destination)
69
+ end
70
+
71
+ end
72
+ end
73
+
@@ -0,0 +1,3 @@
1
+ module Spree
2
+ class GatewayError < RuntimeError; end
3
+ end
@@ -0,0 +1,27 @@
1
+ module Spree::PreferenceAccess
2
+
3
+ def self.included(base)
4
+ class << base
5
+ def get(key = nil)
6
+ key = key.to_s if key.is_a?(Symbol)
7
+ return nil unless config = self.instance
8
+ # preferences will be cached under the name of the class including this module (ex. Spree::Config)
9
+ prefs = Rails.cache.fetch(self.to_s) { config.preferences }
10
+ return prefs if key.nil?
11
+ prefs[key]
12
+ end
13
+
14
+ # Set the preferences as specified in a hash (like params[:preferences] from a post request)
15
+ def set(preferences={})
16
+ config = self.instance
17
+ preferences.each do |key, value|
18
+ config.set_preference(key, value)
19
+ end
20
+ config.save
21
+ Rails.cache.delete(self.to_s) { config.preferences }
22
+ end
23
+
24
+ alias_method :[], :get
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ module Spree::Search
2
+ class Base
3
+ attr_accessor :properties
4
+
5
+ def initialize
6
+ @properties = {}
7
+ end
8
+
9
+ # method should return hash with conditions {:conditions=> "..."} for Product model
10
+ def get_products_conditions_for(query)
11
+ Product.like_any([:name, :description], query.split)
12
+ end
13
+
14
+ def prepare(params)
15
+ end
16
+
17
+ def method_missing(name)
18
+ @properties[name]
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,47 @@
1
+ module Spree::Search
2
+ def retrieve_products
3
+ # taxon might be already set if this method is called from TaxonsController#show
4
+ @taxon ||= Taxon.find_by_id(params[:taxon]) unless params[:taxon].blank?
5
+ # add taxon id to params for searcher
6
+ params[:taxon] = @taxon.id if @taxon
7
+ @keywords = params[:keywords]
8
+
9
+ per_page = params[:per_page].to_i
10
+ per_page = per_page > 0 ? per_page : Spree::Config[:products_per_page]
11
+ params[:per_page] = per_page
12
+ params[:page] = 1 if (params[:page].to_i <= 0)
13
+
14
+ # Prepare a search within the parameters
15
+ Spree::Config.searcher.prepare(params) unless @keywords.blank?
16
+
17
+ if !params[:order_by_price].blank?
18
+ @product_group = ProductGroup.new.from_route([params[:order_by_price]+"_by_master_price"])
19
+ elsif params[:product_group_name]
20
+ @cached_product_group = ProductGroup.find_by_permalink(params[:product_group_name])
21
+ @product_group = ProductGroup.new
22
+ elsif params[:product_group_query]
23
+ @product_group = ProductGroup.new.from_route(params[:product_group_query])
24
+ else
25
+ @product_group = ProductGroup.new
26
+ end
27
+
28
+ @product_group = @product_group.from_search(params[:search]) if params[:search]
29
+
30
+ base_scope = @cached_product_group ? @cached_product_group.products.active : Product.active
31
+ base_scope = base_scope.in_taxon(@taxon) unless @taxon.blank?
32
+ base_scope = base_scope.keywords(@keywords) unless @keywords.blank?
33
+
34
+ base_scope = base_scope.on_hand unless Spree::Config[:show_zero_stock_products]
35
+ @products_scope = @product_group.apply_on(base_scope)
36
+
37
+ curr_page = Spree::Config.searcher.manage_pagination ? 1 : params[:page]
38
+ @products = @products_scope.all.paginate({
39
+ :include => [:images, :master],
40
+ :per_page => per_page,
41
+ :page => curr_page
42
+ })
43
+ @products_count = @products_scope.count
44
+
45
+ return(@products)
46
+ end
47
+ end
@@ -0,0 +1,95 @@
1
+ ##
2
+ # Creates methods on object which delegate to an association proxy.
3
+ # see delegate_belongs_to for two uses
4
+ #
5
+ # Todo - integrate with ActiveRecord::Dirty to make sure changes to delegate object are noticed
6
+ # Should do
7
+ # class User < ActiveRecord::Base; delegate_belongs_to :contact, :firstname; end
8
+ # class Contact < ActiveRecord::Base; end
9
+ # u = User.first
10
+ # u.changed? # => false
11
+ # u.firstname = 'Bobby'
12
+ # u.changed? # => true
13
+ #
14
+ # Right now the second call to changed? would return false
15
+ #
16
+ # Todo - add has_one support. fairly straightforward addition
17
+ ##
18
+ module DelegateBelongsTo
19
+
20
+ module ClassMethods
21
+
22
+ @@default_rejected_delegate_columns = ['created_at','created_on','updated_at','updated_on','lock_version','type','id','position','parent_id','lft','rgt']
23
+ mattr_accessor :default_rejected_delegate_columns
24
+
25
+ ##
26
+ # Creates methods for accessing and setting attributes on an association. Uses same
27
+ # default list of attributes as delegates_to_association.
28
+ # @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.
29
+ # delegate_belongs_to :contact
30
+ # delegate_belongs_to :contact, [:defaults] ## same as above, and useless
31
+ # delegate_belongs_to :contact, [:defaults, :address, :fullname], :class_name => 'VCard'
32
+ ##
33
+ def delegate_belongs_to(association, *attrs)
34
+ opts = attrs.extract_options!
35
+ initialize_association :belongs_to, association, opts
36
+ attrs = get_association_column_names(association) if attrs.empty?
37
+ attrs.concat get_association_column_names(association) if attrs.delete :defaults
38
+ attrs.each do |attr|
39
+ class_def attr do |*args|
40
+ if args.empty?
41
+ send(:delegator_for, association).send(attr)
42
+ else
43
+ send(:delegator_for, association).send(attr, *args)
44
+ end
45
+ end
46
+ class_def "#{attr}=" do |val|
47
+ send(:delegator_for, association).send("#{attr}=", val)
48
+ end
49
+ end
50
+ end
51
+
52
+ protected
53
+
54
+ def get_association_column_names(association, without_default_rejected_delegate_columns=true)
55
+ begin
56
+ association_klass = reflect_on_association(association).klass
57
+ methods = association_klass.column_names
58
+ methods.reject!{|x|default_rejected_delegate_columns.include?(x.to_s)} if without_default_rejected_delegate_columns
59
+ return methods
60
+ rescue
61
+ return []
62
+ end
63
+ end
64
+
65
+ ##
66
+ # initialize_association :belongs_to, :contact
67
+ def initialize_association(type, association, opts={})
68
+ raise 'Illegal or unimplemented association type.' unless [:belongs_to].include?(type.to_s.to_sym)
69
+ send type, association, opts if reflect_on_association(association).nil?
70
+ end
71
+
72
+ private
73
+
74
+ def class_def(name, method=nil, &blk)
75
+ class_eval { method.nil? ? define_method(name, &blk) : define_method(name, method) }
76
+ end
77
+
78
+ end
79
+
80
+ module InstanceMethods
81
+ protected
82
+ def delegator_for(association)
83
+ send("#{association}=", self.class.reflect_on_association(association).klass.new) if send(association).nil?
84
+ send(association)
85
+ end
86
+ end
87
+
88
+ def self.included(receiver)
89
+ receiver.extend ClassMethods
90
+ receiver.send :include, InstanceMethods
91
+ end
92
+
93
+ end
94
+
95
+ ActiveRecord::Base.send :include, DelegateBelongsTo
@@ -0,0 +1,209 @@
1
+
2
+ module EnumerableConstant
3
+
4
+ # default (overridable) value for any
5
+ def self.any_value
6
+ -1
7
+ end
8
+
9
+ def self.any
10
+ [any_value, '[any]']
11
+ end
12
+
13
+ class Tupple
14
+
15
+ include Comparable
16
+
17
+ attr_accessor :name, :value, :display_name
18
+
19
+ def initialize(name, value=nil, display_name=nil)
20
+ @name = name
21
+ @value = value
22
+ @display_name = display_name
23
+ end
24
+
25
+ def <=> other
26
+ self.display_name <=> other.display_name
27
+ end
28
+
29
+ def title_translated
30
+ t("order_status_#{self.name.downcase}")
31
+ end
32
+
33
+ def title
34
+ if @display_name
35
+ self.display_name
36
+ else
37
+ self.name.titleize.strip
38
+ end
39
+ end
40
+
41
+ def id
42
+ self.value
43
+ end
44
+
45
+ end
46
+
47
+ class Base
48
+
49
+ include Comparable
50
+
51
+ def <=>
52
+
53
+ end
54
+
55
+ def self.class_var_prefix
56
+ self.name.gsub!('::', '_').underscore
57
+ end
58
+
59
+ def self.base=(value)
60
+ class_eval("@@#{self.class_var_prefix}_base = value")
61
+ end
62
+
63
+ def self.base(value)
64
+ class_eval("@@#{self.class_var_prefix}_base = value")
65
+ end
66
+
67
+ def self.constant(name, value=nil, display_name=nil)
68
+ # puts "name: #{name}"
69
+ # puts "value: #{value}"
70
+ # puts "display_name: #{display_name}"
71
+ class_eval("@@#{self.class_var_prefix}_constants ||= []")
72
+ class_eval("@@#{self.class_var_prefix}_base ||= 0 ")
73
+ if value == nil and class_eval("@@#{self.class_var_prefix}_constants.size == 0")
74
+ value = class_eval("@@#{self.class_var_prefix}_base")
75
+ end
76
+ if value == nil and class_eval("@@#{self.class_var_prefix}_constants.size > 0")
77
+ begin
78
+ value = class_eval("@@#{self.class_var_prefix}_constants.last.value.succ")
79
+ rescue
80
+ value = nil
81
+ end
82
+ end
83
+ # puts "eval : " + "#{name.to_s.underscore.upcase} = #{value}"
84
+ class_eval "#{name.to_s.underscore.upcase} = #{value}"
85
+ # class_eval "A_STUFF = 25"
86
+ # puts "display_name: #{display_name}" if display_name
87
+ class_eval("@@#{self.class_var_prefix}_constants << EnumerableConstant::Tupple.new(name, value, display_name)")
88
+ end
89
+
90
+ # TODO: add method_missing for class methods so you can do stuff like:
91
+ # :my_constant = 2
92
+ # :my_constant 2
93
+ # MY_CONSTANT = 2
94
+ # MY_CONSTANT 2
95
+ # def self.method_missing(symbol, *params)
96
+ #
97
+ # end
98
+ def self.from_value value
99
+ self.constants.each do |constant|
100
+ return constant.title if constant.value == value
101
+ end
102
+ nil
103
+ end
104
+
105
+ def self.constants
106
+ class_eval("@@#{self.class_var_prefix}_constants")
107
+ end
108
+
109
+ def self.constant_names
110
+ result = []
111
+ class_eval("@@#{self.class_var_prefix}_constants").map do |tupple|
112
+ result << tupple.name
113
+ end
114
+ result
115
+ end
116
+
117
+ def self.names
118
+ result = []
119
+ class_eval("@@#{self.class_var_prefix}_constants").map do |tupple|
120
+ result << tupple.title
121
+ end
122
+ result
123
+ end
124
+
125
+ def self.values
126
+ result = []
127
+ class_eval("@@#{self.class_var_prefix}_constants").map do |tupple|
128
+ result << tupple.value
129
+ end
130
+ result
131
+ end
132
+
133
+ end
134
+
135
+ module VERSION
136
+ MAJOR = 1
137
+ MINOR = 0
138
+ TINY = 0
139
+ STRING = [MAJOR, MINOR, TINY].join('.')
140
+ end
141
+
142
+ end
143
+
144
+ class ActiveRecord::Base
145
+
146
+ def self.enumerable_constant(attribute_name, options={})
147
+ raise ArgumentError, "you must specify a list of constants" unless options[:constants]
148
+ set_name = attribute_name.to_s.camelize
149
+ set_class = "#{self.name}::#{set_name}"
150
+
151
+ constant_definitions = ""
152
+ options[:constants].each do |constant|
153
+ if constant.is_a? Hash
154
+ # puts "hash"
155
+ constant_name = constant.to_a[0][0]
156
+ display_name = constant.to_a[0][1]
157
+ # puts "constant name: #{constant_name}"
158
+ # puts "display name: #{display_name}"
159
+ # puts "c name: #{constant_name.to_s.underscore.upcase}"
160
+ constant_definitions << "constant '#{constant_name.to_s.underscore.upcase}', nil, '#{display_name}'\n"
161
+ else
162
+ # puts "constant '#{constant.to_s.underscore.upcase}'\n"
163
+ constant_definitions << "constant '#{constant.to_s.underscore.upcase}'\n"
164
+ end
165
+ end
166
+
167
+ # allow for :connector and :skip_last_comma as used in Array#to_sentence
168
+ if options[:connector]
169
+ connector = options[:connector]
170
+ else
171
+ connector = 'or'
172
+ end
173
+ unless options[:skip_last_comma].kind_of? NilClass
174
+ skip_last_comma = options[:skip_last_comma]
175
+ else
176
+ skip_last_comma = true
177
+ end
178
+
179
+ if options[:base]
180
+ use_base = options[:base]
181
+ else
182
+ use_base = 1
183
+ end
184
+
185
+ # keep glue_text for back compat
186
+ if options[:glue_text]
187
+ connector = options[:glue_text].strip
188
+ end
189
+
190
+ class_eval <<-EOF
191
+ class #{set_name} < EnumerableConstant::Base
192
+ base #{use_base}
193
+ #{constant_definitions}
194
+ end
195
+ EOF
196
+
197
+ should_be_in_text = set_class.constantize.names.to_sentence :words_connector => connector, :last_word_connector => skip_last_comma
198
+
199
+ unless options[:no_validation]
200
+ class_eval <<-EOF
201
+ validates :#{attribute_name.to_s}, :presence => {
202
+ :in => #{set_name}::values,
203
+ :message => "should be #{should_be_in_text}"
204
+ }
205
+ EOF
206
+ end
207
+ end
208
+
209
+ end
@@ -0,0 +1,13 @@
1
+ module ActiveRecord::Persistence
2
+
3
+ # Update attributes of a record in the database without callbacks, validations etc.
4
+ def update_attributes_without_callbacks(attributes)
5
+ self.class.update_all(attributes, { :id => id })
6
+ end
7
+
8
+ # Update a single attribute in the database
9
+ def update_attribute_without_callbacks(name, value)
10
+ update_attributes_without_callbacks(name => value)
11
+ end
12
+
13
+ end
@@ -0,0 +1,14 @@
1
+ # RAILS3 TODO (likely not needed - it was commented out before rails3 branch)
2
+ # module SpreeCore::Ext::Array
3
+ # def to_hash_keys(&block)
4
+ # Hash[*self.collect { |v|
5
+ # [v, block.call(v)]
6
+ # }.flatten]
7
+ # end
8
+ #
9
+ # def to_hash_values(&block)
10
+ # Hash[*self.collect { |v|
11
+ # [block.call(v), v]
12
+ # }.flatten]
13
+ # end
14
+ # end
@@ -0,0 +1,10 @@
1
+ module SpreeCore::Ext::String
2
+ def is_integer?
3
+ begin
4
+ Integer(self.to_s)
5
+ return true
6
+ rescue ArgumentError
7
+ return false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,117 @@
1
+ # This is a modified version of the original find_by_param plugin by Michael Bumann. Simplified to use Rails 2.2
2
+ # functionality and tossed out some features not worth supporting.
3
+
4
+ # ++
5
+ # Copyright (c) 2007 [Michael Bumann - Railslove.com]
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining
8
+ # a copy of this software and associated documentation files (the
9
+ # "Software"), to deal in the Software without restriction, including
10
+ # without limitation the rights to use, copy, modify, merge, publish,
11
+ # distribute, sublicense, and/or sell copies of the Software, and to
12
+ # permit persons to whom the Software is furnished to do so, subject to
13
+ # the following conditions:
14
+ #
15
+ # The above copyright notice and this permission notice shall be
16
+ # included in all copies or substantial portions of the Software.
17
+ #
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+ # --
26
+
27
+ begin
28
+ require "active_support/multibyte"
29
+ rescue LoadError
30
+ require "rubygems"
31
+ require "active_support/multibyte"
32
+ end
33
+ module Railslove
34
+ module Plugins
35
+ module FindByParam
36
+
37
+ def self.included(base)
38
+ base.extend(ClassMethods)
39
+ end
40
+
41
+ module ClassMethods
42
+
43
+ def make_permalink(options={})
44
+ options[:field] ||= "permalink"
45
+
46
+ if self.column_names.include?(options[:field].to_s)
47
+ options[:param] = options[:field]
48
+ before_validation(:on => :create){ save_permalink }
49
+ end
50
+
51
+ self.permalink_options = options
52
+ extend Railslove::Plugins::FindByParam::SingletonMethods
53
+ include Railslove::Plugins::FindByParam::InstanceMethods
54
+ rescue
55
+ # Database is not available (not a problem if we're running rake db:create or rake db:bootstrap)
56
+ end
57
+ end
58
+
59
+ module SingletonMethods
60
+
61
+ def find_by_param(value,args={})
62
+ if permalink_options[:prepend_id]
63
+ param = "id"
64
+ value = value.to_i
65
+ else
66
+ param = permalink_options[:field]
67
+ end
68
+ self.send("find_by_#{param}".to_sym, value, args)
69
+ end
70
+
71
+ def find_by_param!(value, args={})
72
+ param = permalink_options[:field]
73
+ obj = find_by_param(value, args)
74
+ raise ::ActiveRecord::RecordNotFound unless obj
75
+ obj
76
+ end
77
+ end
78
+
79
+ module InstanceMethods
80
+
81
+ protected
82
+ def save_permalink
83
+ return unless self.class.column_names.include?(permalink_options[:field].to_s)
84
+ return if !changed?
85
+
86
+ base_value = to_param
87
+ permalink_value = base_value
88
+ query = self.class.send("where", "#{permalink_options[:field]} = ?", permalink_value)
89
+ counter = 0
90
+ unless query.limit(1).empty?
91
+ permalink_value = "#{base_value}-#{counter += 1}"
92
+ query = self.class.send("where", "#{permalink_options[:field]} = ?", permalink_value)
93
+ end
94
+ write_attribute(permalink_options[:field], permalink_value)
95
+ true
96
+
97
+ end
98
+ end
99
+
100
+ end
101
+ end
102
+ end
103
+
104
+ class ActiveRecord::Base
105
+ class_inheritable_accessor :permalink_options
106
+ self.permalink_options = {:param => :id}
107
+
108
+ #default finders these are overwritten if you use make_permalink in your model
109
+ def self.find_by_param(value,args={})
110
+ find_by_id(value,args)
111
+ end
112
+ def self.find_by_param!(value,args={})
113
+ find(value,args)
114
+ end
115
+
116
+ end
117
+ ActiveRecord::Base.send(:include, Railslove::Plugins::FindByParam)