houston-core 0.5.0.beta1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (368) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +0 -2
  3. data/.gitignore +3 -0
  4. data/Gemfile +1 -0
  5. data/Gemfile.lock +63 -62
  6. data/README.md +13 -121
  7. data/app/adapters/houston/adapters/ci_server/errors.rb +4 -4
  8. data/app/adapters/houston/adapters/ci_server/jenkins_adapter/job.rb +50 -50
  9. data/app/adapters/houston/adapters/ci_server/jenkins_adapter.rb +4 -4
  10. data/app/adapters/houston/adapters/ci_server/none_adapter/job.rb +5 -5
  11. data/app/adapters/houston/adapters/ci_server/none_adapter.rb +4 -4
  12. data/app/adapters/houston/adapters/deployment/engineyard.rb +20 -20
  13. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/app.rb +14 -14
  14. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/connection.rb +41 -41
  15. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/notice.rb +6 -6
  16. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/problem.rb +25 -25
  17. data/app/adapters/houston/adapters/error_tracker/errbit_adapter.rb +20 -20
  18. data/app/adapters/houston/adapters/error_tracker/none_adapter.rb +8 -8
  19. data/app/adapters/houston/adapters/error_tracker/null_app.rb +13 -13
  20. data/app/adapters/houston/adapters/ticket_tracker/errors.rb +5 -5
  21. data/app/adapters/houston/adapters/ticket_tracker/github_adapter/connection.rb +41 -41
  22. data/app/adapters/houston/adapters/ticket_tracker/github_adapter/issue.rb +22 -22
  23. data/app/adapters/houston/adapters/ticket_tracker/github_adapter.rb +7 -7
  24. data/app/adapters/houston/adapters/ticket_tracker/houston_adapter/connection.rb +13 -13
  25. data/app/adapters/houston/adapters/ticket_tracker/houston_adapter/ticket.rb +15 -15
  26. data/app/adapters/houston/adapters/ticket_tracker/houston_adapter.rb +4 -4
  27. data/app/adapters/houston/adapters/ticket_tracker/none_adapter.rb +4 -4
  28. data/app/adapters/houston/adapters/ticket_tracker/null_connection.rb +13 -13
  29. data/app/adapters/houston/adapters/ticket_tracker/null_ticket.rb +19 -19
  30. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/connection.rb +54 -54
  31. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/milestone.rb +10 -10
  32. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/ticket.rb +59 -59
  33. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter.rb +9 -9
  34. data/app/adapters/houston/adapters/version_control/commit.rb +4 -4
  35. data/app/adapters/houston/adapters/version_control/errors.rb +9 -9
  36. data/app/adapters/houston/adapters/version_control/git_adapter/github_repo.rb +15 -15
  37. data/app/adapters/houston/adapters/version_control/git_adapter/remote_repo.rb +53 -30
  38. data/app/adapters/houston/adapters/version_control/git_adapter/repo.rb +60 -55
  39. data/app/adapters/houston/adapters/version_control/git_adapter.rb +22 -22
  40. data/app/adapters/houston/adapters/version_control/none_adapter.rb +4 -4
  41. data/app/adapters/houston/adapters/version_control/null_commit.rb +4 -4
  42. data/app/adapters/houston/adapters/version_control/null_repo.rb +18 -18
  43. data/app/adapters/houston/adapters.rb +10 -10
  44. data/app/assets/javascripts/app/boot.coffee +5 -5
  45. data/app/assets/javascripts/app/infinite_scroll.coffee +6 -6
  46. data/app/assets/javascripts/app/models/commit.coffee +1 -1
  47. data/app/assets/javascripts/app/models/release.coffee +1 -1
  48. data/app/assets/javascripts/app/models/task.coffee +1 -1
  49. data/app/assets/javascripts/app/models/tester.coffee +1 -1
  50. data/app/assets/javascripts/app/models/testing_note.coffee +2 -2
  51. data/app/assets/javascripts/app/models/ticket.coffee +24 -24
  52. data/app/assets/javascripts/app/models/user.coffee +1 -1
  53. data/app/assets/javascripts/app/releases.coffee +6 -6
  54. data/app/assets/javascripts/app/stacked_area_graph.coffee +22 -22
  55. data/app/assets/javascripts/app/stacked_bar_graph.coffee +20 -20
  56. data/app/assets/javascripts/app/table_row_expander.coffee +10 -10
  57. data/app/assets/javascripts/app/ticket_tracker_refresh.coffee +19 -19
  58. data/app/assets/javascripts/app/views/_show_sprint_view.coffee +14 -14
  59. data/app/assets/javascripts/app/views/_tickets_view.coffee +8 -8
  60. data/app/assets/javascripts/app/views/all_tickets_view.coffee +1 -2
  61. data/app/assets/javascripts/app/views/commit_view.coffee +2 -2
  62. data/app/assets/javascripts/app/views/edit_sprint_view.coffee +36 -36
  63. data/app/assets/javascripts/app/views/find_or_create_ticket_view.coffee +3 -3
  64. data/app/assets/javascripts/app/views/keyboard_shortcuts_modal.coffee +14 -14
  65. data/app/assets/javascripts/app/views/new_ticket_modal.coffee +4 -4
  66. data/app/assets/javascripts/app/views/new_ticket_view.coffee +34 -34
  67. data/app/assets/javascripts/app/views/problems_view.coffee +8 -8
  68. data/app/assets/javascripts/app/views/reports_view.coffee +5 -5
  69. data/app/assets/javascripts/app/views/testing_note_view.coffee +10 -10
  70. data/app/assets/javascripts/app/views/testing_report_view.coffee +7 -7
  71. data/app/assets/javascripts/app/views/testing_ticket_view.coffee +36 -36
  72. data/app/assets/javascripts/app/views/ticket_modal_view.coffee +5 -5
  73. data/app/assets/javascripts/core/app.coffee +22 -22
  74. data/app/assets/javascripts/core/burndown_chart.coffee +21 -21
  75. data/app/assets/javascripts/core/errors.coffee +2 -2
  76. data/app/assets/javascripts/core/handlebars_helpers.coffee +6 -6
  77. data/app/assets/javascripts/core/jquery_extensions.coffee +28 -28
  78. data/app/assets/javascripts/dashboard/refresher.coffee +4 -4
  79. data/app/assets/stylesheets/application/ansi.scss +2 -2
  80. data/app/assets/stylesheets/application/commit.scss +1 -1
  81. data/app/assets/stylesheets/application/exceptions.scss +3 -3
  82. data/app/assets/stylesheets/application/find_or_create_ticket.scss +2 -2
  83. data/app/assets/stylesheets/application/follow_up.scss +2 -2
  84. data/app/assets/stylesheets/application/forms.scss +2 -2
  85. data/app/assets/stylesheets/application/freight_train.css.scss +5 -5
  86. data/app/assets/stylesheets/application/full_screen.scss +2 -2
  87. data/app/assets/stylesheets/application/infinite_scroll.scss +1 -1
  88. data/app/assets/stylesheets/application/keyboard_shortcuts.scss +3 -3
  89. data/app/assets/stylesheets/application/markdown.scss +2 -2
  90. data/app/assets/stylesheets/application/navigation.scss +15 -15
  91. data/app/assets/stylesheets/application/new_ticket_view.scss +16 -16
  92. data/app/assets/stylesheets/application/omnibar.scss +6 -6
  93. data/app/assets/stylesheets/application/project_banner_buttons.scss +6 -6
  94. data/app/assets/stylesheets/application/project_tiles.scss +2 -2
  95. data/app/assets/stylesheets/application/projects.css.scss +3 -3
  96. data/app/assets/stylesheets/application/pull_requests.scss +6 -6
  97. data/app/assets/stylesheets/application/queue.scss +2 -2
  98. data/app/assets/stylesheets/application/release_form.scss +10 -10
  99. data/app/assets/stylesheets/application/releases.scss +32 -39
  100. data/app/assets/stylesheets/application/sortable_table.scss +6 -6
  101. data/app/assets/stylesheets/application/sprint.scss +6 -6
  102. data/app/assets/stylesheets/application/tables.scss +6 -6
  103. data/app/assets/stylesheets/application/test_run.scss +16 -16
  104. data/app/assets/stylesheets/application/ticket.scss +13 -13
  105. data/app/assets/stylesheets/application/ticket_modal.scss +19 -19
  106. data/app/assets/stylesheets/application/tickets.scss +2 -2
  107. data/app/assets/stylesheets/application/timeline.scss +30 -30
  108. data/app/assets/stylesheets/application/tips.scss +1 -1
  109. data/app/assets/stylesheets/application/typeahead.scss +4 -4
  110. data/app/assets/stylesheets/application/uploading.scss +13 -13
  111. data/app/assets/stylesheets/application/welcome.scss +3 -3
  112. data/app/assets/stylesheets/core/burndown_chart.scss +11 -11
  113. data/app/assets/stylesheets/core/misc.scss +8 -8
  114. data/app/assets/stylesheets/core/overrides.scss +2 -2
  115. data/app/assets/stylesheets/core/scores.scss +26 -26
  116. data/app/assets/stylesheets/dashboard/dashboard.scss +16 -16
  117. data/app/assets/stylesheets/print.css.scss +3 -3
  118. data/app/concerns/commit_synchronizer.rb +24 -24
  119. data/app/concerns/feature_state.rb +7 -7
  120. data/app/concerns/feature_support.rb +4 -4
  121. data/app/concerns/historical_weekly_stats.rb +4 -4
  122. data/app/concerns/milestone_synchronizer.rb +14 -14
  123. data/app/concerns/nosync.rb +4 -4
  124. data/app/concerns/project_adapter.rb +22 -22
  125. data/app/concerns/retirement.rb +7 -7
  126. data/app/concerns/ticket_synchronizer.rb +31 -31
  127. data/app/concerns/unique_add.rb +2 -2
  128. data/app/controllers/api/v1/sprint_tasks_controller.rb +19 -19
  129. data/app/controllers/api/v1/ticket_tasks_controller.rb +14 -14
  130. data/app/controllers/application_controller.rb +46 -40
  131. data/app/controllers/commits_controller.rb +10 -10
  132. data/app/controllers/deploys_controller.rb +11 -11
  133. data/app/controllers/home_controller.rb +4 -4
  134. data/app/controllers/jobs_controller.rb +3 -3
  135. data/app/controllers/oauth_consumers_controller.rb +1 -1
  136. data/app/controllers/omnibar_controller.rb +6 -6
  137. data/app/controllers/project_exceptions_controller.rb +11 -11
  138. data/app/controllers/project_hooks_controller.rb +7 -7
  139. data/app/controllers/project_options_controller.rb +8 -8
  140. data/app/controllers/project_pretickets_controller.rb +6 -6
  141. data/app/controllers/project_roles_controller.rb +7 -7
  142. data/app/controllers/project_tickets_controller.rb +28 -28
  143. data/app/controllers/project_tickets_sync_controller.rb +8 -8
  144. data/app/controllers/projects_controller.rb +29 -29
  145. data/app/controllers/releases_controller.rb +25 -25
  146. data/app/controllers/reports_controller.rb +36 -36
  147. data/app/controllers/sessions_controller.rb +2 -2
  148. data/app/controllers/settings_controller.rb +3 -3
  149. data/app/controllers/sprint_task_locks_controller.rb +11 -11
  150. data/app/controllers/sprints_controller.rb +25 -25
  151. data/app/controllers/tasks_controller.rb +10 -10
  152. data/app/controllers/test_runs_controller.rb +8 -8
  153. data/app/controllers/tester_bar_controller.rb +2 -2
  154. data/app/controllers/testing_notes_controller.rb +15 -15
  155. data/app/controllers/testing_report_controller.rb +14 -14
  156. data/app/controllers/tickets_controller.rb +9 -9
  157. data/app/controllers/uploads_controller.rb +9 -9
  158. data/app/controllers/user_credentials_controller.rb +4 -4
  159. data/app/controllers/user_options_controller.rb +6 -6
  160. data/app/controllers/users_controller.rb +34 -34
  161. data/app/controllers/welcome_controller.rb +6 -6
  162. data/app/helpers/ansi_helper.rb +4 -4
  163. data/app/helpers/application_helper.rb +26 -26
  164. data/app/helpers/avatar_helper.rb +12 -12
  165. data/app/helpers/backtrace_helper.rb +2 -2
  166. data/app/helpers/breadcrumbs_helper.rb +9 -9
  167. data/app/helpers/commit_helper.rb +16 -12
  168. data/app/helpers/demo_helper.rb +4 -4
  169. data/app/helpers/email_helper.rb +3 -3
  170. data/app/helpers/emoji_helper.rb +1 -1
  171. data/app/helpers/excel_helpers.rb +2 -2
  172. data/app/helpers/exposure_helper.rb +3 -3
  173. data/app/helpers/flash_message_helper.rb +6 -6
  174. data/app/helpers/maintenance_light_helper.rb +3 -3
  175. data/app/helpers/markdown_helper.rb +3 -3
  176. data/app/helpers/navigation_helper.rb +12 -12
  177. data/app/helpers/project_helper.rb +5 -5
  178. data/app/helpers/release_helper.rb +9 -9
  179. data/app/helpers/score_card_helper.rb +16 -16
  180. data/app/helpers/sprint_helper.rb +2 -2
  181. data/app/helpers/static_chart_helper.rb +2 -2
  182. data/app/helpers/test_run_helper.rb +6 -6
  183. data/app/helpers/ticket_helper.rb +14 -14
  184. data/app/helpers/timeline_helper.rb +5 -5
  185. data/app/helpers/url_helper.rb +26 -26
  186. data/app/helpers/user_helper.rb +6 -6
  187. data/app/helpers/version_helper.rb +4 -4
  188. data/app/interactors/test_run_comparer.rb +9 -9
  189. data/app/interactors/ticket_report.rb +7 -7
  190. data/app/jobs/sync_all_tickets_job.rb +13 -13
  191. data/app/jobs/sync_commits_job.rb +3 -3
  192. data/app/jobs/sync_project_tickets_job.rb +9 -9
  193. data/app/mailers/deploy_notification.rb +9 -9
  194. data/app/mailers/project_notification.rb +29 -29
  195. data/app/mailers/view_mailer.rb +20 -38
  196. data/app/models/ability.rb +21 -21
  197. data/app/models/activity_feed.rb +25 -25
  198. data/app/models/antecedent.rb +3 -3
  199. data/app/models/code_climate/coverage_report.rb +25 -25
  200. data/app/models/commit.rb +77 -82
  201. data/app/models/consumer_token.rb +2 -2
  202. data/app/models/deploy.rb +31 -27
  203. data/app/models/environment.rb +12 -12
  204. data/app/models/github/commit_status_report.rb +16 -16
  205. data/app/models/github/pull_request.rb +35 -12
  206. data/app/models/github/pull_request_event.rb +6 -5
  207. data/app/models/github_token.rb +2 -2
  208. data/app/models/historical_head.rb +2 -2
  209. data/app/models/key_dependency.rb +17 -17
  210. data/app/models/maintenance_light.rb +3 -3
  211. data/app/models/measurement.rb +22 -22
  212. data/app/models/menu_item.rb +5 -5
  213. data/app/models/menu_item_divider.rb +1 -1
  214. data/app/models/milestone.rb +27 -27
  215. data/app/models/output_stream.rb +4 -4
  216. data/app/models/post_receive_payload.rb +7 -7
  217. data/app/models/project.rb +93 -89
  218. data/app/models/project_dependencies.rb +9 -9
  219. data/app/models/project_dependency.rb +33 -33
  220. data/app/models/project_menu_item.rb +3 -3
  221. data/app/models/release.rb +60 -60
  222. data/app/models/release_change.rb +18 -18
  223. data/app/models/role.rb +15 -15
  224. data/app/models/rubygems/gem.rb +21 -21
  225. data/app/models/run_tests_on_post_receive.rb +36 -36
  226. data/app/models/setting.rb +3 -3
  227. data/app/models/settings.rb +8 -8
  228. data/app/models/source_file_coverage.rb +2 -2
  229. data/app/models/sprint.rb +19 -19
  230. data/app/models/sprint_report.rb +7 -7
  231. data/app/models/sprint_task.rb +8 -8
  232. data/app/models/static_chart/area.rb +19 -19
  233. data/app/models/static_chart.rb +35 -35
  234. data/app/models/task.rb +64 -64
  235. data/app/models/test_error.rb +2 -2
  236. data/app/models/test_result.rb +7 -0
  237. data/app/models/test_run.rb +75 -79
  238. data/app/models/test_run_statistics.rb +18 -19
  239. data/app/models/testing_note.rb +19 -19
  240. data/app/models/ticket.rb +104 -104
  241. data/app/models/ticket_antecedent.rb +11 -11
  242. data/app/models/ticket_comment.rb +6 -6
  243. data/app/models/ticket_committer.rb +3 -3
  244. data/app/models/ticket_tag.rb +6 -6
  245. data/app/models/user.rb +44 -44
  246. data/app/models/user_credentials.rb +11 -11
  247. data/app/models/value_statement.rb +3 -3
  248. data/app/presenters/commit_presenter.rb +6 -6
  249. data/app/presenters/one_or_many.rb +4 -4
  250. data/app/presenters/problem_presenter.rb +8 -8
  251. data/app/presenters/release_presenter.rb +4 -4
  252. data/app/presenters/sprint_task_presenter.rb +9 -9
  253. data/app/presenters/task_presenter.rb +8 -8
  254. data/app/presenters/tasks_excel_presenter.rb +6 -6
  255. data/app/presenters/tester_presenter.rb +3 -3
  256. data/app/presenters/testing_note_presenter.rb +4 -4
  257. data/app/presenters/testing_report_ticket_presenter.rb +9 -9
  258. data/app/presenters/ticket_presenter.rb +4 -4
  259. data/app/views/deploys/show.html.erb +8 -0
  260. data/app/views/jobs/show.html.erb +0 -34
  261. data/app/views/layouts/application.html.erb +1 -0
  262. data/app/views/layouts/minimal.html.erb +1 -0
  263. data/app/views/projects/_form.html.erb +0 -7
  264. data/app/views/releases/_form.html.erb +9 -3
  265. data/app/views/releases/index.html.erb +1 -1
  266. data/config/application.rb +1 -2
  267. data/config/database.yml +3 -3
  268. data/config/environments/production.rb +1 -1
  269. data/config/environments/test.rb +1 -1
  270. data/config/initializers/action_view_field_error_proc.rb +3 -3
  271. data/config/initializers/constants.rb +3 -3
  272. data/config/initializers/devise.rb +8 -8
  273. data/config/initializers/hard_coded_knowledge.rb +3 -3
  274. data/config/initializers/houston_async.rb +2 -2
  275. data/config/initializers/houston_report_exception.rb +3 -3
  276. data/config/initializers/houston_try.rb +3 -3
  277. data/config/initializers/sync_commits_on_post_receive.rb +0 -5
  278. data/config/routes.rb +108 -108
  279. data/db/migrate/20120417175450_devise_create_users.rb +2 -2
  280. data/db/migrate/20120501230243_add_unfuddle_id_to_tickets.rb +1 -1
  281. data/db/migrate/20120504143615_link_tickets_and_releases.rb +3 -3
  282. data/db/migrate/20120626150333_add_last_release_at_to_tickets.rb +2 -2
  283. data/db/migrate/20120626151320_link_tickets_and_commits.rb +2 -2
  284. data/db/migrate/20120626152020_add_committer_email_to_commits.rb +2 -2
  285. data/db/migrate/20120715230922_create_user_notifications.rb +3 -3
  286. data/db/migrate/20120716010743_add_user_to_releases.rb +3 -3
  287. data/db/migrate/20120726231754_link_projects_and_maintainers.rb +2 -2
  288. data/db/migrate/20120826022643_add_authentication_token_to_users.rb +2 -2
  289. data/db/migrate/20120920023251_add_administrator_to_users.rb +3 -3
  290. data/db/migrate/20121026014457_split_users_name_into_first_and_last.rb +2 -2
  291. data/db/migrate/20121027160548_create_deploys.rb +1 -1
  292. data/db/migrate/20121222170917_add_version_control_adapter_to_projects.rb +2 -2
  293. data/db/migrate/20121222223635_add_ticket_tracking_adapter_to_projects.rb +2 -2
  294. data/db/migrate/20121224212623_rename_environments.rb +3 -3
  295. data/db/migrate/20121225175106_replace_environment_id_with_environment_name.rb +8 -8
  296. data/db/migrate/20121230174234_create_test_runs.rb +3 -3
  297. data/db/migrate/20130119203853_remove_cached_queries_from_projects.rb +1 -1
  298. data/db/migrate/20130119204608_add_extended_attributes_to_tickets.rb +10 -10
  299. data/db/migrate/20130120182026_create_ticket_prerequisites.rb +2 -2
  300. data/db/migrate/20130312224911_create_errors.rb +1 -1
  301. data/db/migrate/20130407195450_create_roles.rb +2 -2
  302. data/db/migrate/20130407200624_populate_roles.rb +9 -9
  303. data/db/migrate/20130407220039_add_project_id_to_testing_notes.rb +6 -6
  304. data/db/migrate/20130407220937_add_project_id_to_commits.rb +6 -6
  305. data/db/migrate/20130416020627_add_environments_subscribed_to_to_users.rb +3 -3
  306. data/db/migrate/20130420174126_add_error_tracker_name_to_projects.rb +2 -2
  307. data/db/migrate/20130427223925_create_project_quotas.rb +2 -2
  308. data/db/migrate/20130504014802_add_extended_attributes_to_projects.rb +3 -3
  309. data/db/migrate/20130504135741_add_antecedents_to_tickets.rb +6 -6
  310. data/db/migrate/20130505144446_add_tags_to_tickets.rb +1 -1
  311. data/db/migrate/20130505162039_add_type_to_tickets.rb +1 -1
  312. data/db/migrate/20130505212838_add_closed_at_to_tickets.rb +1 -1
  313. data/db/migrate/20130519163615_create_user_credentials.rb +2 -2
  314. data/db/migrate/20130526024851_give_default_values_for_counts_from_test_runs.rb +2 -2
  315. data/db/migrate/20130710233849_add_authored_at_to_commits.rb +10 -10
  316. data/db/migrate/20130711013156_link_commits_and_users.rb +6 -6
  317. data/db/migrate/20130806143651_link_commits_and_releases.rb +2 -2
  318. data/db/migrate/20130921141449_create_milestones.rb +3 -3
  319. data/db/migrate/20131004185618_add_first_release_at_to_tickets.rb +2 -2
  320. data/db/migrate/20131012152403_create_sprints.rb +3 -3
  321. data/db/migrate/20131112010815_delete_duplicate_commits.rb +7 -7
  322. data/db/migrate/20140217160450_add_email_addresses_to_users.rb +3 -3
  323. data/db/migrate/20140327020121_drop_ticket_prerequisites.rb +1 -1
  324. data/db/migrate/20140406183224_remove_new_relic_id_from_projects.rb +1 -1
  325. data/db/migrate/20140406230121_delete_automatically_generated_messages_for_releases.rb +1 -1
  326. data/db/migrate/20140407010111_drop_sprints_project_id.rb +1 -1
  327. data/db/migrate/20140418133005_change_ticket_antecedents_to_text_array.rb +1 -1
  328. data/db/migrate/20140425141946_embed_changes_in_releases.rb +3 -3
  329. data/db/migrate/20140515174322_create_tasks.rb +3 -3
  330. data/db/migrate/20140516012049_create_tasks_for_existing_tickets.rb +1 -1
  331. data/db/migrate/20140517012626_prevent_hstore_fields_from_being_null.rb +2 -2
  332. data/db/migrate/20140521014652_allow_task_descriptions_to_be_null.rb +1 -1
  333. data/db/migrate/20140526155845_add_commit_id_to_deploys.rb +5 -5
  334. data/db/migrate/20140526162645_add_commit_before_id_and_commit_after_id_to_releases.rb +4 -4
  335. data/db/migrate/20140526180608_associate_remaining_deploys_and_releases.rb +12 -12
  336. data/db/migrate/20140724231918_create_sprints_tasks.rb +3 -3
  337. data/db/migrate/20140824194031_add_project_id_to_tasks.rb +1 -1
  338. data/db/migrate/20140824194526_add_completed_at_to_tasks.rb +3 -3
  339. data/db/migrate/20140824211249_require_sprints_to_be_unique.rb +1 -1
  340. data/db/migrate/20140907012329_drop_table_changes.rb +1 -1
  341. data/db/migrate/20140907013836_drop_table_errors.rb +1 -1
  342. data/db/migrate/20140921190022_add_checked_out_to_sprints_tasks.rb +2 -2
  343. data/db/migrate/20140921201441_drop_users_name.rb +1 -1
  344. data/db/migrate/20140925021043_rename_deploys_commit_to_sha.rb +1 -1
  345. data/db/migrate/20140929004347_create_historical_heads.rb +4 -4
  346. data/db/migrate/20141027194819_make_users_environments_subscribed_to_an_array.rb +2 -2
  347. data/db/migrate/20141226171730_create_measurements.rb +1 -1
  348. data/db/migrate/20150119154013_drop_unused_fields_from_milestones.rb +1 -1
  349. data/db/migrate/20150222205616_add_features_to_projects.rb +2 -2
  350. data/db/migrate/20150323004452_add_deploys_completed_at.rb +1 -1
  351. data/db/migrate/20150805180939_add_commit_id_to_test_runs.rb +1 -1
  352. data/db/migrate/20150808161805_create_test_results.rb +1 -1
  353. data/db/migrate/20150809132417_rename_test_results_regression_to_difference.rb +1 -1
  354. data/db/migrate/20150927014445_required_pull_requests_to_be_unique_by_project_and_number.rb +13 -0
  355. data/db/structure.sql +9 -0
  356. data/houston.gemspec +23 -26
  357. data/lib/configuration.rb +0 -5
  358. data/lib/core_ext/duration.rb +4 -4
  359. data/lib/core_ext/hash.rb +17 -17
  360. data/lib/houston/version.rb +1 -1
  361. data/lib/houston_server.rb +6 -6
  362. data/lib/parallel_enumerable.rb +16 -16
  363. data/lib/tasks/specific_tests.rake +37 -0
  364. metadata +91 -107
  365. data/app/interactors/push_gemfile_to_gemnasium.rb +0 -88
  366. data/app/models/gemnasium/alert.rb +0 -25
  367. data/app/views/welcome/_tdl.html.erb +0 -31
  368. data/config/initializers/houston_tdl.rb +0 -104
