as_user 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (231) hide show
  1. data/CHANGELOG.rdoc +5 -0
  2. data/app/assets/images/bg.jpg +0 -0
  3. data/app/assets/images/favicon.ico +0 -0
  4. data/app/assets/images/sample/avatar1.jpg +0 -0
  5. data/app/assets/images/sample/no-avatar.jpg +0 -0
  6. data/app/assets/images/sprice.png +0 -0
  7. data/app/assets/javascripts/as_user/application.js +2 -0
  8. data/app/assets/javascripts/as_user/common.js.coffee +18 -0
  9. data/app/assets/stylesheets/as_user/application.css +1 -0
  10. data/app/assets/stylesheets/as_user/common.css +146 -0
  11. data/app/assets/stylesheets/as_user/user.css +9 -0
  12. data/app/controllers/as_user/abouts_controller.rb +1 -1
  13. data/app/controllers/as_user/sessions_controller.rb +6 -4
  14. data/app/controllers/as_user/users_controller.rb +2 -2
  15. data/app/helpers/as_user/shared_helper.rb +19 -0
  16. data/app/models/user.rb +10 -2
  17. data/app/views/as_user/abouts/index.html.erb +11 -10
  18. data/app/views/as_user/sessions/new.html.erb +14 -16
  19. data/app/views/as_user/shared/_logo_nav.html.erb +10 -0
  20. data/app/views/as_user/shared/_messages.html.erb +6 -0
  21. data/app/views/as_user/shared/_user_info.html.erb +20 -0
  22. data/app/views/as_user/users/_form.html.erb +22 -31
  23. data/app/views/as_user/users/edit.html.erb +12 -17
  24. data/app/views/as_user/users/edit_password.html.erb +13 -18
  25. data/app/views/as_user/users/index.html.erb +6 -5
  26. data/app/views/as_user/users/new.html.erb +3 -2
  27. data/app/views/as_user/users/show.html.erb +11 -13
  28. data/app/views/layouts/as_user/application.html.erb +29 -9
  29. data/db/migrate/20130103074619_add_index_to_name_and_add_nickname_to_user.rb +6 -0
  30. data/lib/as_user.rb +1 -0
  31. data/lib/as_user/auth.rb +2 -0
  32. data/lib/as_user/version.rb +1 -1
  33. data/test/dummy/app/controllers/welcome_controller.rb +4 -0
  34. data/test/dummy/app/helpers/welcome_helper.rb +2 -0
  35. data/test/dummy/app/views/welcome/index.html.erb +3 -0
  36. data/test/dummy/config/database.yml +6 -6
  37. data/test/dummy/config/routes.rb +2 -0
  38. data/test/dummy/db/schema.rb +3 -1
  39. data/test/dummy/log/development.log +28731 -0
  40. data/test/dummy/log/test.log +81693 -0
  41. data/test/dummy/tmp/cache/assets/BF8/720/sprockets%2F3632699335df8370b5f4812171741c65 +0 -0
  42. data/test/dummy/tmp/cache/assets/C06/530/sprockets%2F40d8408075409b9e76872d862668a905 +0 -0
  43. data/test/dummy/tmp/cache/assets/C3D/3B0/sprockets%2F99a6331b6663961389d262487c8b568e +0 -0
  44. data/test/dummy/tmp/cache/assets/C55/120/sprockets%2Fa2667b4608f6178b116060907888a0df +0 -0
  45. data/test/dummy/tmp/cache/assets/C91/750/sprockets%2F60b08bec994142643ef59d8628b60587 +0 -0
  46. data/test/dummy/tmp/cache/assets/CB7/640/sprockets%2F0c09ff6a079286a3a81491c4e8804f64 +0 -0
  47. data/test/dummy/tmp/cache/assets/CB8/9F0/sprockets%2F47780bb719a4f225db9902c8d799c202 +0 -0
  48. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  49. data/test/dummy/tmp/cache/assets/CE2/5D0/sprockets%2Fd108bd71cb5044de98e55c692471456a +0 -0
  50. data/test/dummy/tmp/cache/assets/D05/490/sprockets%2Ff634d38f2f41510bfe8011b895e20ea2 +0 -0
  51. data/test/dummy/tmp/cache/assets/D11/340/sprockets%2Fce196939a0aa2e60f298fc310e1835d8 +0 -0
  52. data/test/dummy/tmp/cache/assets/D13/AD0/sprockets%2F6843cab3694c2991ad2735d502e96dad +0 -0
  53. data/test/dummy/tmp/cache/assets/D2C/200/sprockets%2F98d16a35a276b8067e99cf1e189d4ff8 +0 -0
  54. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  55. data/test/dummy/tmp/cache/assets/D40/360/sprockets%2F0f75e1ecac07578f306376d51cdd670d +0 -0
  56. data/test/dummy/tmp/cache/assets/D46/E90/sprockets%2F78f3c7494cbb16e790ab766dbf0062d6 +0 -0
  57. data/test/dummy/tmp/cache/assets/D47/500/sprockets%2F4a1f6fd7f8190bf7435f107a357ef44d +0 -0
  58. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  59. data/test/dummy/tmp/cache/assets/D50/540/sprockets%2Fbd633ea78762b39c2d49f251c477e9cf +0 -0
  60. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  61. data/test/dummy/tmp/cache/assets/D68/900/sprockets%2F3d1f62f1ee1f43bf956c2d05e460ca55 +0 -0
  62. data/test/dummy/tmp/cache/assets/D6A/5F0/sprockets%2F5703d493bf2a0a92ffbf2bc5a958f610 +0 -0
  63. data/test/dummy/tmp/cache/assets/D86/1E0/sprockets%2Fbfd27a616d4d3ace395f6f0202a4a0a1 +0 -0
  64. data/test/dummy/tmp/cache/assets/DA1/EF0/sprockets%2Fabf0dae984ad8d576b833d13279b0c7d +0 -0
  65. data/test/dummy/tmp/cache/assets/DB3/3D0/sprockets%2Fad6ed3a7ea596f7c6150fc969de79d04 +0 -0
  66. data/test/dummy/tmp/cache/assets/DBD/220/sprockets%2F82f6c8716e6f8d8c9a026b8f9dddf27d +0 -0
  67. data/test/dummy/tmp/cache/assets/DD2/460/sprockets%2Ff1cb32f64b9c437fb7ac441df59d5f0f +0 -0
  68. data/test/dummy/tmp/cache/assets/DD2/D80/sprockets%2F7bb0ebb084069d6ee1dddb84f5764ce4 +0 -0
  69. data/test/dummy/tmp/cache/assets/DDB/900/sprockets%2Ff994c907838515f36e72eb7aadeaafbb +0 -0
  70. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  71. data/test/dummy/tmp/cache/assets/DF0/C30/sprockets%2Fef7b6c6bc2d2bad2baa23493b8c5254e +0 -0
  72. data/test/dummy/tmp/cache/assets/E04/270/sprockets%2Fcfb4cd4b48f1177ca5fac9b654880dde +0 -0
  73. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  74. data/test/dummy/tmp/cache/assets/E0F/750/sprockets%2Fcab728549bdbae9ed90aee9862d870df +0 -0
  75. data/test/dummy/tmp/cache/assets/E29/650/sprockets%2Fb9e33ea3e715bd8c8caacd64281dbed3 +0 -0
  76. data/test/dummy/tmp/cache/assets/EAD/B80/sprockets%2Ffad6ed1acde7ca1cde1b8dda62f3c117 +0 -0
  77. data/test/dummy/tmp/miniprofiler/mp_timers_1c2zyxlyn0xgrn9t5f00 +0 -0
  78. data/test/dummy/tmp/miniprofiler/mp_timers_1l5l2e4pffymqg5mlc54 +0 -0
  79. data/test/dummy/tmp/miniprofiler/mp_timers_1qhbqlo6agm4rhpg1zor +0 -0
  80. data/test/dummy/tmp/miniprofiler/mp_timers_1tphvq1qcfz12zvqw8b +0 -0
  81. data/test/dummy/tmp/miniprofiler/mp_timers_23omzbmxnxigv6xki6hd +0 -0
  82. data/test/dummy/tmp/miniprofiler/mp_timers_29g7kvzuacjavs1zu6v6 +0 -0
  83. data/test/dummy/tmp/miniprofiler/mp_timers_2e36srlmhxwnkacc3np7 +0 -0
  84. data/test/dummy/tmp/miniprofiler/mp_timers_2f5mo1lmy7wefm22pxem +0 -0
  85. data/test/dummy/tmp/miniprofiler/mp_timers_2fgsz24sjayxkm4j8484 +0 -0
  86. data/test/dummy/tmp/miniprofiler/mp_timers_2t9fns0kajmwlfrph95v +0 -0
  87. data/test/dummy/tmp/miniprofiler/mp_timers_33wzgepwxwptbh9azl0p +0 -0
  88. data/test/dummy/tmp/miniprofiler/mp_timers_3b020xxm1xrnhqm15vcd +0 -0
  89. data/test/dummy/tmp/miniprofiler/mp_timers_4mma4sqt4cs6x0iozjvo +0 -0
  90. data/test/dummy/tmp/miniprofiler/mp_timers_4q3wzqprhzwmx5c8180y +0 -0
  91. data/test/dummy/tmp/miniprofiler/mp_timers_4yozmcplavnqbxo4ayeu +0 -0
  92. data/test/dummy/tmp/miniprofiler/mp_timers_4zw2dh5vx2qgozw89ka5 +0 -0
  93. data/test/dummy/tmp/miniprofiler/mp_timers_588xc4wh0ua5sz6tnvlr +0 -0
  94. data/test/dummy/tmp/miniprofiler/mp_timers_5ab1ll3bz2wwvw5wren3 +0 -0
  95. data/test/dummy/tmp/miniprofiler/mp_timers_5ds0kkhejzanlj16nvyk +0 -0
  96. data/test/dummy/tmp/miniprofiler/mp_timers_5qwvbeng9tive7tr4698 +0 -0
  97. data/test/dummy/tmp/miniprofiler/mp_timers_5sy53g2xtnrt2vf8akgu +0 -0
  98. data/test/dummy/tmp/miniprofiler/mp_timers_5zt9w88xt231hrw8rrmh +0 -0
  99. data/test/dummy/tmp/miniprofiler/mp_timers_6077pddd683msito9vxj +0 -0
  100. data/test/dummy/tmp/miniprofiler/mp_timers_63pujaoidlqeycoauir9 +0 -0
  101. data/test/dummy/tmp/miniprofiler/mp_timers_6btcvmi2isyi2o7g6z5n +0 -0
  102. data/test/dummy/tmp/miniprofiler/mp_timers_6irkmogro49ylsy9865z +0 -0
  103. data/test/dummy/tmp/miniprofiler/mp_timers_6vecb77iuybw9g9w8212 +0 -0
  104. data/test/dummy/tmp/miniprofiler/mp_timers_6zr408zdxy8n26oq6ltz +0 -0
  105. data/test/dummy/tmp/miniprofiler/mp_timers_7kl4949wjvhm5j5dat43 +0 -0
  106. data/test/dummy/tmp/miniprofiler/mp_timers_7naupr69wvs94k8e3i2h +0 -0
  107. data/test/dummy/tmp/miniprofiler/mp_timers_7wcl2zuybrgzyn1jjptw +0 -0
  108. data/test/dummy/tmp/miniprofiler/mp_timers_85macg7ru49r6547aaox +0 -0
  109. data/test/dummy/tmp/miniprofiler/mp_timers_8dyczekhiiip0j923327 +0 -0
  110. data/test/dummy/tmp/miniprofiler/mp_timers_8erd57vma2ba3x64sedv +0 -0
  111. data/test/dummy/tmp/miniprofiler/mp_timers_8j13ywb7v235q7ta6t6b +0 -0
  112. data/test/dummy/tmp/miniprofiler/mp_timers_8k93nfab1qbn55zawdc4 +0 -0
  113. data/test/dummy/tmp/miniprofiler/mp_timers_8o1odw0ra7to7vr14eww +0 -0
  114. data/test/dummy/tmp/miniprofiler/mp_timers_92t2sjx5czz7i32dfymu +0 -0
  115. data/test/dummy/tmp/miniprofiler/mp_timers_96n7dfh3fsswwg2knako +0 -0
  116. data/test/dummy/tmp/miniprofiler/mp_timers_98htnmmc70x3wb22webs +0 -0
  117. data/test/dummy/tmp/miniprofiler/mp_timers_9a69asgt6vk026bjcaei +0 -0
  118. data/test/dummy/tmp/miniprofiler/mp_timers_9a8p0uyp724rmk493y0x +0 -0
  119. data/test/dummy/tmp/miniprofiler/mp_timers_9acovg9o4salwfbsgo03 +0 -0
  120. data/test/dummy/tmp/miniprofiler/mp_timers_9bdwrpyrq9csredoffpq +0 -0
  121. data/test/dummy/tmp/miniprofiler/mp_timers_aqgqmndr89rsmwbyb89g +0 -0
  122. data/test/dummy/tmp/miniprofiler/mp_timers_aztktkapg2vwlr84dgwr +0 -0
  123. data/test/dummy/tmp/miniprofiler/mp_timers_b1lsq3ejwp18z09k343z +0 -0
  124. data/test/dummy/tmp/miniprofiler/mp_timers_b1q9i5iwvsd4a37yfswh +0 -0
  125. data/test/dummy/tmp/miniprofiler/mp_timers_behd5czmlj3doc9k489z +0 -0
  126. data/test/dummy/tmp/miniprofiler/mp_timers_bnokf6numi68she7xzlv +0 -0
  127. data/test/dummy/tmp/miniprofiler/mp_timers_bs8k4dujbf5tsa7eg8fn +0 -0
  128. data/test/dummy/tmp/miniprofiler/mp_timers_c485xixrrs2y37p5chyu +0 -0
  129. data/test/dummy/tmp/miniprofiler/mp_timers_czunnc5ywlpxw3dart54 +0 -0
  130. data/test/dummy/tmp/miniprofiler/mp_timers_d3gbxeqgnm7ys36vsjit +0 -0
  131. data/test/dummy/tmp/miniprofiler/mp_timers_dre7ozlhijvuzs3rvpsk +0 -0
  132. data/test/dummy/tmp/miniprofiler/mp_timers_e3ryrt2c7rrh7u14v081 +0 -0
  133. data/test/dummy/tmp/miniprofiler/mp_timers_et4omdlx7smfer4ke747 +0 -0
  134. data/test/dummy/tmp/miniprofiler/mp_timers_eupd284bmi31y001uf9u +0 -0
  135. data/test/dummy/tmp/miniprofiler/mp_timers_f2w5rw12yyiryi0ps1ve +0 -0
  136. data/test/dummy/tmp/miniprofiler/mp_timers_f82dos2003zi3uno9fum +0 -0
  137. data/test/dummy/tmp/miniprofiler/mp_timers_fadvdu9bsnlgw0hbl84r +0 -0
  138. data/test/dummy/tmp/miniprofiler/mp_timers_fnk59ogsgsquh00c4z5t +0 -0
  139. data/test/dummy/tmp/miniprofiler/mp_timers_fqfi2574edz7k0pfnevv +0 -0
  140. data/test/dummy/tmp/miniprofiler/mp_timers_fsbvy2j1cakp60p8apzm +0 -0
  141. data/test/dummy/tmp/miniprofiler/mp_timers_fsl7pbahyiq56r4ttg57 +0 -0
  142. data/test/dummy/tmp/miniprofiler/mp_timers_ftkwenjzggfh3yrskd9q +0 -0
  143. data/test/dummy/tmp/miniprofiler/mp_timers_gp1k8308x5063bfn45l6 +0 -0
  144. data/test/dummy/tmp/miniprofiler/mp_timers_gtvc0hvd7a9wbatvg13j +0 -0
  145. data/test/dummy/tmp/miniprofiler/mp_timers_h0w9cq65szvhx4xiz7ed +0 -0
  146. data/test/dummy/tmp/miniprofiler/mp_timers_hmzy44pbmk2eqzupq5g4 +0 -0
  147. data/test/dummy/tmp/miniprofiler/mp_timers_hz6rzmu7meb5s0x2nyoi +0 -0
  148. data/test/dummy/tmp/miniprofiler/mp_timers_hzfis9ysqxexjepurvvt +0 -0
  149. data/test/dummy/tmp/miniprofiler/mp_timers_i8fu6fmvebq6vho32sop +0 -0
  150. data/test/dummy/tmp/miniprofiler/mp_timers_ibdnsy1gh6yvsfv6pnh9 +0 -0
  151. data/test/dummy/tmp/miniprofiler/mp_timers_ih60p2x7qq4niray7nwm +0 -0
  152. data/test/dummy/tmp/miniprofiler/mp_timers_iywkoiyjae8c0t1688q6 +0 -0
  153. data/test/dummy/tmp/miniprofiler/mp_timers_j10fuvmk0e2c7b6pza76 +0 -0
  154. data/test/dummy/tmp/miniprofiler/mp_timers_j9pmaj4nxra1sru3me8q +0 -0
  155. data/test/dummy/tmp/miniprofiler/mp_timers_jf2dbvy51xtf792arvaw +0 -0
  156. data/test/dummy/tmp/miniprofiler/mp_timers_jims8rzj5l8zegi0prqc +0 -0
  157. data/test/dummy/tmp/miniprofiler/mp_timers_jneom3ie68pamtf1jd81 +0 -0
  158. data/test/dummy/tmp/miniprofiler/mp_timers_jpgiija6w2e7qmt0d216 +0 -0
  159. data/test/dummy/tmp/miniprofiler/mp_timers_jq1h7097bwxv9kgwzmyl +0 -0
  160. data/test/dummy/tmp/miniprofiler/mp_timers_jv2061u03in5cabpmzxu +0 -0
  161. data/test/dummy/tmp/miniprofiler/mp_timers_jxcxpgr0fl6b8hlyanpk +0 -0
  162. data/test/dummy/tmp/miniprofiler/mp_timers_kdfdc4zp74kdwjoqzr29 +0 -0
  163. data/test/dummy/tmp/miniprofiler/mp_timers_ke217d7yfmuj3xg7pxqq +0 -0
  164. data/test/dummy/tmp/miniprofiler/mp_timers_kfme86v3n6nidmhd33ah +0 -0
  165. data/test/dummy/tmp/miniprofiler/mp_timers_kjzlbz8554jb9odolma3 +0 -0
  166. data/test/dummy/tmp/miniprofiler/mp_timers_knb8vkmc5qx2quq25euc +0 -0
  167. data/test/dummy/tmp/miniprofiler/mp_timers_ky1oabcm9teol0aua5g9 +0 -0
  168. data/test/dummy/tmp/miniprofiler/mp_timers_l3eq4e64nytejjypmudr +0 -0
  169. data/test/dummy/tmp/miniprofiler/mp_timers_llk202n3a24hfg2hjcyl +0 -0
  170. data/test/dummy/tmp/miniprofiler/mp_timers_m5gzo4otd66mbr06t4ca +0 -0
  171. data/test/dummy/tmp/miniprofiler/mp_timers_m8744n2s131zwt27wqb7 +0 -0
  172. data/test/dummy/tmp/miniprofiler/mp_timers_mlsw6seap3tms611jhfi +0 -0
  173. data/test/dummy/tmp/miniprofiler/mp_timers_mr0wcezrbgzf0xzuou3s +0 -0
  174. data/test/dummy/tmp/miniprofiler/mp_timers_my2govgym59u3gllp0la +0 -0
  175. data/test/dummy/tmp/miniprofiler/mp_timers_n160jyxovuuiun0ft98a +0 -0
  176. data/test/dummy/tmp/miniprofiler/mp_timers_ng4vohsu6clbru9njnqg +0 -0
  177. data/test/dummy/tmp/miniprofiler/mp_timers_nifnahpsjn3rtbpzhhnn +0 -0
  178. data/test/dummy/tmp/miniprofiler/mp_timers_no60luv2jm60pdf2iahl +0 -0
  179. data/test/dummy/tmp/miniprofiler/mp_timers_o2vmtesv6k6i6bsc4ffr +0 -0
  180. data/test/dummy/tmp/miniprofiler/mp_timers_o7g74xmvap7bxd6o0pjz +0 -0
  181. data/test/dummy/tmp/miniprofiler/mp_timers_oceh0hp0mezo49ep3w69 +0 -0
  182. data/test/dummy/tmp/miniprofiler/mp_timers_oitj6qdwcj2xcw1wunni +0 -0
  183. data/test/dummy/tmp/miniprofiler/mp_timers_omzqgw1xg1lxe9f0ee7a +0 -0
  184. data/test/dummy/tmp/miniprofiler/mp_timers_ovsimhwytnnf5c57ol74 +0 -0
  185. data/test/dummy/tmp/miniprofiler/mp_timers_oydwnktl4pqdq0ku0vw2 +0 -0
  186. data/test/dummy/tmp/miniprofiler/mp_timers_p79065pa32jsxtfxstky +0 -0
  187. data/test/dummy/tmp/miniprofiler/mp_timers_pg2xdx3ohasqe42th82p +0 -0
  188. data/test/dummy/tmp/miniprofiler/mp_timers_plezpe97pmouxebbjcbz +0 -0
  189. data/test/dummy/tmp/miniprofiler/mp_timers_qkm46nuj3gs8tvvcg1fu +0 -0
  190. data/test/dummy/tmp/miniprofiler/mp_timers_qm5ho44q62xaj0z8cy32 +0 -0
  191. data/test/dummy/tmp/miniprofiler/mp_timers_qoryc1xuqv2vmcd3bsce +0 -0
  192. data/test/dummy/tmp/miniprofiler/mp_timers_qwuyt3gnix340gc8seem +0 -0
  193. data/test/dummy/tmp/miniprofiler/mp_timers_r06lrv24eixlx86yi4to +0 -0
  194. data/test/dummy/tmp/miniprofiler/mp_timers_rgwt2z0btimdyl535ync +0 -0
  195. data/test/dummy/tmp/miniprofiler/mp_timers_rs3vhk2myiid552xxfq7 +0 -0
  196. data/test/dummy/tmp/miniprofiler/mp_timers_rya1mxxstfq2pf6erupo +0 -0
  197. data/test/dummy/tmp/miniprofiler/mp_timers_s4uzo3x5nueb75uqjbnx +0 -0
  198. data/test/dummy/tmp/miniprofiler/mp_timers_sefz2bok5fe4gcniaj00 +0 -0
  199. data/test/dummy/tmp/miniprofiler/mp_timers_sh1bt6grxf70sifozvhl +0 -0
  200. data/test/dummy/tmp/miniprofiler/mp_timers_suus7y0lliqi2j1d0u76 +0 -0
  201. data/test/dummy/tmp/miniprofiler/mp_timers_sw944ge2357os91hu9zq +0 -0
  202. data/test/dummy/tmp/miniprofiler/mp_timers_szp4plcke7qg5bhx1e5d +0 -0
  203. data/test/dummy/tmp/miniprofiler/mp_timers_tamxithzidixxwa0guu7 +0 -0
  204. data/test/dummy/tmp/miniprofiler/mp_timers_tycq7xapmrhz9dzip3e5 +0 -0
  205. data/test/dummy/tmp/miniprofiler/mp_timers_tzjhkdyqwvf3yk9kc9if +0 -0
  206. data/test/dummy/tmp/miniprofiler/mp_timers_ua0u1ra5g98099ujy1ix +0 -0
  207. data/test/dummy/tmp/miniprofiler/mp_timers_uo8sv23cthh83fr71ks9 +0 -0
  208. data/test/dummy/tmp/miniprofiler/mp_timers_v3nt5cbr8zn0b4lz5uf5 +0 -0
  209. data/test/dummy/tmp/miniprofiler/mp_timers_vobhlbxu66o2kpiodsef +0 -0
  210. data/test/dummy/tmp/miniprofiler/mp_timers_vti870y3jf6wbxilw2yi +0 -0
  211. data/test/dummy/tmp/miniprofiler/mp_timers_vttc2x2jj79h9qolg7hq +0 -0
  212. data/test/dummy/tmp/miniprofiler/mp_timers_w2ik6045ozx0mjqrin2v +0 -0
  213. data/test/dummy/tmp/miniprofiler/mp_timers_w8qefyximz42d4fel9ve +0 -0
  214. data/test/dummy/tmp/miniprofiler/mp_timers_weghs6uri0i7ojel43dj +0 -0
  215. data/test/dummy/tmp/miniprofiler/mp_timers_wf6kaeurq4xhzeltemby +0 -0
  216. data/test/dummy/tmp/miniprofiler/mp_timers_xe85uabgv4qkx5qg0gia +0 -0
  217. data/test/dummy/tmp/miniprofiler/mp_timers_xli491o7tms19p64za3p +0 -0
  218. data/test/dummy/tmp/miniprofiler/mp_timers_xv9wbllud237nkyhkszm +0 -0
  219. data/test/dummy/tmp/miniprofiler/mp_timers_yejkpsroeyj40d361ldr +0 -0
  220. data/test/dummy/tmp/miniprofiler/mp_timers_ziwnx7vxzhrfpp6k0xqz +0 -0
  221. data/test/dummy/tmp/miniprofiler/mp_timers_zvrk85of2rcx0p843pm1 +0 -0
  222. data/test/dummy/tmp/miniprofiler/mp_views_127.0.0.1 +0 -0
  223. data/test/dummy/tmp/miniprofiler/mp_views_192.168.1.134 +0 -0
  224. data/test/dummy/tmp/pids/server.pid +1 -1
  225. data/test/factories/users.rb +2 -2
  226. data/test/functional/as_user/abouts_controller_test.rb +1 -0
  227. data/test/functional/as_user/sessions_controller_test.rb +15 -6
  228. data/test/functional/as_user/users_controller_test.rb +8 -20
  229. data/test/integration/as_user/user_flows_test.rb +87 -16
  230. data/test/unit/as_user/user_test.rb +56 -33
  231. metadata +541 -92
