spree_frontend 2.4.10 → 3.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (378) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -0
  3. data/Gemfile +6 -0
  4. data/LICENSE +1 -1
  5. data/README.md +39 -10
  6. data/Rakefile +29 -0
  7. data/{vendor → app}/assets/images/flags/ad.png +0 -0
  8. data/{vendor → app}/assets/images/flags/ae.png +0 -0
  9. data/{vendor → app}/assets/images/flags/af.png +0 -0
  10. data/{vendor → app}/assets/images/flags/ag.png +0 -0
  11. data/{vendor → app}/assets/images/flags/ai.png +0 -0
  12. data/{vendor → app}/assets/images/flags/al.png +0 -0
  13. data/{vendor → app}/assets/images/flags/am.png +0 -0
  14. data/{vendor → app}/assets/images/flags/an.png +0 -0
  15. data/{vendor → app}/assets/images/flags/ao.png +0 -0
  16. data/{vendor → app}/assets/images/flags/ar.png +0 -0
  17. data/{vendor → app}/assets/images/flags/as.png +0 -0
  18. data/{vendor → app}/assets/images/flags/at.png +0 -0
  19. data/{vendor → app}/assets/images/flags/au.png +0 -0
  20. data/{vendor → app}/assets/images/flags/aw.png +0 -0
  21. data/{vendor → app}/assets/images/flags/ax.png +0 -0
  22. data/{vendor → app}/assets/images/flags/az.png +0 -0
  23. data/{vendor → app}/assets/images/flags/ba.png +0 -0
  24. data/{vendor → app}/assets/images/flags/bb.png +0 -0
  25. data/{vendor → app}/assets/images/flags/bd.png +0 -0
  26. data/{vendor → app}/assets/images/flags/be.png +0 -0
  27. data/{vendor → app}/assets/images/flags/bf.png +0 -0
  28. data/{vendor → app}/assets/images/flags/bg.png +0 -0
  29. data/{vendor → app}/assets/images/flags/bh.png +0 -0
  30. data/{vendor → app}/assets/images/flags/bi.png +0 -0
  31. data/{vendor → app}/assets/images/flags/bj.png +0 -0
  32. data/{vendor → app}/assets/images/flags/bm.png +0 -0
  33. data/{vendor → app}/assets/images/flags/bn.png +0 -0
  34. data/{vendor → app}/assets/images/flags/bo.png +0 -0
  35. data/{vendor → app}/assets/images/flags/br.png +0 -0
  36. data/{vendor → app}/assets/images/flags/bs.png +0 -0
  37. data/{vendor → app}/assets/images/flags/bt.png +0 -0
  38. data/{vendor → app}/assets/images/flags/bv.png +0 -0
  39. data/{vendor → app}/assets/images/flags/bw.png +0 -0
  40. data/{vendor → app}/assets/images/flags/by.png +0 -0
  41. data/{vendor → app}/assets/images/flags/bz.png +0 -0
  42. data/{vendor → app}/assets/images/flags/ca.png +0 -0
  43. data/{vendor → app}/assets/images/flags/catalonia.png +0 -0
  44. data/{vendor → app}/assets/images/flags/cc.png +0 -0
  45. data/{vendor → app}/assets/images/flags/cd.png +0 -0
  46. data/{vendor → app}/assets/images/flags/cf.png +0 -0
  47. data/{vendor → app}/assets/images/flags/cg.png +0 -0
  48. data/{vendor → app}/assets/images/flags/ch.png +0 -0
  49. data/{vendor → app}/assets/images/flags/ci.png +0 -0
  50. data/{vendor → app}/assets/images/flags/ck.png +0 -0
  51. data/{vendor → app}/assets/images/flags/cl.png +0 -0
  52. data/{vendor → app}/assets/images/flags/cm.png +0 -0
  53. data/{vendor → app}/assets/images/flags/cn.png +0 -0
  54. data/{vendor → app}/assets/images/flags/co.png +0 -0
  55. data/{vendor → app}/assets/images/flags/cr.png +0 -0
  56. data/{vendor → app}/assets/images/flags/cs.png +0 -0
  57. data/{vendor → app}/assets/images/flags/cu.png +0 -0
  58. data/{vendor → app}/assets/images/flags/cv.png +0 -0
  59. data/{vendor → app}/assets/images/flags/cx.png +0 -0
  60. data/{vendor → app}/assets/images/flags/cy.png +0 -0
  61. data/{vendor → app}/assets/images/flags/cz.png +0 -0
  62. data/{vendor → app}/assets/images/flags/de.png +0 -0
  63. data/{vendor → app}/assets/images/flags/dj.png +0 -0
  64. data/{vendor → app}/assets/images/flags/dk.png +0 -0
  65. data/{vendor → app}/assets/images/flags/dm.png +0 -0
  66. data/{vendor → app}/assets/images/flags/do.png +0 -0
  67. data/{vendor → app}/assets/images/flags/dz.png +0 -0
  68. data/{vendor → app}/assets/images/flags/ec.png +0 -0
  69. data/{vendor → app}/assets/images/flags/ee.png +0 -0
  70. data/{vendor → app}/assets/images/flags/eg.png +0 -0
  71. data/{vendor → app}/assets/images/flags/eh.png +0 -0
  72. data/{vendor → app}/assets/images/flags/england.png +0 -0
  73. data/{vendor → app}/assets/images/flags/er.png +0 -0
  74. data/{vendor → app}/assets/images/flags/es.png +0 -0
  75. data/{vendor → app}/assets/images/flags/et.png +0 -0
  76. data/{vendor → app}/assets/images/flags/europeanunion.png +0 -0
  77. data/{vendor → app}/assets/images/flags/fam.png +0 -0
  78. data/{vendor → app}/assets/images/flags/fi.png +0 -0
  79. data/{vendor → app}/assets/images/flags/fj.png +0 -0
  80. data/{vendor → app}/assets/images/flags/fk.png +0 -0
  81. data/{vendor → app}/assets/images/flags/fm.png +0 -0
  82. data/{vendor → app}/assets/images/flags/fo.png +0 -0
  83. data/{vendor → app}/assets/images/flags/fr.png +0 -0
  84. data/{vendor → app}/assets/images/flags/ga.png +0 -0
  85. data/{vendor → app}/assets/images/flags/gb.png +0 -0
  86. data/{vendor → app}/assets/images/flags/gd.png +0 -0
  87. data/{vendor → app}/assets/images/flags/ge.png +0 -0
  88. data/{vendor → app}/assets/images/flags/gf.png +0 -0
  89. data/{vendor → app}/assets/images/flags/gh.png +0 -0
  90. data/{vendor → app}/assets/images/flags/gi.png +0 -0
  91. data/{vendor → app}/assets/images/flags/gl.png +0 -0
  92. data/{vendor → app}/assets/images/flags/gm.png +0 -0
  93. data/{vendor → app}/assets/images/flags/gn.png +0 -0
  94. data/{vendor → app}/assets/images/flags/gp.png +0 -0
  95. data/{vendor → app}/assets/images/flags/gq.png +0 -0
  96. data/{vendor → app}/assets/images/flags/gr.png +0 -0
  97. data/{vendor → app}/assets/images/flags/gs.png +0 -0
  98. data/{vendor → app}/assets/images/flags/gt.png +0 -0
  99. data/{vendor → app}/assets/images/flags/gu.png +0 -0
  100. data/{vendor → app}/assets/images/flags/gw.png +0 -0
  101. data/{vendor → app}/assets/images/flags/gy.png +0 -0
  102. data/{vendor → app}/assets/images/flags/hk.png +0 -0
  103. data/{vendor → app}/assets/images/flags/hm.png +0 -0
  104. data/{vendor → app}/assets/images/flags/hn.png +0 -0
  105. data/{vendor → app}/assets/images/flags/hr.png +0 -0
  106. data/{vendor → app}/assets/images/flags/ht.png +0 -0
  107. data/{vendor → app}/assets/images/flags/hu.png +0 -0
  108. data/{vendor → app}/assets/images/flags/id.png +0 -0
  109. data/{vendor → app}/assets/images/flags/ie.png +0 -0
  110. data/{vendor → app}/assets/images/flags/il.png +0 -0
  111. data/{vendor → app}/assets/images/flags/in.png +0 -0
  112. data/{vendor → app}/assets/images/flags/io.png +0 -0
  113. data/{vendor → app}/assets/images/flags/iq.png +0 -0
  114. data/{vendor → app}/assets/images/flags/ir.png +0 -0
  115. data/{vendor → app}/assets/images/flags/is.png +0 -0
  116. data/{vendor → app}/assets/images/flags/it.png +0 -0
  117. data/{vendor → app}/assets/images/flags/ja.png +0 -0
  118. data/{vendor → app}/assets/images/flags/jm.png +0 -0
  119. data/{vendor → app}/assets/images/flags/jo.png +0 -0
  120. data/{vendor → app}/assets/images/flags/ke.png +0 -0
  121. data/{vendor → app}/assets/images/flags/kg.png +0 -0
  122. data/{vendor → app}/assets/images/flags/kh.png +0 -0
  123. data/{vendor → app}/assets/images/flags/ki.png +0 -0
  124. data/{vendor → app}/assets/images/flags/km.png +0 -0
  125. data/{vendor → app}/assets/images/flags/kn.png +0 -0
  126. data/{vendor → app}/assets/images/flags/kp.png +0 -0
  127. data/{vendor → app}/assets/images/flags/kr.png +0 -0
  128. data/{vendor → app}/assets/images/flags/kw.png +0 -0
  129. data/{vendor → app}/assets/images/flags/ky.png +0 -0
  130. data/{vendor → app}/assets/images/flags/kz.png +0 -0
  131. data/{vendor → app}/assets/images/flags/la.png +0 -0
  132. data/{vendor → app}/assets/images/flags/lb.png +0 -0
  133. data/{vendor → app}/assets/images/flags/lc.png +0 -0
  134. data/{vendor → app}/assets/images/flags/li.png +0 -0
  135. data/{vendor → app}/assets/images/flags/lk.png +0 -0
  136. data/{vendor → app}/assets/images/flags/lr.png +0 -0
  137. data/{vendor → app}/assets/images/flags/ls.png +0 -0
  138. data/{vendor → app}/assets/images/flags/lt.png +0 -0
  139. data/{vendor → app}/assets/images/flags/lu.png +0 -0
  140. data/{vendor → app}/assets/images/flags/lv.png +0 -0
  141. data/{vendor → app}/assets/images/flags/ly.png +0 -0
  142. data/{vendor → app}/assets/images/flags/ma.png +0 -0
  143. data/{vendor → app}/assets/images/flags/mc.png +0 -0
  144. data/{vendor → app}/assets/images/flags/md.png +0 -0
  145. data/{vendor → app}/assets/images/flags/me.png +0 -0
  146. data/{vendor → app}/assets/images/flags/mg.png +0 -0
  147. data/{vendor → app}/assets/images/flags/mh.png +0 -0
  148. data/{vendor → app}/assets/images/flags/mk.png +0 -0
  149. data/{vendor → app}/assets/images/flags/ml.png +0 -0
  150. data/{vendor → app}/assets/images/flags/mm.png +0 -0
  151. data/{vendor → app}/assets/images/flags/mn.png +0 -0
  152. data/{vendor → app}/assets/images/flags/mo.png +0 -0
  153. data/{vendor → app}/assets/images/flags/mp.png +0 -0
  154. data/{vendor → app}/assets/images/flags/mq.png +0 -0
  155. data/{vendor → app}/assets/images/flags/mr.png +0 -0
  156. data/{vendor → app}/assets/images/flags/ms.png +0 -0
  157. data/{vendor → app}/assets/images/flags/mt.png +0 -0
  158. data/{vendor → app}/assets/images/flags/mu.png +0 -0
  159. data/{vendor → app}/assets/images/flags/mv.png +0 -0
  160. data/{vendor → app}/assets/images/flags/mw.png +0 -0
  161. data/{vendor → app}/assets/images/flags/mx.png +0 -0
  162. data/{vendor → app}/assets/images/flags/my.png +0 -0
  163. data/{vendor → app}/assets/images/flags/mz.png +0 -0
  164. data/{vendor → app}/assets/images/flags/na.png +0 -0
  165. data/{vendor → app}/assets/images/flags/nc.png +0 -0
  166. data/{vendor → app}/assets/images/flags/ne.png +0 -0
  167. data/{vendor → app}/assets/images/flags/nf.png +0 -0
  168. data/{vendor → app}/assets/images/flags/ng.png +0 -0
  169. data/{vendor → app}/assets/images/flags/ni.png +0 -0
  170. data/{vendor → app}/assets/images/flags/nl.png +0 -0
  171. data/{vendor → app}/assets/images/flags/no.png +0 -0
  172. data/{vendor → app}/assets/images/flags/np.png +0 -0
  173. data/{vendor → app}/assets/images/flags/nr.png +0 -0
  174. data/{vendor → app}/assets/images/flags/nu.png +0 -0
  175. data/{vendor → app}/assets/images/flags/nz.png +0 -0
  176. data/{vendor → app}/assets/images/flags/om.png +0 -0
  177. data/{vendor → app}/assets/images/flags/pa.png +0 -0
  178. data/{vendor → app}/assets/images/flags/pe.png +0 -0
  179. data/{vendor → app}/assets/images/flags/pf.png +0 -0
  180. data/{vendor → app}/assets/images/flags/pg.png +0 -0
  181. data/{vendor → app}/assets/images/flags/ph.png +0 -0
  182. data/{vendor → app}/assets/images/flags/pk.png +0 -0
  183. data/{vendor → app}/assets/images/flags/pl.png +0 -0
  184. data/{vendor → app}/assets/images/flags/pm.png +0 -0
  185. data/{vendor → app}/assets/images/flags/pn.png +0 -0
  186. data/{vendor → app}/assets/images/flags/pr.png +0 -0
  187. data/{vendor → app}/assets/images/flags/ps.png +0 -0
  188. data/{vendor → app}/assets/images/flags/pt.png +0 -0
  189. data/{vendor → app}/assets/images/flags/pw.png +0 -0
  190. data/{vendor → app}/assets/images/flags/py.png +0 -0
  191. data/{vendor → app}/assets/images/flags/qa.png +0 -0
  192. data/{vendor → app}/assets/images/flags/re.png +0 -0
  193. data/{vendor → app}/assets/images/flags/ro.png +0 -0
  194. data/{vendor → app}/assets/images/flags/rs.png +0 -0
  195. data/{vendor → app}/assets/images/flags/ru.png +0 -0
  196. data/{vendor → app}/assets/images/flags/rw.png +0 -0
  197. data/{vendor → app}/assets/images/flags/sa.png +0 -0
  198. data/{vendor → app}/assets/images/flags/sb.png +0 -0
  199. data/{vendor → app}/assets/images/flags/sc.png +0 -0
  200. data/{vendor → app}/assets/images/flags/scotland.png +0 -0
  201. data/{vendor → app}/assets/images/flags/sd.png +0 -0
  202. data/{vendor → app}/assets/images/flags/se.png +0 -0
  203. data/{vendor → app}/assets/images/flags/sg.png +0 -0
  204. data/{vendor → app}/assets/images/flags/sh.png +0 -0
  205. data/{vendor → app}/assets/images/flags/si.png +0 -0
  206. data/{vendor → app}/assets/images/flags/sj.png +0 -0
  207. data/{vendor → app}/assets/images/flags/sk.png +0 -0
  208. data/{vendor → app}/assets/images/flags/sl.png +0 -0
  209. data/{vendor → app}/assets/images/flags/sm.png +0 -0
  210. data/{vendor → app}/assets/images/flags/sn.png +0 -0
  211. data/{vendor → app}/assets/images/flags/so.png +0 -0
  212. data/{vendor → app}/assets/images/flags/sr.png +0 -0
  213. data/{vendor → app}/assets/images/flags/st.png +0 -0
  214. data/{vendor → app}/assets/images/flags/sv.png +0 -0
  215. data/{vendor → app}/assets/images/flags/sy.png +0 -0
  216. data/{vendor → app}/assets/images/flags/sz.png +0 -0
  217. data/{vendor → app}/assets/images/flags/tc.png +0 -0
  218. data/{vendor → app}/assets/images/flags/td.png +0 -0
  219. data/{vendor → app}/assets/images/flags/tf.png +0 -0
  220. data/{vendor → app}/assets/images/flags/tg.png +0 -0
  221. data/{vendor → app}/assets/images/flags/th.png +0 -0
  222. data/{vendor → app}/assets/images/flags/tj.png +0 -0
  223. data/{vendor → app}/assets/images/flags/tk.png +0 -0
  224. data/{vendor → app}/assets/images/flags/tl.png +0 -0
  225. data/{vendor → app}/assets/images/flags/tm.png +0 -0
  226. data/{vendor → app}/assets/images/flags/tn.png +0 -0
  227. data/{vendor → app}/assets/images/flags/to.png +0 -0
  228. data/{vendor → app}/assets/images/flags/tr.png +0 -0
  229. data/{vendor → app}/assets/images/flags/tt.png +0 -0
  230. data/{vendor → app}/assets/images/flags/tv.png +0 -0
  231. data/{vendor → app}/assets/images/flags/tw.png +0 -0
  232. data/{vendor → app}/assets/images/flags/tz.png +0 -0
  233. data/{vendor → app}/assets/images/flags/ua.png +0 -0
  234. data/{vendor → app}/assets/images/flags/ug.png +0 -0
  235. data/{vendor → app}/assets/images/flags/um.png +0 -0
  236. data/{vendor → app}/assets/images/flags/us.png +0 -0
  237. data/{vendor → app}/assets/images/flags/uy.png +0 -0
  238. data/{vendor → app}/assets/images/flags/uz.png +0 -0
  239. data/{vendor → app}/assets/images/flags/va.png +0 -0
  240. data/{vendor → app}/assets/images/flags/vc.png +0 -0
  241. data/{vendor → app}/assets/images/flags/ve.png +0 -0
  242. data/{vendor → app}/assets/images/flags/vg.png +0 -0
  243. data/{vendor → app}/assets/images/flags/vi.png +0 -0
  244. data/{vendor → app}/assets/images/flags/vn.png +0 -0
  245. data/{vendor → app}/assets/images/flags/vu.png +0 -0
  246. data/{vendor → app}/assets/images/flags/wales.png +0 -0
  247. data/{vendor → app}/assets/images/flags/wf.png +0 -0
  248. data/{vendor → app}/assets/images/flags/ws.png +0 -0
  249. data/{vendor → app}/assets/images/flags/ye.png +0 -0
  250. data/{vendor → app}/assets/images/flags/yt.png +0 -0
  251. data/{vendor → app}/assets/images/flags/za.png +0 -0
  252. data/{vendor → app}/assets/images/flags/zm.png +0 -0
  253. data/{vendor → app}/assets/images/flags/zw.png +0 -0
  254. data/app/assets/images/logo/spree_50.png +0 -0
  255. data/app/assets/images/spree_header.jpg +0 -0
  256. data/app/assets/javascripts/spree/frontend.js +1 -1
  257. data/app/assets/javascripts/spree/frontend/checkout/payment.js.coffee +2 -2
  258. data/app/assets/stylesheets/spree/frontend.css +4 -4
  259. data/app/assets/stylesheets/spree/frontend/_variables.scss +4 -61
  260. data/app/assets/stylesheets/spree/frontend/frontend_bootstrap.css.scss +102 -0
  261. data/app/controllers/spree/checkout_controller.rb +31 -27
  262. data/app/controllers/spree/orders_controller.rb +20 -8
  263. data/app/controllers/spree/store_controller.rb +2 -3
  264. data/app/controllers/spree/taxons_controller.rb +2 -2
  265. data/app/helpers/spree/frontend_helper.rb +93 -0
  266. data/app/helpers/spree/orders_helper.rb +16 -0
  267. data/app/helpers/spree/store_helper.rb +10 -0
  268. data/app/helpers/spree/taxons_helper.rb +19 -0
  269. data/app/models/spree/frontend_configuration.rb +1 -1
  270. data/app/views/kaminari/twitter-bootstrap-3/_first_page.html.erb +13 -0
  271. data/app/views/kaminari/twitter-bootstrap-3/_gap.html.erb +8 -0
  272. data/app/views/kaminari/twitter-bootstrap-3/_last_page.html.erb +13 -0
  273. data/app/views/kaminari/twitter-bootstrap-3/_next_page.html.erb +13 -0
  274. data/app/views/kaminari/twitter-bootstrap-3/_page.html.erb +12 -0
  275. data/app/views/kaminari/twitter-bootstrap-3/_paginator.html.erb +24 -0
  276. data/app/views/kaminari/twitter-bootstrap-3/_prev_page.html.erb +13 -0
  277. data/app/views/spree/address/_form.html.erb +24 -24
  278. data/app/views/spree/checkout/_address.html.erb +33 -22
  279. data/app/views/spree/checkout/_confirm.html.erb +10 -9
  280. data/app/views/spree/checkout/_delivery.html.erb +24 -20
  281. data/app/views/spree/checkout/_payment.html.erb +17 -18
  282. data/app/views/spree/checkout/_summary.html.erb +2 -2
  283. data/app/views/spree/checkout/edit.html.erb +23 -14
  284. data/app/views/spree/checkout/payment/_gateway.html.erb +31 -28
  285. data/app/views/spree/layouts/spree_application.html.erb +6 -12
  286. data/app/views/spree/orders/_adjustments.html.erb +5 -0
  287. data/app/views/spree/orders/_form.html.erb +8 -8
  288. data/app/views/spree/orders/_line_item.html.erb +6 -6
  289. data/app/views/spree/orders/edit.html.erb +14 -16
  290. data/app/views/spree/orders/show.html.erb +9 -4
  291. data/app/views/spree/products/_cart_form.html.erb +15 -11
  292. data/app/views/spree/products/_promotions.html.erb +1 -1
  293. data/app/views/spree/products/_properties.html.erb +2 -2
  294. data/app/views/spree/products/_taxons.html.erb +4 -4
  295. data/app/views/spree/products/_thumbnails.html.erb +3 -3
  296. data/app/views/spree/products/index.html.erb +13 -9
  297. data/app/views/spree/products/show.html.erb +11 -9
  298. data/app/views/spree/shared/_error_messages.html.erb +12 -0
  299. data/app/views/spree/shared/_filters.html.erb +4 -4
  300. data/app/views/spree/shared/_footer.html.erb +10 -6
  301. data/app/views/spree/shared/_google_add_items.js.erb +11 -0
  302. data/app/views/spree/shared/_google_analytics.js.erb +13 -0
  303. data/app/views/spree/shared/_google_checkout.js.erb +10 -0
  304. data/app/views/spree/shared/_google_purchase.js.erb +13 -0
  305. data/app/views/spree/shared/_head.html.erb +1 -1
  306. data/app/views/spree/shared/_header.html.erb +17 -5
  307. data/app/views/spree/shared/_login.html.erb +19 -0
  308. data/app/views/spree/shared/_login_bar.html.erb +6 -0
  309. data/app/views/spree/shared/_main_nav_bar.html.erb +15 -11
  310. data/app/views/spree/shared/_nav_bar.html.erb +3 -2
  311. data/app/views/spree/shared/_order_details.html.erb +30 -31
  312. data/app/views/spree/shared/_products.html.erb +19 -15
  313. data/app/views/spree/shared/_search.html.erb +8 -4
  314. data/app/views/spree/shared/_sidebar.html.erb +1 -1
  315. data/app/views/spree/shared/_taxonomies.html.erb +1 -1
  316. data/app/views/spree/taxons/show.html.erb +1 -1
  317. data/config/initializers/spree.rb +0 -2
  318. data/lib/spree/frontend.rb +5 -4
  319. data/lib/spree/frontend/engine.rb +2 -2
  320. data/script/rails +9 -0
  321. data/spec/controllers/controller_extension_spec.rb +115 -0
  322. data/spec/controllers/controller_helpers_spec.rb +26 -0
  323. data/spec/controllers/spree/checkout_controller_spec.rb +424 -0
  324. data/spec/controllers/spree/checkout_controller_with_views_spec.rb +36 -0
  325. data/spec/controllers/spree/content_controller_spec.rb +12 -0
  326. data/spec/controllers/spree/current_order_tracking_spec.rb +44 -0
  327. data/spec/controllers/spree/home_controller_spec.rb +27 -0
  328. data/spec/controllers/spree/orders_controller_ability_spec.rb +104 -0
  329. data/spec/controllers/spree/orders_controller_spec.rb +134 -0
  330. data/spec/controllers/spree/orders_controller_transitions_spec.rb +31 -0
  331. data/spec/controllers/spree/products_controller_spec.rb +36 -0
  332. data/spec/controllers/spree/taxons_controller_spec.rb +12 -0
  333. data/spec/features/address_spec.rb +93 -0
  334. data/spec/features/automatic_promotion_adjustments_spec.rb +47 -0
  335. data/spec/features/caching/products_spec.rb +55 -0
  336. data/spec/features/caching/taxons_spec.rb +22 -0
  337. data/spec/features/cart_spec.rb +84 -0
  338. data/spec/features/checkout_spec.rb +515 -0
  339. data/spec/features/checkout_unshippable_spec.rb +34 -0
  340. data/spec/features/coupon_code_spec.rb +87 -0
  341. data/spec/features/currency_spec.rb +18 -0
  342. data/spec/features/free_shipping_promotions_spec.rb +59 -0
  343. data/spec/features/locale_spec.rb +60 -0
  344. data/spec/features/order_spec.rb +74 -0
  345. data/spec/features/page_promotions_spec.rb +36 -0
  346. data/spec/features/products_spec.rb +262 -0
  347. data/spec/features/taxons_spec.rb +147 -0
  348. data/spec/features/template_rendering_spec.rb +19 -0
  349. data/spec/fixtures/thinking-cat.jpg +0 -0
  350. data/spec/helpers/frontend_helper_spec.rb +41 -0
  351. data/spec/helpers/order_helper_spec.rb +12 -0
  352. data/spec/helpers/taxons_helper_spec.rb +17 -0
  353. data/spec/spec_helper.rb +115 -0
  354. data/spec/support/shared_contexts/checkout_setup.rb +9 -0
  355. data/spec/support/shared_contexts/custom_products.rb +25 -0
  356. data/spec/support/shared_contexts/product_prototypes.rb +30 -0
  357. data/spec/views/spree/checkout/_summary_spec.rb +11 -0
  358. data/spree_frontend.gemspec +30 -0
  359. metadata +392 -282
  360. data/app/assets/images/icons/add-to-cart.png +0 -0
  361. data/app/assets/images/icons/checkout.png +0 -0
  362. data/app/assets/images/icons/delete.png +0 -0
  363. data/app/assets/images/icons/update.png +0 -0
  364. data/app/assets/images/spinner.gif +0 -0
  365. data/app/assets/images/spree/frontend/cart.png +0 -0
  366. data/app/assets/images/spree/frontend/select_arrow.gif +0 -0
  367. data/app/assets/stylesheets/spree/frontend/screen.css.scss +0 -1321
  368. data/app/views/spree/shared/_google_analytics.html.erb +0 -40
  369. data/config/initializers/assets.rb +0 -1
  370. data/config/initializers/check_for_orphaned_preferences.rb +0 -9
  371. data/config/initializers/deprecation_checker.rb +0 -7
  372. data/config/initializers/rails_5868.rb +0 -8
  373. data/lib/spree/frontend/preference_rescue.rb +0 -25
  374. data/vendor/assets/images/datepicker/cal.gif +0 -0
  375. data/vendor/assets/images/jquery.formalize/button.png +0 -0
  376. data/vendor/assets/images/jquery.formalize/select_arrow.gif +0 -0
  377. data/vendor/assets/javascripts/jquery.formalize.min.js +0 -1
  378. data/vendor/assets/stylesheets/jquery.formalize.css.erb +0 -363