@@ -1,6 +1,6 @@
1
1
  class ViewMailer < ActionMailer::Base
2
2
  include AbstractController::Callbacks
3
-
3
+
4
4
  helper AvatarHelper
5
5
  helper BacktraceHelper
6
6
  helper CommitHelper
@@ -13,7 +13,7 @@ class ViewMailer < ActionMailer::Base
13
13
  helper TestRunHelper
14
14
  helper TicketHelper
15
15
  helper UrlHelper
16
-
16
+
17
17
  class_attribute :stylesheets
18
18
  self.stylesheets = %w{
19
19
  core/colors.scss.erb
@@ -26,34 +26,34 @@ class ViewMailer < ActionMailer::Base
26
26
  application/pull_requests.scss
27
27
  application/follow_up.scss
28
28
  }
29
-
29
+
30
30
  helper_method :can?, :cannot?, :current_ability, :stylesheets
31
31
  delegate :can?, :cannot?, to: :current_ability
32
32
  delegate :stylesheets, to: "self.class"
33
-
33
+
34
34
  # c.f. https://github.com/ryanb/cancan/blob/1.6.7/lib/cancan/controller_additions.rb#L348-L350
35
35
  def current_ability
36
36
  @current_ability ||= ::Ability.new(User.new) # Treat email recipients as Guests, not Customers
