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 TestingReportTicketPresenter < TicketPresenter
2
2
  include MarkdownHelper
3
-
3
+
4
4
  def initialize(tickets)
5
5
  super tickets
6
6
  .unclosed
@@ -23,11 +23,11 @@ class TestingReportTicketPresenter < TicketPresenter
23
23
  .select("commits.*, commits_tickets.ticket_id")
24
24
  .group_by(&:ticket_id)
25
25
  end
26
-
26
+
27
27
  def as_json(*args)
28
28
  super(*args).sort_by { |ticket| ticket[:projectTitle] }
29
29
  end
30
-
30
+
31
31
  def ticket_to_json(ticket)
32
32
  super.merge(
33
33
  committers: @committers_by_ticket.fetch(ticket.id, Set.new).map(&:to_h),
@@ -42,23 +42,23 @@ class TestingReportTicketPresenter < TicketPresenter
42
42
  releases: ReleasePresenter.new(ticket.releases).as_json,
43
43
  lastReleaseAt: ticket.last_release_at)
44
44
  end
45
-
45
+
46
46
  private
47
-
47
+
48
48
  def verdicts_by_tester_index(ticket)
49
49
  verdicts = verdicts_by_tester(ticket)
50
50
  ticket.testers.each_with_index.each_with_object({}) { |(tester, i), response| response[i + 1] = verdicts[tester.id] if verdicts.key?(tester.id) }
51
51
  end
52
-
52
+
53
53
  def verdicts_by_tester(ticket)
54
54
  notes = ticket.testing_notes_since_last_release
55
55
  return {} if notes.empty?
56
-
56
+
57
57
  verdicts_by_tester = Hash[ticket.testers.map(&:id).zip([nil])]
58
58
  notes.each do |note|
59
59
  tester_id = note.user_id
60
60
  next unless verdicts_by_tester.key?(tester_id) # not was not by a tester
61
-
61
+
62
62
  if note.fail?
63
63
  verdicts_by_tester[tester_id] = "failing"
64
64
  elsif note.pass?
@@ -67,5 +67,5 @@ private
67
67
  end
68
68
  verdicts_by_tester
69
69
  end
70
-
70
+
71
71
  end
@@ -1,10 +1,10 @@
1
1
  class TicketPresenter
2
2
  include UrlHelper
3
-
3
+
4
4
  def initialize(tickets)
5
5
  @tickets = OneOrMany.new(tickets)
6
6
  end
7
-
7
+
8
8
  def as_json(*args)
9
9
  tickets = @tickets
10
10
  tickets = Houston.benchmark "[#{self.class.name.underscore}] Load objects" do
@@ -14,7 +14,7 @@ class TicketPresenter
14
14
  tickets.map(&method(:ticket_to_json))
15
15
  end
16
16
  end
17
-
17
+
18
18
  def ticket_to_json(ticket)
19
19
  project = ticket.project
20
20
  { id: ticket.id,
@@ -32,5 +32,5 @@ class TicketPresenter
32
32
  tags: ticket.tags.map(&:to_h),
33
33
  extendedAttributes: ticket.extended_attributes }
34
34
  end
35
-
35
+
36
36
  end
@@ -4,10 +4,18 @@
4
4
  Branch: <b><%= @deploy.branch %></b>
5
5
  </p>
6
6
 
7
+ <p>
8
+ Commit Range: <b><%= link_to_commit_range_for_deploy @deploy %></b>
9
+ </p>
10
+
7
11
  <p>
8
12
  Deployer: <b><%= @deploy.deployer %></b>
9
13
  </p>
10
14
 
15
+ <p>
16
+ Release Notes: <b><% if @deploy.release %><%= link_to "link", @deploy.release %><% else %>n/a<% end %></b>
17
+ </p>
18
+
11
19
  <p>
12
20
  Completed: <b><%= @deploy.completed_at %></b>
13
21
  </p>
@@ -14,8 +14,6 @@
14
14
  <td class="table-margin"></td>
15
15
  <th class="scheduler-job-name">Name</th>
16
16
  <th class="scheduler-job-schedule">Schedule</th>
17
- <!-- <th class="scheduler-job-run-count">Runs</th>
18
- <th class="scheduler-job-next-run">Next Run</th> -->
19
17
  <th class="scheduler-job-run-now"></th>
20
18
  <td class="table-margin"></td>
21
19
  </tr>
@@ -26,13 +24,6 @@
26
24
  <td class="table-margin"></td>
27
25
  <td class="scheduler-job-name"><%= job.tags.first %></td>
28
26
  <td class="scheduler-job-schedule"><%= job.original %></td>
