neo4j
Version:
Neo4j driver (REST API client) for Node.js
52 lines (41 loc) • 1.94 kB
text/coffeescript
utils = require './utils'
module.exports = class Node
constructor: (opts={}) ->
{@_id, @labels, @properties} = opts
equals: (other) ->
# TODO: Is this good enough? Often don't want exact equality, e.g.
# nodes' properties may change between queries.
(other instanceof Node) and (@_id is other._id)
toString: ->
labels = @labels.map (label) -> ":#{label}"
"(#{@_id}#{labels.join ''})" # E.g. (123), (456:Foo), (789:Foo:Bar)
#
# Accepts the given raw JSON from Neo4j's REST API, and if it represents a
# valid node, creates and returns a Node instance from it.
# If the JSON doesn't represent a valid node, returns null.
#
@_fromRaw: (obj) ->
return null if (not obj) or (typeof obj isnt 'object')
{data, metadata, self} = obj
return null if (not self) or (typeof self isnt 'string') or
(not data) or (typeof data isnt 'object')
# Metadata was only added in Neo4j 2.1.5, so don't *require* it,
# but (a) it makes our job easier, and (b) it's the only way we can get
# labels, so warn the developer if it's missing, but only once.
if metadata
{id, labels} = metadata
else
id = utils.parseId self
labels = null
if not @_warnedMetadata
@_warnedMetadata = true
console.warn 'It looks like you’re running Neo4j <2.1.5.
Neo4j <2.1.5 didn’t return label metadata to drivers,
so node-neo4j has no way to associate nodes with labels.
Thus, the `labels` property on node-neo4j `Node` instances
will always be null for you. Consider upgrading to fix. =)
http://neo4j.com/release-notes/neo4j-2-1-5/'
return new Node
_id: id
labels: labels
properties: data