Source: PageObjects.js

'use strict';

var Page = require('./page/page');

/**
 * Defines a new set of application pages.
 *
 * @constructor
 * @param {Array.<Page~PageDefinition>} pages - definitions for the pages to be added
 *
 * @example <caption>Pass in a variable number of pages</caption>
 * var app = new PageObjects(login, home, settings);
 *
 * @example <caption>Pass in an array of pages</caption>
 * var app = new PageObjects([login, home, settings]);
 *
 * @example <caption>Or mix the two</caption>
 * var app = new PageObjects(login, [home], settings);
 */
function PageObjects(pages) {
    var self = this;
    var definitions = [];

    for (var i = arguments.length - 1; i >= 0; i--) {
        definitions = definitions.concat(arguments[i]);
    }

    definitions.forEach(function(pageDefinition) {
        self.$page(pageDefinition);
    });
}

/**
 * Creates a new definition for a page in the application
 *
 * @method $page
 * @memberof PageObjects.prototype
 * @param  {Page~PageDefinition} definition - the definition for the new page
 */
PageObjects.prototype.$page = function(definition) {
    this[definition.name] = new Page(definition);
};

module.exports = PageObjects;