29
- <!-- <td class="scheduler-job-name"><%= job.count %></td>
30
- <td class="scheduler-job-next-run">
31
- <%= job.next_time %>
32
- <span class="countdown" data-secondsleft="<%= Time.now - job.next_time %>">
33
- <%# countdown Time.now - job.next_time %>
34
- </span>
35
- </td> -->
36
27
  <td class="scheduler-job-run-now">
37
28
  <%= button_to "Run now", run_job_path(slug: job.tags.first), :class => "btn btn-default" %>
38
29
  </td>
@@ -52,31 +43,6 @@
52
43
  <script type="text/javascript">
53
44
  $(function() {
54
45
  $('#jobs').tablesorter();
55
-
56
- var format = d3.format('02d'),
57
- $countdowns, $countdown, label, timeleft, seconds, minutes, hours, days;
58
-
59
- function updateCountdowns() {
60
- $countdowns = $countdowns || $('.countdown');
61
- urgent = false;
62
- $countdowns.each(function() {
63
- $countdown = $(this);
64
- timeleft = +$countdown.attr('data-secondsleft') - 1;
65
- $countdown.attr('data-secondsleft', timeleft);
66
- seconds = Math.abs(timeleft);
67
- minutes = Math.floor(seconds / 60);
68
- hours = Math.floor(minutes / 60);
69
- days = Math.floor(hours / 24);
70
-
71
- label = format(seconds % 60);
72
- if(minutes >= 1) label = format(minutes % 60) + ':' + label;
73
- if(hours >= 1) label = Math.floor(hours % 24) + ':' + label;
74
- if(days >= 1) label = '<span class="label">' + Math.floor(days) + 'd</span> ' + label;
75
- $countdown.html(label);
76
- });
77
- }
78
-
79
- setInterval(updateCountdowns, 1000);
80
46
  });
81
47
  </script>
82
48
  <% end %>
@@ -9,6 +9,7 @@
9
9
  <meta name="revision" content="<%= revision %>" />
10
10
  <meta name="env" content="<%= Rails.env %>" />
11
11
  <meta name="s3-bucket" content="<%= Houston.config.s3[:bucket] %>" />
12
+ <%= yield :meta %>
12
13
 
13
14
  <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
14
15
  <!--[if lt IE 9]>
@@ -8,6 +8,7 @@
8
8
  <meta name="relative_url_root" content="<%= main_app.root_url %>" />
9
9
  <meta name="revision" content="<%= revision %>" />
10
10
  <meta name="env" content="<%= Rails.env %>" />
11
+ <%= yield :meta %>
11
12
 
12
13
  <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
13
14
  <!--[if lt IE 9]>
@@ -64,13 +64,6 @@
64
64
  </div>
65
65
  </div>
66
66
 
67
- <div class="control-group">
68
- <%= f.label :gemnasium_slug, "Gemnasium App Slug", :class => 'control-label' %>
69
- <div class="controls">
70
- <%= f.text_field :gemnasium_slug, :class => 'text_field' %>
71
- </div>
72
- </div>
73
-
74
67
  <hr />
75
68
 
76
69
  <div class="control-group">
@@ -23,7 +23,7 @@
23
23
  <div class="controls changes-nested-editor row-fluid">
24
24
  <p class="instructions">Describe, in users&rsquo; terms, what this release changes</p>
25
25
  <%= f.nested_editor_for :release_changes do |f| -%>
26
- <div class="change-tag span3"><%= f.collection_select :tag_slug, [NullTag.instance] + Houston.config.change_tags, :slug, :name %></div>
26
+ <div class="change-tag span3"><%= f.collection_select :tag_slug, Houston.config.change_tags, :slug, :name %></div>
27
27
  <div class="change-description span8"><%= f.text_field :description, maxlength: 255 %></div>
28
28
  <% end -%>
29
29
  </div>
@@ -62,7 +62,10 @@
62
62
 
63
63
  <% if @release.commits.any? %>
64
64
  <div class="release-detail-section release-commits">
65
- <label class="control-label">Commits</label>
65
+ <label class="control-label">
66
+ Commits
67
+ <span class="commit-range"><%= link_to_release_commit_range(@release) %></span>
68
+ </label>
66
69
  <div class="controls changes-nested-editor">
67
70
  <p class="expander" data-expand="commits_block">
68
71
  <%= pluralize @release.commits.length, "commits" %> hidden •
@@ -71,7 +74,10 @@
71
74
  <div id="commits_block" class="collapsed">
72
75
  <ul class="commits">
73
76
  <% @release.commits.each do |commit| %>
74
- <li><%= format_commit(commit) %></li>
77
+ <%= content_tag :li, :id => "commit_#{commit.id}" do %>
78
+ <%= link_to_commit(commit) if github_url?(@project) && !for_email? && can?(:read, commit) %>
79
+ <%= format_commit(commit) %>
80
+ <% end %>
75
81
  <% end %>
