From 47e1de1d2628000dafbfedf64f681dd9e128b764 Mon Sep 17 00:00:00 2001
From: Piotr Sarnacki <drogus@gmail.com>
Date: Tue, 30 Sep 2014 11:15:55 +0200
Subject: [PATCH] Extract Github URLs to controller

---
 assets/scripts/app/controllers.coffee               |  1 +
 assets/scripts/app/controllers/build.coffee         |  6 +-----
 assets/scripts/app/controllers/builds.coffee        |  2 ++
 assets/scripts/app/helpers.coffee                   |  1 +
 .../app/helpers/github_url_properties.coffee        |  8 ++++++++
 assets/scripts/app/routes.coffee                    | 13 ++++++++++++-
 assets/scripts/app/templates/builds/list.hbs        | 10 +++++-----
 assets/scripts/app/views/build.coffee               | 12 ------------
 8 files changed, 30 insertions(+), 23 deletions(-)
 create mode 100644 assets/scripts/app/helpers/github_url_properties.coffee

diff --git a/assets/scripts/app/controllers.coffee b/assets/scripts/app/controllers.coffee
index a8c9be07..1355f8be 100644
--- a/assets/scripts/app/controllers.coffee
+++ b/assets/scripts/app/controllers.coffee
@@ -49,6 +49,7 @@ Travis.FirstSyncController = Em.Controller.extend
   isSyncing: Ember.computed.alias('user.isSyncing')
 
 Travis.IndexErrorController = Em.Controller.extend()
+Travis.BuildsItemController = Em.ObjectController.extend(Travis.GithubUrlProperties)
 
 require 'controllers/accounts'
 require 'controllers/auth'
diff --git a/assets/scripts/app/controllers/build.coffee b/assets/scripts/app/controllers/build.coffee
index 6e61ab6f..c8763418 100644
--- a/assets/scripts/app/controllers/build.coffee
+++ b/assets/scripts/app/controllers/build.coffee
@@ -1,4 +1,4 @@
-Travis.BuildController = Ember.Controller.extend
+Travis.BuildController = Ember.Controller.extend Travis.GithubUrlProperties,
   needs: ['repo']
   repoBinding: 'controllers.repo.repo'
   commitBinding: 'build.commit'
@@ -10,7 +10,3 @@ Travis.BuildController = Ember.Controller.extend
   loading: (->
     @get('build.isLoading')
   ).property('build.isLoading')
-
-  urlGithubCommit: (->
-    Travis.Urls.githubCommit(@get('repo.slug'), @get('commit.sha'))
-  ).property('repo.slug', 'commit.sha')
diff --git a/assets/scripts/app/controllers/builds.coffee b/assets/scripts/app/controllers/builds.coffee
index 7339c3f5..1ebd215e 100644
--- a/assets/scripts/app/controllers/builds.coffee
+++ b/assets/scripts/app/controllers/builds.coffee
@@ -1,4 +1,6 @@
 Travis.BuildsController = Em.ArrayController.extend
+  isPullRequestsList: false
+
   sortAscending: false
   sortProperties: ['number']
 
diff --git a/assets/scripts/app/helpers.coffee b/assets/scripts/app/helpers.coffee
index 98608e18..5c5b4f46 100644
--- a/assets/scripts/app/helpers.coffee
+++ b/assets/scripts/app/helpers.coffee
@@ -2,3 +2,4 @@ require 'helpers/handlebars'
 require 'helpers/helpers'
 require 'helpers/urls'
 require 'helpers/status_image_formatter'
+require 'helpers/github_url_properties'
diff --git a/assets/scripts/app/helpers/github_url_properties.coffee b/assets/scripts/app/helpers/github_url_properties.coffee
new file mode 100644
index 00000000..6a19e21c
--- /dev/null
+++ b/assets/scripts/app/helpers/github_url_properties.coffee
@@ -0,0 +1,8 @@
+Travis.GithubUrlProperties = Ember.Mixin.create
+  urlGithubCommit: (->
+    Travis.Urls.githubCommit(@get('repo.slug'), @get('commit.sha'))
+  ).property('repo.slug', 'commit.sha')
+
+  urlGithubPullRequest: (->
+    Travis.Urls.githubPullRequest(@get('repo.slug'), @get('build.pullRequestNumber'))
+  ).property('repo.slug', 'build.pullRequestNumber')
diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee
index 2ce50a2e..44804e4a 100644
--- a/assets/scripts/app/routes.coffee
+++ b/assets/scripts/app/routes.coffee
@@ -195,8 +195,19 @@ Travis.AbstractBuildsRoute = Travis.Route.extend
   ).property('contentType')
 
 Travis.BuildsRoute = Travis.AbstractBuildsRoute.extend(contentType: 'builds')
