@Backbone.app.module “Entities”, (Entities, App, Backbone, Marionette, $, _) ->

class Entities.Model extends Backbone.Model

  destroy: (options = {}) ->
    _.defaults options,
      wait: true

    @set _destroy: true
    super options

  isDestroyed: ->
    @get "_destroy"

  save: (data, options = {}) ->
    isNew = @isNew()

    _.defaults options,
      wait: true
      success:   _.bind(@saveSuccess, @, isNew, options.collection)
      error:    _.bind(@saveError, @)

    @unset "_errors"
    super data, options

  saveSuccess: (isNew, collection) =>
    if isNew
      collection?.add @
      collection?.trigger "model:created", @
      @trigger "created", @
    else
      collection ?= @collection
      ## if model has collection property defined,
      ## use that if no collection option exists
      collection?.trigger "model:updated", @
      @trigger "updated", @

  saveError: (model, xhr, options) =>
    unless xhr.status is 500 or xhr.status is 404
      @set _errors: $.parseJSON(xhr.responseText)?.errors