76
82
  </ul>
77
83
  </div>
@@ -1,7 +1,7 @@
1
1
  <%= render partial: "projects/header", locals: {project: @project, subtitle: "Releases of"} %>
2
2
 
3
3
  <ul class="nav nav-pills inline">
4
- <% @project.environments.each do |environment| %>
4
+ <% @project.environments_with_release_notes.each do |environment| %>
5
5
  <% if can?(:read, @project.releases.build(environment_name: environment)) %>
6
6
  <%= content_tag :li, :class => (@environment == environment ? "active" : nil) do %>
7
7
  <% link_to environment.titleize, releases_path(@project, environment: environment) %>
@@ -7,7 +7,7 @@ require_relative "../lib/houston_server.rb"
7
7
  require_relative "../lib/houston_daemonize.rb"
8
8
 
9
9
  # Require gems listed in gemspec
10
- require "activerecord/insert_many"
10
+ require "activerecord-import"
11
11
  require "activerecord/pluck_in_batches"
12
12
  require "addressable/uri"
13
13
  require "backbone-rails"
@@ -20,7 +20,6 @@ require "devise_ldap_authenticatable"
20
20
  require "faraday"
21
21
  require "faraday-http-cache"
22
22
  require "faraday-raise-errors"
23
- require "gemnasium"
24
23
  require "gemoji"
25
24
  require "googlecharts"
26
25
  require "handlebars_assets"
data/config/database.yml CHANGED
@@ -1,14 +1,14 @@
1
1
  development:
2
2
  adapter: postgresql
3
3
  encoding: utf8
4
- database: houston_development
4
+ database: houston_core_development
5
5
  host: localhost
6
6
  prepared_statements: false
7
7
 
8
8
  test:
9
9
  adapter: postgresql
10
10
  encoding: utf8
11
- database: houston_test
11
+ database: houston_core_test
12
12
  host: localhost
13
13
  prepared_statements: false
14
14
 
@@ -16,6 +16,6 @@ test:
16
16
  production:
17
17
  adapter: postgresql
18
18
  encoding: utf8
19
- database: houston_development
19
+ database: houston_core_development
20
20
  host: localhost
21
21
  prepared_statements: false
@@ -77,7 +77,7 @@ Rails.application.configure do
77
77
 
78
78
  # Use default logging formatter so that PID and timestamp are not suppressed.
79
79
  config.log_formatter = ::Logger::Formatter.new
80
-
80
+
81
81
  # So we can send emails
82
82
  config.action_mailer.default_url_options = { host: Houston.config.host }
83
83
 
@@ -33,7 +33,7 @@ Rails.application.configure do
33
33
 
34
34
  # Print deprecation notices to the stderr.
35
35
  config.active_support.deprecation = :stderr
36
-
36
+
37
37
  # So we can send emails
38
38
  config.action_mailer.default_url_options = { host: Houston.config.host }
39
39
 
@@ -10,12 +10,12 @@ Nokogiri::XML::Node.send(:include, ClassMutator)
10
10
 
11
11
  ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
