Commit 35880a5676e417deab3087841ad218ed49603b09
1 parent
f707fd46
Exists in
master
and in
1 other branch
Lighthouseapp tracker model.
Showing
7 changed files
with
93 additions
and
4 deletions
Show diff stats
Gemfile
Gemfile.lock
| ... | ... | @@ -46,6 +46,9 @@ GEM |
| 46 | 46 | railties (>= 3.0.0) |
| 47 | 47 | haml (3.0.25) |
| 48 | 48 | i18n (0.5.0) |
| 49 | + lighthouse-api (2.0) | |
| 50 | + activeresource (>= 3.0.0) | |
| 51 | + activesupport (>= 3.0.0) | |
| 49 | 52 | mail (2.2.15) |
| 50 | 53 | activesupport (>= 2.3.6) |
| 51 | 54 | i18n (>= 0.4.0) |
| ... | ... | @@ -110,6 +113,7 @@ DEPENDENCIES |
| 110 | 113 | devise (~> 1.1.8) |
| 111 | 114 | factory_girl_rails |
| 112 | 115 | haml |
| 116 | + lighthouse-api | |
| 113 | 117 | mongoid (~> 2.0.0.rc.7) |
| 114 | 118 | nokogiri |
| 115 | 119 | rails (= 3.0.5) | ... | ... |
README.md
| ... | ... | @@ -89,6 +89,11 @@ for you. Checkout [Hoptoad](http://hoptoadapp.com) from the guys over at |
| 89 | 89 | |
| 90 | 90 | 4. Enjoy! |
| 91 | 91 | |
| 92 | +Lighthouseapp integration | |
| 93 | +------------------------- | |
| 94 | + | |
| 95 | +* Get an API token with full access to the project (visit http://help.lighthouseapp.com/kb/api/how-do-i-get-an-api-token to learn how to get it) | |
| 96 | + | |
| 92 | 97 | TODO |
| 93 | 98 | ---- |
| 94 | 99 | ... | ... |
app/controllers/apps_controller.rb
app/models/app.rb
| ... | ... | @@ -16,6 +16,7 @@ class App |
| 16 | 16 | |
| 17 | 17 | embeds_many :watchers |
| 18 | 18 | embeds_many :deploys |
| 19 | + embeds_many :issue_trackers | |
| 19 | 20 | references_many :errs, :dependent => :destroy |
| 20 | 21 | |
| 21 | 22 | before_validation :generate_api_key, :on => :create |
| ... | ... | @@ -24,9 +25,12 @@ class App |
| 24 | 25 | validates_uniqueness_of :name, :allow_blank => true |
| 25 | 26 | validates_uniqueness_of :api_key, :allow_blank => true |
| 26 | 27 | validates_associated :watchers |
| 28 | + validate :check_issue_trackers | |
| 27 | 29 | |
| 28 | 30 | accepts_nested_attributes_for :watchers, :allow_destroy => true, |
| 29 | 31 | :reject_if => proc { |attrs| attrs[:user_id].blank? && attrs[:email].blank? } |
| 32 | + accepts_nested_attributes_for :issue_trackers, :allow_destroy => true, | |
| 33 | + :reject_if => proc { |attrs| !%w( lighthouseapp ).include?(attrs[:issue_tracker_type]) } | |
| 30 | 34 | |
| 31 | 35 | # Mongoid Bug: find(id) on association proxies returns an Enumerator |
| 32 | 36 | def self.find_by_id!(app_id) |
| ... | ... | @@ -46,5 +50,13 @@ class App |
| 46 | 50 | def generate_api_key |
| 47 | 51 | self.api_key ||= ActiveSupport::SecureRandom.hex |
| 48 | 52 | end |
| 49 | - | |
| 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| | |
| 58 | + errors[:base] << error | |
| 59 | + end if tracker.errors | |
| 60 | + end | |
| 61 | + end | |
| 50 | 62 | end | ... | ... |
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +class IssueTracker | |
| 2 | + include Mongoid::Document | |
| 3 | + include Mongoid::Timestamps | |
| 4 | + | |
| 5 | + validate :check_lighthouseapp_params | |
| 6 | + | |
| 7 | + embedded_in :app, :inverse_of => :issue_trackers | |
| 8 | + | |
| 9 | + field :account, :type => String | |
| 10 | + field :api_token, :type => String | |
| 11 | + field :project_id, :type => String | |
| 12 | + field :issue_tracker_type, :type => String, :default => 'lighthouseapp' | |
| 13 | + | |
| 14 | + protected | |
| 15 | + def check_lighthouseapp_params | |
| 16 | + errors.add(:base, "You must specify your Lighthouseapp account, token and project id") if %w( api_token project_id account ).map {|m| self[m].blank? }.any? | |
| 17 | + end | |
| 18 | +end | ... | ... |
spec/controllers/apps_controller_spec.rb
| ... | ... | @@ -147,7 +147,6 @@ describe AppsController do |
| 147 | 147 | describe "PUT /apps/:id" do |
| 148 | 148 | before do |
| 149 | 149 | @app = Factory(:app) |
| 150 | - App.stub(:find).with(@app.id).and_return(@app) | |
| 151 | 150 | end |
| 152 | 151 | |
| 153 | 152 | context "when the update is successful" do |
| ... | ... | @@ -172,11 +171,60 @@ describe AppsController do |
| 172 | 171 | |
| 173 | 172 | context "when the update is unsuccessful" do |
| 174 | 173 | it "should render the edit page" do |
| 175 | - @app.should_receive(:update_attributes).and_return(false) | |
| 176 | - put :update, :id => @app.id, :app => {} | |
| 174 | + put :update, :id => @app.id, :app => { :name => '' } | |
| 177 | 175 | response.should render_template(:edit) |
| 178 | 176 | end |
| 179 | 177 | end |
| 178 | + | |
| 179 | + context "setting up issue tracker", :cur => true do | |
| 180 | + context "unknown tracker type" do | |
| 181 | + before(:each) do | |
| 182 | + put :update, :id => @app.id, :app => { :issue_trackers_attributes => { '0' => { | |
| 183 | + :issue_tracker_type => 'unknown', :project_id => '1234', :api_token => '123123', :account => 'myapp' | |
| 184 | + } } } | |
| 185 | + @app.reload | |
| 186 | + end | |
| 187 | + | |
| 188 | + it "should not create issue tracker" do | |
| 189 | + @app.issue_trackers.should be_empty | |
| 190 | + end | |
| 191 | + end | |
| 192 | + | |
| 193 | + context "lighthouseapp" do | |
| 194 | + it "should save tracker params" do | |
| 195 | + put :update, :id => @app.id, :app => { :issue_trackers_attributes => { '0' => { | |
| 196 | + :issue_tracker_type => 'lighthouseapp', :project_id => '1234', :api_token => '123123', :account => 'myapp' | |
| 197 | + } } } | |
| 198 | + @app.reload | |
| 199 | + | |
| 200 | + tracker = @app.issue_trackers.first | |
| 201 | + tracker.issue_tracker_type.should == 'lighthouseapp' | |
| 202 | + tracker.project_id.should == '1234' | |
| 203 | + tracker.api_token.should == '123123' | |
| 204 | + tracker.account.should == 'myapp' | |
| 205 | + end | |
| 206 | + | |
| 207 | + it "should show validation notice when sufficient params are not present" do | |
| 208 | + put :update, :id => @app.id, :app => { :issue_trackers_attributes => { '0' => { | |
| 209 | + :issue_tracker_type => 'lighthouseapp', :project_id => '1234', :api_token => '123123' | |
| 210 | + } } } | |
| 211 | + @app.reload | |
| 212 | + | |
| 213 | + @app.issue_trackers.should be_empty | |
| 214 | + response.body.should match(/You must specify your Lighthouseapp account, token and project id/) | |
| 215 | + end | |
| 216 | + | |
| 217 | + it "should show validation notice when sufficient params are not present" do | |
| 218 | + put :update, :id => @app.id, :app => { :issue_trackers_attributes => { '0' => { | |
| 219 | + :issue_tracker_type => 'lighthouseapp', :project_id => '1234', :api_token => '123123' | |
| 220 | + } } } | |
| 221 | + @app.reload | |
| 222 | + | |
| 223 | + @app.issue_trackers.should be_empty | |
| 224 | + response.body.should match(/You must specify your Lighthouseapp account, token and project id/) | |
| 225 | + end | |
| 226 | + end | |
| 227 | + end | |
| 180 | 228 | end |
| 181 | 229 | |
| 182 | 230 | describe "DELETE /apps/:id" do | ... | ... |