/**
 * @class Ext.util.ObjectTemplate
 * This class accepts an object that serves as a template for creating new objects. Like
 * other templates (`Ext.XTemplate`) this creation step requires a context object to give
 * the template its values.
 *
 * For example:
 *
 *      var tpl = new Ext.util.ObjectTemplate({
 *          property: 'Hello {name}',
 *          data: {
 *              value: '{age}'
 *          }
 *      });
 *
 *      var obj = tpl.apply({
 *          name: 'Bill',
 *          age: 42
 *      });
 *
 *      // obj = {
 *      //     property: 'Hello Bill',
 *      //     data: {
 *      //         value: 42
 *      //     }
 *      // }
 *
 * @since 5.0.0
 */
 
/**
 * @method create
 * Creates an `ObjectTemplate` given a config object or instance.
 * @param {Object/Ext.util.ObjectTemplate} template The template object.
 * @param {Object} [options]
 * @return {Ext.util.ObjectTemplate}
 * @since 5.0.0
 */
 
/**
 * @method constructor
 * @constructor
 * Constructs the `ObjectTemplate`. The actual compilation of the object to a ready to
 * apply form happens on the first call to `apply`.
 * @param {Object} template 
 * @param {Object} [options]
 * @since 5.0.0
 */
 
/**
 * @method apply
 * Applies the given `context` object to this template and returns a new object with
 * the appropriate pieces replaced.
 * @param {Object} context The data used to populate the template.
 * @return {Object}
 * @since 5.0.0
 */
 
/**
 * @method compile
 * Compiles the  given template into an `apply` method that is ready to run. This
 * method is used recursively to process object properties and array elements.
 * @param {Mixed} template 
 * @return {Function}
 * @since 5.0.0
 */