Class: ActiveCypher::Fixtures::NodeBuilder
- Inherits:
-
Object
- Object
- ActiveCypher::Fixtures::NodeBuilder
- Defined in:
- lib/active_cypher/fixtures/node_builder.rb
Class Method Summary collapse
-
.build(ref, model_class, props) ⇒ Object
Builds a node and registers it like a bouncer at a VIP graph party.
-
.bulk_build(nodes, batch_size: 200) ⇒ Object
Bulk create nodes.
Class Method Details
.build(ref, model_class, props) ⇒ Object
Builds a node and registers it like a bouncer at a VIP graph party.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/active_cypher/fixtures/node_builder.rb', line 12 def self.build(ref, model_class, props) conn = model_class.connection labels = model_class.labels # Because even Cypher likes a well-dressed node. label_clause = labels.map { |label| "`#{label}`" }.join(':') # Build and fire the CREATE query. # Ask the adapter how it likes its IDs served - string or integer, sir? adapter = conn.id_handler cypher = <<~CYPHER CREATE (n:#{label_clause} $props) RETURN n, #{adapter.return_node_id('n')}, properties(n) AS props CYPHER result = conn.execute_cypher(cypher, props: props) record = result.first # Extract properties returned by the DB node_props = record[:props] || record['props'] || {} node_props['internal_id'] = record[:internal_id] || record['internal_id'] # Instantiate and tag it like we own it instance = model_class.instantiate(node_props) Registry.add(ref, instance) instance end |
.bulk_build(nodes, batch_size: 200) ⇒ Object
Bulk create nodes. Still uses single ‘CREATE` per node, just slices the list to avoid melting your graph engine.
45 46 47 48 49 50 51 |
# File 'lib/active_cypher/fixtures/node_builder.rb', line 45 def self.bulk_build(nodes, batch_size: 200) nodes.each_slice(batch_size) do |batch| batch.each do |node| build(node[:ref], node[:model_class], node[:props]) end end end |