#

API Docs for: 3.10.3
Show: Inherited Protected Private Deprecated

# File: recordset/js/recordset-filter.js

    /**
     * Plugin that provides the ability to filter through a recordset.
     * Uses the filter methods available on Y.Array (see arrayextras submodule) to filter the recordset.
     * @module recordset
     * @submodule recordset-filter
     */

    var YArray = Y.Array,
    Lang = Y.Lang;

    /**
     * Plugin that provides the ability to filter through a recordset.
     * Uses the filter methods available on Y.Array (see arrayextras submodule) to filter the recordset.
     * @class RecordsetFilter
     */
    function RecordsetFilter(config) {
        RecordsetFilter.superclass.constructor.apply(this, arguments);
    }

    Y.mix(RecordsetFilter, {
        NS: "filter",

        NAME: "recordsetFilter",

        ATTRS: {
        }

    });

    Y.extend(RecordsetFilter, Y.Plugin.Base, {

        /**
        Filter through the recordset with a custom filter function, or a key-value
        pair.

        @method filter
        @param {Function|String} filter A custom filter function or a string
            representing the key to filter by.
        @param {Any} [value] If filtering by key (_filter_ is a string), further
            filter by a specific value.
        @return {Recordset} A new filtered Recordset instance
        **/
        filter: function (filter, value) {
            var recs = this.get('host').get('records'),
                key;

            //If a key-value pair is passed in, generate a custom function
            if (value && Lang.isString(filter)) {
                key = filter;
                filter = function(item) {
                    return (item.getValue(key) === value);
                };
            }

            //TODO: PARENT CHILD RELATIONSHIP
            return new Y.Recordset({
                records: YArray.filter(recs, filter)
            });
        },

        /**
        The inverse of filter. Executes the supplied function on each item. Returns
        a new Recordset containing the items that the supplied function returned
        `false` for.

        @method reject
        @param {Function} filter A boolean function, executed on each item.
        @return {Recordset} A new Recordset instance containing the items on which
            the supplied function returned false.
        **/
        reject: function (filter) {
            return new Y.Recordset({
                records: YArray.reject(this.get('host').get('records'), filter)
            });
        },

        /**
        Iterates over the Recordset, returning a new Recordset of all the elements
        that match the supplied regular expression

        @method grep
        @param {RegExp} pattern The regular expression to test against each record.
        @return {Recordset} A Recordset instance containing all the items in the
            collection that produce a match against the supplied regular
            expression. If no items match, an empty Recordset instance is returned.
        **/
        grep: function (pattern) {
            return new Y.Recordset({
                records: YArray.grep(this.get('host').get('records'), pattern)
            });
        }

        //TODO: Add more pass-through methods to arrayextras
    });

    Y.namespace("Plugin").RecordsetFilter = RecordsetFilter;