37
37
  end
38
-
39
-
38
+
39
+
40
40
  before_filter { @for_email = true }
41
-
42
-
41
+
42
+
43
43
  protected
44
-
45
-
44
+
45
+
46
46
  def mail(options={})
47
47
  options[:from] = format_email_addresses(options[:from]) if options.key?(:from)
48
48
  options[:to] = format_email_addresses(options[:to]).uniq if options.key?(:to)
49
49
  options[:cc] = format_email_addresses(options[:cc]).uniq if options.key?(:cc)
50
50
  options[:bcc] = format_email_addresses(options[:bcc]).uniq if options.key?(:bcc)
51
-
51
+
52
52
  # Don't CC anyone whose already being mailed
53
53
  options[:cc] -= options[:to] if options[:to] && options[:cc]
54
-
54
+
55
55
  return if Array(options[:to]).none? and Array(options[:cc]).none?
56
-
56
+
57
57
  if block_given?
58
58
  super
59
59
  else
@@ -71,37 +71,19 @@ protected
71
71
  # Note: Premailer 2.0 will drop Hpricot, but that's not going to
72
72
  # out for a while...
73
73
  end
74
- # !todo: inline SVG images
75
- # image = Magick::Image::from_blob(svg) { self.format = "svg" }
76
- # png = image[0].to_blob { self.format = "png" }
77
- # File.open(File.expand_path("~/Desktop/test.png", "w")) { |f| f.write(png) }
78
-
79
- # http://ubuntuforums.org/showthread.php?t=820965&s=e5da4de191aaf858d88085ee67d9ade1&p=5131769#post5131769
80
- # $ cd your-directory-with-the-svgs/
81
- # $ for i in *; do rsvg-convert $i -o echo $i | sed -e 's/svg$/png/'; done
82
- #
83
- # brew install librsvg
84
- # https://gist.github.com/anonymous/d25154daff3e33dd6f7e
85
- # failed to install gettext
86
- # http://superuser.com/questions/134679/command-line-application-for-converting-svg-to-png-on-mac-os-x/723031#723031
87
-
88
- # Looks like ImageMagic uses RSVG
89
- # http://stackoverflow.com/questions/24513244/use-librsvg-rsvg-to-convert-svg-images-with-imagemagick
90
- # → convert -list delegate | grep svg
91
- # svg => "rsvg-convert" -o "%o" "%i"
92
-
74
+
93
75
  html