@@ -1,3 +1,8 @@
1
+ == 0.0.4
2
+ * optimize html structre and css
3
+ * optimize navigator
4
+ * move all flash messages to shared/messages
5
+
1
6
  == 0.0.3
2
7
  * basic user signup,signin,signout,update feature
3
8
  * no remember me
Binary file
@@ -13,3 +13,5 @@
13
13
  //= require jquery
14
14
  //= require jquery_ujs
15
15
  //= require_tree .
16
+
17
+
@@ -0,0 +1,18 @@
1
+ po = (obj,property,func) ->
2
+ str = ""
3
+ for prop of obj
4
+ if typeof(obj[prop]) != 'function'
5
+ if property != false
6
+ str += prop + ":" + obj[prop] + "\n"
7
+ else if func != false
8
+ str += prop + ":" + typeof(obj[prop]) + "\n"
9
+ str
10
+
11
+ $(document).ready ->
12
+ $(".drop-down-menu s")
13
+ .bind "click", (event,ui) ->
14
+ $(".drop-down-menubox").show()
15
+
16
+ $(".message-box .close").bind "click", () ->
17
+ $(this).parent().remove()
18
+
@@ -11,3 +11,4 @@
11
11
  *= require_self
12
12
  *= require_tree .
13
13
  */
14
+
@@ -0,0 +1,146 @@
1
+ /*jojo reset*/
2
+ body, div, dl, dt, dd, ul, ol, li, p, h1, h2, h3, h4, h5, h6, pre, code, form, button, input, textarea, img, blockquote, th, td {margin:0;padding:0;vertical-align:baseline;}
3
+ body {height:100%;font:63% "Microsoft YaHei";background:#f7f7f7 url(/assets/bg.jpg) repeat;}
4
+ /* Tables still need 'cellspacing="0"' in the markup. */
5
+ table { border-collapse:collapse;border-spacing:0;}
6
+ h1, h2, h3, h4, h5, h6 {font-weight:normal;}
7
+ ul, ol {list-style:none;}
8
+ select, input{vertical-align:middle;}
9
+ img {border:0 none;vertical-align:top;max-width:100%;height:auto;}
10
+ button {cursor:pointer;}
11
+ i,em{font-style:normal;}
12
+ a{color:#333;text-decoration:none;}
13
+ a:hover {text-decoration:underline;}
14
+ a:focus {outline:none;}
15
+ abbr, article, aside, bb, datagrid, datalist, details, dialog, eventsource, figure, figcaption, footer, header, mark, menu, meter, nav, output, progress, section, time, hgroup {display: block;height: auto;margin:0;padding:0;}
16
+
17
+ /*global set*/
18
+ .clearfix:after {content:".";display:block;height:0;clear:both;visibility:hidden;}
19
+ .clearfix {display:inline-block;} /* Hides from IE-mac\*/
20
+ .clearfix {display:block;} /* End hide from IE-mac*/
21
+
22
+ /*===== header =====*/
23
+ #header{position:fixed;left:0;top:0;width:100%;height:40px;padding:5px 0;border-bottom:1px solid #e4e4e4;background:#f7f7f7 url(/assets/bg.jpg) repeat;}
24
+ #header:after{content:".";display:block;height:0;clear:both;visibility:hidden;}
25
+ .logo{position:relative;float:left;width:170px;height:40px;margin-left:3%;line-height:38px;background-color:#8b291c;}
26
+ .logo strong,.drop-down-menu s,.main-nav .other em{background:url(/assets/sprice.png) no-repeat;}
27
+ .logo strong{margin-left:26px;padding-left:36px;color:#fff;font-weight:normal;}
28
+ .logo strong a{color:#fff;font-size:1.2em;}
29
+ .logo strong a:hover{text-decoration:none;}
30
+ .drop-down-menu{position:absolute;right:0px;top:0;}
31
+ .drop-down-menu s{display:block;width:50px;height:40px;cursor:pointer;background-position:15px -29px;}
32
+ .drop-down-menubox{display:none;position:absolute;right:0;top:40px;width:170px;}
33
+ .dp-dw-mnlist{background-color:#c23d2b}
34
+ .dp-dw-mnlist li{border-top:1px solid #cc5b4c;}
35
+ .dp-dw-mnlist li a{display:block;height:30px;padding:0 10px;line-height:30px;color:#fff;font-size:14px;}
36
+ .dp-dw-mnlist li a:hover{text-decoration:none;background-color:#cd5140;}
37
+ .main-nav{float:left;margin:2px 0 0 3%;}
38
+ .main-nav a{padding:0 20px;color:#000;font-weight:700;}
39
+ .main-nav .addbtn{padding:2px 10px;font-size:1.6em;border-radius:3px;background-color:#e4e4e4;}
40
+ .main-nav .delete{font-size:1.6em;}
41
+ .main-nav .asked-by{font-size:1.6em;}
42
+ .main-nav .addbtn i{margin-right:6px;font-size:1.4em;}
43
+ .main-nav .other{display:inline-block;margin-top:7px;vertical-align:top;}
44
+ .main-nav .other em{padding:0 31px 0 11px;cursor:pointer;font-size:1.6em;font-weight:700;background-position:52px -65px;}
45
+ .main-nav .othercur em{padding:0 30px 0 10px;position:relative;border:1px solid #dcdcdc;border-bottom:none;background-color:#e7e7e7;background-position:51px -65px;}
46
+ .other-menu{display:none;margin-top:-2px;border:1px solid #dcdcdc;background-color:#e7e7e7;}
47
+ .ot-mn-list{padding-top:5px;}
48
+ .ot-mn-list li a{display:block;height:28px;padding:0 10px;line-height:28px;font-size:1.2em;font-weight:normal;}
49
+ .ot-mn-list li a:hover{text-decoration:none;background-color:#f1f1f1;}
50
+ .main-nav a:hover{text-decoration:none;}
51
+ .main-nav .line{margin:0 10px;color:#636363;font-size:1.6em;}
52
+ .qa-top-search{position:relative;float:right;width:180px;height:28px;margin:5px 30px 0;border:1px solid #ccc;border-radius:10px;background-color:#fff;}
53
+ .qa-top-search .input-txt{width:140px;padding:6px 8px;border:0 none;background:none;}
54
+ .qa-top-search .search{position:absolute;right:7px;top:5px;width:19px;height:19px;cursor:pointer;text-align:center;font-size:0;line-height:0;border:0 none;background:#fff url(/assets/sprice.png) no-repeat 0 -88px;}
55
+
56
+ .user-info{position:relative;float:right;margin:5px 3% 0 0;}
57
+ .user-info .user{display:inline-block;width:20px;height:20px;margin-right:10px;}
58
+ .user-info .hd{display:block;padding:5px;font-size:1.4em;cursor:pointer;}
59
+ .user-info .hdcur{position:relative;padding:4px;border:1px solid #dcdcdc;border-bottom:0;background-color:#e7e7e7;}
60
+ .user-menubox{display:none;margin-top:-1px;border:1px solid #dcdcdc;background-color:#e7e7e7;}
61
+ .us-mn-list{padding-top:5px;}
62
+ .us-mn-list li a{display:block;height:28px;padding:0 10px;line-height:28px;font-size:1.2em;font-weight:normal;}
63
+ .us-mn-list li a:hover{text-decoration:none;background-color:#f1f1f1;}
64
+ /*===== 消息提示 =====*/
65
+ .message-box{margin:0 3%;padding-top:10px;color:#fff;clear:both;}
66
+ .flash_error{padding:8px 10px;border-radius:5px;background-color:#eb7767;}
67
+ .flash_alert{padding:8px 10px;border-radius:5px;background-color:#eb7767;}
68
+ .flash_notice{padding:8px 10px;border-radius:5px;background-color:#7cb149;}
69
+ .message-box strong{font-size:1.2em;}
70
+ .message-box .close{float:right;color:#fff;padding:2px 5px;}
71
+ .message-box .close:hover{text-decoration:none;background-color:#8b291c;}
72
+ /*===== =====*/
73
+ #container{height:auto!important;height:630px;min-height:630px;margin-top:50px;}
74
+ #container:after{content:".";display:block;height:0;clear:both;visibility:hidden;}
75
+ .main-con{float:left;width:70%;margin:40px 4% 0 3%;}
76
+ .qa-list li{margin-bottom:40px;font-size:1.2em;}
77
+ .qa-list li:after{content:".";display:block;height:0;clear:both;visibility:hidden;}
78
+ .qa-list .avatar{float:left;width:38px;margin-right:10px;}
79
+ .qa-list .avatar img{display:block;width:38px;height:38px;}
80
+ .qa-list .info{overflow:hidden;}
81
+ .qa-list .name{margin-bottom:5px;color:#808080;}
82
+ .qa-list .name a{margin-right:15px;text-decoration:underline;color:#808080;}
83
+ .qa-list .time{display:inline;}
84
+ .qa-list .con{margin-bottom:10px;line-height:1.6;color:#000;font-size:1.2em;}
85
+ .qa-list .count span{margin-right:20px;color:#808080;}
86
+ .qa-list .count a{color:#8b291c;}
87
+ .pagination{padding:20px 0 40px;text-align:center;font-size:1.4em;}
88
+ .pagination span a{margin-right:5px;padding:4px 10px;text-align:center;}
89
+ .pagination .current{margin-right:5px;padding:4px 10px;border-radius:5px;background-color:#d8d8d8;}
90
+ .pagination .gap{margin-right:10px;padding-left:5px;}
91
+ .pagination span a:hover{text-decoration:none;border-radius:5px;background-color:#d8d8d8;}
92
+ /*===== =====*/
93
+ .qa-search-box{margin-bottom:30px;}
94
+ .qa-search-box .input-txt{width:70%;height:24px;margin-right:1%;padding:2px 5px;line-height:24px;border:1px solid #ccc;border-radius:5px;background-color:#fff;}
95
+ .qa-search-box .search{width:8%;min-width:60px;height:30px;cursor:pointer;text-align:center;color:#fff;font-size:1.6em;border:0 none;border-radius:5px;background-color:#8b291c;}
96
+ /*===== 详情页 =====*/
97
+ .qa-details-box .hd{margin-bottom:20px;padding-bottom:15px;text-align:center;font-size:1.8em;border-bottom:1px solid #a0a0a0;}
98
+ .qa-details-box .con{color:#333;font-size:1.4em;}
99
+ .qa-details-box .con p{margin-bottom:20px;line-height:1.6;text-indent:2em;}
100
+ .qa-details-box .count{margin-bottom:20px;text-align:right;color:#666;}
101
+ .qa-details-box .count .author a{color:#666;text-decoration:underline;}
102
+ .qa-details-box .count .line{padding:0 15px;color:#999;}
103
+ /*===== =====*/
104
+ .leave-message{padding:20px 3%;background-color:#eaeaea;}
105
+ .lv-ms-list li{margin-bottom:20px;font-size:1.2em;}
106
+ .lv-ms-list li:after{content:".";display:block;height:0;clear:both;visibility:hidden;}
107
+ .lv-ms-list .avatar{float:left;width:38px;margin-right:10px;}
108
+ .lv-ms-list .avatar img{display:block;width:38px;height:38px;}
109
+ .lv-ms-list .info{overflow:hidden;}
110
+ .lv-ms-list .name{margin-bottom:5px;color:#808080;}
111
+ .lv-ms-list .name a{margin-right:15px;text-decoration:underline;color:#808080;}
112
+ .lv-ms-list .time{display:inline;}
113
+ .lv-ms-list .con{margin-bottom:10px;line-height:1.6;color:#000;font-size:1.2em;}
114
+ .lv-ms-list .count{text-align:right;}
115
+ .lv-ms-list .count span{margin-left:20px;color:#808080;}
116
+ .lv-ms-list .count a{color:#8b291c;}
117
+
118
+ .comment-box .input-area{width:98%;height:110px;margin-bottom:10px;padding:1%;border:1px solid #ccc;background-color:#fff;}
119
+ .comment-box .btn{text-align:right;}
120
+ .comment-box .submit{width:70px;height:26px;cursor:pointer;text-align:center;color:#fff;font-size:1.6em;border:0 none;background-color:#8b291c;}
121
+ /*===== 登录页 =====*/
122
+ .qa-login-box{position:absolute;left:50%;top:50%;width:300px;margin:0 0 0 -190px;padding:30px 40px;background-color:#d8d8d8;}
123
+ .qa-login-box .item{margin-bottom:20px;font-size:1.4em;}
124
+ .qa-login-box .item:after{content:".";display:block;height:0;clear:both;visibility:hidden;}
125
+ .qa-login-box .item .field{float:left;width:58px;margin-right:10px;line-height:28px;text-align:right;}
126
+ .qa-login-box .item .con{float:left;}
127
+ .qa-login-box .input-txt{width:220px;height:24px;padding:2px;line-height:24px;border:1px solid #ccc;background-color:#fff;}
128
+ .qa-login-box .btn{padding-top:10px;text-align:center;}
129
+ .qa-login-box .submit{width:90px;height:26px;cursor:pointer;text-align:center;color:#fff;font-size:1.6em;border:0 none;background-color:#8b291c;}
130
+ /*===== 提问页 =====*/
131
+ .qa-quest-box .input-area{width:100%;height:200px;}
132
+ .qa-quest-box .btn{text-align:right;}
133
+ .qa-quest-box .submit{width:100px;height:26px;margin-top:10px;cursor:pointer;text-align:center;color:#fff;font-size:1.6em;border:0 none;background-color:#8b291c;}
134
+ /*===== sidebar =====*/
135
+ #sidebar{float:left;width:20%;margin:60px 3% 0 0;font-size:1.2em;}
136
+ .ask-box .hd{margin-bottom:5px;}
137
+ .ask-list li{height:22px;line-height:22px;overflow:hidden;}
138
+ .ask-list li i{padding-right:5px;}
139
+ .ask-list li a:hover{color:#8b291c;}
140
+ .x-line{height:1px;margin:15px 0;background-color:#d8d8d8;}
141
+ .hot-tag-box .hd{margin-bottom:5px;}
142
+ .ht-tg-list li a{padding:2px 5px;color:#222;}
143
+ .ht-tg-list li a:hover{text-decoration:none;border-radius:3px;background-color:#d8d8d8;}
144
+ .ht-tg-list li span{margin-left:10px;font-size:1.8em;color:#999;}
145
+ /*===== footer =====*/
146
+ #footer{height:40px;margin-top:20px;padding-left:26px;line-height:40px;font-size:1.2em;border-top:1px solid #909090;}
@@ -0,0 +1,9 @@
1
+ .huge_nav_button {text-align:center;}
2
+ .huge_nav_button a{position:relative;top:138px;border:#D5DBD3 6px solid;font-size:36px;text-decoration:none;border-radius:7px;background-color: #D5DBD3; }
3
+
4
+ .intro_content {position:relative;top:238px;font-size:12px;text-decoration:none;border-radius:2px;}
5
+ .intro_content a{text-decoration:none;border:#ddd 2px solid;font-size:10px;font-weight:normal;font-style:italic;border-radius:6px;}
6
+
7
+ .main-nav a{font-size:1.6em;}
8
+
9
+ .user-info .line{margin:0 10px;color:#636363;font-size:1.6em;}
@@ -5,7 +5,7 @@ module AsUser
5
5
  # GET /users
6
6
  # GET /users.json
7
7
  def index
8
-
8
+ flash[:notice] = "Welcome"
9
9
  end
10
10
  end
11
11
  end
@@ -9,19 +9,21 @@ module AsUser
9
9
  end
10
10
 
11
11
  def create
12
- user = User.find_by_email params[:session][:email].downcase
12
+ user = User.find_by_name(params[:session][:name]) || User.find_by_email(params[:session][:email].to_s.downcase)
13
13
  if user && user.authenticate(params[:session][:password])
14
14
  sign_in user
15
- redirect_back_or user
15
+ redirect_back_or main_app.root_path
16
16
  else
17
- flash.now[:error] = "Invalid email/password combination"
17
+ flash.now[:error] = "Invalid name(or email)/password combination"
18
18
  render 'new'
19
19
  end
20
20
  end
21
21
 
22
22
  def destroy
23
23
  sign_out
24
- redirect_to root_path, notice: "signed out."
24
+ flash[:notice] = "signed out."
25
+ #redirect_back_or main_app.root_path
26
+ redirect_to main_app.root_path
25
27
  end
26
28
 
27
29
  end
@@ -7,7 +7,7 @@ module AsUser
7
7
  # GET /users
8
8
  # GET /users.json
9
9
  def index
10
- @users = User.all
10
+ @users = User.order("created_at desc").page([params[:page].to_i, 1].max).per(100)
11
11
 
12
12
  respond_to do |format|
13
13
  format.html # index.html.erb
@@ -95,7 +95,7 @@ module AsUser
95
95
  if current_user
96
96
  unless current_user?(@user)
97
97
  flash[:error] = "can only modify your own account."
98
- redirect_to root_path
98
+ redirect_to main_app.root_path
99
99
  end
100
100
  else
101
101
  store_location
@@ -0,0 +1,19 @@
1
+ module AsUser
2
+ module SharedHelper
3
+ def span_vertical_line
4
+ raw "<span class='line'>|</span>"
5
+ end
6
+
7
+ def space_filter(n)
8
+ raw "&nbsp;"*n
9
+ end
10
+
11
+ def link_main_app
12
+ link_to 'Home', main_app.root_path
13
+ end
14
+
15
+ def link_home
16
+ link_to 'Asuser_Home', root_path
17
+ end
18
+ end
19
+ end
@@ -8,21 +8,29 @@
8
8
  # password_digest :string(60)
9
9
  # created_at :datetime not null
10
10
  # updated_at :datetime not null
11
+ # nickname :string(100)
11
12
  #
12
13
 
13
14
  class User < ActiveRecord::Base
14
15
  self.table_name = "users"
15
- attr_accessible :email, :name, :password, :password_confirmation
16
+ attr_accessible :email, :name, :nickname, :password, :password_confirmation
16
17
  has_secure_password
17
18
 
18
19
  before_save {|user| user.email = email.downcase}
19
20
 
20
- validates :name, presence: true, length: {maximum: 49}
21
+ VALID_NAME_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]{1,50}$/
21
22
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
23
+ validates :name, presence: true,
24
+ format: {with: VALID_NAME_REGEX},
25
+ uniqueness: {case_sensitive: true}
22
26
  validates :email, presence: true,
23
27
  format: {with: VALID_EMAIL_REGEX},
24
28
  uniqueness: {case_sensitive: false}
25
29
  validates :password, :password_confirmation, presence: true, length: {minimum: 3}, if: Proc.new { |user|
26
30
  user.new_record? or user.password
27
31
  }
32
+
33
+ def to_s
34
+ self.nickname || self.name || "_guest"
35
+ end
28
36
  end
@@ -1,10 +1,11 @@
1
-
2
- <br/>
3
- <br/>
4
- welcome to use as_user gem for user handling
5
- <br/>
6
- <br/>
7
- manual to be done...
8
-
9
- <%= link_to 'Signin', signin_path %>
10
- <%= link_to 'Signup', signup_path %>
1
+ <div class="huge_nav_button">
2
+ <% if current_user %>
3
+ <%= link_to 'Detail', current_user %>
4
+ <%= space_filter(7) %>
5
+ <%= link_to 'Signout', signout_path, {method: :delete} %>
6
+ <%else%>
7
+ <%= link_to 'Signin', signin_path %>
8
+ <%= space_filter(7) %>
9
+ <%= link_to 'Signup', signup_path %>
10
+ <%end%>
11
+ </div>
@@ -1,18 +1,16 @@
1
- <h1>Sign in</h1>
1
+ <%=content_for :nav do%>
2
+ <%= link_to 'Signup', signup_path %>
3
+ <%end%>
2
4
 
3
- <div class="message_box">
4
- <%= flash[:error] if flash[:error] %>
5
- </div>
6
-
7
- <div class="login_form">
8
- <%= form_for(:session, url: sessions_path) do |f| %>
9
- <%= f.label :email %>
10
- <%= f.text_field :email %>
11
-
12
- <%= f.label :password %>
13
- <%= f.password_field :password %>
14
-
15
- <%= f.submit "Sign in" %>
16
- <%end%>
17
- </div>
5
+ <%= form_for(:session, url: sessions_path) do |f| %>
6
+ <div class="qa-login-box">
7
+ <div class="item">
8
+ <%= f.label :email, class: "field" %><span class="con"><%= f.text_field :email, class: "input-txt" %></span>
9
+ </div>
10
+ <div class="item">
11
+ <%= f.label :password, class: "field" %><span class="con"><%= f.password_field :password, class: "input-txt" %></span>
12
+ </div>
13
+ <div class="btn"><%= f.submit "submit" %></div>
14
+ </div>
15
+ <%end%>
18
16
 
@@ -0,0 +1,10 @@
1
+ <h1 class="logo">
2
+ <strong><%=link_to "Home", main_app.root_path%></strong><s></s>
3
+ <div class="drop-down-menu"><s></s>
4
+ <div class="drop-down-menubox">
5
+ <ul class="dp-dw-mnlist">
6
+ <li><%=link_to "Asuser_Home", root_path%></li>
7
+ </ul>
8
+ </div>
9
+ </div>
10
+ </h1>
@@ -0,0 +1,6 @@
1
+ <% flash.each do |name, msg| %>
2
+ <%= content_tag :div, class: "flash_#{name}" do %>
3
+ <strong><%=msg%></strong>
4
+ <a href="#nogo" class="close">X</a>
5
+ <% end %>
6
+ <% end %>
@@ -0,0 +1,20 @@
1
+ <div class="user-info">
2
+ <% if current_user %>
3
+ <strong class="hd">
4
+ <!--<img class="user" src="/assets/sample/no-avatar.jpg" width="20" height="20" alt=""/>-->
5
+ <%=link_to current_user, current_user%>
6
+ </strong>
7
+ <div class="user-menubox">
8
+ <ul class="us-mn-list">
9
+ <li><a href="#nogo">分享给好友</a></li>
10
+ <li><a href="#nogo">水豆腐水豆</a></li>
11
+ <li><a href="#nogo">士大夫</a></li>
12
+ <li><%=link_to "Signout", signout_path, method: :delete%></li>
13
+ </ul>
14
+ </div>
15
+ <%else%>
16
+ <!--
17
+ <strong class="hd"><%=link_to "Singin", signin_path%><span class="line">|</span><%=link_to "Singup", signup_path%></strong>
18
+ -->
19
+ <%end%>
20
+ </div>
@@ -1,33 +1,24 @@
1
- <%= form_for(@user) do |f| %>
2
- <% if @user.errors.any? %>
3
- <div id="error_explanation">
4
- <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
1
+ <div class="form-box">
2
+ <%= form_for(@user) do |f| %>
3
+ <% if @user.errors.any? %>
4
+ <div id="error_explanation">
5
+ <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
5
6
 
6
- <ul>
7
- <% @user.errors.full_messages.each do |msg| %>
8
- <li><%= msg %></li>
9
- <% end %>
10
- </ul>
11
- </div>
12
- <% end %>
7
+ <ul>
8
+ <% @user.errors.full_messages.each do |msg| %>
9
+ <li><%= msg %></li>
10
+ <% end %>
11
+ </ul>
12
+ </div>
13
+ <% end %>
14
+
15
+ <table class="form-table">
16
+ <tr> <td> <%= f.label :name %></td> <td> <%= f.text_field :name %> </td> </tr>
17
+ <tr> <td> <%= f.label :email %></td> <td> <%= f.text_field :email %> </td> </tr>
18
+ <tr> <td> <%= f.label :password%></td> <td> <%= f.password_field :password%> </td> </tr>
19
+ <tr> <td> <%= f.label :password_confirmation %></td> <td> <%= f.password_field :password_confirmation %> </td> </tr>
20
+ <tr> <td colspan="2"> <%= f.submit %> </td> </tr>
21
+ </table>
13
22
 
14
- <div class="field">
15
- <%= f.label :email %><br />
16
- <%= f.text_field :email %>
17
- </div>
18
- <div class="field">
19
- <%= f.label :name %><br />
20
- <%= f.text_field :name %>
21
- </div>
22
- <div class="field">
23
- <%= f.label :password%><br />
24
- <%= f.password_field :password%>
25
- </div>
26
- <div class="field">
27
- <%= f.label :password_confirmation %><br />
28
- <%= f.password_field :password_confirmation %>
29
- </div>
30
- <div class="actions">
31
- <%= f.submit %>
32
- </div>
33
- <% end %>
23
+ <% end %>
24
+ </div>