houston-core 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +69 -68
  3. data/app/adapters/houston/adapters/deployment/engineyard.rb +1 -1
  4. data/app/adapters/houston/adapters/version_control/git_adapter/github_repo.rb +19 -0
  5. data/app/adapters/houston/adapters/version_control/git_adapter/remote_repo.rb +27 -0
  6. data/app/assets/images/drag-grip.png +0 -0
  7. data/app/assets/javascripts/app/infinite_scroll.coffee +1 -1
  8. data/app/assets/javascripts/app/views/_show_sprint_view.coffee +9 -9
  9. data/app/assets/javascripts/application.js +1 -0
  10. data/app/assets/javascripts/core/app.coffee +5 -0
  11. data/app/assets/javascripts/{app → core}/stacked_area_graph.coffee +0 -0
  12. data/app/assets/javascripts/{app → core}/stacked_bar_graph.coffee +0 -0
  13. data/app/assets/javascripts/dashboard.js +1 -0
  14. data/app/assets/javascripts/vendor.js +0 -1
  15. data/app/assets/stylesheets/application/exceptions.scss +3 -1
  16. data/app/assets/stylesheets/application/navigation.scss +84 -21
  17. data/app/assets/stylesheets/application/releases.scss +32 -2
  18. data/app/assets/stylesheets/application/test.scss +34 -0
  19. data/app/assets/stylesheets/core/colors.scss.erb +33 -3
  20. data/app/assets/stylesheets/dashboard/dashboard.scss +11 -7
  21. data/app/assets/stylesheets/variables.scss +3 -0
  22. data/app/concerns/belongs_to_commit.rb +14 -0
  23. data/app/concerns/project_adapter.rb +24 -6
  24. data/app/controllers/api/v1/projects_controller.rb +18 -0
  25. data/app/controllers/api/v1/sprint_tasks_controller.rb +1 -1
  26. data/app/controllers/deploys_controller.rb +1 -0
  27. data/app/controllers/project_tests_controller.rb +49 -19
  28. data/app/controllers/releases_controller.rb +5 -0
  29. data/app/controllers/test_runs_controller.rb +16 -1
  30. data/app/helpers/test_run_helper.rb +24 -0
  31. data/app/models/deploy.rb +13 -0
  32. data/app/models/github/pull_request.rb +39 -4
  33. data/app/models/release.rb +42 -0
  34. data/app/models/task.rb +3 -2
  35. data/app/models/test_run.rb +4 -0
  36. data/app/presenters/project_presenter.rb +28 -0
  37. data/app/views/deploys/show.html.erb +4 -0
  38. data/app/views/github/pulls/index.html.erb +4 -1
  39. data/app/views/layouts/_mobile_navigation.html.erb +14 -17
  40. data/app/views/layouts/_navigation.html.erb +87 -87
  41. data/app/views/layouts/dashboard.html.erb +2 -2
  42. data/app/views/project_tests/index.html.erb +22 -7
  43. data/app/views/releases/_index.html.erb +65 -0
  44. data/app/views/releases/_results.html.erb +47 -0
  45. data/app/views/releases/index.html.erb +29 -65
  46. data/app/views/sprints/dashboard.html.erb +4 -2
  47. data/config/environments/production.rb +1 -1
  48. data/config/environments/test.rb +4 -1
  49. data/config/initializers/add_navigation_renderers.rb +6 -0
  50. data/config/initializers/requirements.rb +1 -0
  51. data/config/routes.rb +3 -0
  52. data/db/migrate/20151226154901_add_search_vector_to_releases.rb +6 -0
  53. data/db/migrate/20151226155305_generate_index_on_releases.rb +5 -0
  54. data/db/migrate/20151228183704_drop_unused_tables.rb +35 -0
  55. data/db/migrate/20160120145757_add_successful_to_deploys.rb +10 -0
  56. data/db/structure.sql +19 -67
  57. data/houston.gemspec +3 -3
  58. data/lib/configuration.rb +4 -2
  59. data/lib/core_ext/array.rb +37 -0
  60. data/lib/houston/version.rb +1 -1
  61. data/test/integration/ci_integration_test.rb +14 -13
  62. data/test/unit/models/project_test.rb +33 -0
  63. data/test/unit/models/pull_request_test.rb +71 -1
  64. metadata +24 -14
  65. data/app/models/historical_head.rb +0 -5
@@ -186,8 +186,9 @@ module Houston
186
186
 
