<commit_before>
To create custom key generation strategy your constructor function must include `require('kouchbase-odm').Key.prototype` in its prototype chain.  
See {@link Key Key API Reference} for details about abstract methods and methods which may be overriden.

````javascript
    var util         = require('util');
    var couchbaseODM = require('kouchbase-odm');
    var Key          = couchbaseODM.Key;
    var DataTypes    = couchbaseODM.DataTypes;

    /*
     * constructor
     *
     * the constructor will be called with options which were set when defining
     * a Model (or CouchbaseODM instance)
     * @param {Object} options
     * @param {string|integer} options.id
     * @param {string}         options.prefix
     * @param {string}         options.postfix=""
     * @param {string}         options.delimiter="_"
     */
    function UUID1Key(options) {
        Key.call(this, options);
    }

    //every key generation strategy must expose static `dataType` property
    // which determines data type of document's `id`. Usually it will be
    // `DataTypes.STRING` or `DataTypes.INT`
    UUID1Key.dataType = DataTypes.STRING;

    //behavior delegation - adds `Key.prototype` to `UUID1Key`'s prototype chain
    util.inherits(UUID1Key, Key);

    /**
     * generate
     *
     * generates new key
     * The method must return a prosime with generated `Key` object (self)
     *
     * @param {Instance} instance - document object<commit_msg>example code fix incorrect line alignment<commit_after>
To create custom key generation strategy your constructor function must include `require('kouchbase-odm').Key.prototype` in its prototype chain.  
See {@link Key Key API Reference} for details about abstract methods and methods which may be overriden.

````javascript
    var util         = require('util');
    var couchbaseODM = require('kouchbase-odm');
    var Key          = couchbaseODM.Key;
    var DataTypes    = couchbaseODM.DataTypes;

    /*
     * constructor
     *
     * the constructor will be called with options which were set when defining
     * a Model (or CouchbaseODM instance)
     * @param {Object}         options
     * @param {string|integer} options.id
     * @param {string}         options.prefix
     * @param {string}         options.postfix=""
     * @param {string}         options.delimiter="_"
     */
    function UUID1Key(options) {
        Key.call(this, options);
    }

    //every key generation strategy must expose static `dataType` property
    // which determines data type of document's `id`. Usually it will be
    // `DataTypes.STRING` or `DataTypes.INT`
    UUID1Key.dataType = DataTypes.STRING;

    //behavior delegation - adds `Key.prototype` to `UUID1Key`'s prototype chain
    util.inherits(UUID1Key, Key);

    /**
     * generate
     *
     * generates new key
     * The method must return a prosime with generated `Key` object (self)
     *
     * @param {Instance} instance - document object
{'fraction_non_alphanumeric': 0.09590878604963111, 'fraction_numerical': 0.0026827632461435278, 'mean_word_length': 2.7101990049751246, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7044332', 'n_tokens_mistral': 821, 'n_tokens_neox': 808, 'n_words': 282}