Commit 12640a498a255d9adf49a9479c2d07af5f2b2703
1 parent
5e0ed1f2
Exists in
master
and in
1 other branch
One issue tracker per app is enough.
Showing
5 changed files
with
24 additions
and
24 deletions
Show diff stats
app/controllers/apps_controller.rb
... | ... | @@ -26,7 +26,7 @@ class AppsController < ApplicationController |
26 | 26 | |
27 | 27 | def edit |
28 | 28 | @app.watchers.build if @app.watchers.none? |
29 | - @app.issue_trackers.build if @app.issue_trackers.none? | |
29 | + @app.issue_tracker = IssueTracker.new if @app.issue_tracker.nil? | |
30 | 30 | end |
31 | 31 | |
32 | 32 | def create | ... | ... |
app/models/app.rb
... | ... | @@ -16,7 +16,7 @@ class App |
16 | 16 | |
17 | 17 | embeds_many :watchers |
18 | 18 | embeds_many :deploys |
19 | - embeds_many :issue_trackers | |
19 | + embeds_one :issue_tracker | |
20 | 20 | references_many :errs, :dependent => :destroy |
21 | 21 | |
22 | 22 | before_validation :generate_api_key, :on => :create |
... | ... | @@ -25,11 +25,11 @@ class App |
25 | 25 | validates_uniqueness_of :name, :allow_blank => true |
26 | 26 | validates_uniqueness_of :api_key, :allow_blank => true |
27 | 27 | validates_associated :watchers |
28 | - validate :check_issue_trackers | |
28 | + validate :check_issue_tracker | |
29 | 29 | |
30 | 30 | accepts_nested_attributes_for :watchers, :allow_destroy => true, |
31 | 31 | :reject_if => proc { |attrs| attrs[:user_id].blank? && attrs[:email].blank? } |
32 | - accepts_nested_attributes_for :issue_trackers, :allow_destroy => true, | |
32 | + accepts_nested_attributes_for :issue_tracker, :allow_destroy => true, | |
33 | 33 | :reject_if => proc { |attrs| !%w( lighthouseapp ).include?(attrs[:issue_tracker_type]) } |
34 | 34 | |
35 | 35 | # Mongoid Bug: find(id) on association proxies returns an Enumerator |
... | ... | @@ -51,12 +51,12 @@ class App |
51 | 51 | self.api_key ||= ActiveSupport::SecureRandom.hex |
52 | 52 | end |
53 | 53 | |
54 | - def check_issue_trackers | |
55 | - issue_trackers.map(&:valid?) | |
56 | - issue_trackers.each do |tracker| | |
57 | - tracker.errors.full_messages.each do |error| | |
54 | + def check_issue_tracker | |
55 | + if issue_tracker.present? | |
56 | + issue_tracker.valid? | |
57 | + issue_tracker.errors.full_messages.each do |error| | |
58 | 58 | errors[:base] << error |
59 | - end if tracker.errors | |
59 | + end if issue_tracker.errors | |
60 | 60 | end |
61 | 61 | end |
62 | 62 | end | ... | ... |
app/models/issue_tracker.rb
app/views/apps/_fields.html.haml
... | ... | @@ -23,8 +23,8 @@ |
23 | 23 | = w.text_field :email |
24 | 24 | |
25 | 25 | %fieldset.nested-wrapper |
26 | - %legend Issue trackers | |
27 | - = f.fields_for :issue_trackers do |w| | |
26 | + %legend Issue tracker | |
27 | + = f.fields_for :issue_tracker do |w| | |
28 | 28 | %div.watcher.nested |
29 | 29 | %div.choose |
30 | 30 | = w.radio_button :issue_tracker_type, :lighthouseapp | ... | ... |
spec/controllers/apps_controller_spec.rb
... | ... | @@ -179,25 +179,25 @@ describe AppsController do |
179 | 179 | context "setting up issue tracker", :cur => true do |
180 | 180 | context "unknown tracker type" do |
181 | 181 | before(:each) do |
182 | - put :update, :id => @app.id, :app => { :issue_trackers_attributes => { '0' => { | |
182 | + put :update, :id => @app.id, :app => { :issue_tracker_attributes => { | |
183 | 183 | :issue_tracker_type => 'unknown', :project_id => '1234', :api_token => '123123', :account => 'myapp' |
184 | - } } } | |
184 | + } } | |
185 | 185 | @app.reload |
186 | 186 | end |
187 | 187 | |
188 | 188 | it "should not create issue tracker" do |
189 | - @app.issue_trackers.should be_empty | |
189 | + @app.issue_tracker.should be_nil | |
190 | 190 | end |
191 | 191 | end |
192 | 192 | |
193 | 193 | context "lighthouseapp" do |
194 | 194 | it "should save tracker params" do |
195 | - put :update, :id => @app.id, :app => { :issue_trackers_attributes => { '0' => { | |
195 | + put :update, :id => @app.id, :app => { :issue_tracker_attributes => { | |
196 | 196 | :issue_tracker_type => 'lighthouseapp', :project_id => '1234', :api_token => '123123', :account => 'myapp' |
197 | - } } } | |
197 | + } } | |
198 | 198 | @app.reload |
199 | 199 | |
200 | - tracker = @app.issue_trackers.first | |
200 | + tracker = @app.issue_tracker | |
201 | 201 | tracker.issue_tracker_type.should == 'lighthouseapp' |
202 | 202 | tracker.project_id.should == '1234' |
203 | 203 | tracker.api_token.should == '123123' |
... | ... | @@ -205,22 +205,22 @@ describe AppsController do |
205 | 205 | end |
206 | 206 | |
207 | 207 | it "should show validation notice when sufficient params are not present" do |
208 | - put :update, :id => @app.id, :app => { :issue_trackers_attributes => { '0' => { | |
208 | + put :update, :id => @app.id, :app => { :issue_tracker_attributes => { | |
209 | 209 | :issue_tracker_type => 'lighthouseapp', :project_id => '1234', :api_token => '123123' |
210 | - } } } | |
210 | + } } | |
211 | 211 | @app.reload |
212 | 212 | |
213 | - @app.issue_trackers.should be_empty | |
213 | + @app.issue_tracker.should be_nil | |
214 | 214 | response.body.should match(/You must specify your Lighthouseapp account, token and project id/) |
215 | 215 | end |
216 | 216 | |
217 | 217 | it "should show validation notice when sufficient params are not present" do |
218 | - put :update, :id => @app.id, :app => { :issue_trackers_attributes => { '0' => { | |
218 | + put :update, :id => @app.id, :app => { :issue_tracker_attributes => { | |
219 | 219 | :issue_tracker_type => 'lighthouseapp', :project_id => '1234', :api_token => '123123' |
220 | - } } } | |
220 | + } } | |
221 | 221 | @app.reload |
222 | 222 | |
223 | - @app.issue_trackers.should be_empty | |
223 | + @app.issue_tracker.should be_nil | |
224 | 224 | response.body.should match(/You must specify your Lighthouseapp account, token and project id/) |
225 | 225 | end |
226 | 226 | end | ... | ... |