Use more fetch instead of find
fetch method returns a promise instead of an actual object. We used find before, because this was the way we did things before upgrade to Ember Model. Returning a promise from a model hook pauses router rendering for the time a resource is loading, which makes it much easier to deal with asynchronous requests. Thanks to that we can remove parts of the code, which dealt with it manually.
This commit is contained in:
parent
c751b7a8a4
commit
a2bc840292
|
@ -135,5 +135,12 @@ require 'travis/model'
|
||||||
repo = $.select(@find().toArray(), (repo) -> repo.get('slug') == slug)
|
repo = $.select(@find().toArray(), (repo) -> repo.get('slug') == slug)
|
||||||
if repo.length > 0 then repo else @find(slug: slug)
|
if repo.length > 0 then repo else @find(slug: slug)
|
||||||
|
|
||||||
|
fetchBySlug: (slug) ->
|
||||||
|
repos = $.select(@find().toArray(), (repo) -> repo.get('slug') == slug)
|
||||||
|
if repos.length > 0
|
||||||
|
repos[0]
|
||||||
|
else
|
||||||
|
@fetch(slug: slug).then (repos) -> Ember.get(repos, 'firstObject')
|
||||||
|
|
||||||
# buildURL: (slug) ->
|
# buildURL: (slug) ->
|
||||||
# if slug then slug else 'repos'
|
# if slug then slug else 'repos'
|
||||||
|
|
|
@ -58,7 +58,7 @@ require 'travis/model'
|
||||||
@get('_rawPermissions').then (data) => permissions.set('content', data.push)
|
@get('_rawPermissions').then (data) => permissions.set('content', data.push)
|
||||||
permissions
|
permissions
|
||||||
).property()
|
).property()
|
||||||
|
|
||||||
updateLocale: (locale) ->
|
updateLocale: (locale) ->
|
||||||
@save()
|
@save()
|
||||||
Travis.setLocale(locale)
|
Travis.setLocale(locale)
|
||||||
|
@ -77,7 +77,10 @@ require 'travis/model'
|
||||||
poll: ->
|
poll: ->
|
||||||
Travis.ajax.get '/users', (data) =>
|
Travis.ajax.get '/users', (data) =>
|
||||||
if data.user.is_syncing
|
if data.user.is_syncing
|
||||||
Ember.run.later(this, this.poll.bind(this), 3000)
|
self = this
|
||||||
|
setTimeout ->
|
||||||
|
self.poll()
|
||||||
|
, 3000
|
||||||
else
|
else
|
||||||
@set('isSyncing', false)
|
@set('isSyncing', false)
|
||||||
@setWithSession('syncedAt', data.user.synced_at)
|
@setWithSession('syncedAt', data.user.synced_at)
|
||||||
|
|
|
@ -218,7 +218,7 @@ Travis.BuildRoute = Ember.Route.extend
|
||||||
repo.set('build', model)
|
repo.set('build', model)
|
||||||
|
|
||||||
model: (params) ->
|
model: (params) ->
|
||||||
Travis.Build.find(params.build_id)
|
Travis.Build.fetch(params.build_id)
|
||||||
|
|
||||||
Travis.JobRoute = Ember.Route.extend
|
Travis.JobRoute = Ember.Route.extend
|
||||||
renderTemplate: ->
|
renderTemplate: ->
|
||||||
|
@ -236,19 +236,12 @@ Travis.JobRoute = Ember.Route.extend
|
||||||
repo.set('job', model)
|
repo.set('job', model)
|
||||||
repo.activate('job')
|
repo.activate('job')
|
||||||
|
|
||||||
# since we're no longer using promises, the setupController resolves right away,
|
if build = model.get('build')
|
||||||
# so we need to wait for build to be loaded
|
@controllerFor('build').set('build', build)
|
||||||
buildObserver = ->
|
repo.set('build', build)
|
||||||
if build = model.get('build')
|
|
||||||
@controllerFor('build').set('build', build)
|
|
||||||
repo.set('build', build)
|
|
||||||
|
|
||||||
model.removeObserver('build', buildObserver)
|
|
||||||
model.addObserver('build', this, buildObserver)
|
|
||||||
buildObserver.apply(this)
|
|
||||||
|
|
||||||
model: (params) ->
|
model: (params) ->
|
||||||
Travis.Job.find(params.job_id)
|
Travis.Job.fetch(params.job_id)
|
||||||
|
|
||||||
Travis.RepoIndexRoute = Ember.Route.extend Travis.SetupLastBuild,
|
Travis.RepoIndexRoute = Ember.Route.extend Travis.SetupLastBuild,
|
||||||
setupController: (controller, model) ->
|
setupController: (controller, model) ->
|
||||||
|
@ -275,30 +268,13 @@ Travis.RepoRoute = Ember.Route.extend
|
||||||
|
|
||||||
model: (params) ->
|
model: (params) ->
|
||||||
slug = "#{params.owner}/#{params.name}"
|
slug = "#{params.owner}/#{params.name}"
|
||||||
content = Ember.Object.create slug: slug, isLoaded: false, isLoading: true
|
|
||||||
proxy = Ember.ObjectProxy.create(content: content)
|
|
||||||
|
|
||||||
repos = Travis.Repo.bySlug(slug)
|
Travis.Repo.fetchBySlug(slug)
|
||||||
|
|
||||||
self = this
|
actions:
|
||||||
|
error: ->
|
||||||
observer = ->
|
Ember.run.next this, ->
|
||||||
if repos.get 'isLoaded'
|
@render('repos/not_found', outlet: 'main')
|
||||||
repos.removeObserver 'isLoaded', observer
|
|
||||||
proxy.set 'isLoading', false
|
|
||||||
|
|
||||||
if repos.get('length') == 0
|
|
||||||
Ember.run.next ->
|
|
||||||
self.render('repos/not_found', outlet: 'main')
|
|
||||||
else
|
|
||||||
proxy.set 'content', repos.objectAt(0)
|
|
||||||
|
|
||||||
if repos.length
|
|
||||||
proxy.set('content', repos[0])
|
|
||||||
else
|
|
||||||
repos.addObserver 'isLoaded', observer
|
|
||||||
|
|
||||||
proxy
|
|
||||||
|
|
||||||
Travis.IndexRoute = Ember.Route.extend
|
Travis.IndexRoute = Ember.Route.extend
|
||||||
renderTemplate: ->
|
renderTemplate: ->
|
||||||
|
@ -312,6 +288,10 @@ Travis.IndexRoute = Ember.Route.extend
|
||||||
@container.lookup('controller:repos').activate()
|
@container.lookup('controller:repos').activate()
|
||||||
@container.lookup('controller:application').connectLayout 'home'
|
@container.lookup('controller:application').connectLayout 'home'
|
||||||
|
|
||||||
|
Travis.IndexLoadingRoute = Ember.Route.extend
|
||||||
|
renderTemplate: ->
|
||||||
|
@render('index_loading')
|
||||||
|
|
||||||
Travis.StatsRoute = Ember.Route.extend
|
Travis.StatsRoute = Ember.Route.extend
|
||||||
renderTemplate: ->
|
renderTemplate: ->
|
||||||
$('body').attr('id', 'stats')
|
$('body').attr('id', 'stats')
|
||||||
|
|
|
@ -59,7 +59,7 @@ Travis.ajax = Em.Object.create
|
||||||
options = $.extend(options, Travis.ajax.DEFAULT_OPTIONS)
|
options = $.extend(options, Travis.ajax.DEFAULT_OPTIONS)
|
||||||
|
|
||||||
if testMode?
|
if testMode?
|
||||||
console.log('RUnning ajax with', options.url)
|
console.log('Running ajax with', options.url)
|
||||||
|
|
||||||
# we use jquery.mockjax for test, I don't want to hack it or rewrite it,
|
# we use jquery.mockjax for test, I don't want to hack it or rewrite it,
|
||||||
# so let's just pretend we still use ajax if testing mode is on
|
# so let's just pretend we still use ajax if testing mode is on
|
||||||
|
|
Loading…
Reference in New Issue
Block a user