132 lines
3.9 KiB
CoffeeScript
132 lines
3.9 KiB
CoffeeScript
require 'travis/ajax'
|
|
require 'models'
|
|
|
|
DS.JSONTransforms['object'] = {
|
|
deserialize: (serialized) -> serialized
|
|
serialize: (deserialized) -> deserialized
|
|
}
|
|
|
|
Travis.Serializer = DS.RESTSerializer.extend
|
|
# The next 3 methods specify the behavior of adding records to dirty sets
|
|
# (ie. which records will be treated as dirty on the next commit). We don't
|
|
# allow to change most of the records on the client, so for anything except
|
|
# the User, we ignore dirtyiness.
|
|
dirtyRecordsForAttributeChange: (dirtySet, record) ->
|
|
if record.constructor == Travis.User
|
|
@_super.apply this, arguments
|
|
|
|
dirtyRecordsForBelongsToChange: (dirtySet, record) ->
|
|
if record.constructor == Travis.User
|
|
@_super.apply this, arguments
|
|
|
|
dirtyRecordsForHasManyChange: (dirtySet, record) ->
|
|
if record.constructor == Travis.User
|
|
@_super.apply this, arguments
|
|
|
|
merge: (record, serialized) ->
|
|
data = record.get('data')
|
|
|
|
# TODO: write test that ensures that we go to materializingData
|
|
# only if we can
|
|
state = record.get('stateManager.currentState.path')
|
|
unless state == "rootState.loaded.materializing"
|
|
record.send('materializingData')
|
|
|
|
record.eachAttribute( (name, attribute) ->
|
|
value = @extractAttribute(record.constructor, serialized, name)
|
|
if value != undefined
|
|
value = @deserializeValue(value, attribute.type)
|
|
if value != data.attributes[name]
|
|
record.materializeAttribute(name, value)
|
|
record.notifyPropertyChange(name)
|
|
, this)
|
|
|
|
record.eachRelationship( (name, relationship) ->
|
|
if relationship.kind == 'belongsTo'
|
|
key = @_keyForBelongsTo(record.constructor, relationship.key)
|
|
value = @extractBelongsTo(record.constructor, serialized, key)
|
|
|
|
if value != undefined && data.belongsTo[name] != value
|
|
record.materializeBelongsTo name, value
|
|
record.notifyPropertyChange(name)
|
|
else if relationship.kind == 'hasMany'
|
|
key = @_keyForHasMany(record.constructor, relationship.key)
|
|
value = @extractHasMany(record.constructor, serialized, key)
|
|
|
|
if value != undefined
|
|
record.materializeHasMany name, value
|
|
record.notifyPropertyChange(name)
|
|
, this)
|
|
|
|
record.notifyPropertyChange('data')
|
|
|
|
Travis.RestAdapter = DS.RESTAdapter.extend
|
|
serializer: Travis.Serializer
|
|
mappings:
|
|
broadcasts: Travis.Broadcast
|
|
repositories: Travis.Repo
|
|
repository: Travis.Repo
|
|
repos: Travis.Repo
|
|
repo: Travis.Repo
|
|
builds: Travis.Build
|
|
build: Travis.Build
|
|
commits: Travis.Commit
|
|
commit: Travis.Commit
|
|
jobs: Travis.Job
|
|
job: Travis.Job
|
|
account: Travis.Account
|
|
accounts: Travis.Account
|
|
worker: Travis.Worker
|
|
workers: Travis.Worker
|
|
|
|
plurals:
|
|
repositories: 'repositories',
|
|
repository: 'repositories',
|
|
repo: 'repos',
|
|
repos: 'repos',
|
|
build: 'builds'
|
|
branch: 'branches'
|
|
job: 'jobs'
|
|
worker: 'workers'
|
|
profile: 'profile'
|
|
|
|
ajax: ->
|
|
Travis.ajax.ajax.apply(this, arguments)
|
|
|
|
sideload: (store, type, json, root) ->
|
|
if json && json.result
|
|
return
|
|
else
|
|
@_super.apply this, arguments
|
|
|
|
merge: (store, record, serialized) ->
|
|
@get('serializer').merge(record, serialized)
|
|
|
|
Travis.RestAdapter.map 'Travis.Commit', {}
|
|
|
|
Travis.RestAdapter.map 'Travis.Build', {
|
|
repoId: { key: 'repository_id' }
|
|
repo: { key: 'repository_id' }
|
|
_duration: { key: 'duration' }
|
|
jobs: { key: 'job_ids' }
|
|
_config: { key: 'config' }
|
|
}
|
|
|
|
Travis.RestAdapter.map 'Travis.Repo', {
|
|
_lastBuildDuration: { key: 'last_build_duration' }
|
|
}
|
|
|
|
Travis.RestAdapter.map 'Travis.Job', {
|
|
repoId: { key: 'repository_id' }
|
|
repo: { key: 'repository_id' }
|
|
_config: { key: 'config' }
|
|
}
|
|
|
|
Travis.RestAdapter.map 'Travis.User', {
|
|
_name: { key: 'name' }
|
|
}
|
|
|
|
Travis.RestAdapter.map 'Travis.Sponsor', {
|
|
_image: { key: 'image' }
|
|
}
|