187
187
 
188
188
  def project_colors(*args)
189
- @project_colors = args.first.each_with_object({}) { |(key, hex), hash| hash[key] = ColorValue.new(hex) } if args.any?
190
- @project_colors ||= {}
189
+ new_hash = Hash.new(ColorValue.new("505050"))
190
+ @project_colors = args.first.each_with_object(new_hash) { |(key, hex), hash| hash[key] = ColorValue.new(hex) } if args.any?
191
+ @project_colors ||= new_hash
191
192
  end
192
193
 
193
194
  def environments(*args)
@@ -600,6 +601,7 @@ module Houston
600
601
 
601
602
 
602
603
  class ColorValue
604
+ attr_reader :hex
603
605
 
604
606
  def initialize(hex)
605
607
  @hex = hex
@@ -0,0 +1,37 @@
1
+ module CalculatePercentiles
2
+
3
+ # Returns the mean of all elements in array; nil if array is empty
4
+ def mean
5
+ return nil if self.length == 0
6
+ self.sum / self.length
7
+ end
8
+
9
+ # Returns the percentile value for percentile _p_; nil if array is empty.
10
+ #
11
+ # _p_ should be expressed as an integer; <tt>percentile(90)</tt> returns the 90th percentile of the array.
12
+ #
13
+ # Algorithm from NIST[http://www.itl.nist.gov/div898/handbook/prc/section2/prc252.htm]
14
+ # Implementation from https://github.com/bkoski/array_stats/pull/3
15
+ def percentile(p)
16
+ sorted_array = self.sort
17
+ rank = (p.to_f / 100) * (self.length + 1)
18
+
19
+ return nil if self.length == 0
20
+
21
+ if rank.truncate > 0 && rank.truncate < self.length
22
+ sample_0 = sorted_array[rank.truncate - 1]
23
+ sample_1 = sorted_array[rank.truncate]
24
+
25
+ # Returns the fractional part of a float. For example, <tt>(6.67).fractional_part == 0.67</tt>
26
+ fractional_part = (rank - rank.truncate).abs
27
+ (fractional_part * (sample_1 - sample_0)) + sample_0
28
+ elsif rank.truncate == 0
29
+ sorted_array.first.to_f
30
+ elsif rank.truncate == self.length
31
+ sorted_array.last.to_f
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ Array.send :include, CalculatePercentiles
@@ -1,3 +1,3 @@
1
1
  module Houston
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
@@ -4,6 +4,7 @@ require "support/houston/adapters/ci_server/mock_adapter"
4
4
 
5
5
  # Tests config/initializers/run_tests_on_post_receive.rb
6
6
  class CIIntegrationTest < ActionDispatch::IntegrationTest
7
+ attr_reader :project
7
8
 
8
9
 
9
10
  context "Houston" do
@@ -14,7 +15,7 @@ class CIIntegrationTest < ActionDispatch::IntegrationTest
14
15
  stub.instance_of(TestRun).validate! {}
15
16
 
16
17
  assert_difference "TestRun.count", +1 do
17
- post "/projects/#{@project.slug}/hooks/post_receive"
18
+ post "/projects/#{project.slug}/hooks/post_receive"
18
19
  assert_response :success
19
20
  end
20
21
  end
@@ -23,7 +24,7 @@ class CIIntegrationTest < ActionDispatch::IntegrationTest
23
24
  @project = create(:project, ci_server_name: "None")
24
25
 
25
26
  assert_no_difference "TestRun.count" do
26
- post "/projects/#{@project.slug}/hooks/post_receive"
27
+ post "/projects/#{project.slug}/hooks/post_receive"
27
28
  assert_response :success
28
29
  end
29
30
  end
@@ -31,7 +32,7 @@ class CIIntegrationTest < ActionDispatch::IntegrationTest
31
32
  should "alert maintainers when a build cannot be triggered" do
32
33
  skip "TMI: This is dependent on configured roles!"
33
34
  @project = create(:project, ci_server_name: "Mock")
34
- @project.add_teammate users(:boblail)
35
+ project.add_teammate users(:boblail)
35
36
 
36
37
  any_instance_of(Houston::Adapters::CIServer::MockAdapter::Job) do |job|
37
38
  stub(job).build! { |commit| raise Houston::Adapters::CIServer::Error }
@@ -41,7 +42,7 @@ class CIIntegrationTest < ActionDispatch::IntegrationTest
41
42
  stub.instance_of(TestRun).validate! {}
