API Docs for: v2.11.0-beta.8
Show:

File: packages/ember-runtime/lib/mixins/copyable.js

/**
@module ember
@submodule ember-runtime
*/

import {
  deprecate,
  get,
  Mixin,
  Error as EmberError
} from 'ember-metal';
import { Freezable } from './freezable';

/**
  Implements some standard methods for copying an object. Add this mixin to
  any object you create that can create a copy of itself. This mixin is
  added automatically to the built-in array.

  You should generally implement the `copy()` method to return a copy of the
  receiver.

  Note that `frozenCopy()` will only work if you also implement
  `Ember.Freezable`.

  @class Copyable
  @namespace Ember
  @since Ember 0.9
  @private
*/
export default Mixin.create({
  /**
    __Required.__ You must implement this method to apply this mixin.

    Override to return a copy of the receiver. Default implementation raises
    an exception.

    @method copy
    @param {Boolean} deep if `true`, a deep copy of the object should be made
    @return {Object} copy of receiver
    @private
  */
  copy: null,

  /**
    If the object implements `Ember.Freezable`, then this will return a new
    copy if the object is not frozen and the receiver if the object is frozen.

    Raises an exception if you try to call this method on a object that does
    not support freezing.

    You should use this method whenever you want a copy of a freezable object
    since a freezable object can simply return itself without actually
    consuming more memory.

    @method frozenCopy
    @return {Object} copy of receiver or receiver
    @deprecated Use `Object.freeze` instead.
    @private
  */
  frozenCopy() {
    deprecate(
      '`frozenCopy` is deprecated, use `Object.freeze` instead.',
      false,
      { id: 'ember-runtime.frozen-copy', until: '3.0.0' }
    );
    if (Freezable && Freezable.detect(this)) {
      return get(this, 'isFrozen') ? this : this.copy().freeze();
    } else {
      throw new EmberError(`${this} does not support freezing`);
    }
  }
});