94
76
  end
95
77
  end
96
78
  end
97
79
  end
98
-
99
-
80
+
81
+
100
82
  def format_email_addresses(recipients)
101
83
  Array.wrap(recipients).map &method(:format_email_address)
102
84
  end
103
-
104
-
85
+
86
+
105
87
  def format_email_address(recipient)
106
88
  if recipient.respond_to?(:name) && recipient.respond_to?(:email)
107
89
  Mail::Address.new.tap do |email|
@@ -112,6 +94,6 @@ protected
112
94
  recipient
113
95
  end
114
96
  end
115
-
116
-
97
+
98
+
117
99
  end
@@ -1,8 +1,8 @@
1
1
  class Ability
2
2
  include CanCan::Ability
3
-
4
-
5
-
3
+
4
+
5
+
6
6
  def initialize(user)
7
7
  if user && user.administrator?
8
8
  can :manage, :all
@@ -12,42 +12,42 @@ class Ability
12
12
  default_abilities_for(user)
13
13
  end
14
14
  end
15
-
16
-
17
-
15
+
16
+
17
+
18
18
  def default_abilities_for(user)
19
-
19
+
20
20
  # Anyone can see everything
21
21
  can :read, :all
22
-
22
+
23
23
  if user
24
-
24
+
25
25
  # If you're logged in, you can update yourself
