Articulate

 view release on metacpan or  search on metacpan

Design.md  view on Meta::CPAN


### Caching and indexing

The Content component is responsible for caching content, meta, etc, and also clearing the cache when edits are made. This is a low-priority issue to implement.

What about indexing things post-component? e.g. do some metadata extraction to get datesdates, then search? I wonder if indexes need to be maintained separately from content, especially to avoid contamination by non-UGC.

When storage does write ops let it call Indexation which delegates to indexes which can decide whether to update indexes.

What about indexing with a separate service, e.g. store content locally but hive off document search to a solr instance?

### Versioning

Can this be done with an augmentation?

### Content locking

  lock_item ($user, $endtime)

Do this by a plugin? Autolock on get?

### Integrated services

See Articulate::Service

It should be possible to define route handlers, possibly within zones, which are available to only certain users and that perform operations, e.g. authors can access a service which turns markdown into html for previews.

### Items

See Articulate::Item

### Location Object

See Articulate::Location, Articulate::LocationSpecification

A glorified array. Let Redis do zone.public and local do zone/public. Avoid having to deal with initial slashes.

### Setup

Should we have a script like `dancer -a`

articulate -a --preset=empty

  bin
  lib
  content
  indexes
  public
  t

Other presets can be defined like webservice, blog, issue tracker, wiki.

#### Presets

##### Perl Blog Engine "Plain Speaking"

##### Perl Issue Tracker "Pipe Up"

### Error throwing

NotFound => 404

- Case a) NoRoute: no route defined
- Case b) NoResource: a route is defined but one of the ids is wrong
- Case c) NoResult: a search has been performed and there were no results

InputError => 400

  Case a) InputTypeError: a parameter was empty, of the wrong type, etc. and it is not possible to be more specific.
  Case b) InputParsingError: a request has been refused because the content appears broken
  Case c) InputValidationError: A parameter was present, but does not fit with a defined schema.

Conflict => 409

  Case a) The requested action could not be completed because of its effects on other resources
  Case b) The server has decided that requested action should not be completed because it appears that the underlying data has changed since the user last saw the data.

ContentError => 409?

  Case a) There is content on the server which is missing or of the wrong type
  Case b) There is content on the server which is inconsistent
  Case c) There is content on the server which the server does not know how to serve

ServerError => 500

  Case a) An outer layer has sent values that an inner layer cannot understand.
  Case b) An inner layer has sent values that an outer layer cannot understand.
  Case c) A critical layer, component, etc. has actively determined that it is not working and cannot respond to requests meaningfully. .


---

permissions:
  view:
    groups:
    users:
  link:
    groups:
    users:
  edit:
    groups:
    users:
  assign:
    groups:
    users:
meta:
  core:
	history:
		- user:
		  date:
		- user:
		  date:
  schemaorg:
content_type: markdown



( run in 0.943 second using v1.01-cache-2.11-cpan-39bf76dae61 )