Module: ActiveGraph::Node::Query::QueryProxyEnumerable

Includes:
Enumerable
Included in:
QueryProxy
Defined in:
lib/active_graph/node/query/query_proxy_enumerable.rb

Overview

Methods related to returning nodes and rels from QueryProxy

Instance Method Summary collapse

Instance Method Details

#==(other) ⇒ Object

Does exactly what you would hope. Without it, comparing `bobby.lessons == sandy.lessons` would evaluate to false because it would be comparing the QueryProxy objects, not the lessons themselves.

[View source]

64
65
66
# File 'lib/active_graph/node/query/query_proxy_enumerable.rb', line 64

def ==(other)
  self.to_a == other
end

#each(node = true, rel = nil, &block) ⇒ Enumerable

Just like every other each but it allows for optional params to support the versions that also return relationships. The node and rel params are typically used by those other methods but there's nothing stopping you from using `your_node.each(true, true)` instead of `your_node.each_with_rel`.

Returns:

  • (Enumerable)

    An enumerable containing some combination of nodes and rels.

[View source]

12
13
14
# File 'lib/active_graph/node/query/query_proxy_enumerable.rb', line 12

def each(node = true, rel = nil, &block)
  result(node, rel).each(&block)
end

#each_rel(&block) ⇒ Enumerable

When called at the end of a QueryProxy chain, it will return the resultant relationship objects intead of nodes. For example, to return the relationship between a given student and their lessons:

.. code-block

ruby

student.lessons.each_rel do |rel|

Returns:

  • (Enumerable)

    An enumerable containing any number of applicable relationship objects.

[View source]

48
49
50
# File 'lib/active_graph/node/query/query_proxy_enumerable.rb', line 48

def each_rel(&block)
  block_given? ? each(false, true, &block) : to_enum(:each, false, true)
end

#each_with_rel(&block) ⇒ Object

When called at the end of a QueryProxy chain, it will return the nodes and relationships of the last link. For example, to return a lesson and each relationship to a given student:

.. code-block

ruby

student.lessons.each_with_rel do |lesson, rel|
[View source]

58
59
60
# File 'lib/active_graph/node/query/query_proxy_enumerable.rb', line 58

def each_with_rel(&block)
  block_given? ? each(true, true, &block) : to_enum(:each, true, true)
end

#fetch_result_cacheObject

[View source]

36
37
38
# File 'lib/active_graph/node/query/query_proxy_enumerable.rb', line 36

def fetch_result_cache
  @result_cache ||= yield
end

#pluck(*args) ⇒ Object

For getting variables which have been defined as part of the association chain

[View source]

69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/active_graph/node/query/query_proxy_enumerable.rb', line 69

def pluck(*args)
  transformable_attributes = (model ? model.attribute_names : []) + %w(uuid neo_id)
  arg_list = args.map do |arg|
    arg = ActiveGraph::Node::Query::QueryProxy::Link.converted_key(model, arg)
    if transformable_attributes.include?(arg.to_s)
      {identity => arg}
    else
      arg
    end
  end

  self.query.pluck(*arg_list)
end

#result(node = true, rel = nil) ⇒ Object

[View source]

16
17
18
19
20
21
22
23
24
25
26
# File 'lib/active_graph/node/query/query_proxy_enumerable.rb', line 16

def result(node = true, rel = nil)
  return [].freeze if unpersisted_start_object?

  @result_cache ||= {}
  return result_cache_for(node, rel) if result_cache?(node, rel)

  result = pluck_vars(node, rel)
  set_instance_caches(result, node, rel)

  @result_cache[[node, rel]] ||= result
end

#result_cache?(node = true, rel = nil) ⇒ Boolean

Returns:

[View source]

28
29
30
# File 'lib/active_graph/node/query/query_proxy_enumerable.rb', line 28

def result_cache?(node = true, rel = nil)
  !!result_cache_for(node, rel)
end

#result_cache_for(node = true, rel = nil) ⇒ Object

[View source]

32
33
34
# File 'lib/active_graph/node/query/query_proxy_enumerable.rb', line 32

def result_cache_for(node = true, rel = nil)
  (@result_cache || {})[[node, rel]]
end