Module: ActiveGraph::Node::Labels::ClassMethods
- Includes:
- QueryMethods
- Defined in:
- lib/active_graph/node/labels.rb
Instance Method Summary collapse
- #base_class ⇒ Object
-
#delete_all ⇒ Object
Deletes all nodes and connected relationships from Cypher.
-
#destroy_all ⇒ Object
Returns each node to Ruby and calls ‘destroy`.
-
#find(id) ⇒ Object
Returns the object with the specified neo4j id.
-
#find_by(values) ⇒ Object
Finds the first record matching the specified conditions.
-
#find_by!(values) ⇒ Object
Like find_by, except that if no record is found, raises a RecordNotFound error.
-
#mapped_label ⇒ ActiveGraph::Label
(also: #mapped_element)
The label for this class.
-
#mapped_label_name ⇒ Symbol
(also: #mapped_element_name)
The label that this class has which corresponds to a Ruby class.
-
#mapped_label_names ⇒ Array{Symbol}
All the labels that this class has.
Methods included from QueryMethods
#count, #empty?, #exists?, #find_each, #find_in_batches, #first, #last
Instance Method Details
#base_class ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/active_graph/node/labels.rb', line 139 def base_class unless self < ActiveGraph::Node fail "#{name} doesn't belong in a hierarchy descending from Node" end if superclass == Object self else superclass.base_class end end |
#delete_all ⇒ Object
Deletes all nodes and connected relationships from Cypher.
110 111 112 |
# File 'lib/active_graph/node/labels.rb', line 110 def delete_all neo4j_query("MATCH (n:`#{mapped_label_name}`) DETACH DELETE n") end |
#destroy_all ⇒ Object
Returns each node to Ruby and calls ‘destroy`. Be careful, as this can be a very slow operation if you have many nodes. It will generate at least one database query per node in the database, more if callbacks require them.
116 117 118 |
# File 'lib/active_graph/node/labels.rb', line 116 def destroy_all all.each(&:destroy) end |
#find(id) ⇒ Object
Returns the object with the specified neo4j id.
87 88 89 90 91 92 93 94 95 96 |
# File 'lib/active_graph/node/labels.rb', line 87 def find(id) map_id = proc { |object| object.respond_to?(:id) ? object.send(:id) : object } result = find_by_id_or_ids(map_id, id) fail RecordNotFound.new( "Couldn't find #{name} with '#{id_property_name}'=#{id.inspect}", name, id_property_name, id) if result.blank? result.tap { |r| find_callbacks!(r) } end |
#find_by(values) ⇒ Object
Finds the first record matching the specified conditions. There is no implied ordering so if order matters, you should specify it yourself.
100 101 102 |
# File 'lib/active_graph/node/labels.rb', line 100 def find_by(values) all.where(values).limit(1).query_as(:n).pluck(:n).first end |
#find_by!(values) ⇒ Object
Like find_by, except that if no record is found, raises a RecordNotFound error.
105 106 107 |
# File 'lib/active_graph/node/labels.rb', line 105 def find_by!(values) find_by(values) || fail(RecordNotFound.new("#{self.query_as(:n).where(n: values).limit(1).to_cypher} returned no results", name)) end |
#mapped_label ⇒ ActiveGraph::Label Also known as: mapped_element
Returns the label for this class.
133 134 135 |
# File 'lib/active_graph/node/labels.rb', line 133 def mapped_label ActiveGraph::Core::Label.new(mapped_label_name) end |
#mapped_label_name ⇒ Symbol Also known as: mapped_element_name
Returns the label that this class has which corresponds to a Ruby class.
126 127 128 |
# File 'lib/active_graph/node/labels.rb', line 126 def mapped_label_name @mapped_label_name || label_for_model end |
#mapped_label_names ⇒ Array{Symbol}
Returns all the labels that this class has.
121 122 123 |
# File 'lib/active_graph/node/labels.rb', line 121 def mapped_label_names self.ancestors.find_all { |a| a.respond_to?(:mapped_label_name) }.map { |a| a.mapped_label_name.to_sym } end |