
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.
97 lines
2.5 KiB
CoffeeScript
97 lines
2.5 KiB
CoffeeScript
require 'travis/ajax'
|
|
require 'travis/model'
|
|
|
|
@Travis.User = Travis.Model.extend
|
|
_name: Ember.attr('string', key: 'name')
|
|
email: Ember.attr('string')
|
|
login: Ember.attr('string')
|
|
token: Ember.attr('string')
|
|
locale: Ember.attr('string')
|
|
gravatarId: Ember.attr('string')
|
|
isSyncing: Ember.attr('boolean')
|
|
syncedAt: Ember.attr('string')
|
|
repoCount: Ember.attr('number')
|
|
|
|
# This is the only way I found to override the attribue created with Ember.attr
|
|
name: Ember.computed( (key, value) ->
|
|
if arguments.length == 1
|
|
@get('_name') || @get('login')
|
|
else
|
|
@set('_name', value)
|
|
value
|
|
).property('login', '_name')
|
|
|
|
init: ->
|
|
@_super()
|
|
|
|
Ember.run.next this, ->
|
|
@poll() if @get('isSyncing')
|
|
|
|
urlGithub: (->
|
|
"https://github.com/#{@get('login')}"
|
|
).property()
|
|
|
|
_rawPermissions: (->
|
|
Travis.ajax.get('/users/permissions')
|
|
).property()
|
|
|
|
permissions: (->
|
|
permissions = Ember.ArrayProxy.create(content: [])
|
|
@get('_rawPermissions').then (data) => permissions.set('content', data.permissions)
|
|
permissions
|
|
).property()
|
|
|
|
adminPermissions: (->
|
|
permissions = Ember.ArrayProxy.create(content: [])
|
|
@get('_rawPermissions').then (data) => permissions.set('content', data.admin)
|
|
permissions
|
|
).property()
|
|
|
|
pullPermissions: (->
|
|
permissions = Ember.ArrayProxy.create(content: [])
|
|
@get('_rawPermissions').then (data) => permissions.set('content', data.pull)
|
|
permissions
|
|
).property()
|
|
|
|
pushPermissions: (->
|
|
permissions = Ember.ArrayProxy.create(content: [])
|
|
@get('_rawPermissions').then (data) => permissions.set('content', data.push)
|
|
permissions
|
|
).property()
|
|
|
|
updateLocale: (locale) ->
|
|
@save()
|
|
Travis.setLocale(locale)
|
|
|
|
type: (->
|
|
'user'
|
|
).property()
|
|
|
|
sync: ->
|
|
self = this
|
|
Travis.ajax.post('/users/sync', {}, ->
|
|
self.setWithSession('isSyncing', true)
|
|
self.poll()
|
|
)
|
|
|
|
poll: ->
|
|
Travis.ajax.get '/users', (data) =>
|
|
if data.user.is_syncing
|
|
self = this
|
|
setTimeout ->
|
|
self.poll()
|
|
, 3000
|
|
else
|
|
@set('isSyncing', false)
|
|
@setWithSession('syncedAt', data.user.synced_at)
|
|
Travis.trigger('user:synced', data.user)
|
|
|
|
# need to pass any param to trigger findQuery
|
|
Travis.Account.find(foo: '')
|
|
|
|
setWithSession: (name, value) ->
|
|
@set(name, value)
|
|
user = JSON.parse(Travis.sessionStorage.getItem('travis.user'))
|
|
user[$.underscore(name)] = @get(name)
|
|
Travis.sessionStorage.setItem('travis.user', JSON.stringify(user))
|