12
12
  html = %(<div class="field_with_errors">#{html_tag}</div>).html_safe
13
-
13
+
14
14
  form_fields = %w{textarea input select}
15
15
  elements = Nokogiri::HTML::DocumentFragment.parse(html_tag).css "label, " + form_fields.join(", ")
16
-
16
+
17
17
  elements.each do |e|
18
- if e.node_name.eql? "label"
18
+ if e.node_name.eql? "label"
19
19
  html = e.add_css_class("error").to_s.html_safe
20
20
  elsif form_fields.include? e.node_name
21
21
  html = e.add_css_class("error").to_s.html_safe
@@ -1,9 +1,9 @@
1
1
  module Houston
2
-
2
+
3
3
  # When the git:post_receive hook is triggered, a commit range of
4
4
  # 0000000000000000000000000000000000000000...10fb27e indicates the creation of a branch, while
5
5
  # 10fb27e...0000000000000000000000000000000000000000 indicates the deletion of a branch
6
6
  NULL_GIT_COMMIT = "0000000000000000000000000000000000000000".freeze
7
-
8
-
7
+
8
+
9
9
  end
@@ -1,7 +1,7 @@
1
1
  # Use this hook to configure devise mailer, warden hooks and so forth.
2
2
  # Many of these configuration options can be set straight in your model.
3
3
  Devise.setup do |config|
4
-
4
+
5
5
  # ==> Mailer Configuration
6
6
  # Configure the e-mail address which will be shown in Devise::Mailer,
7
7
  # note that it will be overwritten if you use your own mailer class with default "from" parameter.
@@ -100,18 +100,18 @@ Devise.setup do |config|
100
100
  # this period, the invited resource won't be able to accept the invitation.
101
101
  # When invite_for is 0 (the default), the invitation won't expire.
102
102
  # config.invite_for = 2.weeks
103
-
103
+
104
104
  # Number of invitations users can send.
105
105
  # If invitation_limit is nil, users can send unlimited invitations.
106
106
  # If invitation_limit is 0, users can't send invitations.
107
107
  # If invitation_limit n > 0, users can send n invitations.
108
108
  # Default: nil
109
109
  # config.invitation_limit = 5
110
-
110
+
111
111
  # The key to be used to check existing users when sending an invitation
112
112
  # config.invite_key = :email
113
-
114
- # Flag that force a record to be valid before being actually invited
113
+
114
+ # Flag that force a record to be valid before being actually invited
115
115
  # Default: false
116
116
  # config.validate_on_invite = true
117
117
 
@@ -256,8 +256,8 @@ Devise.setup do |config|
256
256
  # manager.intercept_401 = false
257
257
  # manager.default_strategies(:scope => :user).unshift :some_external_strategy
258
258
  # end
259
-
260
- # ==> LDAP Configuration
259
+
260
+ # ==> LDAP Configuration
261
261
  if Houston.config.authentication_strategy == :ldap
262
262
  config.ldap_logger = true
263
263
  config.ldap_create_user = true
@@ -269,7 +269,7 @@ Devise.setup do |config|
269
269
  config.ldap_ad_group_check = false
270
270
  config.ldap_auth_username_builder = Houston.config.authentication_strategy_configuration[:username_builder]
271
271
  end
272
-
272
+
273
273
 
274
274
  # ==> Mountable engine configurations
275
275
  # When using Devise inside an engine, let's call it `MyEngine`, and this engine
@@ -1,10 +1,10 @@
1
1
  # Eventually we should get rid of this, of course.
2
- # But, for now, this file documents a few things
2
+ # But, for now, this file documents a few things
3
3
  # we've scattered throughout the code base and need
4
4
  # to abstract.
5
5
  module Houston
6
6
  module TMI
7
-
7
+
8
8
  FIELD_USED_FOR_LDAP_LOGIN = "samaccountname"
9
9
  INSTRUCTIONS_FOR_LOGIN = "You can log in with your CPH domain account"
10
10
  TICKET_LABELS_FOR_MEMBERS = [
@@ -136,6 +136,6 @@ module Houston
136
136
  'New Feature',
137
137
  'CKEditor',
138
138
  ].freeze
139
-
139
+
140
140
  end
141
141
  end
@@ -1,5 +1,5 @@
1
1
  module Houston
2
-
2
+
3
3
  def self.async
4
4
  Thread.new do
5
5
  begin
@@ -9,5 +9,5 @@ module Houston
9
9
  end
10
10
  end
11
11
  end
12
-
12
+
13
13
  end
@@ -1,5 +1,5 @@
1
1
  module Houston
2
-
2
+
3
3
  def self.report_exception(exception, other_data={})
4
4
  raise if Rails.env.test? || Rails.env.development?
5
5
 
@@ -17,11 +17,11 @@ module Houston
17
17
  rescue Exception => e
18
18
  Rails.logger.error "\e[31;1mAn error occurred reporting the exception: \e[0;31m#{e.class}: #{e.message}\n #{e.backtrace.join("\n ")}\e[0m"
19
19
  end
20
-
20
+
21
21
  def self._normalize_faraday_env(env)
22
22
  env.except(:response).tap do |env|
23
23
  env[:url] = env[:url].to_s
24
24
  end
25
25
  end
26
-
26
+
27
27
  end
@@ -1,12 +1,12 @@
1
1
  module Houston
2
-
2
+
3
3
  def self.try(options, *rescue_from)
4
4
  options = { max_tries: options } if options.is_a?(Fixnum)
5
5
  options = {} unless options.is_a?(Hash)
6
6
  max_tries = options.fetch :max_tries, 3
7
7
  base = options.fetch :base, 2
8
8
  ignore = options.fetch :ignore, false
9
-
9
+
10
10
  tries = 1
11
11
  begin
12
12
  yield tries
@@ -20,5 +20,5 @@ module Houston
20
20
  retry
21
21
  end
22
22
  end
23
-
23
+
24
24
  end
@@ -1,8 +1,3 @@
1
1
  Houston.observer.on "hooks:post_receive" do |project, params|
2
2
  project.commits.sync!
3
-
4
- payload = PostReceivePayload.new(params)
5
- if payload.branch == project.gemnasium_branch && !project.gemnasium_slug.blank?
6
- PushGemfileToGemnasium.new(project).perform
7
- end
8
3
  end