-Travis.PullRequestsRoute = Travis.AbstractBuildsRoute.extend(contentType: 'pull_requests')
 Travis.BranchesRoute = Travis.AbstractBuildsRoute.extend(contentType: 'branches')
+Travis.PullRequestsRoute = Travis.AbstractBuildsRoute.extend(
+  contentType: 'pull_requests'
+
+  # TODO: it would be better to have separate controller for branches and PRs list
+  setupController: (controller, model) ->
+    @_super(controller, model)
+
+    this.controllerFor('builds').set('isPullRequestsList', true)
+
+  deactivate: ->
+    this.controllerFor('builds').set('isPullRequestsList', false)
+)
 
 Travis.BuildRoute = Travis.Route.extend
   serialize: (model, params) ->
diff --git a/assets/scripts/app/templates/builds/list.hbs b/assets/scripts/app/templates/builds/list.hbs
index ea2a408a..221b16eb 100644
--- a/assets/scripts/app/templates/builds/list.hbs
+++ b/assets/scripts/app/templates/builds/list.hbs
@@ -10,7 +10,7 @@
         <th class="committer">
           Committer
         </th>
-        {{#if view.isPullRequestsList}}
+        {{#if isPullRequestsList}}
           <th>
             PR
           </th>
@@ -21,7 +21,7 @@
     </thead>
 
     <tbody>
-      {{#each build in controller}}
+      {{#each build in controller itemController="buildsItem"}}
         {{#view Travis.BuildsItemView contextBinding="build"}}
           <td class="number">
             <span class="status"></span>
@@ -35,16 +35,16 @@
             {{{formatMessage commit.message short="true" repoBinding=build.repo}}}
           </td>
           <td class="commit">
-            <a {{bind-attr href="view.urlGithubCommit"}}>
+            <a {{bind-attr href="urlGithubCommit"}}>
               {{formatCommit commit}}
             </a>
           </td>
           <td class="committer">
             {{commit.committerName}}
           </td>
-          {{#if view.isPullRequestsList}}
+          {{#if isPullRequestsList}}
             <td>
-              <a {{bind-attr href="view.urlGithubPullRequest"}}>
+              <a {{bind-attr href="urlGithubPullRequest"}}>
                 #{{pullRequestNumber}}
               </a>
             </td>
diff --git a/assets/scripts/app/views/build.coffee b/assets/scripts/app/views/build.coffee
index 6868b48c..58a464c9 100644
--- a/assets/scripts/app/views/build.coffee
+++ b/assets/scripts/app/views/build.coffee
@@ -3,10 +3,6 @@ Travis.reopen
     templateName: 'builds/list'
     buildsBinding: 'controller.builds'
 
-    isPullRequestsList: (->
-      @get('controller.tab') == 'pull_requests'
-    ).property('controller.tab')
-
     ShowMoreButton: Em.View.extend
       tagName: 'button'
       classNameBindings: ['isLoading', 'showMore']
@@ -37,14 +33,6 @@ Travis.reopen
       Travis.Helpers.colorForState(@get('build.state'))
     ).property('build.state')
 
-    urlGithubCommit: (->
-      Travis.Urls.githubCommit(@get('repo.slug'), @get('commit.sha'))
-    ).property('repo.slug', 'commit.sha')
-
-    urlGithubPullRequest: (->
-      Travis.Urls.githubPullRequest(@get('repo.slug'), @get('build.pullRequestNumber'))
-    ).property('repo.slug', 'build.pullRequestNumber')
-
   BuildView: Travis.View.extend
     templateName: 'builds/show'
     classNameBindings: ['color', 'loading']