@@ -1,40 +0,0 @@
1
- <% if tracker = Spree::Tracker.current %>
2
- <script>
3
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
4
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
5
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
6
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
7
-
8
- <% if user_analytics_id = try_spree_current_user.try(:analytics_id) %>
9
- ga('create', { 'trackingId': '<%= tracker.analytics_id %>', 'cookieDomain': 'auto', 'userId': '<%= user_analytics_id %>' });
10
- <% else %>
11
- ga('create', '<%= tracker.analytics_id %>', 'auto');
12
- <% end %>
13
- ga('require', 'displayfeatures');
14
- ga('send', 'pageview');
15
-
16
- <% if @order && order_just_completed?(@order) %>
17
- <%# more info: https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce %>
18
- ga('require', 'ecommerce', 'ecommerce.js');
19
- ga('ecommerce:addTransaction', {
20
- 'id': '<%= j @order.number %>', // Transaction ID. Required.
21
- 'affiliation': '<%= current_store.name %>', // Affiliation or store name.
22
- 'revenue': '<%= @order.total %>', // Grand Total.
23
- 'shipping': '<%= @order.ship_total %>', // Shipping.
24
- 'tax': '<%= @order.tax_total %>', // Tax.
25
- 'currency': '<%= current_currency %>' // local currency code.
26
- });
27
- <% @order.line_items.each do |line_item| %>
28
- ga('ecommerce:addItem', {
29
- 'id': '<%= j @order.number %>', // Transaction ID. Required.
30
- 'name': '<%= j line_item.variant.product.name %>', // Product name. Required.
31
- 'sku': '<%= j (line_item.variant.sku || line_item.variant_id) %>', // SKU/code.
32
- 'category': '', // Category or variation.
33
- 'price': '<%= line_item.price %>', // Unit price.
34
- 'quantity': '<%= line_item.quantity %>' // Quantity.
35
- });
36
- <% end %>
37
- ga('ecommerce:send');
38
- <% end %>
39
- </script>
40
- <% end %>
@@ -1 +0,0 @@
1
- Rails.application.config.assets.precompile += %w( favicon.ico spree/frontend/cart.png )
@@ -1,9 +0,0 @@
1
- begin
2
- required_column_names = ["owner_id", "owner_type", "name"]
3
- if (Spree::Preference.column_names & required_column_names) == required_column_names
4
- ActiveRecord::Base.connection.execute("SELECT owner_id, owner_type, name, value FROM spree_preferences WHERE 'key' IS NULL").each do |pref|
5
- warn "[WARNING] Orphaned preference `#{pref[2]}` with value `#{pref[3]}` for #{pref[1]} with id of: #{pref[0]}, you should reset the preference value manually."
6
- end
7
- end
8
- rescue
9
- end
@@ -1,7 +0,0 @@
1
-
2
-
3
- # check for incorect product assets path in public directory
4
- if File.exist?(Rails.root.join("public/assets/products")) || File.exist?(Rails.root.join("public/assets/taxons"))
5
- puts %q{[DEPRECATION] Your applications public directory contains an assets/products and/or assets/taxons subdirectory.
6
- Run `rake spree:assets:relocate_images` to relocate the images.}
7
- end
@@ -1,8 +0,0 @@
1
- # Temporary fix for
2
- # NoMethodError: undefined method `gsub' for #<Arel::Nodes::Ascending:...>
3
- # See https://github.com/rails/rails/issues/5868
4
- class Arel::Nodes::Ordering
5
- def gsub(*a, &b)
6
- to_sql.gsub(*a, &b)
7
- end
8
- end
@@ -1,25 +0,0 @@
1
- module Spree
2
- class OldPrefs < ActiveRecord::Base
3
- self.table_name = "spree_preferences"
4
- belongs_to :owner, :polymorphic => true
5
- attr_accessor :owner_klass
6
- end
7
-
8
- class PreferenceRescue
9
- def self.try
10
- OldPrefs.where(:key => nil).each do |old_pref|
11
- next unless owner = (old_pref.owner rescue nil)
12
- unless old_pref.owner_type == "Spree::Activator" || old_pref.owner_type == "Spree::Configuration"
13
- begin
14
- old_pref.key = [owner.class.name, old_pref.name, owner.id].join('::').underscore
15
- old_pref.value_type = owner.preference_type(old_pref.name)
16
- puts "Migrating Preference: #{old_pref.key}"
17
- old_pref.save
18
- rescue NoMethodError => ex
19
- puts ex.message
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1 +0,0 @@
1
- var FORMALIZE=function(a,b,c){function d(a){var b=c.createElement("b");return b.innerHTML="<!--[if IE "+a+"]><br><![endif]-->",!!b.getElementsByTagName("br").length}var e="placeholder"in c.createElement("input"),f="autofocus"in c.createElement("input"),g=d(6),h=d(7);return{go:function(){var a,b=this.init;for(a in b)b.hasOwnProperty(a)&&b[a]()},init:{full_input_size:function(){h&&a("textarea, input.input_full").length&&a("textarea, input.input_full").wrap('<span class="input_full_wrap"></span>')},ie6_skin_inputs:function(){if(g&&a("input, select, textarea").length){var b=/button|submit|reset/,c=/date|datetime|datetime-local|email|month|number|password|range|search|tel|text|time|url|week/;a("input").each(function(){var d=a(this);this.getAttribute("type").match(b)?(d.addClass("ie6_button"),this.disabled&&d.addClass("ie6_button_disabled")):this.getAttribute("type").match(c)&&(d.addClass("ie6_input"),this.disabled&&d.addClass("ie6_input_disabled"))}),a("textarea, select").each(function(){this.disabled&&a(this).addClass("ie6_input_disabled")})}},autofocus:function(){f||!a(":input[autofocus]").length||a(":input[autofocus]:visible:first").focus()},placeholder:function(){!e&&!!a(":input[placeholder]").length&&(FORMALIZE.misc.add_placeholder(),a(":input[placeholder]").each(function(){if(this.type!=="password"){var b=a(this),c=b.attr("placeholder");b.focus(function(){b.val()===c&&b.val("").removeClass("placeholder_text")}).blur(function(){FORMALIZE.misc.add_placeholder()}),b.closest("form").submit(function(){b.val()===c&&b.val("").removeClass("placeholder_text")}).bind("reset",function(){setTimeout(FORMALIZE.misc.add_placeholder,50)})}}))}},misc:{add_placeholder:function(){e||!a(":input[placeholder]").length||a(":input[placeholder]").each(function(){if(this.type!=="password"){var b=a(this),c=b.attr("placeholder");(!b.val()||b.val()===c)&&b.val(c).addClass("placeholder_text")}})}}}}(jQuery,this,this.document);jQuery(document).ready(function(){FORMALIZE.go()})
@@ -1,363 +0,0 @@
1
- .input_tiny {
2
- width: 50px;
3
- }
4
-
5
- .input_small {
6
- width: 100px;
7
- }
8
-
9
- .input_medium {
10
- width: 150px;
11
- }
12
-
13
- .input_large {
14
- width: 200px;
15
- }
16
-
17
- .input_xlarge {
18
- width: 250px;
19
- }
20
-
21
- .input_xxlarge {
22
- width: 300px;
23
- }
24
-
25
- .input_full {
26
- width: 100%;
27
- }
28
-
29
- .input_full_wrap {
30
- display: block;
31
- padding-right: 8px;
32
- }
33
-
34
- input[type="search"]::-webkit-search-decoration {
35
- display: none;
36
- }
37
-
38
- button:focus,
39
- input:focus,
40
- select:focus,
41
- textarea:focus {
42
- -webkit-box-shadow: #0066ff 0 0 7px 0;
43
- -moz-box-shadow: #0066ff 0 0 7px 0;
44
- -o-box-shadow: #0066ff 0 0 7px 0;
45
- box-shadow: #0066ff 0 0 7px 0;
46
- z-index: 1;
47
- }
48
-
49
- input[type="file"]:focus, input[type="file"]:active,
50
- input[type="radio"]:focus,
51
- input[type="radio"]:active,
52
- input[type="checkbox"]:focus,
53
- input[type="checkbox"]:active {
54
- -webkit-box-shadow: none;
55
- -moz-box-shadow: none;
56
- -o-box-shadow: none;
57
- box-shadow: none;
58
- }
59
- button,
60
- input[type="reset"],
61
- input[type="submit"],
62
- input[type="button"],
63
- a.button {
64
- -webkit-appearance: none;
65
- -webkit-border-radius: 4px;
66
- -ms-border-radius: 4px;
67
- -o-border-radius: 4px;
68
- border-radius: 4px;
69
- -webkit-background-clip: padding;
70
- -moz-background-clip: padding;
71
- -ms-background-clip: padding-box;
72
- -o-background-clip: padding-box;
73
- background-clip: padding-box;
74
- background: #dddddd url(<%= asset_path("jquery.formalize/button.png") %>) repeat-x;
75
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
76
- background-image: -webkit-linear-gradient(#ffffff, #dddddd);
77
- background-image: -moz-linear-gradient(#ffffff, #dddddd);
78
- background-image: -o-linear-gradient(#ffffff, #dddddd);
79
- background-image: -ms-linear-gradient(#ffffff, #dddddd);
80
- background-image: linear-gradient(#ffffff, #dddddd);
81
- border: 1px solid;
82
- border-color: #dddddd #bbbbbb #999999;
83
- cursor: pointer;
84
- color: #333333;
85
- font: bold 12px/1.3 "Helvetica Neue", Arial, "Liberation Sans", FreeSans, sans-serif;
86
- outline: 0;
87
- overflow: visible;
88
- margin: 0;
89
- padding: 3px 10px;
90
- text-shadow: white 0 1px 1px;
91
- vertical-align: top;
92
- width: auto;
93
- *padding-top: 2px;
94
- *padding-bottom: 0;
95
- }
96
- button:hover,
97
- input[type="reset"]:hover,
98
- input[type="submit"]:hover,
99
- input[type="button"]:hover,
100
- a.button:hover {
101
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(1px, #eeeeee), color-stop(100%, #cccccc));
102
- background-image: -webkit-linear-gradient(#ffffff, #eeeeee 1px, #cccccc);
103
- background-image: -moz-linear-gradient(#ffffff, #eeeeee 1px, #cccccc);
104
- background-image: -o-linear-gradient(#ffffff, #eeeeee 1px, #cccccc);
105
- background-image: -ms-linear-gradient(#ffffff, #eeeeee 1px, #cccccc);
106
- background-image: linear-gradient(#ffffff, #eeeeee 1px, #cccccc);
107
- }
108
- button:active,
109
- input[type="reset"]:active,
110
- input[type="submit"]:active,
111
- input[type="button"]:active,
112
- a.button:active {
113
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(1px, #dddddd), color-stop(100%, #eeeeee));
114
- background-image: -webkit-linear-gradient(#ffffff, #dddddd 1px, #eeeeee);
115
- background-image: -moz-linear-gradient(#ffffff, #dddddd 1px, #eeeeee);
116
- background-image: -o-linear-gradient(#ffffff, #dddddd 1px, #eeeeee);
117
- background-image: -ms-linear-gradient(#ffffff, #dddddd 1px, #eeeeee);
118
- background-image: linear-gradient(#ffffff, #dddddd 1px, #eeeeee);
119
- -webkit-box-shadow: inset rgba(0, 0, 0, 0.25) 0 1px 2px 0;
120
- -moz-box-shadow: inset rgba(0, 0, 0, 0.25) 0 1px 2px 0;
121
- -o-box-shadow: inset rgba(0, 0, 0, 0.25) 0 1px 2px 0;
122
- box-shadow: inset rgba(0, 0, 0, 0.25) 0 1px 2px 0;
123
- border-color: #999999 #bbbbbb #dddddd;
124
- }
125
- a.button::-moz-focus-inner,
126
- button::-moz-focus-inner,
127
- input[type="reset"]::-moz-focus-inner,
128
- input[type="submit"]::-moz-focus-inner,
129
- input[type="button"]::-moz-focus-inner {
130
- border: 0;
131
- padding: 0;
132
- }
133
-
134
- button, a.button {
135
- *padding-top: 1px;
136
- *padding-bottom: 1px;
137
- }
138
-
139
- textarea,
140
- select,
141
- input[type="date"],
142
- input[type="datetime"],
143
- input[type="datetime-local"],
144
- input[type="email"],
145
- input[type="month"],
146
- input[type="number"],
147
- input[type="password"],
148
- input[type="search"],
149
- input[type="tel"],
150
- input[type="text"],
151
- input[type="time"],
152
- input[type="url"],
153
- input[type="week"] {
154
- -webkit-box-sizing: border-box;
155
- -moz-box-sizing: border-box;
156
- -ms-box-sizing: border-box;
157
- box-sizing: border-box;
158
- -webkit-background-clip: padding;
159
- -moz-background-clip: padding;
160
- -ms-background-clip: padding-box;
161
- -o-background-clip: padding-box;
162
- background-clip: padding-box;
163
- -webkit-border-radius: 0;
164
- -moz-border-radius: 0;
165
- -ms-border-radius: 0;
166
- -o-border-radius: 0;
167
- border-radius: 0;
168
- -webkit-appearance: none;
169
- background-color: white;
170
- border: 1px solid;
171
- border-color: #848484 #c1c1c1 #e1e1e1;
172
- color: black;
173
- outline: 0;
174
- margin: 0;
175
- padding: 2px 3px;
176
- text-align: left;
177
- font-size: 13px;
178
- font-family: Arial, "Liberation Sans", FreeSans, sans-serif;
179
- height: 1.8em;
180
- vertical-align: top;
181
- *padding-top: 2px;
182
- *padding-bottom: 1px;
183
- *height: auto;
184
- }
185
- textarea[disabled],
186
- select[disabled],
187
- input[type="date"][disabled],
188
- input[type="datetime"][disabled],
189
- input[type="datetime-local"][disabled],
190
- input[type="email"][disabled],
191
- input[type="month"][disabled],
192
- input[type="number"][disabled],
193
- input[type="password"][disabled],
194
- input[type="search"][disabled],
195
- input[type="tel"][disabled],
196
- input[type="text"][disabled],
197
- input[type="time"][disabled],
198
- input[type="url"][disabled],
199
- input[type="week"][disabled] {
200
- background-color: #eeeeee;
201
- }
202
- a.button[disabled],
203
- button[disabled],
204
- input[disabled],
205
- select[disabled],
206
- select[disabled] option,
207
- select[disabled] optgroup,
208
- textarea[disabled] {
209
- -webkit-box-shadow: none;
210
- -moz-box-shadow: none;
211
- -o-box-shadow: none;
212
- box-shadow: none;
213
- -moz-user-select: -moz-none;
214
- -webkit-user-select: none;
215
- -khtml-user-select: none;
216
- user-select: none;
217
- color: #888888;
218
- cursor: default;
219
- }
220
-
221
- input::-webkit-input-placeholder,
222
- textarea::-webkit-input-placeholder {
223
- color: #888888;
224
- }
225
-
226
- input:-moz-placeholder,
227
- textarea:-moz-placeholder {
228
- color: #888888;
229
- }
230
-
231
- input.placeholder_text,
232
- textarea.placeholder_text {
233
- color: #888888;
234
- }
235
-
236
- textarea,
237
- select[size],
238
- select[multiple] {
239
- height: auto;
240
- }
241
-
242
- select[size="0"],
243
- select[size="1"] {
244
- height: 1.8em;
245
- *height: auto;
246
- }
247
-
248
- @media (-webkit-min-device-pixel-ratio: 0) {
249
- select[size],
250
- select[multiple],
251
- select[multiple][size] {
252
- background-image: none;
253
- padding-right: 3px;
254
- }
255
-
256
- select,
257
- select[size="0"],
258
- select[size="1"] {
259
- background-image: url(<%= asset_path("jquery.formalize/select_arrow.gif") %>);
260
- background-repeat: no-repeat;
261
- background-position: right center;
262
- padding-right: 20px;
263
- }
264
-
265
- ::-webkit-validation-bubble-message {
266
- -webkit-box-shadow: none;
267
- box-shadow: none;
268
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #666666), color-stop(1, black));
269
- border: 1px solid;
270
- border-color: #747474 #5e5e5e #4f4f4f;
271
- color: white;
272
- font: 13px/17px "Lucida Grande", Arial, "Liberation Sans", FreeSans, sans-serif;
273
- overflow: hidden;
274
- padding: 15px 15px 17px;
275
- text-shadow: black 0 0 1px;
276
- height: 16px;
277
- }
278
-
279
- ::-webkit-validation-bubble-arrow,
280
- ::-webkit-validation-bubble-top-outer-arrow,
281
- ::-webkit-validation-bubble-top-inner-arrow {
282
- -webkit-box-shadow: none;
283
- box-shadow: none;
284
- background: #666666;
285
- border: 0;
286
- }
287
- }
288
- textarea {
289
- min-height: 40px;
290
- overflow: auto;
291
- resize: vertical;
292
- width: 100%;
293
- }
294
-
295
- optgroup {
296
- color: black;
297
- font-style: normal;
298
- font-weight: normal;
299
- font-family: Arial, "Liberation Sans", FreeSans, sans-serif;
300
- }
301
-
302
- input:invalid,
303
- button:invalid,
304
- select:invalid,
305
- textarea:invalid {
306
- -webkit-box-shadow: none;
307
- -moz-box-shadow: none;
308
- -o-box-shadow: none;
309
- box-shadow: none;
310
- }
311
- input::-moz-focus-inner,
312
- button::-moz-focus-inner,
313
- a.button::-moz-focus-inner,
314
- select::-moz-focus-inner,
315
- textarea::-moz-focus-inner {
316
- border: 0;
317
- padding: 0;
318
- }
319
-
320
- .ie6_button,
321
- * html button {
322
- background: #dddddd url(<%= asset_path("jquery.formalize/button.png") %>) repeat-x;
323
- border: 1px solid;
324
- border-color: #dddddd #bbbbbb #999999;
325
- cursor: pointer;
326
- color: #333333;
327
- font: bold 12px/1.2 Arial, sans-serif;
328
- padding: 2px 10px 0px;
329
- overflow: visible;
330
- width: auto;
331
- }
332
-
333
- * html button {
334
- padding-top: 1px;
335
- padding-bottom: 1px;
336
- }
337
-
338
- .ie6_input,
339
- * html textarea,
340
- * html select {
341
- background: white;
342
- border: 1px solid;
343
- border-color: #848484 #c1c1c1 #e1e1e1;
344
- color: black;
345
- padding: 2px 3px 1px;
346
- font-size: 13px;
347
- font-family: Arial, sans-serif;
348
- vertical-align: top;
349
- }
350
-
351
- * html select {
352
- margin-top: 1px;
353
- }
354
-
355
- .placeholder_text,
356
- .ie6_input_disabled,
357
- .ie6_button_disabled {
358
- color: #888888;
359
- }
360
-
361
- .ie6_input_disabled {
362
- background: #eeeeee;
363
- }