26
26
  can :update, user
27
-
28
-
27
+
28
+
29
29
  if user.developer? or user.tester?
30
-
30
+
31
31
  # Developers and Testers can see and comment on Testing Reports
32
32
  # They can also edit their own notes
33
33
  can [:create, :read], TestingNote
34
34
  can [:update, :destroy], TestingNote, user_id: user.id
35
-
35
+
36
36
  end
37
-
38
-
37
+
38
+
39
39
  if user.developer?
40
-
40
+
41
41
  # Developers can manage projects and releases
42
42
  can :manage, Project
43
43
  can :manage, Release
44
44
  can :manage, Sprint
45
-
45
+
46
46
  end
47
47
  end
48
-
48
+
49
49
  end
50
-
51
-
52
-
50
+
51
+
52
+
53
53
  end
@@ -1,13 +1,13 @@
1
1
  class ActivityFeed
2
-
2
+
3
3
  def initialize(projects, time, options={})
4
4
  @projects = projects
5
5
  @time = time
6
6
  @count = options.fetch(:count, 25)
7
7
  end
8
-
8
+
9
9
  attr_reader :projects, :time, :count
10
-
10
+
11
11
  def events
12
12
  @events ||= (
13
13
  ticket_creations +
@@ -17,95 +17,95 @@ class ActivityFeed
17
17
  .reverse
18
18
  .take(count)
19
19
  end
20
-
20
+
21
21
  def ticket_creations
22
22
  Ticket.for_projects(projects).includes(:project, :reporter).created_before(time).limit(count)
23
23
  .map { |ticket| TicketCreatedEvent.new(ticket) }
24
24
  end
25
-
25
+
26
26
  def ticket_closures
27
27
  Ticket.for_projects(projects).includes(:project, :reporter).closed_before(time).limit(count)
28
28
  .map { |ticket| TicketClosedEvent.new(ticket) }
29
29
  end
30
-
30
+
31
31
  def releases
32
32
  Release.for_projects(projects).includes(:project, :user).before(time).limit(count)
33
33
  .map { |release| ReleaseEvent.new(release) }
34
34
  end
35
-
36
-
37
-
35
+
36
+
37
+
38
38
  class Event < Struct.new(:time, :project)
39
39
  def date
40
40
  time.to_date
41
41
  end
42
42
  end
43
-
43
+
44
44
  class TicketEvent < Event
45
45
  attr_reader :ticket
46
-
46
+
47
47
  def initialize(time, ticket)
48
48
  @ticket = ticket
49
49
  super time, ticket.project
50
50
  end
51
-
51
+
52
52
  def actor
53
53
  ticket.reporter
54
54
  end
55
55
  end
56
-
56
+
57
57
  class TicketCreatedEvent < TicketEvent
58
58
  def initialize(ticket)
59
59
  super(ticket.created_at, ticket)
60
60
  end
61
-
61
+
62
62
  def css
63
63
  "timeline-event-ticket-created"
64
64
  end
65
-
65
+
66
66
  def icon
67
67
  "fa fa-plus"
68
68
  end
69
69
  end
70
-
70
+
71
71
  class TicketClosedEvent < TicketEvent
72
72
  def initialize(ticket)
73
73
  super(ticket.closed_at, ticket)
74
74
  end
75
-
75
+
76
76
  def resolution
77
77
  return "Closed" if ticket.resolution.blank?
78
78
  ticket.resolution.titleize
79
79
  end
80
-
80
+
81
81
  def css
82
82
  "timeline-event-ticket-closed"
83
83
  end
84
-
84
+
85
85
  def icon
86
86
  "fa fa-minus"
87
87
  end
88
88
  end
89
-
89
+
90
90
  class ReleaseEvent < Event
91
91
  attr_reader :release
92
-
92
+
93
93
  def initialize(release)
94
94
  @release = release
95
95
  super(release.created_at, release.project)
96
96
  end
97
-
97
+
98
98
  def css
99
99
  "timeline-event-release"
100
100
  end
101
-
101
+
102
102
  def icon
103
103
  "fa fa-paper-plane"
104
104
  end
105
-
105
+
106
106
  def actor
107
107
  release.user
108
108
  end
109
109
  end
110
-
110
+
111
111
  end
@@ -1,7 +1,7 @@
1
1
  require 'ostruct'
2
2
 
3
3
  class Antecedent
4
-
4
+
5
5
  def initialize(attributes={})
6
6
  @ticket = attributes.fetch(:ticket, Ticket.first)
7
7
  @reporter = attributes.fetch(:reporter, User.first)
@@ -9,7 +9,7 @@ class Antecedent
9
9
  @customer = attributes.fetch(:customer, OpenStruct.new(name: "Humphrey Blaughfellow"))
10
10
  @notes = attributes.fetch(:notes, "Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo volupt")
11
11
  end
12
-
12
+
13
13
  attr_reader :ticket, :reporter, :created_at, :customer, :notes
14
-
14
+
15
15
  end
@@ -21,25 +21,25 @@
21
21
  #
22
22
  module CodeClimate
23
23
  class CoverageReport
24
-
24
+
25
25
  def self.publish!(test_run)
26
26
  self.new(test_run).publish!
27
27
  end
28
-
28
+
29
29
  def initialize(test_run)
30
30
  @project = test_run.project
31
31
  @test_run = test_run
32
32
  end
33
-
33
+
34
34
  attr_reader :project, :test_run
35
-
35
+
36
36
  def publish!
37
37
  code_climate = CodeClimate::TestReporter::Client.new
38
38
  code_climate.post_results code_climate_payload
39
39
  end
40
-
41
-
42
-
40
+
41
+
42
+
43
43
  # https://github.com/codeclimate/ruby-test-reporter/blob/v0.2.0/lib/code_climate/test_reporter/formatter.rb#L58-L75
44
44
  # https://github.com/codeclimate/ruby-test-reporter/blob/v0.4.1/lib/code_climate/test_reporter/formatter.rb#L65-L80
45
45
  def code_climate_payload
@@ -56,13 +56,13 @@ module CodeClimate
56
56
  ci_service: ci_service
57
57
  }