42
43
 
43
44
  assert_no_difference "TestRun.count" do
44
- post "/projects/#{@project.slug}/hooks/post_receive"
45
+ post "/projects/#{project.slug}/hooks/post_receive"
45
46
  assert_response :success
46
47
 
47
48
  configuration_error = ActionMailer::Base.deliveries.last
@@ -56,13 +57,13 @@ class CIIntegrationTest < ActionDispatch::IntegrationTest
56
57
  commit = "whatever"
57
58
  results_url = "http://example.com/results"
58
59
  @project = create(:project, ci_server_name: "Mock")
59
- @test_run = TestRun.create!(project: @project, sha: commit)
60
+ @test_run = TestRun.create!(project: project, sha: commit)
60
61
 
61
62
  any_instance_of(Houston::Adapters::CIServer::MockAdapter::Job) do |job|
62
63
  mock(job).fetch_results!(results_url).returns({})
63
64
  end
64
65
 
65
- post "/projects/#{@project.slug}/hooks/post_build", {commit: commit, results_url: results_url}
66
+ put "/projects/#{project.slug}/test_runs/#{commit}/results", {results_url: results_url}
66
67
  assert_response :success
67
68
  end
68
69
 
@@ -70,14 +71,14 @@ class CIIntegrationTest < ActionDispatch::IntegrationTest
70
71
  commit = "whatever"
71
72
  results_url = "http://example.com/results"
72
73
  @project = create(:project, ci_server_name: "Mock")
73
- @project.add_teammate users(:boblail)
74
- @test_run = TestRun.create!(project: @project, sha: commit)
74
+ project.add_teammate users(:boblail)
75
+ @test_run = TestRun.create!(project: project, sha: commit)
75
76
 
76
77
  any_instance_of(Houston::Adapters::CIServer::MockAdapter::Job) do |job|
77
78
  mock(job).fetch_results!(results_url) { raise Houston::Adapters::CIServer::Error }
78
79
  end
79
80
 
80
- post "/projects/#{@project.slug}/hooks/post_build", {commit: commit, results_url: results_url}
81
+ put "/projects/#{project.slug}/test_runs/#{commit}/results", {results_url: results_url}
81
82
 
82
83
  assert_equal "error", @test_run.reload.result
83
84
  end
@@ -86,7 +87,7 @@ class CIIntegrationTest < ActionDispatch::IntegrationTest
86
87
 
87
88
  should "fire test_run:complete when the results of the test run are saved" do
88
89
  @project = create(:project, ci_server_name: "Mock")
89
- test_run = TestRun.new(project: @project, sha: "whatever")
90
+ test_run = TestRun.new(project: project, sha: "whatever")
90
91
 
91
92
  any_instance_of(Houston::Adapters::CIServer::MockAdapter::Job) do |job|
92
93
  stub(job).fetch_results! { |results_url| {result: "pass"} }
@@ -119,7 +120,7 @@ class CIIntegrationTest < ActionDispatch::IntegrationTest
119
120
  slug: "fixture",
120
121
  version_control_name: "Git",
121
122
  extended_attributes: { "git_location" => "git@github.com:houston/fixture.git" })
122
- test_run = TestRun.new(project: @project, sha: "bd3e9e2")
123
+ test_run = TestRun.new(project: project, sha: "bd3e9e2")
123
124
 
124
125
  expected_url = "https://api.github.com/repos/houston/fixture/statuses/bd3e9e2e4ddf89a640a4f880cbf55bb46cc7e88a?access_token=#{Houston.config.github[:access_token]}"
125
126
  mock(Faraday).post(expected_url, /"state":"pending"/) do
@@ -140,7 +141,7 @@ class CIIntegrationTest < ActionDispatch::IntegrationTest
140
141
  slug: "fixture",
141
142
  version_control_name: "Git",
142
143
  extended_attributes: { "git_location" => "git@github.com:houston/fixture.git" })
143
- test_run = TestRun.new(project: @project, sha: "bd3e9e2", result: :pass, completed_at: Time.now)
144
+ test_run = TestRun.new(project: project, sha: "bd3e9e2", result: :pass, completed_at: Time.now)
144
145
 
145
146
  expected_url = "https://api.github.com/repos/houston/fixture/statuses/bd3e9e2e4ddf89a640a4f880cbf55bb46cc7e88a?access_token=#{Houston.config.github[:access_token]}"
