Class: Cyrel::Pattern::Node
- Inherits:
-
Object
- Object
- Cyrel::Pattern::Node
- Includes:
- ActiveModel::Attributes, ActiveModel::Model, Cyrel::Parameterizable
- Defined in:
- lib/cyrel/pattern/node.rb
Instance Method Summary collapse
-
#as(new_alias) ⇒ Object
—————————————————————— Public: return a copy of this Node with a different alias.
- #freeze ⇒ Object
-
#initialize(alias_name, labels: nil, properties: {}, **kw) ⇒ Node
constructor
A new instance of Node.
- #render(query) ⇒ Object
Constructor Details
#initialize(alias_name, labels: nil, properties: {}, **kw) ⇒ Node
Returns a new instance of Node.
19 20 21 22 23 24 25 |
# File 'lib/cyrel/pattern/node.rb', line 19 def initialize(alias_name, labels: nil, properties: {}, **kw) super( { alias_name: alias_name, labels: Array(labels).compact.flatten, properties: properties }.merge(kw) ) end |
Instance Method Details
#as(new_alias) ⇒ Object
Public: return a copy of this Node with a different alias.
Cyrel.node('Person').as(:p) # (:p:Person)
We dup so the original immutable instance (often reused by the DSL) isn’t mutated.
35 36 37 |
# File 'lib/cyrel/pattern/node.rb', line 35 def as(new_alias) dup_with(alias_name: new_alias.to_sym) end |
#freeze ⇒ Object
60 61 62 63 64 |
# File 'lib/cyrel/pattern/node.rb', line 60 def freeze super labels.freeze properties.freeze end |
#render(query) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/cyrel/pattern/node.rb', line 39 def render(query) base = +"(#{alias_name}" base << ':' << labels.join(':') unless labels.empty? unless properties.empty? params = properties.with_indifferent_access formatted = params.map do |k, v| # Let register_parameter handle loop variable detection param_key = query.register_parameter(v) if param_key.is_a?(Symbol) && param_key == v # Loop variable returned as-is, don't parameterize "#{k}: #{v}" else # Normal parameter key returned "#{k}: $#{param_key}" end end.join(', ') base << " {#{formatted}}" end base << ')' end |