58
58
  end
59
-
60
-
61
-
59
+
60
+
61
+
62
62
  def repo_token
63
63
  project.code_climate_repo_token
64
64
  end
65
-
65
+
66
66
  # https://github.com/codeclimate/ruby-test-reporter/blob/v0.2.0/lib/code_climate/test_reporter/formatter.rb#L39-L56
67
67
  # https://github.com/codeclimate/ruby-test-reporter/blob/v0.4.1/lib/code_climate/test_reporter/formatter.rb#L51-L60
68
68
  def source_files
@@ -81,19 +81,19 @@ module CodeClimate
81
81
  }
82
82
  end
83
83
  end
84
-
84
+
85
85
  def run_at
86
86
  test_run.completed_at.to_i
87
87
  end
88
-
88
+
89
89
  def covered_percent
90
90
  (100 * test_run.covered_percent).round(2)
91
91
  end
92
-
92
+
93
93
  def covered_strength
94
94
  test_run.covered_strength.round(2)
95
95
  end
96
-
96
+
97
97
  def line_counts
98
98
  @line_counts ||= source_files.each_with_object(Hash.new(0)) do |file, totals|
99
99
  totals[:total] += file[:line_counts][:total]
@@ -101,7 +101,7 @@ module CodeClimate
101
101
  totals[:missed] += file[:line_counts][:missed]