146
147
  mock(Faraday).post(expected_url, /"state":"success"/) do
@@ -154,7 +155,7 @@ class CIIntegrationTest < ActionDispatch::IntegrationTest
154
155
 
155
156
  should "publish test results to CodeClimate" do
156
157
  @project = create(:project, code_climate_repo_token: "repo_token")
157
- test_run = TestRun.new(project: @project, sha: "bd3e9e2", result: "pass", completed_at: Time.now, coverage: [
158
+ test_run = TestRun.new(project: project, sha: "bd3e9e2", result: "pass", completed_at: Time.now, coverage: [
158
159
  { filename: "lib/test1.rb", coverage: [1,nil,nil,1,1,nil,1] },
159
160
  { filename: "lib/test2.rb", coverage: [1,nil,1,0,0,0,0,1,nil,1] }
160
161
  ])
@@ -5,6 +5,7 @@ require "support/houston/adapters/ci_server/mock_adapter"
5
5
 
6
6
 
7
7
  class ProjectTest < ActiveSupport::TestCase
8
+ attr_reader :project
8
9
 
9
10
 
10
11
  context "Validation:" do
@@ -55,4 +56,36 @@ class ProjectTest < ActiveSupport::TestCase
55
56
  end
56
57
 
57
58
 
59
+ context "A project's bare repo," do
60
+ setup do
61
+ system "rm -rf #{Rails.root}/tmp/test-01.git"
62
+ system "cp -r #{Rails.root}/test/data/bare_repo.git #{Rails.root}/tmp/test-01.git"
63
+ @project = Project.create!(
64
+ name: "Test",
65
+ slug: "test-01",
66
+ version_control_name: "Git",
67
+ extended_attributes: {"git_location" => "git@github.com:houston/fixture.git"})
68
+ end
69
+
70
+ teardown do
71
+ system "rm -rf #{Rails.root}/tmp/test-*.git"
72
+ end
73
+
74
+ context "when the project's slug is changed," do
75
+ should "be moved" do
76
+ project.update_attributes slug: "test-02"
77
+ test01_exists = File.exists?("#{Rails.root}/tmp/test-01.git")
78
+ test02_exists = File.exists?("#{Rails.root}/tmp/test-02.git")
79
+
80
+ problems = []
81
+ problems << "tmp/test-01.git still exists" if test01_exists
82
+ problems << "tmp/test-02.git does not exist" unless test02_exists
83
+
84
+ assert problems.none?, "Expected tmp/test-01.git to have been renamed " <<
85
+ "to test-02.git, but #{problems.join(" and ")}"
86
+ end
87
+ end
88
+ end
89
+
90
+
58
91
  end
@@ -63,9 +63,11 @@ class PullRequestTest < ActiveSupport::TestCase
63
63
  end
64
64
  end
65
65
 
66
+
67
+
66
68
  context "If there is already a local copy of that pull request," do
67
69
  setup do
68
- Github::PullRequest.create! { |pull|
70
+ @pull_request = Github::PullRequest.create! { |pull|
69
71
  pull.merge_attributes @pull_request_payload }
70
72
  end
71
73
 
@@ -80,6 +82,74 @@ class PullRequestTest < ActiveSupport::TestCase
80
82
  assert_match /has already been taken/, pull_request.errors.full_messages.join(", ")
81
83
  end
82
84
  end
85
+
86
+
87
+
88
+ context "when the pull request is synchronized," do
89
+ context "and base_sha changes, it" do
90
+ setup do
91
+ pull_request.merge_attributes(
92
+ "user" => {},
93
+ "title" => "Divergent Branch",
94
+ "body" => "This is the description of the pull request",
95
+ "base" => { "sha" => "a5c551d52bb0bb8a702f70879ac9caeb12a721fc" },
96
+ "head" => { "sha" => "baa3ef218a40f23fe542f98d8b8e60a2e8e0bff0" })
97
+ end
98
+
99
+ should "associate itself with all the commits again" do
100
+ mock(pull_request.project.commits).between(
101
+ "a5c551d52bb0bb8a702f70879ac9caeb12a721fc",
102
+ "baa3ef218a40f23fe542f98d8b8e60a2e8e0bff0").once.returns([])
103
+ pull_request.save!
104
+ end
105
+
106
+ should "fire 'github:pull:synchronize'" do
107
+ assert_triggered "github:pull:synchronize" do
108
+ pull_request.save!
109
+ end
110
+ end
111
+ end
112
+
113
+ context "and head_sha changes, it" do
114
+ setup do
115
+ pull_request.merge_attributes(
116
+ "user" => {},
117
+ "title" => "Divergent Branch",
118
+ "body" => "This is the description of the pull request",
119
+ "base" => { "sha" => "e0e4580f44317a084dd5142fef6b4144a4394819" },
120
+ "head" => { "sha" => "a5c551d52bb0bb8a702f70879ac9caeb12a721fc" })
121
+ end
122
+
123
+ should "associate itself with all the commits again" do
124
+ mock(pull_request.project.commits).between(
125
+ "e0e4580f44317a084dd5142fef6b4144a4394819",
126
+ "a5c551d52bb0bb8a702f70879ac9caeb12a721fc").once.returns([])
127
+ pull_request.save!
128
+ end
129
+
130
+ should "fire 'github:pull:synchronize'" do
131
+ assert_triggered "github:pull:synchronize" do
132
+ pull_request.save!
133
+ end
134
+ end
135
+ end
136
+
137
+ context "and neither base_sha nor head_sha changes, it" do
138
+ setup do
139
+ pull_request.merge_attributes(
140
+ "user" => {},
141
+ "title" => "Divergent Branch",
142
+ "body" => "This is the description of the pull request",
143
+ "base" => { "sha" => "e0e4580f44317a084dd5142fef6b4144a4394819" },
144
+ "head" => { "sha" => "baa3ef218a40f23fe542f98d8b8e60a2e8e0bff0" })
145
+ end
146
+
147
+ should "not associate itself with all the commits again" do
148
+ mock(pull_request.project.commits).between.never
149
+ pull_request.save!
150
+ end
151
+ end
152
+ end
83
153
  end
84
154
  end
85
155
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: houston-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Lail
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-14 00:00:00.000000000 Z
11
+ date: 2016-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 4.2.5
19
+ version: 4.2.5.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 4.2.5
26
+ version: 4.2.5.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sprockets
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -184,14 +184,14 @@ dependencies:
184
184
  requirements:
185
185
  - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: 0.8.10
187
+ version: 0.9.2
188
188
  type: :runtime
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: 0.8.10
194
+ version: 0.9.2
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: faraday-http-cache
197
197
  requirement: !ruby/object:Gem::Requirement
@@ -280,16 +280,16 @@ dependencies:
280
280
  name: nokogiri
281
281
  requirement: !ruby/object:Gem::Requirement
282
282
  requirements:
283
- - - "~>"
283
+ - - ">="
284
284
  - !ruby/object:Gem::Version
285
- version: 1.6.6.2
285
+ version: '0'
286
286
  type: :runtime
287
287
  prerelease: false
288
288
  version_requirements: !ruby/object:Gem::Requirement
289
289
  requirements:
290
- - - "~>"
290
+ - - ">="
291
291
  - !ruby/object:Gem::Version
292
- version: 1.6.6.2
292
+ version: '0'
293
293
  - !ruby/object:Gem::Dependency
294
294
  name: houston-oauth-plugin
295
295
  requirement: !ruby/object:Gem::Requirement
@@ -775,6 +775,7 @@ files:
775
775
  - app/assets/images/bug-open-32.png
776
776
  - app/assets/images/bug-zero-128.png
777
777
  - app/assets/images/bug-zero-48.png
778
+ - app/assets/images/drag-grip.png
778
779
  - app/assets/javascripts/app/boot.coffee
779
780
  - app/assets/javascripts/app/emoji.coffee.erb
780
781
  - app/assets/javascripts/app/infinite_scroll.coffee
@@ -787,8 +788,6 @@ files:
787
788
  - app/assets/javascripts/app/models/user.coffee
788
789
  - app/assets/javascripts/app/mousetrap-bind-scoped.js
789
790
  - app/assets/javascripts/app/releases.coffee
790
- - app/assets/javascripts/app/stacked_area_graph.coffee
791
- - app/assets/javascripts/app/stacked_bar_graph.coffee
792
791
  - app/assets/javascripts/app/table_row_expander.coffee
793
792
  - app/assets/javascripts/app/ticket_tracker_refresh.coffee
794
793
  - app/assets/javascripts/app/views/_show_sprint_view.coffee
@@ -817,6 +816,8 @@ files:
817
816
  - app/assets/javascripts/core/handlebars_helpers.coffee
818
817
  - app/assets/javascripts/core/helpers.coffee
819
818
  - app/assets/javascripts/core/jquery_extensions.coffee
819
+ - app/assets/javascripts/core/stacked_area_graph.coffee
820
+ - app/assets/javascripts/core/stacked_bar_graph.coffee
820
821
  - app/assets/javascripts/dashboard.js
821
822
  - app/assets/javascripts/dashboard/refresher.coffee
822
823
  - app/assets/javascripts/vendor.js
@@ -875,6 +876,7 @@ files:
875
876
  - app/assets/stylesheets/dashboard.css
876
877
  - app/assets/stylesheets/dashboard/dashboard.scss
877
878
  - app/assets/stylesheets/print.css.scss
879
+ - app/assets/stylesheets/variables.scss
878
880
  - app/assets/stylesheets/vendor.css
879
881
  - app/assets/templates/commit.hbs
880
882
  - app/assets/templates/keyboard_shortcuts.hbs
@@ -913,6 +915,7 @@ files:
913
915
  - app/concerns/retirement.rb
914
916
  - app/concerns/ticket_synchronizer.rb
915
917
  - app/concerns/unique_add.rb
918
+ - app/controllers/api/v1/projects_controller.rb
916
919
  - app/controllers/api/v1/sprint_tasks_controller.rb
917
920
  - app/controllers/api/v1/ticket_tasks_controller.rb
918
921
  - app/controllers/application_controller.rb
@@ -1011,7 +1014,6 @@ files:
1011
1014
  - app/models/github/pull_request_event.rb
1012
1015
  - app/models/github/unauthorized.rb
1013
1016
  - app/models/github_token.rb
1014
- - app/models/historical_head.rb
1015
1017
  - app/models/key_dependency.rb
1016
1018
  - app/models/maintenance_light.rb
1017
1019
  - app/models/measurement.rb
@@ -1056,6 +1058,7 @@ files:
1056
1058
  - app/presenters/full_ticket_presenter.rb
1057
1059
  - app/presenters/one_or_many.rb
1058
1060
  - app/presenters/problem_presenter.rb
1061
+ - app/presenters/project_presenter.rb
1059
1062
  - app/presenters/release_presenter.rb
1060
1063
  - app/presenters/sprint_task_presenter.rb
1061
1064
  - app/presenters/task_presenter.rb
@@ -1131,7 +1134,9 @@ files:
1131
1134
  - app/views/releases/_changelog.html.erb
1132
1135
  - app/views/releases/_commits.html.erb
1133
1136
  - app/views/releases/_form.html.erb
1137
+ - app/views/releases/_index.html.erb
1134
1138
  - app/views/releases/_new_release.html.erb
1139
+ - app/views/releases/_results.html.erb
1135
1140
  - app/views/releases/_tickets.html.erb
1136
1141
  - app/views/releases/edit.html.erb
1137
1142
  - app/views/releases/index.html.erb
@@ -1392,10 +1397,15 @@ files:
1392
1397
  - db/migrate/20151205214647_add_avatar_url_to_pull_requests.rb
1393
1398
  - db/migrate/20151209004458_add_json_labels_to_pull_requests.rb
1394
1399
  - db/migrate/20151209030113_add_timestamps_to_pull_requests.rb
1400
+ - db/migrate/20151226154901_add_search_vector_to_releases.rb
1401
+ - db/migrate/20151226155305_generate_index_on_releases.rb
1402
+ - db/migrate/20151228183704_drop_unused_tables.rb
1403
+ - db/migrate/20160120145757_add_successful_to_deploys.rb
1395
1404
  - db/seeds.rb
1396
1405
  - db/structure.sql
1397
1406
  - houston.gemspec
1398
1407
  - lib/configuration.rb
1408
+ - lib/core_ext/array.rb
1399
1409
  - lib/core_ext/duration.rb
1400
1410
  - lib/core_ext/exception.rb
1401
1411
  - lib/core_ext/hash.rb
@@ -3449,7 +3459,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
3449
3459
  version: '0'
3450
3460
  requirements: []
3451
3461
  rubyforge_project:
3452
- rubygems_version: 2.4.8
3462
+ rubygems_version: 2.2.2
3453
3463
  signing_key:
3454
3464
  specification_version: 4
3455
3465
  summary: Mission Control for your projects and teams