Module: ActiveGraph::Node::Labels

Extended by:
ActiveSupport::Concern
Includes:
Index, Reloading
Included in:
ActiveGraph::Node
Defined in:
lib/active_graph/node/labels.rb,
lib/active_graph/node/labels/index.rb,
lib/active_graph/node/labels/reloading.rb

Overview

Provides a mapping between neo4j labels and Ruby classes

Defined Under Namespace

Modules: ClassMethods, Index, Reloading Classes: RecordNotFound

Constant Summary collapse

WRAPPED_CLASSES =
[]
MODELS_FOR_LABELS_CACHE =
{}

Constants included from Reloading

Reloading::MODELS_TO_RELOAD

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Reloading

reload_models!

Class Method Details

._wrapped_classesObject



52
53
54
# File 'lib/active_graph/node/labels.rb', line 52

def self._wrapped_classes
  WRAPPED_CLASSES
end

.add_wrapped_class(model) ⇒ Object



56
57
58
# File 'lib/active_graph/node/labels.rb', line 56

def self.add_wrapped_class(model)
  _wrapped_classes << model
end

.clear_wrapped_modelsObject



75
76
77
78
# File 'lib/active_graph/node/labels.rb', line 75

def self.clear_wrapped_models
  MODELS_FOR_LABELS_CACHE.clear
  ActiveGraph::Node::Wrapping::CONSTANTS_FOR_LABELS_CACHE.clear
end

.model_for_labels(labels) ⇒ Object

Finds an appropriate matching model given a set of labels which are assigned to a node



62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/active_graph/node/labels.rb', line 62

def self.model_for_labels(labels)
  labels.sort!
  return MODELS_FOR_LABELS_CACHE[labels] if MODELS_FOR_LABELS_CACHE[labels]

  models = WRAPPED_CLASSES.select do |model|
    (model.mapped_label_names - labels).empty?
  end

  MODELS_FOR_LABELS_CACHE[labels] = models.max_by do |model|
    (model.mapped_label_names & labels).size
  end
end

Instance Method Details

#add_labels(*labels) ⇒ Object

adds one or more labels

See Also:



34
35
36
37
38
39
40
# File 'lib/active_graph/node/labels.rb', line 34

def add_labels(*labels)
  labels.inject(query_as(:n)) do |query, label|
    query.set("n:`#{label}`")
  end.exec
  @_persisted_obj.labels.concat(labels)
  @_persisted_obj.labels.uniq!
end

#labelsObject

Returns the labels.

Returns:

  • the labels

See Also:



23
24
25
# File 'lib/active_graph/node/labels.rb', line 23

def labels
  @_persisted_obj.labels
end

#remove_labels(*labels) ⇒ Object

Removes one or more labels Be careful, don’t remove the label representing the Ruby class.

See Also:



45
46
47
48
49
50
# File 'lib/active_graph/node/labels.rb', line 45

def remove_labels(*labels)
  labels.inject(query_as(:n)) do |query, label|
    query.remove("n:`#{label}`")
  end.exec
  labels.each(&@_persisted_obj.labels.method(:delete))
end