class Aspen::Renderers::CypherBatchRenderer
Public Instance Methods
render()
click to toggle source
Sorts statements by signature, where signature could be
(Person)-[KNOWS]-(Person) or (Company)-[HIRED]->(Person).
# File lib/aspen/renderers/cypher_batch_renderer.rb, line 7 def render groups = statements.inject( Hash.new { |h, k| h[k] = [] } ) do |memo, statement| memo[statement.signature] << statement memo end groups.inject([]) do |memo, elem| signature, statements = elem if signature == "custom" # Delegate custom statements to the base renderer memo << CypherBaseRenderer.new(statements, environment).render else first = statements.first values = statements.map do |statement| "{from: #{statement.origin.attributes.values.first.inspect}, to: #{statement.target.attributes.values.first.inspect}}" end.join(",\n ") memo << ERB.new(template).result_with_hash( signature: signature, values: values, origin_label: first.origin.label, target_label: first.target.label, origin_attr: first.origin.attributes.keys.first, target_attr: first.target.attributes.keys.first, edge_cypher: first.edge.to_cypher, ) end memo end.join("\n\n") end
template()
click to toggle source
# File lib/aspen/renderers/cypher_batch_renderer.rb, line 38 def template <<~TEMPLATE // <%= signature %> WITH [ <%= values %> ] as values UNWIND values as row MERGE (from:<%= origin_label %> {<%= origin_attr %>: row.from}) MERGE (to:<%= target_label %> {<%= target_attr %>: row.to}) MERGE (from)<%= edge_cypher %>(to) TEMPLATE end