neo4j-core 6.0.4 → 6.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d95034073fb92df2e8b72de9492fe9aa15adb2e0
4
- data.tar.gz: acc773e9876c5a9f3f061a3ce948a7756c1c1787
3
+ metadata.gz: f6da77aea23bd02b9be16de12f73ae5152035b11
4
+ data.tar.gz: f724c34ca0736fd6718687329097c8ade8c28c3e
5
5
  SHA512:
6
- metadata.gz: d45f87366cf51dc62db63ece6ff67a75160f18bfb6bb46189368377a324f4604f2f6d6739baf1027fdd89f1c52a0e5bdacc485db7e8ee77922870b7f4ab34ff5
7
- data.tar.gz: 54b90caf3e8546464bea2ad7acd88165177fc09001392a9440f1e0e89caae8332ccfac5a565675243a00e777a766fde9f7ec24128ffef13961953112d692ed6e
6
+ metadata.gz: 591c73f031b2645e33bad385124397ba6710f3540d0ad31682e7679e50e6e7809c0e6fd2874d0bf1b8799589309535b574ca741922a3fc2778d9bb5b544e0b40
7
+ data.tar.gz: bc1869acd81835775d2f7e6207279388ed0c8626b73355860e33e89fc02cb9041d778de608781e1c7bfd10a8a6c0ff1867524d9eb4b8dca52a08dac3c9a4513f
@@ -1,5 +1,5 @@
1
1
  module Neo4j
2
2
  module Core
3
- VERSION = '6.0.4'
3
+ VERSION = '6.0.5'
4
4
  end
5
5
  end
@@ -0,0 +1,127 @@
1
+ module Neo4j
2
+ module Core
3
+ class Label
4
+ attr_reader :name
5
+
6
+ def initialize(name, session)
7
+ @name = name
8
+ @session = session
9
+ schema_threads = []
10
+ end
11
+
12
+ def create_index(property, options = {})
13
+ puts "create_index(#{property.inspect}, #{options.inspect})"
14
+ validate_index_options!(options)
15
+ properties = property.is_a?(Array) ? property.join(',') : property
16
+ schema_query("CREATE INDEX ON :`#{@name}`(#{properties})")
17
+ end
18
+
19
+ def drop_index(property, options = {})
20
+ puts "drop_index(#{property.inspect}, #{options.inspect})"
21
+ validate_index_options!(options)
22
+ schema_query("DROP INDEX ON :`#{@name}`(#{property})")
23
+ end
24
+
25
+ # Creates a neo4j constraint on a property
26
+ # See http://docs.neo4j.org/chunked/stable/query-constraints.html
27
+ # @example
28
+ # label = Neo4j::Label.create(:person, session)
29
+ # label.create_constraint(:name, {type: :unique}, session)
30
+ #
31
+ def create_constraint(property, constraints)
32
+ puts "create_constraint(#{property.inspect}, #{constraints.inspect})"
33
+ cypher = case constraints[:type]
34
+ when :unique
35
+ "CREATE CONSTRAINT ON (n:`#{name}`) ASSERT n.`#{property}` IS UNIQUE"
36
+ else
37
+ fail "Not supported constrain #{constraints.inspect} for property #{property} (expected :type => :unique)"
38
+ end
39
+ schema_query(cypher)
40
+ end
41
+
42
+ # Drops a neo4j constraint on a property
43
+ # See http://docs.neo4j.org/chunked/stable/query-constraints.html
44
+ # @example
45
+ # label = Neo4j::Label.create(:person, session)
46
+ # label.create_constraint(:name, {type: :unique}, session)
47
+ # label.drop_constraint(:name, {type: :unique}, session)
48
+ #
49
+ def drop_constraint(property, constraint)
50
+ puts "drop_constraint(#{property.inspect}, #{constraint.inspect})"
51
+ cypher = case constraint[:type]
52
+ when :unique
53
+ "DROP CONSTRAINT ON (n:`#{name}`) ASSERT n.`#{property}` IS UNIQUE"
54
+ else
55
+ fail "Not supported constrain #{constraint.inspect}"
56
+ end
57
+ schema_query(cypher)
58
+ end
59
+
60
+ def indexes
61
+ @session.indexes_for_label(@name)
62
+ end
63
+
64
+ def index?(property)
65
+ indexes.include?(property)
66
+ end
67
+
68
+ def uniqueness_constraints
69
+ @session.uniqueness_constraints_for_label(@name)
70
+ end
71
+
72
+ def uniqueness_constraint?(property)
73
+ uniqueness_constraints.include?(property)
74
+ end
75
+
76
+ def self.wait_for_schema_changes(session)
77
+ schema_threads(session).map(&:join)
78
+ set_schema_threads(session, [])
79
+ end
80
+
81
+ private
82
+
83
+ # Store schema threads on the session so that we can easily wait for all
84
+ # threads on a session regardless of label
85
+ def schema_threads
86
+ self.class.schema_threads(@session)
87
+ end
88
+
89
+ def schema_threads=(array)
90
+ self.class.set_schema_threads(@session, array)
91
+ end
92
+
93
+ def self.schema_threads(session)
94
+ session.instance_variable_get('@_schema_threads') || []
95
+ end
96
+
97
+ def self.set_schema_threads(session, array)
98
+ session.instance_variable_set('@_schema_threads', array)
99
+ end
100
+
101
+ # If there is a transaction going on, this could block
102
+ # So we run in a thread and it will go through at the next opportunity
103
+ def schema_query(cypher)
104
+ Thread.new do
105
+ begin
106
+ puts 'Starting transaction for schema query...'
107
+ @session.transaction do |tx|
108
+ puts 'Executing schema query...'
109
+ tx.query(cypher)
110
+ puts 'Executed schema query...'
111
+ end
112
+ rescue Exception => e
113
+ puts e.message
114
+ puts e.backtrace
115
+ end
116
+ end.tap do |thread|
117
+ schema_threads << thread
118
+ end
119
+ end
120
+
121
+ def validate_index_options!(options)
122
+ return unless options[:type] && options[:type] != :exact
123
+ fail "Type #{options[:type]} is not supported"
124
+ end
125
+ end
126
+ end
127
+ end
data/neo4j-core.gemspec CHANGED
@@ -33,7 +33,7 @@ Neo4j-core provides classes and methods to work with the graph database Neo4j.
33
33
  s.add_dependency('activesupport') # For ActiveSupport::Notifications
34
34
  s.add_dependency('multi_json')
35
35
  s.add_dependency('faraday_middleware-multi_json')
36
- s.add_dependency('neo4j-rake_tasks', '~> 0.3.0')
36
+ s.add_dependency('neo4j-rake_tasks', '>= 0.3.0')
37
37
 
38
38
  s.add_development_dependency('pry')
39
39
  s.add_development_dependency('yard')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neo4j-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.4
4
+ version: 6.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Ronge, Chris Grigg, Brian Underwood
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-22 00:00:00.000000000 Z
11
+ date: 2016-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -140,14 +140,14 @@ dependencies:
140
140
  name: neo4j-rake_tasks
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: 0.3.0
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - "~>"
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: 0.3.0
153
153
  - !ruby/object:Gem::Dependency
@@ -285,6 +285,7 @@ files:
285
285
  - lib/neo4j/core/cypher_session/responses/http.rb
286
286
  - lib/neo4j/core/cypher_session/result.rb
287
287
  - lib/neo4j/core/instrumentable.rb
288
+ - lib/neo4j/core/label.rb
288
289
  - lib/neo4j/core/node.rb
289
290
  - lib/neo4j/core/path.rb
290
291
  - lib/neo4j/core/relationship.rb