102
102
  end
103
103
  end
104
-
104
+
105
105
  # https://github.com/codeclimate/ruby-test-reporter/blob/v0.2.0/lib/code_climate/test_reporter/git.rb
106
106
  # https://github.com/codeclimate/ruby-test-reporter/blob/v0.4.1/lib/code_climate/test_reporter/git.rb#L8-L10
107
107
  def commit_info
@@ -111,7 +111,7 @@ module CodeClimate
111
111
  branch: test_run.branch,
112
112
  }
113
113
  end
114
-
114
+
115
115
  # https://github.com/codeclimate/ruby-test-reporter/blob/v0.2.0/lib/code_climate/test_reporter/formatter.rb#L67-L73
116
116
  # https://github.com/codeclimate/ruby-test-reporter/blob/v0.4.1/lib/code_climate/test_reporter/formatter.rb#L74-L78
117
117
  def environment
@@ -123,7 +123,7 @@ module CodeClimate
123
123
  gem_version: CodeClimate::TestReporter::VERSION
124
124
  }
125
125
  end
126
-
126
+
127
127
  # https://github.com/codeclimate/ruby-test-reporter/blob/v0.2.0/lib/code_climate/test_reporter/ci.rb
128
128
  # https://github.com/codeclimate/ruby-test-reporter/blob/v0.4.1/lib/code_climate/test_reporter/ci.rb#L28-L32
