This is a demo of (some of the features of) the Node.js library lightsaber.
Simply run:
npm install lightsaber
./generate_docs.coffee > generated_docs.md
To rebuild generated_docs.md
from the coffeescript source.
This is a demo of (some of the features of) the Node.js library lightsaber.
Simply run:
npm install lightsaber
./generate_docs.coffee > generated_docs.md
To rebuild generated_docs.md
from the coffeescript source.
#!/usr/bin/env coffee | |
{ | |
canonical_json | |
indent | |
log | |
p | |
pretty | |
quote | |
sane | |
say | |
sha384 | |
} = require 'lightsaber' | |
say """ | |
# Nodesphere | |
## Saving a Graph | |
### HTTP PUT request | |
For example, suppose you perform an HTTP `PUT`, with a json payload of nodes and edges: | |
""" | |
sphere = | |
nodes: {} | |
edges: {} | |
subject = 'John Perry Barlow' | |
predicate = 'published' | |
object = 'A Declaration of Independence of Cyberspace' | |
sphere.nodes[sha384 subject] = subject | |
sphere.nodes[sha384 predicate] = predicate | |
sphere.nodes[sha384 object] = object | |
edge = { | |
subject: sha384 subject | |
predicate: sha384 predicate | |
object: sha384 object | |
} | |
sphere.edges[sha384 canonical_json edge] = edge | |
log indent sane pretty sphere | |
say """ | |
The ID of each node can be any unique string. In this case we use the hash of the node's sorted minified JSON. For example: | |
""" | |
log indent sane sha384 subject | |
say """ | |
is the hash of | |
""" | |
log indent quote subject | |
say """ | |
And: | |
""" | |
log indent sane sha384 canonical_json edge | |
say """ | |
is the hash of | |
""" | |
log indent quote sane canonical_json edge | |
say """ | |
Note that the JSON is minified and sorted by keys. | |
""" | |
##### | |
sphere_packed = | |
nodes: | |
[ | |
sha384 subject | |
sha384 predicate | |
sha384 object | |
] | |
edges: | |
[ | |
sha384 canonical_json edge | |
] | |
say """ | |
### HTTP PUT response | |
The expected response to the `PUT` request is one or more keys: | |
""" | |
sphere_hash = sha384 canonical_json sphere_packed | |
log indent sane pretty sha384: sphere_hash | |
say """ | |
Where `#{sane sphere_hash}` is the hash of the JSON of the entire "packed" sphere: | |
""" | |
log indent quote sane canonical_json sphere_packed | |
say """ | |
Note that the array values are sorted, as well as the object keys. | |
""" |
For example, suppose you perform an HTTP PUT
, with a json payload of nodes and edges:
{
"nodes": {
"e9381b02": "John Perry Barlow",
"85c3ef1e": "published",
"b8925d6f": "A Declaration of Independence of Cyberspace"
},
"edges": {
"dbfaa3ef": {
"subject": "e9381b02",
"predicate": "85c3ef1e",
"object": "b8925d6f"
}
}
}
The ID of each node can be any unique string. In this case we use the hash of the node's sorted minified JSON. For example:
e9381b02
is the hash of
'John Perry Barlow'
And:
dbfaa3ef
is the hash of
'{"object":"b8925d6f","predicate":"85c3ef1e","subject":"e9381b02"}'
Note that the JSON is minified and sorted by keys.
The expected response to the PUT
request is one or more keys:
{
"sha384": "490c56e9"
}
Where 490c56e9
is the hash of the JSON of the entire "packed" sphere:
'{"edges":["dbfaa3ef"],"nodes":["85c3ef1e","b8925d6f","e9381b02"]}'
Note that the array values are sorted, as well as the object keys.