Class: Openphar::Exporters::Neo4j::NodeBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/openphar/exporters/neo4j/node_builder.rb

Overview

Builds Neo4j Cypher nodes from model data

Uses the property mapper to convert JSON-LD properties to Neo4j format, and generates either CREATE or MERGE statements based on the use_merge flag.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(mapper = nil) ⇒ NodeBuilder

Returns a new instance of NodeBuilder.



13
14
15
16
# File 'lib/openphar/exporters/neo4j/node_builder.rb', line 13

def initialize(mapper = nil)
  @mapper = mapper || PropertyMapper.new
  @registry = @mapper.instance_variable_get(:@registry) || ModelRegistry.new
end

Instance Attribute Details

#mapperObject (readonly)

Returns the value of attribute mapper.



11
12
13
# File 'lib/openphar/exporters/neo4j/node_builder.rb', line 11

def mapper
  @mapper
end

#registryObject (readonly)

Returns the value of attribute registry.



11
12
13
# File 'lib/openphar/exporters/neo4j/node_builder.rb', line 11

def registry
  @registry
end

Instance Method Details

#build(data, use_merge: false) ⇒ String

Builds a Cypher CREATE/MERGE statement for a single node

Parameters:

  • data (Hash)

    The JSON-LD data as a Ruby hash

  • use_merge (Boolean) (defaults to: false)

    Use MERGE instead of CREATE

Returns:

  • (String)

    Cypher statement



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/openphar/exporters/neo4j/node_builder.rb', line 23

def build(data, use_merge: false)
  node_type = registry.node_type_for(data['@type'] || data['type'])
  properties = mapper.map_properties(data)
  node_id = generate_node_id(node_type, properties[:id])

  if use_merge
    build_merge_statement(node_id, node_type, properties)
  else
    build_create_statement(node_id, node_type, properties)
  end
end

#property_count(data) ⇒ Integer

Returns the property count for a given data hash

Parameters:

  • data (Hash)

    The JSON-LD data

Returns:

  • (Integer)

    Number of properties



39
40
41
# File 'lib/openphar/exporters/neo4j/node_builder.rb', line 39

def property_count(data)
  mapper.property_count(data)
end