serum-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (340) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +6 -0
  3. data/.rspec +3 -0
  4. data/Gemfile +3 -0
  5. data/Gemfile.lock +42 -0
  6. data/LICENSE +22 -0
  7. data/README.md +40 -0
  8. data/bin/serum-rails +13 -0
  9. data/lib/serum/rails/app.rb +50 -0
  10. data/lib/serum/rails/code_scanner.rb +49 -0
  11. data/lib/serum/rails/metrics.rb +118 -0
  12. data/lib/serum/rails/type_selection.rb +31 -0
  13. data/lib/serum/rails/version.rb +7 -0
  14. data/lib/serum-rails.rb +5 -0
  15. data/serum-rails.gemspec +23 -0
  16. data/spec/serum/rails/metrics_spec.rb +87 -0
  17. data/spec/spec_helper.rb +80 -0
  18. data/spec/test_app/Capfile +4 -0
  19. data/spec/test_app/Gemfile +54 -0
  20. data/spec/test_app/Gemfile.lock +163 -0
  21. data/spec/test_app/Rakefile +11 -0
  22. data/spec/test_app/app/controllers/admin/categories_controller.rb +17 -0
  23. data/spec/test_app/app/controllers/admin/users_controller.rb +30 -0
  24. data/spec/test_app/app/controllers/application_controller/i18n_trait.rb +24 -0
  25. data/spec/test_app/app/controllers/application_controller/navigation_trait.rb +19 -0
  26. data/spec/test_app/app/controllers/application_controller/security_trait/disabled_clearance_accounts_trait.rb +41 -0
  27. data/spec/test_app/app/controllers/application_controller/security_trait.rb +65 -0
  28. data/spec/test_app/app/controllers/application_controller.rb +13 -0
  29. data/spec/test_app/app/controllers/conferences_controller.rb +67 -0
  30. data/spec/test_app/app/controllers/friendship_requests_controller.rb +31 -0
  31. data/spec/test_app/app/controllers/invitations_controller.rb +39 -0
  32. data/spec/test_app/app/controllers/members_controller.rb +21 -0
  33. data/spec/test_app/app/controllers/passwords_controller.rb +33 -0
  34. data/spec/test_app/app/controllers/sessions_controller.rb +17 -0
  35. data/spec/test_app/app/controllers/shared/boring_controller_trait/deletable_trait.rb +23 -0
  36. data/spec/test_app/app/controllers/shared/boring_controller_trait/flash_trait.rb +23 -0
  37. data/spec/test_app/app/controllers/shared/boring_controller_trait/helpers_trait.rb +35 -0
  38. data/spec/test_app/app/controllers/shared/boring_controller_trait/index_trait.rb +39 -0
  39. data/spec/test_app/app/controllers/shared/boring_controller_trait/log_changes_trait.rb +18 -0
  40. data/spec/test_app/app/controllers/shared/boring_controller_trait.rb +16 -0
  41. data/spec/test_app/app/controllers/users_controller.rb +49 -0
  42. data/spec/test_app/app/controllers/ws/api_controller/formatters_trait.rb +91 -0
  43. data/spec/test_app/app/controllers/ws/api_controller/parsers_trait.rb +59 -0
  44. data/spec/test_app/app/controllers/ws/api_controller.rb +70 -0
  45. data/spec/test_app/app/controllers/ws/attendees_controller.rb +43 -0
  46. data/spec/test_app/app/controllers/ws/categories_controller.rb +30 -0
  47. data/spec/test_app/app/controllers/ws/conferences_controller.rb +62 -0
  48. data/spec/test_app/app/controllers/ws/contacts_controller.rb +41 -0
  49. data/spec/test_app/app/controllers/ws/factory_controller.rb +45 -0
  50. data/spec/test_app/app/controllers/ws/members_controller.rb +34 -0
  51. data/spec/test_app/app/controllers/ws/series_controller.rb +19 -0
  52. data/spec/test_app/app/controllers/ws/tests_controller.rb +23 -0
  53. data/spec/test_app/app/helpers/application_helper.rb +180 -0
  54. data/spec/test_app/app/helpers/mail_helper.rb +9 -0
  55. data/spec/test_app/app/helpers/tags_helper.rb +16 -0
  56. data/spec/test_app/app/helpers/user_helper.rb +23 -0
  57. data/spec/test_app/app/models/attendance.rb +11 -0
  58. data/spec/test_app/app/models/category/ancestry_trait.rb +23 -0
  59. data/spec/test_app/app/models/category.rb +25 -0
  60. data/spec/test_app/app/models/conference/attendance_trait.rb +23 -0
  61. data/spec/test_app/app/models/conference/categories_trait.rb +26 -0
  62. data/spec/test_app/app/models/conference/icalendar_trait.rb +36 -0
  63. data/spec/test_app/app/models/conference/search_trait.rb +44 -0
  64. data/spec/test_app/app/models/conference.rb +24 -0
  65. data/spec/test_app/app/models/conference_category.rb +6 -0
  66. data/spec/test_app/app/models/conference_search.rb +51 -0
  67. data/spec/test_app/app/models/error.rb +25 -0
  68. data/spec/test_app/app/models/friendship.rb +14 -0
  69. data/spec/test_app/app/models/friendship_request.rb +19 -0
  70. data/spec/test_app/app/models/invitation.rb +38 -0
  71. data/spec/test_app/app/models/member_search.rb +18 -0
  72. data/spec/test_app/app/models/navigation.rb +38 -0
  73. data/spec/test_app/app/models/patterns.rb +14 -0
  74. data/spec/test_app/app/models/permissions.rb +106 -0
  75. data/spec/test_app/app/models/shared/afterlife_trait.rb +18 -0
  76. data/spec/test_app/app/models/shared/choice_trait.rb +37 -0
  77. data/spec/test_app/app/models/shared/deletable_trait.rb +8 -0
  78. data/spec/test_app/app/models/shared/flag_trait.rb +30 -0
  79. data/spec/test_app/app/models/shared/indestructible_trait.rb +19 -0
  80. data/spec/test_app/app/models/shared/list_field_trait.rb +70 -0
  81. data/spec/test_app/app/models/shared/person_name_trait.rb +25 -0
  82. data/spec/test_app/app/models/shared/searchable_trait.rb +71 -0
  83. data/spec/test_app/app/models/shared/sortable_trait.rb +24 -0
  84. data/spec/test_app/app/models/user/authentication_trait.rb +33 -0
  85. data/spec/test_app/app/models/user/authorization_trait.rb +17 -0
  86. data/spec/test_app/app/models/user/friends_trait.rb +42 -0
  87. data/spec/test_app/app/models/user/search_trait.rb +43 -0
  88. data/spec/test_app/app/models/user.rb +61 -0
  89. data/spec/test_app/app/models/util.rb +19 -0
  90. data/spec/test_app/app/views/admin/categories/_form.html.haml +18 -0
  91. data/spec/test_app/app/views/admin/categories/_list.html.haml +17 -0
  92. data/spec/test_app/app/views/admin/categories/edit.html.haml +6 -0
  93. data/spec/test_app/app/views/admin/categories/index.html.haml +6 -0
  94. data/spec/test_app/app/views/admin/categories/new.html.haml +6 -0
  95. data/spec/test_app/app/views/admin/categories/show.html.haml +27 -0
  96. data/spec/test_app/app/views/admin/users/_form.html.haml +49 -0
  97. data/spec/test_app/app/views/admin/users/_head.html.haml +5 -0
  98. data/spec/test_app/app/views/admin/users/_list.html.haml +20 -0
  99. data/spec/test_app/app/views/admin/users/_search.html.haml +9 -0
  100. data/spec/test_app/app/views/admin/users/deleted.html.haml +5 -0
  101. data/spec/test_app/app/views/admin/users/edit.html.haml +5 -0
  102. data/spec/test_app/app/views/admin/users/index.html.haml +7 -0
  103. data/spec/test_app/app/views/admin/users/new.html.haml +6 -0
  104. data/spec/test_app/app/views/clearance_mailer/change_password.erb +9 -0
  105. data/spec/test_app/app/views/conferences/_categories_list.html.haml +8 -0
  106. data/spec/test_app/app/views/conferences/_form.html.haml +32 -0
  107. data/spec/test_app/app/views/conferences/_head.html.haml +4 -0
  108. data/spec/test_app/app/views/conferences/_list.html.haml +22 -0
  109. data/spec/test_app/app/views/conferences/_search.html.haml +24 -0
  110. data/spec/test_app/app/views/conferences/edit.html.haml +8 -0
  111. data/spec/test_app/app/views/conferences/index.html.haml +22 -0
  112. data/spec/test_app/app/views/conferences/new.html.haml +9 -0
  113. data/spec/test_app/app/views/conferences/search.html.haml +7 -0
  114. data/spec/test_app/app/views/conferences/show.html.haml +78 -0
  115. data/spec/test_app/app/views/invitations/index.html.haml +26 -0
  116. data/spec/test_app/app/views/invitations/new.html.haml +22 -0
  117. data/spec/test_app/app/views/layouts/_flashes.html.haml +13 -0
  118. data/spec/test_app/app/views/layouts/_javascript_requirement.html.haml +8 -0
  119. data/spec/test_app/app/views/layouts/_javascripts.html.haml +4 -0
  120. data/spec/test_app/app/views/layouts/_notifications.html.haml +11 -0
  121. data/spec/test_app/app/views/layouts/_session_navigation.html.haml +12 -0
  122. data/spec/test_app/app/views/layouts/_stylesheets.html.haml +6 -0
  123. data/spec/test_app/app/views/layouts/screen.html.haml +30 -0
  124. data/spec/test_app/app/views/members/index.html.haml +40 -0
  125. data/spec/test_app/app/views/passwords/edit.html.haml +21 -0
  126. data/spec/test_app/app/views/passwords/new.html.haml +14 -0
  127. data/spec/test_app/app/views/sessions/new.html.haml +19 -0
  128. data/spec/test_app/app/views/users/_form.html.haml +45 -0
  129. data/spec/test_app/app/views/users/_head.html.haml +3 -0
  130. data/spec/test_app/app/views/users/edit.html.haml +5 -0
  131. data/spec/test_app/app/views/users/new.html.haml +6 -0
  132. data/spec/test_app/app/views/users/show.html.haml +49 -0
  133. data/spec/test_app/assets/data.json +981 -0
  134. data/spec/test_app/config/boot.rb +125 -0
  135. data/spec/test_app/config/cucumber.yml +8 -0
  136. data/spec/test_app/config/database.sample.yml +24 -0
  137. data/spec/test_app/config/deploy/production.rb +9 -0
  138. data/spec/test_app/config/deploy.rb +100 -0
  139. data/spec/test_app/config/environment.rb +27 -0
  140. data/spec/test_app/config/environments/cucumber.rb +28 -0
  141. data/spec/test_app/config/environments/development.rb +22 -0
  142. data/spec/test_app/config/environments/production.rb +35 -0
  143. data/spec/test_app/config/environments/test.rb +30 -0
  144. data/spec/test_app/config/initializers/backtrace_silencers.rb +7 -0
  145. data/spec/test_app/config/initializers/clearance.rb +5 -0
  146. data/spec/test_app/config/initializers/collect_hash.rb +23 -0
  147. data/spec/test_app/config/initializers/collection_path_with_params.rb +18 -0
  148. data/spec/test_app/config/initializers/cookie_verification_secret.rb +10 -0
  149. data/spec/test_app/config/initializers/form_builder.rb +166 -0
  150. data/spec/test_app/config/initializers/inflections.rb +10 -0
  151. data/spec/test_app/config/initializers/invert_ordered_hash.rb +12 -0
  152. data/spec/test_app/config/initializers/localize_textfield_input_for_numbers.rb +30 -0
  153. data/spec/test_app/config/initializers/mime_types.rb +7 -0
  154. data/spec/test_app/config/initializers/new_rails_defaults.rb +21 -0
  155. data/spec/test_app/config/initializers/preload_associations.rb +7 -0
  156. data/spec/test_app/config/initializers/query_diet.rb +6 -0
  157. data/spec/test_app/config/initializers/saner_field_with_errors.rb +5 -0
  158. data/spec/test_app/config/initializers/session_store.rb +18 -0
  159. data/spec/test_app/config/locales/en.yml +231 -0
  160. data/spec/test_app/config/preinitializer.rb +22 -0
  161. data/spec/test_app/config/routes.rb +47 -0
  162. data/spec/test_app/db/migrate/20110114164517_initial_tables.rb +52 -0
  163. data/spec/test_app/db/migrate/20110118090858_add_profile_fields_to_user.rb +15 -0
  164. data/spec/test_app/db/migrate/20110118092741_create_conference.rb +20 -0
  165. data/spec/test_app/db/migrate/20110118093503_create_category.rb +17 -0
  166. data/spec/test_app/db/migrate/20110118104438_create_conference_category.rb +16 -0
  167. data/spec/test_app/db/migrate/20110118105959_create_attendance.rb +17 -0
  168. data/spec/test_app/db/migrate/20110118122324_create_friendship_requests.rb +15 -0
  169. data/spec/test_app/db/migrate/20110118162436_create_invitation.rb +16 -0
  170. data/spec/test_app/db/migrate/20110118170347_create_friendships.rb +15 -0
  171. data/spec/test_app/db/migrate/20110118193528_add_timestamps_to_conference.rb +12 -0
  172. data/spec/test_app/db/migrate/20110119075012_set_unique_index_on_username_for_user.rb +11 -0
  173. data/spec/test_app/db/migrate/20110119093458_remove_first_and_last_name_from_user.rb +12 -0
  174. data/spec/test_app/db/migrate/20110119110857_add_missing_indexes.rb +23 -0
  175. data/spec/test_app/db/migrate/20110119115751_add_uniqueness_of_name_to_category.rb +9 -0
  176. data/spec/test_app/db/seeds.rb +5 -0
  177. data/spec/test_app/lib/scripts/create_many_users_sql.rb +14 -0
  178. data/spec/test_app/lib/tasks/cucumber.rake +53 -0
  179. data/spec/test_app/lib/tasks/pending_migrations.rake +24 -0
  180. data/spec/test_app/lib/tasks/rcov.rake +42 -0
  181. data/spec/test_app/lib/tasks/rspec.rake +144 -0
  182. data/spec/test_app/public/404.html +30 -0
  183. data/spec/test_app/public/422.html +30 -0
  184. data/spec/test_app/public/500.html +30 -0
  185. data/spec/test_app/public/favicon.ico +0 -0
  186. data/spec/test_app/public/images/ajax-loader.gif +0 -0
  187. data/spec/test_app/public/images/icons/balloon-quotation.png +0 -0
  188. data/spec/test_app/public/images/icons/balloon-sound.png +0 -0
  189. data/spec/test_app/public/images/icons/balloon.png +0 -0
  190. data/spec/test_app/public/images/icons/bell.png +0 -0
  191. data/spec/test_app/public/images/icons/bin.png +0 -0
  192. data/spec/test_app/public/images/icons/bookmark.png +0 -0
  193. data/spec/test_app/public/images/icons/cake.png +0 -0
  194. data/spec/test_app/public/images/icons/calendar-blue.png +0 -0
  195. data/spec/test_app/public/images/icons/calendar-month.png +0 -0
  196. data/spec/test_app/public/images/icons/calendar-month_light.png +0 -0
  197. data/spec/test_app/public/images/icons/calendar-select.png +0 -0
  198. data/spec/test_app/public/images/icons/card-address.png +0 -0
  199. data/spec/test_app/public/images/icons/cards-address.png +0 -0
  200. data/spec/test_app/public/images/icons/cross-script.png +0 -0
  201. data/spec/test_app/public/images/icons/cross-small.png +0 -0
  202. data/spec/test_app/public/images/icons/cross.png +0 -0
  203. data/spec/test_app/public/images/icons/crown-silver.png +0 -0
  204. data/spec/test_app/public/images/icons/crown.png +0 -0
  205. data/spec/test_app/public/images/icons/dashboard.png +0 -0
  206. data/spec/test_app/public/images/icons/document-list.png +0 -0
  207. data/spec/test_app/public/images/icons/document-node.png +0 -0
  208. data/spec/test_app/public/images/icons/document-number.png +0 -0
  209. data/spec/test_app/public/images/icons/document-stamp.png +0 -0
  210. data/spec/test_app/public/images/icons/document-task.png +0 -0
  211. data/spec/test_app/public/images/icons/document-text.png +0 -0
  212. data/spec/test_app/public/images/icons/fire.png +0 -0
  213. data/spec/test_app/public/images/icons/folder-medium.png +0 -0
  214. data/spec/test_app/public/images/icons/folder.png +0 -0
  215. data/spec/test_app/public/images/icons/gear.png +0 -0
  216. data/spec/test_app/public/images/icons/globe-green.png +0 -0
  217. data/spec/test_app/public/images/icons/globe-green_light.png +0 -0
  218. data/spec/test_app/public/images/icons/globe-medium-green.png +0 -0
  219. data/spec/test_app/public/images/icons/heart-break.png +0 -0
  220. data/spec/test_app/public/images/icons/heart.png +0 -0
  221. data/spec/test_app/public/images/icons/images-flickr.png +0 -0
  222. data/spec/test_app/public/images/icons/information-balloon.png +0 -0
  223. data/spec/test_app/public/images/icons/key.png +0 -0
  224. data/spec/test_app/public/images/icons/light-bulb.png +0 -0
  225. data/spec/test_app/public/images/icons/lock--exclamation.png +0 -0
  226. data/spec/test_app/public/images/icons/lock.png +0 -0
  227. data/spec/test_app/public/images/icons/magnifier-medium.png +0 -0
  228. data/spec/test_app/public/images/icons/magnifier.png +0 -0
  229. data/spec/test_app/public/images/icons/mail.png +0 -0
  230. data/spec/test_app/public/images/icons/paper-clip-small.png +0 -0
  231. data/spec/test_app/public/images/icons/paper-clip.png +0 -0
  232. data/spec/test_app/public/images/icons/pencil.png +0 -0
  233. data/spec/test_app/public/images/icons/plus-circle.png +0 -0
  234. data/spec/test_app/public/images/icons/plus-small.png +0 -0
  235. data/spec/test_app/public/images/icons/plus.png +0 -0
  236. data/spec/test_app/public/images/icons/printer.png +0 -0
  237. data/spec/test_app/public/images/icons/question-balloon.png +0 -0
  238. data/spec/test_app/public/images/icons/question-white.png +0 -0
  239. data/spec/test_app/public/images/icons/question.png +0 -0
  240. data/spec/test_app/public/images/icons/quill.png +0 -0
  241. data/spec/test_app/public/images/icons/robot.png +0 -0
  242. data/spec/test_app/public/images/icons/ruby_16.png +0 -0
  243. data/spec/test_app/public/images/icons/ruby_2_16.png +0 -0
  244. data/spec/test_app/public/images/icons/ruby_32.png +0 -0
  245. data/spec/test_app/public/images/icons/show.png +0 -0
  246. data/spec/test_app/public/images/icons/star.png +0 -0
  247. data/spec/test_app/public/images/icons/sticky-note-text.png +0 -0
  248. data/spec/test_app/public/images/icons/telephone-fax.png +0 -0
  249. data/spec/test_app/public/images/icons/telephone-fax_light.png +0 -0
  250. data/spec/test_app/public/images/icons/telephone.png +0 -0
  251. data/spec/test_app/public/images/icons/telephone_light.png +0 -0
  252. data/spec/test_app/public/images/icons/thumb-up.png +0 -0
  253. data/spec/test_app/public/images/icons/thumb.png +0 -0
  254. data/spec/test_app/public/images/icons/tick.png +0 -0
  255. data/spec/test_app/public/images/icons/trophy-silver.png +0 -0
  256. data/spec/test_app/public/images/icons/trophy.png +0 -0
  257. data/spec/test_app/public/images/icons/user-gray.png +0 -0
  258. data/spec/test_app/public/images/icons/user-gray_gray.png +0 -0
  259. data/spec/test_app/public/images/icons/user-medium.png +0 -0
  260. data/spec/test_app/public/images/icons/user-red.png +0 -0
  261. data/spec/test_app/public/images/icons/users.png +0 -0
  262. data/spec/test_app/public/images/icons/users_gray.png +0 -0
  263. data/spec/test_app/public/images/icons/xfn.png +0 -0
  264. data/spec/test_app/public/images/legend_bg.png +0 -0
  265. data/spec/test_app/public/images/poshytip/tip-deepgray.png +0 -0
  266. data/spec/test_app/public/images/poshytip/tip-deepgray_arrows.png +0 -0
  267. data/spec/test_app/public/images/stripes_bottom_dark.png +0 -0
  268. data/spec/test_app/public/images/stripes_top_dark.png +0 -0
  269. data/spec/test_app/public/images/ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  270. data/spec/test_app/public/images/ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  271. data/spec/test_app/public/images/ui/ui-bg_flat_10_000000_40x100.png +0 -0
  272. data/spec/test_app/public/images/ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  273. data/spec/test_app/public/images/ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  274. data/spec/test_app/public/images/ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
  275. data/spec/test_app/public/images/ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  276. data/spec/test_app/public/images/ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  277. data/spec/test_app/public/images/ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  278. data/spec/test_app/public/images/ui/ui-icons_222222_256x240.png +0 -0
  279. data/spec/test_app/public/images/ui/ui-icons_228ef1_256x240.png +0 -0
  280. data/spec/test_app/public/images/ui/ui-icons_ef8c08_256x240.png +0 -0
  281. data/spec/test_app/public/images/ui/ui-icons_ffd27a_256x240.png +0 -0
  282. data/spec/test_app/public/images/ui/ui-icons_ffffff_256x240.png +0 -0
  283. data/spec/test_app/public/javascripts/application.js +175 -0
  284. data/spec/test_app/public/javascripts/lib/jquery-1.4.2.min.js +154 -0
  285. data/spec/test_app/public/javascripts/lib/jquery-ui-1.8.5.custom.min.js +249 -0
  286. data/spec/test_app/public/javascripts/lib/jquery-ui-1.8.5.custom.min.txt +9 -0
  287. data/spec/test_app/public/javascripts/lib/jquery-ui-timepicker-addon.js +682 -0
  288. data/spec/test_app/public/javascripts/lib/jquery-ui-timepicker-addon.min.js +22 -0
  289. data/spec/test_app/public/javascripts/lib/jquery.elastic.js +6 -0
  290. data/spec/test_app/public/javascripts/lib/jquery.elastic.performance.js +128 -0
  291. data/spec/test_app/public/javascripts/lib/jquery.elastic.source.js +117 -0
  292. data/spec/test_app/public/javascripts/lib/jquery.poshytip.js +414 -0
  293. data/spec/test_app/public/javascripts/lib/jquery.poshytip.min.js +7 -0
  294. data/spec/test_app/public/javascripts/lib/jquery.ui.datepicker-de.js +23 -0
  295. data/spec/test_app/public/javascripts/lib/jrails.js +1 -0
  296. data/spec/test_app/public/javascripts/lib/multiple-autocomplete.js +39 -0
  297. data/spec/test_app/public/javascripts/lib/underscore-min.js +17 -0
  298. data/spec/test_app/public/javascripts/lib/underscore.js +704 -0
  299. data/spec/test_app/public/robots.txt +5 -0
  300. data/spec/test_app/public/stylesheets/lib/PIE.htc +77 -0
  301. data/spec/test_app/public/stylesheets/lib/PIE_uncompressed.htc +3064 -0
  302. data/spec/test_app/public/stylesheets/lib/jquery-ui-timepicker-addon.css +11 -0
  303. data/spec/test_app/public/stylesheets/lib/poshytip/tip-darkgray/tip-darkgray.css +62 -0
  304. data/spec/test_app/public/stylesheets/lib/poshytip/tip-darkgray/tip-darkgray.png +0 -0
  305. data/spec/test_app/public/stylesheets/lib/poshytip/tip-darkgray/tip-darkgray_arrows.png +0 -0
  306. data/spec/test_app/public/stylesheets/lib/poshytip/tip-deepgray/tip-deepgray.css +64 -0
  307. data/spec/test_app/public/stylesheets/lib/poshytip/tip-green/tip-green.css +57 -0
  308. data/spec/test_app/public/stylesheets/lib/poshytip/tip-green/tip-green_arrows.gif +0 -0
  309. data/spec/test_app/public/stylesheets/lib/poshytip/tip-skyblue/tip-skyblue.css +58 -0
  310. data/spec/test_app/public/stylesheets/lib/poshytip/tip-skyblue/tip-skyblue.png +0 -0
  311. data/spec/test_app/public/stylesheets/lib/poshytip/tip-skyblue/tip-skyblue_arrows.png +0 -0
  312. data/spec/test_app/public/stylesheets/lib/poshytip/tip-twitter/tip-twitter.css +59 -0
  313. data/spec/test_app/public/stylesheets/lib/poshytip/tip-twitter/tip-twitter_arrows.gif +0 -0
  314. data/spec/test_app/public/stylesheets/lib/poshytip/tip-violet/tip-violet.css +60 -0
  315. data/spec/test_app/public/stylesheets/lib/poshytip/tip-violet/tip-violet.png +0 -0
  316. data/spec/test_app/public/stylesheets/lib/poshytip/tip-violet/tip-violet_arrows.png +0 -0
  317. data/spec/test_app/public/stylesheets/lib/poshytip/tip-yellow/tip-yellow.css +60 -0
  318. data/spec/test_app/public/stylesheets/lib/poshytip/tip-yellow/tip-yellow.png +0 -0
  319. data/spec/test_app/public/stylesheets/lib/poshytip/tip-yellow/tip-yellow_arrows.png +0 -0
  320. data/spec/test_app/public/stylesheets/lib/poshytip/tip-yellowsimple/tip-yellowsimple.css +60 -0
  321. data/spec/test_app/public/stylesheets/lib/poshytip/tip-yellowsimple/tip-yellowsimple_arrows.gif +0 -0
  322. data/spec/test_app/public/stylesheets/lib/ui-lightness/jquery-ui-1.8.5.custom.css +459 -0
  323. data/spec/test_app/public/stylesheets/sass/_mixins.sass +79 -0
  324. data/spec/test_app/public/stylesheets/sass/_reset.sass +40 -0
  325. data/spec/test_app/public/stylesheets/sass/print.sass +22 -0
  326. data/spec/test_app/public/stylesheets/sass/screen.sass +866 -0
  327. data/spec/test_app/script/about +4 -0
  328. data/spec/test_app/script/autospec +6 -0
  329. data/spec/test_app/script/console +3 -0
  330. data/spec/test_app/script/cucumber +10 -0
  331. data/spec/test_app/script/dbconsole +3 -0
  332. data/spec/test_app/script/destroy +3 -0
  333. data/spec/test_app/script/generate +3 -0
  334. data/spec/test_app/script/performance/benchmarker +3 -0
  335. data/spec/test_app/script/performance/profiler +3 -0
  336. data/spec/test_app/script/plugin +3 -0
  337. data/spec/test_app/script/runner +3 -0
  338. data/spec/test_app/script/server +3 -0
  339. data/spec/test_app/script/spec +10 -0
  340. metadata +748 -0
