String.js

import Resource from './Resource';

/**
 * String is a resource for handling simple strings of data.
 *
 * @exports store/String
 */
export default class StringResource extends Resource {
  /**
   * @param {string} entryURI - URI to an entry where this resource is contained.
   * @param {string} resourceURI - URI to the resource.
   * @param {EntryStore} entryStore - the API's repository instance.
   * @param {string} data - the actual string, may the empty string, but not null or undefined.
   */
  constructor(entryURI, resourceURI, entryStore, data) {
    super(entryURI, resourceURI, entryStore); // Call the super constructor.
    this._data = data;
  }

  /**
   * @returns {string} may be an empty string, never null or undefined.
   */
  getString() {
    return this._data;
  }

  /**
   * Set a new string, does not save it to the repository, use commit for that. E.g.
   *
   *     stringresource.setString("New value").commit().then(function() {...});
   *
   * @param {string} string - the new string
   * @returns {StringResource} allows chaining with commit.
   * @see String#commit
   */
  setString(string) {
    this._data = string || '';
    return this;
  }

  /**
   * Pushes the string back to the repository.
   *
   * @returns {Promise}
   * @see String#setString
   */
  commit() {
    return this._entryStore.handleAsync(this._entryStore.getREST().put(this._resourceURI, this._data), 'commitString');
  }

  getSource() {
    return this._data;
  }
}