Source: sputils.list.js

(function () {
  var listByNameGetItems = function (name, config) {
    var url = "/_api/Web/Lists/getByTitle('%NAME')/items/".replace('%NAME', name);
    return sputils.rest.get(url, config)
      .then(sputils.rest.unwrapResults);
  };

  var listByNamePostItems = function (name, data, config) {
    var url = "/_api/Web/Lists/getByTitle('%NAME')/items/".replace('%NAME', name);
    return sputils.rest.post(url, data, config)
      .then(sputils.rest.unwrapResults);
  };

  var listByNameGetItemById = function (name, itemId, config) {
    var url = "/_api/Web/Lists/getByTitle('%NAME')/items/getbyid(%ID)"
          .replace('%NAME', name)
          .replace('%ID', itemId);
    return sputils.rest.get(url, config)
      .then(sputils.rest.unwrapResults);
  };

  /**
   * exposes operations on a list qualified by name.
   * @function sputils.list.byName
   * @param {string} name a list name
   * @returns {object} an object exposing operations possible on the list.
   *
   * @example
   *
   * var list = sputils.list.byName('announcements');
   * list.getItems().then(...);
   */
  var byName = function (name) {
    return {
      /**
       * Returns the list items from the given list name.
       * @function sputils.list.byName(name).getItems
       * @memberof! sputils.list
       * @param {Optional<object>} config the http config
       * @returns {Promise<array>} the array containing the list items.
       *
       * @example
       *
       * sputils.list.byName('Announcements').getItems()
       *   .then(function (data) { console.log(data.d.results) });
       *
       */
      getItems: function (config) {
        return listByNameGetItems(name, config);
      },

      /**
       * Returns the list item with the specified id.
       * @function sputils.list.byName(name).getItemById
       * @memberof! sputils.list
       * @param {object} data the payload
       * @param {Optional<object>} config the http config
       * @returns {Promise<object>} List item
       *
       * @example
       *
       * sputils.list.byName('Announcements').getItemById(1)
       *   .then(function (data) { console.log(data) });
       */
      getItemById: function (id, config) {
        return listByNameGetItemById(name, id, config);
      },

      /**
       * Modifies list items in the given list.
       * @function sputils.list.byName(name).postItems
       * @memberof! sputils.list
       * @param {object} data the payload
       * @param {object} config the http config
       * @returns {Promise<object>}
       *
       * @example
       *
       * var data = {
       *   __metadata: { type: "SP.Data.AnnouncementsListItem"}
       *   Title: "listlessly POSTing",
       * };
       * sputils.list.byName("Announcements").postItems(data)
       *   .then(function (data) { console.log(data); });
       */
      postItems: function (data, config) {
        return listByNamePostItems(name, data, config);
      }
    };
  };

  /** @namespace */
  sputils.list = fjs.assign(sputils.list || {}, {
    byName: byName
  });
})();