class @ObserveJS.Observer

constructor: (model) ->
  @keys = {}
  @observer = new MutationObserver(@mutated.bind(this, model))
  @observer.observe(model.element(), {
    childList: false
    characterData: false
    attributes: true
  })

bind: (key, callback) ->
  @keys["data-#{key}"] = callback

mutated: (model, mutations) ->
  for mutation in mutations
    if (callback = @keys[mutation.attributeName])?
      callback(mutation)

disconnect: =>
  @observer.disconnect()