129
129
  def ci_service
@@ -140,7 +140,7 @@ module CodeClimate
140
140
  {}
141
141
  end
142
142
  end
143
-
143
+
144
144
  def committed_at
145
145
  # NB: CodeClimate actually uses committed_at
146
146
  return test_run.commit.authored_at if test_run.commit
@@ -149,19 +149,19 @@ module CodeClimate
149
149
  rescue Houston::Adapters::VersionControl::CommitNotFound
150
150
  nil
151
151
  end
152
-
153
-
154
-
152
+
153
+
154
+
155
155
  # https://github.com/codeclimate/ruby-test-reporter/blob/v0.2.0/lib/code_climate/test_reporter/formatter.rb#L85-L88
156
156
  def short_filename(filename)
157
157
  filename
158
158
  end
159
-
160
- # https://github.com/codeclimate/ruby-test-reporter/blob/v0.2.0/lib/code_climate/test_reporter/formatter.rb#L78-L83
159
+
160
+ # https://github.com/codeclimate/ruby-test-reporter/blob/v0.2.0/lib/code_climate/test_reporter/formatter.rb#L78-L83
161
161
  def blob_id_of(filename)
162
162
  blob = project.repo.find_file(filename, commit: test_run.sha)
163
163
  blob && blob.oid
164
164
  end
165
-
165
+
166
166
  end
167
167
  end