Register deserializers on telepath as representation classes

This commit is contained in:
Nathan Sobo 2013-12-16 20:55:33 -07:00
parent 105f74e15e
commit 9df69f801b
2 changed files with 5 additions and 4 deletions

View File

@ -121,7 +121,7 @@ class Atom extends Model
# Private: Called by telepath. I'd like this to be merged with initialize eventually.
created: ->
DeserializerManager = require './deserializer-manager'
@deserializers = new DeserializerManager()
@deserializers = new DeserializerManager(this)
# Public: Sets up the basic services that should be available in all modes
# (both spec and application). Call after this instance has been assigned to

View File

@ -5,17 +5,19 @@
# Should be accessed via `atom.deserializers`
module.exports =
class DeserializerManager
constructor: ->
constructor: (@environment) ->
@deserializers = {}
@deferredDeserializers = {}
# Public: Register the given class(es) as deserializers.
add: (klasses...) ->
@deserializers[klass.name] = klass for klass in klasses
@environment?.registerRepresentationClasses(klasses...)
# Public: Add a deferred deserializer for the given class name.
addDeferred: (name, fn) ->
@deferredDeserializers[name] = fn
@environment?.registerDeferredRepresentationClass(name, fn)
# Public: Remove the given class(es) as deserializers.
remove: (klasses...) ->
@ -24,8 +26,7 @@ class DeserializerManager
# Public: Deserialize the state and params.
deserialize: (state, params) ->
return unless state?
return state if state instanceof Model
return state unless state.constructor is Object or state instanceof TelepathicObject
if deserializer = @get(state)
stateVersion = state.get?('version') ? state.version