@@ -0,0 +1,6 @@
1
+ -# View to edit a category as an admin.
2
+ -# origin: M
3
+
4
+ - page_head :title => icon(:edit, @category.name), :navigation => Navigation.admin_category
5
+
6
+ = render 'form'
@@ -0,0 +1,6 @@
1
+ -# View to list categories as an admin.
2
+ -# origin: M
3
+
4
+ #admin_categories
5
+ = boring_create_button
6
+ = list
@@ -0,0 +1,6 @@
1
+ -# View to create a category as an admin.
2
+ -# origin: M
3
+
4
+ - page_head :title => icon(:create, 'New category')#
5
+
6
+ = render 'form'
@@ -0,0 +1,27 @@
1
+ -# View to show a category as an admin.
2
+ -# origin: M
3
+
4
+ - page_head :title => icon(:category, @category.name), :navigation => Navigation.admin_category
5
+
6
+ - buttons do
7
+ = link_to icon(:create, 'Add sub-category'), new_admin_category_path(:category => { :parent_id => object.id })
8
+
9
+ %table
10
+ %tr
11
+ %th Name
12
+ %td= @category.name
13
+ %tr
14
+ %th Parent category
15
+ %td
16
+ - if @category.parent
17
+ = link_to(icon(:category, @category.parent.andand.name), [:admin, @category.parent])
18
+ - else
19
+ –
20
+ - if @category.children.any?
21
+ %tr
22
+ %th Sub-categories
23
+ %td
24
+ %ul
25
+ - for child in @category.children.sort
26
+ %li
27
+ = link_to(icon(:category, child.name), [:admin, child])
@@ -0,0 +1,49 @@
1
+ -# Partial for a user form as shown to admins.
2
+ -# origin: RM
3
+
4
+ - form_for [:admin, @user] do |form|
5
+ %dl
6
+ %dt
7
+ = form.label :username
8
+ %dd
9
+ = form.text_field :username
10
+ %dt
11
+ = form.label :email
12
+ %dd
13
+ = form.text_field :email
14
+ %dt
15
+ = form.label :full_name
16
+ %dd
17
+ = form.text_field :full_name
18
+ %dt
19
+ = form.label :town
20
+ %dd
21
+ = form.text_field :town
22
+ %dt
23
+ = form.label :country
24
+ %dd
25
+ = form.text_field :country
26
+ %dt
27
+ = form.label :password
28
+ - unless form.object.new_record?
29
+ = help 'Leave blank to keep the password unchanged'
30
+ %dd
31
+ = form.password_field :password, :autocomplete => 'off'
32
+ %dt
33
+ = form.label :password_confirmation
34
+ %dd
35
+ = form.password_field :password_confirmation, :autocomplete => 'off'
36
+
37
+ %dt
38
+ = form.label :role_name
39
+ %dd
40
+ = form.select :role_name, User.available_roles.invert, :include_blank => true
41
+
42
+ %dt
43
+ = form.label :locked
44
+ %dd
45
+ = form.check_box :locked
46
+ = form.label :locked, "This user may no longer sign in"
47
+
48
+ = boring_save_cancel_buttons :delete_link => current_user.may_destroy_admin_user?(@user)
49
+
@@ -0,0 +1,5 @@
1
+ -# Partial for a user page head as shown to admins.
2
+ -# origin: RM
3
+
4
+ - page_head :title => icon(:user, @user.email)
5
+
@@ -0,0 +1,20 @@
1
+ -# Partial for a user list as shown to admins.
2
+ -# origin: RM
3
+
4
+ - if @users.present?
5
+ %table.grid
6
+ %tr
7
+ %th= User.human_attribute_name :username
8
+ %th= User.human_attribute_name :full_name
9
+ %th= User.human_attribute_name :email
10
+ - for user in @users
11
+ %tr
12
+ - icon_name = user.locked? ? :lock : :edit
13
+ %td= link_to(icon(icon_name, user.username), [:edit, :admin, user])
14
+ %td= maybe_blank(user.full_name)
15
+ %td= maybe_blank(user.email)
16
+ = pagination @users
17
+ - else
18
+ .none
19
+ No users found.
20
+
@@ -0,0 +1,9 @@
1
+ -# Partial for the user search form as shown to an admin.
2
+ -# origin: M
3
+
4
+ - form_tag admin_users_path, :method => :get do
5
+ - buttons do
6
+ = spec_label_tag 'query', 'Query'
7
+ = text_field_tag "query", params[:query]
8
+ = submit_tag "Search"
9
+
@@ -0,0 +1,5 @@
1
+ -# View to list soft-deleted users as an admin.
2
+ -# origin: RM
3
+
4
+ #admin_users
5
+ = list
@@ -0,0 +1,5 @@
1
+ -# View to edit an user as an admin.
2
+ -# origin: RM
3
+
4
+ = render 'head'
5
+ = render 'form'
@@ -0,0 +1,7 @@
1
+ -# View to list users as an admin.
2
+ -# origin: RM
3
+
4
+ #admin_users
5
+ = boring_create_button
6
+ = render 'search'
7
+ = list
@@ -0,0 +1,6 @@
1
+ -# View to create a user as an admin.
2
+ -# origin: RM
3
+
4
+ - page_head :title => icon(:create, 'New user')
5
+
6
+ = render 'form'
@@ -0,0 +1,9 @@
1
+ <%-
2
+ # E-mail sent when the user has forgotten her password or when a new user is created by an admin.
3
+ # origin: RM
4
+ -%>
5
+ Follow this link to change your password:
6
+
7
+ <%=raw reset_password_link(@user) %>
8
+
9
+ If you didn't request a password reset, please ignore this e-mail.
@@ -0,0 +1,8 @@
1
+ -# Partial to list categories on the conference list and search.
2
+ -# origin: M
3
+
4
+ - if @categories.present?
5
+ - segment(:title => @category ? 'Subcategories' : 'Categories') do
6
+ %ul
7
+ - for category in @categories
8
+ %li= link_to icon(:category, category.name), conferences_path(:category_id => category)
@@ -0,0 +1,32 @@
1
+ -# Partial for a conference form as shown to users.
2
+ -# origin: M
3
+
4
+ %dl
5
+ %dt
6
+ = form.label :name
7
+ %dd
8
+ = form.error_message_on :name
9
+ = form.text_field :name
10
+ %dt
11
+ = form.label :description
12
+ %dd
13
+ = form.error_message_on :description
14
+ = form.text_area :description, :rows => 3
15
+ %dt
16
+ = form.label :start_date
17
+ %dd
18
+ = form.error_message_on :start_date
19
+ = form.date_picker :start_date
20
+ %dt
21
+ = form.label :end_date
22
+ %dd
23
+ = form.error_message_on :end_date
24
+ = form.date_picker :end_date
25
+ %dt
26
+ = form.label :address
27
+ %dd
28
+ = form.error_message_on :address
29
+ = form.text_area :address, :rows => 3
30
+ %dt Categories
31
+ %dd
32
+ = form.check_box_list :category_list, Category.all.collect { |c| [c.id.to_s, c.name] }
@@ -0,0 +1,4 @@
1
+ -# Partial for apage head shown when displaying or editing a conference.
2
+ -# origin: M
3
+
4
+ = page_head :title => icon(:conference, @conference.name), :navigation => Navigation.conference
@@ -0,0 +1,22 @@
1
+ -# Partial to display a list of conferences matching the search query.
2
+ -# origin: M
3
+
4
+ - if @running_conferences.present?
5
+
6
+ - segment(:title => 'Currently running conferences', :id => 'running_conferences') do
7
+ %ul
8
+ - for conference in @running_conferences
9
+ %li= link_to icon(:conference, conference.name), conference
10
+
11
+
12
+ -# Always show the generic list of conferences
13
+
14
+ - segment(:title => 'Conferences') do
15
+ - if @conferences.present?
16
+ %ul
17
+ - for conference in @conferences
18
+ %li= link_to icon(:conference, conference.name), conference
19
+ = pagination @conferences
20
+ - else
21
+ .none
22
+ No conference found.
@@ -0,0 +1,24 @@
1
+ -# Partial for the conference search form.
2
+ -# origin: M
3
+
4
+ - form_for @conference_search, :url => search_conferences_path, :html => { :method => :get, :id => 'conference_search_form', :class => ('advanced' if local_assigns[:advanced]) } do |form|
5
+ - if local_assigns[:advanced]
6
+
7
+ %dl
8
+ %dt Dates
9
+ %dd.dates
10
+ = form.label :from
11
+ = form.date_picker :from
12
+ = form.label :until, 'until'
13
+ = form.date_picker :until
14
+ %dt Categories
15
+ %dd.list.categories
16
+ = form.check_box_list :category_ids, Category.all.sort.collect { |c| [c.id.to_s, c.name] }, :allow_empty => true
17
+ = clear
18
+
19
+ - buttons do
20
+ = form.spec_label :query, 'Query'
21
+ = form.text_field :query
22
+ = form.submit 'Search'
23
+
24
+ = clear
@@ -0,0 +1,8 @@
1
+ -# View to edit a conference as its creator.
2
+ -# origin: M
3
+
4
+ = render 'head'
5
+
6
+ - form_for @conference do |form|
7
+ = form.partial 'form'
8
+ = boring_save_cancel_buttons :delete_link => current_user.may_destroy_conference?(@conference)
@@ -0,0 +1,22 @@
1
+ -# View to display the list of conferences.
2
+ -# origin: M
3
+
4
+ - if @category
5
+ = page_head :title => icon(:category, @category.name)
6
+ - else
7
+ = render 'search'
8
+
9
+ - if current_user.may_create_conference?
10
+ = boring_create_button(:label => 'Add conference')
11
+
12
+ - columns do
13
+
14
+ - column do
15
+ #conferences
16
+ = list
17
+
18
+ - if @categories.present?
19
+ - column(:size => :narrow) do
20
+ #categories
21
+ = render 'categories_list'
22
+
@@ -0,0 +1,9 @@
1
+ -# View to create a new conference.
2
+ -# origin: M
3
+
4
+ = page_head :title => icon(:create, 'New conference')
5
+
6
+ - form_for @conference do |form|
7
+ = form.partial 'form'
8
+ - buttons do
9
+ = form.submit 'Create'
@@ -0,0 +1,7 @@
1
+ -# View for the conference search. It includes the search form and the results of a previous query.
2
+ -# origin: M
3
+
4
+ = render 'search', :advanced => true
5
+
6
+ #conferences
7
+ = list
@@ -0,0 +1,78 @@
1
+ -# View for the conference summary.
2
+ -# origin: M
3
+
4
+ = render 'head'
5
+
6
+ #conference
7
+
8
+ - buttons do
9
+ - if @conference.attended_by?(current_user)
10
+ - if current_user.may_cancel_attendance_conference?(@conference)
11
+ = link_to icon(:cancel_attendance, 'Cancel your attendance'), cancel_attendance_conference_path(@conference), :method => :put
12
+ - else
13
+ - if current_user.may_attend_conference?(@conference)
14
+ = link_to icon(:attend, 'Sign up for this conference'), attend_conference_path(@conference), :method => :put
15
+
16
+ = link_to icon(:invite, 'Invite contacts'), new_invitation_path(:invitation => { :conference_id => @conference.id})
17
+ = link_to icon(:calendar, 'Download as iCalendar'), object_path(:format => 'ics')
18
+
19
+ %table
20
+
21
+ %tr
22
+ %th
23
+ = Conference.human_attribute_name :description
24
+ %td
25
+ .prose
26
+ = simple_format @conference.description
27
+
28
+ - if @conference.categories.any?
29
+ %tr
30
+ %th
31
+ = Conference.human_attribute_name :categories
32
+ %td
33
+ %ul
34
+ - for category in @conference.categories
35
+ %li
36
+ = icon(:category, category.name)
37
+
38
+ %tr
39
+ %th
40
+ = Conference.human_attribute_name :start_date
41
+ %td
42
+ =l @conference.start_date
43
+
44
+ %tr
45
+ %th
46
+ = Conference.human_attribute_name :end_date
47
+ %td
48
+ =l @conference.end_date
49
+
50
+ %tr
51
+ %th
52
+ = Conference.human_attribute_name :address
53
+ %td
54
+ .prose
55
+ = simple_format @conference.address
56
+
57
+ %tr
58
+ %th
59
+ = Conference.human_attribute_name :user_id
60
+ %td
61
+ = link_to icon(:user, @conference.user.username_with_full_name), @conference.user
62
+ (#{@conference.user.email})
63
+
64
+ - if @conference.attendees.any?
65
+ - segment :title => 'Attendees', :id => 'attendees' do
66
+ %table.grid
67
+ %tr
68
+ %th Name
69
+ %th= User.human_attribute_name(:email)
70
+ - for attendee in @conference.attendees
71
+ %tr
72
+ %td
73
+ = link_to(icon(:attendee, current_user.name_for(attendee, attendee == @conference.user)), attendee)
74
+ %td
75
+ = current_user.email_for(attendee, attendee == @conference.user)
76
+
77
+ :javascript
78
+ someFunction(#{JSON.dump(@some_var)})
@@ -0,0 +1,26 @@
1
+ -# View to show outstanding conference invitations of the signed in user.
2
+ -# origin: M
3
+
4
+ #invitations
5
+
6
+ - invitations = current_user.received_invitations.include_everything
7
+
8
+ - if invitations.any?
9
+
10
+ - for invitation in current_user.received_invitations
11
+ .blob.invitation
12
+ .description
13
+ Invitation to
14
+ = link_to(invitation.conference.name, invitation.conference)
15
+ .sender
16
+ from
17
+ = link_to(current_user.name_for(invitation.sender), invitation.sender)
18
+ - buttons do
19
+ = link_to(icon(:accept_invitation, 'Accept'), accept_invitation_path(invitation), :title => "This will sign you up for #{invitation.conference.name}", :method => :put)
20
+ = link_to(icon(:dismiss_invitation, 'Dismiss'), dismiss_invitation_path(invitation), :method => :delete)
21
+
22
+ - else
23
+
24
+ .none
25
+ You have no outstanding conference invitations.
26
+
@@ -0,0 +1,22 @@
1
+ -# View to invite friends to a conference.
2
+ -# origin: M
3
+
4
+ = page_head :title => "Invite contacts to ".html_safe + link_to(object.conference.name, object.conference)
5
+
6
+ #invite_friends
7
+ - if current_user.friends.any?
8
+ %table.grid
9
+ - for friend in current_user.friends
10
+ - friend_name = current_user.name_for(friend)
11
+ %tr{:id => "friend_#{friend.username}"}
12
+ %td.beside_buttons
13
+ = link_to icon(:user, friend_name), friend
14
+ %td
15
+ - buttons do
16
+ = link_to icon(:invite, 'Invite'), invitations_path(:invitation => { :conference_id => object.conference.id, :recipient_id => friend.id }), :method => :post
17
+ - else
18
+ .none
19
+ You have no contacts to invite.
20
+
21
+ :javascript
22
+ someFunction(#{@some_var.to_json})
@@ -0,0 +1,13 @@
1
+ -# Partial for displaying flash messages (usually notifications for the success or failure of a user action) in the page head.
2
+ -# origin: RM
3
+
4
+ - flash.each do |level, value|
5
+ %div{:class => "flash #{h level}"}
6
+ = h value
7
+
8
+ - if flash.any?
9
+ :javascript
10
+ setTimeout(function() {
11
+ $('.flash').fadeOut(400);
12
+ }, 1800);
13
+
@@ -0,0 +1,8 @@
1
+ -# Partial to display a warning if the browser has Javascript disabled.
2
+ -# origin: M
3
+
4
+ %noscript
5
+ #javascript_requirement
6
+ This application requires Javascript. Please
7
+ = link_to 'enable Javascript', 'http://www.google.com/support/bin/answer.py?hl=en&answer=23852'
8
+ in your browser and reload this page.
@@ -0,0 +1,4 @@
1
+ -# Partial to include Javascript files in the HTML head.
2
+ -# origin: RM
3
+
4
+ = javascript_include_tag 'lib/underscore-min.js', 'lib/jquery-1.4.2.min.js', 'lib/jquery-ui-1.8.5.custom.min.js', 'lib/jquery.ui.datepicker-de.js', 'lib/jquery-ui-timepicker-addon.min.js', 'lib/jquery.elastic.performance.js', 'lib/jquery.poshytip.min.js', 'lib/multiple-autocomplete.js', 'lib/jrails', 'application.js', :cache => true
@@ -0,0 +1,11 @@
1
+ -# Partial to display notifications for outstanding invitations and friendship requests to the signed in user
2
+ -# origin: M
3
+
4
+ #notifications
5
+ #notifications_inner
6
+ - invitation_count = current_user.received_invitations.count
7
+ - if invitation_count > 0
8
+ = link_to icon(:email, pluralize(invitation_count, 'invitation', 'invitations')), invitations_path, :class => 'notification'
9
+ - friendship_request_count = current_user.friendship_requests.count
10
+ - if friendship_request_count > 0
11
+ = link_to icon(:email, pluralize(friendship_request_count, 'contact request', 'contact requests')), current_user, :class => 'notification'
@@ -0,0 +1,12 @@
1
+ -# Partial for the navigation in the top-right corner, which relates to the current user being signed in.
2
+ -# origin: RM
3
+
4
+ #session_navigation
5
+ - if signed_in?
6
+ %span#current_user
7
+ = link_to current_user.username, current_user
8
+ (#{current_user.email})
9
+ %span#sign_out= link_to 'Sign out', session_path, :method => :delete
10
+ - else
11
+ %span#sign_up= link_to 'Sign up', [ :new, :user ]
12
+ %span#sign_in= link_to 'Sign in', [ :new, :session ]
@@ -0,0 +1,6 @@
1
+ -# Partial to include CSS stylesheet files in the HTML head.
2
+ -# origin: RM
3
+
4
+ = stylesheet_link_tag("lib/poshytip/tip-deepgray/tip-deepgray.css", 'lib/ui-lightness/jquery-ui-1.8.5.custom.css', 'lib/jquery-ui-timepicker-addon.css', :media => 'screen', :cache => 'lib')
5
+ = stylesheet_link_tag('screen', :media => 'screen')
6
+ = stylesheet_link_tag('print', :media => 'print')
@@ -0,0 +1,30 @@
1
+ -# The main application layout which is wrapped around every view.
2
+ -# origin: RM
3
+ !!!
4
+ %html
5
+ %head
6
+ %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
7
+ %meta{:content => "en", "http-equiv" => "Content-Language"}/
8
+ %meta{:'http-equiv' => 'X-UA-Compatible', :content => 'IE=EmulateIE7'}/
9
+ = csrf_meta_tag
10
+ %title= APPLICATION_TITLE
11
+ = render 'layouts/stylesheets'
12
+ = render 'layouts/javascripts'
13
+ %body{:id => yield(:body_id)}
14
+ #container
15
+ #head
16
+ #head_inner
17
+ .viewport
18
+ #site_name= link_to APPLICATION_TITLE, root_path
19
+ = render 'layouts/session_navigation'
20
+ = clear
21
+ = render 'layouts/notifications'
22
+ = render_navigation Navigation.main
23
+ = yield(:page_head)
24
+ = render 'layouts/flashes'
25
+ #main
26
+ #main_inner
27
+ #page
28
+ = yield
29
+ = render 'layouts/javascript_requirement'
30
+
@@ -0,0 +1,40 @@
1
+ -# View to display the list of members, the member search form and its search results.
2
+ -# origin: M
3
+
4
+ - form_for @member_search, :url => [ :members ], :html => { :method => :get } do |form|
5
+ = form.spec_label :name
6
+ = form.text_field :name
7
+ = form.submit 'Search'
8
+
9
+ #list
10
+ - if @matching_users.present?
11
+ - form_tag request_friendships_members_path do
12
+ %table.grid
13
+ %tr
14
+ %th
15
+ %th User
16
+ %th Town
17
+ %th Country
18
+ - for user in @matching_users
19
+ %tr
20
+ %td.center
21
+ :ruby
22
+ request_id = "request_friendship_with_#{user.id}"
23
+ request_name = 'friendship_request[user_id][]'
24
+ - if current_user.can_become_friends_with? user
25
+ = spec_label_tag request_id, "Request contact with #{user.username}"
26
+ = check_box_tag request_name, user.id, false, :id => request_id
27
+ - else
28
+ = friendship_status user, true
29
+ %td= link_to current_user.name_for(user), user
30
+ %td= user.town
31
+ %td= user.country
32
+ - buttons do
33
+ %button{ :type => 'submit' }
34
+ = icon(:email, 'Send contact requests')
35
+
36
+ = pagination @matching_users
37
+
38
+ - else
39
+ %p.none
40
+ No users found.
@@ -0,0 +1,21 @@
1
+ -# View to reset a user password after the user has forgotten her password, or wants to set her initial password
2
+ -# when her account was created by an admin.
3
+ -# origin: RM
4
+
5
+ %h1 Choose a password
6
+ %p
7
+ Please choose a new password for your account.
8
+ - form_for(@user, :url => password_path(:user_id => @user.id, :token => @user.confirmation_token), :html => { :method => :put }) do |form|
9
+ %dl
10
+ %dt
11
+ = form.label :password, "New password"
12
+ %dd
13
+ = form.error_message_on :password
14
+ = form.password_field :password
15
+ %dt
16
+ = form.label :password_confirmation
17
+ %dd
18
+ = form.error_message_on :password_confirmation
19
+ = form.password_field :password_confirmation
20
+ - buttons do
21
+ = form.submit "Save password", :disable_with => "Please wait..."
@@ -0,0 +1,14 @@
1
+ -# View to request a user password reset token after the user has forgotten her password.
2
+ -# origin: RM
3
+
4
+ %h1 Reset your password
5
+ %p
6
+ Please fill in the e-mail address you are using for this application.
7
+ %br/
8
+ We will then send you instructions to reset your password.
9
+ - form_for :password, :url => password_path do |form|
10
+ %dl
11
+ %dt= form.label :email, "E-mail"
12
+ %dd= form.text_field :email
13
+ - buttons do
14
+ = form.submit "Request instructions", :disable_with => "Please wait..."
@@ -0,0 +1,19 @@
1
+ -# View to sign into the application.
2
+ -# origin: RM
3
+
4
+ = page_head :title => icon(:sign_in, 'Sign in')
5
+
6
+ %p
7
+ No account yet?
8
+ = link_to 'Sign up!', new_user_path
9
+
10
+ - form_for :session, :url => session_path do |form|
11
+ %dl
12
+ %dt= form.label :email, 'E-mail or username'
13
+ %dd= form.text_field :email, :value => params[:session].andand[:email], :tabindex => 1
14
+ %dt
15
+ = form.label :password, 'Password'
16
+ = help link_to('Forgot your password?', new_password_path, :tabindex => 4)
17
+ %dd= form.password_field :password, :tabindex => 2
18
+ - buttons do
19
+ = form.submit 'Sign in', :tabindex => 3