Class: Cyrel::Pattern::Node

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Attributes, ActiveModel::Model, Cyrel::Parameterizable
Defined in:
lib/cyrel/pattern/node.rb

Instance Method Summary collapse

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

#freezeObject



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