Class: ActiveGraph::Core::Label
- Inherits:
-
Object
- Object
- ActiveGraph::Core::Label
- Defined in:
- lib/active_graph/core/label.rb
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Class Method Summary collapse
Instance Method Summary collapse
- #constraint?(property) ⇒ Boolean
- #constraints(_options = {}) ⇒ Object
-
#create_constraint(property, constraints) ⇒ Object
Creates a neo4j constraint on a property See docs.neo4j.org/chunked/stable/query-constraints.html.
- #create_index(property, options = {}) ⇒ Object
- #create_uniqueness_constraint(property, options = {}) ⇒ Object
-
#drop_constraint(property, constraint) ⇒ Object
Drops a neo4j constraint on a property See docs.neo4j.org/chunked/stable/query-constraints.html.
- #drop_index(property, options = {}) ⇒ Object
- #drop_indexes ⇒ Object
- #drop_uniqueness_constraint(property, options = {}) ⇒ Object
- #index?(property) ⇒ Boolean
- #indexes ⇒ Object
-
#initialize(name) ⇒ Label
constructor
A new instance of Label.
- #uniqueness_constraint?(property) ⇒ Boolean
- #uniqueness_constraints(_options = {}) ⇒ Object
Constructor Details
#initialize(name) ⇒ Label
Returns a new instance of Label.
6 7 8 |
# File 'lib/active_graph/core/label.rb', line 6 def initialize(name) @name = name end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
4 5 6 |
# File 'lib/active_graph/core/label.rb', line 4 def name @name end |
Class Method Details
.drop_constraints ⇒ Object
116 117 118 119 120 121 122 123 |
# File 'lib/active_graph/core/label.rb', line 116 def drop_constraints result = ActiveGraph::Base.read_transaction { |tx| tx.run('CALL db.constraints').to_a } ActiveGraph::Base.write_transaction do |tx| result.each do |record| tx.run("DROP #{record.keys.include?(:name) ? "CONSTRAINT #{record[:name]}" : record[:description]}") end end end |
.drop_indexes ⇒ Object
105 106 107 108 109 110 111 112 113 114 |
# File 'lib/active_graph/core/label.rb', line 105 def drop_indexes indexes.each do |definition| begin ActiveGraph::Base.query("DROP INDEX ON :`#{definition[:label]}`(#{definition[:properties][0]})") rescue Neo4j::Driver::Exceptions::DatabaseException # This will error on each constraint. Ignore and continue. next end end end |
.indexes ⇒ Object
101 102 103 |
# File 'lib/active_graph/core/label.rb', line 101 def indexes ActiveGraph::Base.indexes end |
Instance Method Details
#constraint?(property) ⇒ Boolean
90 91 92 |
# File 'lib/active_graph/core/label.rb', line 90 def constraint?(property) constraints.any? { |definition| definition[:properties] == [property.to_sym] } end |
#constraints(_options = {}) ⇒ Object
78 79 80 81 82 |
# File 'lib/active_graph/core/label.rb', line 78 def constraints( = {}) ActiveGraph::Base.constraints.select do |definition| definition[:label] == @name.to_sym end end |
#create_constraint(property, constraints) ⇒ Object
Creates a neo4j constraint on a property See docs.neo4j.org/chunked/stable/query-constraints.html
27 28 29 30 31 32 33 34 35 |
# File 'lib/active_graph/core/label.rb', line 27 def create_constraint(property, constraints) cypher = case constraints[:type] when :unique, :uniqueness "CREATE CONSTRAINT ON (n:`#{name}`) ASSERT n.`#{property}` IS UNIQUE" else fail "Not supported constraint #{constraints.inspect} for property #{property} (expected :type => :unique)" end schema_query(cypher) end |
#create_index(property, options = {}) ⇒ Object
10 11 12 13 14 |
# File 'lib/active_graph/core/label.rb', line 10 def create_index(property, = {}) () properties = property.is_a?(Array) ? property.join(',') : property schema_query("CREATE INDEX ON :`#{@name}`(#{properties})") end |
#create_uniqueness_constraint(property, options = {}) ⇒ Object
37 38 39 |
# File 'lib/active_graph/core/label.rb', line 37 def create_uniqueness_constraint(property, = {}) create_constraint(property, .merge(type: :unique)) end |
#drop_constraint(property, constraint) ⇒ Object
Drops a neo4j constraint on a property See docs.neo4j.org/chunked/stable/query-constraints.html
48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/active_graph/core/label.rb', line 48 def drop_constraint(property, constraint) cypher = case constraint[:type] when :unique, :uniqueness "n.`#{property}` IS UNIQUE" when :exists "exists(n.`#{property}`)" else fail "Not supported constraint #{constraint.inspect}" end schema_query("DROP CONSTRAINT ON (n:`#{name}`) ASSERT #{cypher}") end |
#drop_index(property, options = {}) ⇒ Object
16 17 18 19 |
# File 'lib/active_graph/core/label.rb', line 16 def drop_index(property, = {}) () schema_query("DROP INDEX ON :`#{@name}`(#{property})") end |
#drop_indexes ⇒ Object
70 71 72 |
# File 'lib/active_graph/core/label.rb', line 70 def drop_indexes self.class.drop_indexes end |
#drop_uniqueness_constraint(property, options = {}) ⇒ Object
60 61 62 |
# File 'lib/active_graph/core/label.rb', line 60 def drop_uniqueness_constraint(property, = {}) drop_constraint(property, .merge(type: :unique)) end |
#index?(property) ⇒ Boolean
74 75 76 |
# File 'lib/active_graph/core/label.rb', line 74 def index?(property) indexes.any? { |definition| definition[:properties] == [property.to_sym] } end |
#indexes ⇒ Object
64 65 66 67 68 |
# File 'lib/active_graph/core/label.rb', line 64 def indexes self.class.indexes.select do |definition| definition[:label] == @name.to_sym end end |
#uniqueness_constraint?(property) ⇒ Boolean
94 95 96 |
# File 'lib/active_graph/core/label.rb', line 94 def uniqueness_constraint?(property) uniqueness_constraints.include?([property]) end |
#uniqueness_constraints(_options = {}) ⇒ Object
84 85 86 87 88 |
# File 'lib/active_graph/core/label.rb', line 84 def uniqueness_constraints( = {}) constraints.select do |definition| definition[:type] == :uniqueness end end |