From 6cb866408dfd0f3349e0dab8bb47219366b0a47e Mon Sep 17 00:00:00 2001
From: Piotr Sarnacki <drogus@gmail.com>
Date: Fri, 20 Jun 2014 16:03:41 +0200
Subject: [PATCH] Don't return finishedAt, startedAt, duration for not started
 jobs/builds

---
 assets/scripts/app/models/build.coffee      | 18 ++++++++++++++++--
 assets/scripts/app/models/extensions.coffee |  4 +++-
 assets/scripts/app/models/job.coffee        | 18 ++++++++++++++++--
 3 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/assets/scripts/app/models/build.coffee b/assets/scripts/app/models/build.coffee
index ce24bd8f..35571212 100644
--- a/assets/scripts/app/models/build.coffee
+++ b/assets/scripts/app/models/build.coffee
@@ -10,8 +10,8 @@ require 'travis/model'
   message:          Ember.attr('string')
   _duration:        Ember.attr(Number, key: 'duration')
   _config:          Ember.attr('object', key: 'config')
-  startedAt:        Ember.attr('string')
-  finishedAt:       Ember.attr('string')
+  _startedAt:       Ember.attr('string', key: 'started_at')
+  _finishedAt:      Ember.attr('string', key: 'finished_at')
   pullRequest:      Ember.attr('boolean')
   pullRequestTitle: Ember.attr('string')
   pullRequestNumber: Ember.attr(Number)
@@ -36,6 +36,20 @@ require 'travis/model'
     @get('state') in ['passed', 'failed', 'errored', 'canceled']
   ).property('state')
 
+  notStarted: (->
+    @get('state') in ['queued', 'created']
+  ).property('state')
+
+  startedAt: (->
+    unless @get('notStarted')
+      @get('_startedAt')
+  ).property('_startedAt')
+
+  finishedAt: (->
+    unless @get('notStarted')
+      @get('_finishedAt')
+  ).property('_finishedAt')
+
   requiredJobs: (->
     @get('jobs').filter (data) -> !data.get('allowFailure')
   ).property('jobs.@each.allowFailure')
diff --git a/assets/scripts/app/models/extensions.coffee b/assets/scripts/app/models/extensions.coffee
index c94679b9..e265ede8 100644
--- a/assets/scripts/app/models/extensions.coffee
+++ b/assets/scripts/app/models/extensions.coffee
@@ -1,6 +1,8 @@
 Travis.DurationCalculations = Ember.Mixin.create
   duration: (->
-    if duration = @get('_duration')
+    if @get('notStarted')
+      null
+    else if duration = @get('_duration')
       duration
     else
       Travis.Helpers.durationFrom(@get('startedAt'), @get('finishedAt'))
diff --git a/assets/scripts/app/models/job.coffee b/assets/scripts/app/models/job.coffee
index fe5bd4ce..515033d5 100644
--- a/assets/scripts/app/models/job.coffee
+++ b/assets/scripts/app/models/job.coffee
@@ -9,8 +9,8 @@ require 'travis/model'
   queue:          Ember.attr('string')
   state:          Ember.attr('string')
   number:         Ember.attr('string')
-  startedAt:      Ember.attr('string')
-  finishedAt:     Ember.attr('string')
+  _startedAt:     Ember.attr('string', key: 'started_at')
+  _finishedAt:    Ember.attr('string', key: 'finished_at')
   allowFailure:   Ember.attr('boolean')
 
   repositorySlug: Ember.attr('string')
@@ -27,6 +27,16 @@ require 'travis/model'
     Travis.Log.create(job: this)
   ).property()
 
+  startedAt: (->
+    unless @get('notStarted')
+      @get('_startedAt')
+  ).property('_startedAt')
+
+  finishedAt: (->
+    unless @get('notStarted')
+      @get('_finishedAt')
+  ).property('_finishedAt')
+
   repoSlug: (->
     @get('repositorySlug')
   ).property('repositorySlug')
@@ -39,6 +49,10 @@ require 'travis/model'
     @get('state') in ['passed', 'failed', 'errored', 'canceled']
   ).property('state')
 
+  notStarted: (->
+    @get('state') in ['queued', 'created']
+  ).property('state')
+
   clearLog: ->
     # This is needed if we don't want to fetch log just to clear it
     if @get('isLogAccessed')