Source: models/class.js

import stampit from 'stampit';
import {Meta, Model} from './base';

const ClassMeta = Meta({
  name: 'class',
  pluralName: 'classes',
  endpoints: {
    'detail': {
      'methods': ['delete', 'patch', 'put', 'get'],
      'path': '/v1.1/instances/{instanceName}/classes/{name}/'
    },
    'list': {
      'methods': ['post', 'get'],
      'path': '/v1.1/instances/{instanceName}/classes/'
    }
  },
  relatedModels: [ 'DataObject' ]
});

const ClassConstraints = {
  instanceName: {
    presence: true,
    length: {
      minimum: 5
    }
  },
  name: {
    presence: true,
    string: true
  },
  description: {
    string: true
  },
  schema: {
    array: true
  },
  group: {
    numericality: true
  },
  group_permissions: {
    inclusion: ['none', 'read', 'create_objects']
  },
  other_permissions: {
    inclusion: ['none', 'read', 'create_objects']
  },
  metadata: {
    object: true
  }
};

/**
 * OO wrapper around instance groups {@link http://docs.syncano.com/v4.0/docs/instancesinstanceclasses endpoint}.
 * @constructor
 * @type {Class}

 * @property {String} name
 * @property {String} instanceName
 * @property {Number} objects_count
 * @property {Array} schema
 * @property {String} status
 * @property {Object} metadata
 * @property {String} revision
 * @property {String} expected_revision
 * @property {String} group
 * @property {String} group_permissions
 * @property {String} other_permissions
 * @property {String} [description = null]
 * @property {String} [links = {}]
 * @property {Date} [created_at = null]
 * @property {Date} [updated_at = null]

 */
const Class = stampit()
  .compose(Model)
  .setMeta(ClassMeta)
  .setConstraints(ClassConstraints);

export default Class;