neo4j-core 0.0.14-java → 0.0.15-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +1 -1
- data/lib/neo4j/cypher.rb +10 -0
- data/lib/neo4j/neo4j.rb +2 -1
- data/lib/neo4j-core/cypher/cypher.rb +61 -2
- data/lib/neo4j-core/database.rb +2 -1
- data/lib/neo4j-core/traversal/prune_evaluator.rb +2 -2
- data/lib/neo4j-core/version.rb +1 -1
- data/neo4j-core.gemspec +1 -1
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -20,7 +20,7 @@ The Neo4j module is public and the Neo4j::Core(::*) are internal modules.
|
|
20
20
|
|
21
21
|
{Neo4j} The Database
|
22
22
|
|
23
|
-
{Neo4j::Cypher} Cypher Query
|
23
|
+
{Neo4j::Cypher} Cypher Query DSL, see {Neo4j Wiki}[https://github.com/andreasronge/neo4j/wiki/Neo4j%3A%3ACore-Cypher]
|
24
24
|
|
25
25
|
{Neo4j::Algo} Included algorithms, like shortest path
|
26
26
|
|
data/lib/neo4j/cypher.rb
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
module Neo4j
|
2
|
+
|
3
|
+
# Generates a Cypher string from a Ruby DSL.
|
4
|
+
# This class is used by the {Ņeo4j#query} method.
|
5
|
+
# Methods on in this class returns object from the {Neo4j::Core::Cypher} module (e.g. {Neo4j::Cypher#node} can return a #{Neo4j::Core::Cypher::StartNode}).
|
6
|
+
#
|
7
|
+
# @example usage
|
8
|
+
# Neo4j::Cypher.new { node }
|
9
|
+
#
|
2
10
|
class Cypher
|
11
|
+
# @private
|
3
12
|
attr_reader :expressions
|
4
13
|
|
5
14
|
include Neo4j::Core::Cypher
|
@@ -20,6 +29,7 @@ module Neo4j
|
|
20
29
|
# @param args the argument for the dsl_block
|
21
30
|
# @yield the block which will be evaluated in the context of this object in order to create an Cypher Query string
|
22
31
|
# @yieldreturn [Return, Object] If the return is not an instance of Return it will be converted it to a Return object (if possible).
|
32
|
+
# @see Neo4j::Core::Cypher
|
23
33
|
def initialize(*args, &dsl_block)
|
24
34
|
@expressions = []
|
25
35
|
@variables = []
|
data/lib/neo4j/neo4j.rb
CHANGED
@@ -58,9 +58,10 @@ module Neo4j
|
|
58
58
|
end
|
59
59
|
|
60
60
|
# Checks read only mode of the database. Only one process can have write access to the database.
|
61
|
+
# It will always return false if the database is not started yet.
|
61
62
|
# @return [true, false] if the database has started up in read only mode
|
62
63
|
def read_only?
|
63
|
-
(@db && @db.graph && @db.read_only?)
|
64
|
+
!!(@db && @db.graph && @db.read_only?)
|
64
65
|
end
|
65
66
|
|
66
67
|
# Returns a started db instance. Starts it's not running.
|
@@ -1,5 +1,9 @@
|
|
1
1
|
module Neo4j
|
2
2
|
module Core
|
3
|
+
|
4
|
+
# This module contains a number of mixins and classes used by the neo4j.rb cypher DSL.
|
5
|
+
# The Cypher DSL is evaluated in the context of {Neo4j::Cypher} which contains a number of methods (e.g. {Neo4j::Cypher#node})
|
6
|
+
# which returns classes from this module.
|
3
7
|
module Cypher
|
4
8
|
|
5
9
|
module MathFunctions
|
@@ -19,6 +23,7 @@ module Neo4j
|
|
19
23
|
_add_math_func(:sign, value)
|
20
24
|
end
|
21
25
|
|
26
|
+
# @private
|
22
27
|
def _add_math_func(name, value=nil)
|
23
28
|
value ||= self.respond_to?(:var_name) ? self.var_name : to_s
|
24
29
|
expressions.delete(self)
|
@@ -119,23 +124,27 @@ module Neo4j
|
|
119
124
|
self
|
120
125
|
end
|
121
126
|
|
127
|
+
# generates a <tt>ID</tt> cypher fragment.
|
122
128
|
def neo_id
|
123
129
|
Property.new(@expressions, self, 'ID').to_function!
|
124
130
|
end
|
125
131
|
|
132
|
+
# generates a <tt>has</tt> cypher fragment.
|
126
133
|
def property?(p)
|
127
134
|
p = Property.new(expressions, self, p)
|
128
135
|
p.binary_operator("has")
|
129
136
|
end
|
130
137
|
|
138
|
+
# generates a <tt>is null</tt> cypher fragment.
|
131
139
|
def exist?
|
132
140
|
p = Property.new(expressions, self, p)
|
133
141
|
p.binary_operator("", " is null")
|
134
142
|
end
|
135
143
|
|
144
|
+
# Can be used instead of [_classname] == klass
|
136
145
|
def is_a?(klass)
|
137
|
-
return super if klass.class != Class || !klass.
|
138
|
-
|
146
|
+
return super if klass.class != Class || !klass.respond_to?(:_load_wrapper)
|
147
|
+
self[:_classname] == klass.to_s
|
139
148
|
end
|
140
149
|
end
|
141
150
|
|
@@ -236,7 +245,16 @@ module Neo4j
|
|
236
245
|
|
237
246
|
end
|
238
247
|
|
248
|
+
# A property is returned from a Variable by using the [] operator.
|
249
|
+
#
|
250
|
+
# It has a number of useful method like
|
251
|
+
# <tt>count</tt>, <tt>sum</tt>, <tt>avg</tt>, <tt>min</tt>, <tt>max</tt>, <tt>collect</tt>, <tt>head</tt>, <tt>last</tt>, <tt>tail</tt>,
|
252
|
+
#
|
253
|
+
# @example
|
254
|
+
# n=node(2, 3, 4); n[:name].collect
|
255
|
+
# # same as START n0=node(2,3,4) RETURN collect(n0.property)
|
239
256
|
class Property
|
257
|
+
# @private
|
240
258
|
attr_reader :expressions, :var_name
|
241
259
|
include Comparable
|
242
260
|
include MathOperator
|
@@ -250,17 +268,20 @@ module Neo4j
|
|
250
268
|
@var_name = @prop_name ? "#{@var.to_s}.#{@prop_name}" : @var.to_s
|
251
269
|
end
|
252
270
|
|
271
|
+
# @private
|
253
272
|
def to_function!(var = @var.to_s)
|
254
273
|
@var_name = "#{@prop_name}(#{var})"
|
255
274
|
self
|
256
275
|
end
|
257
276
|
|
277
|
+
# Make it possible to rename a property with a different name (AS)
|
258
278
|
def as(new_name)
|
259
279
|
@var_name = "#{@var_name} AS #{new_name}"
|
260
280
|
end
|
261
281
|
|
262
282
|
# required by the Predicate Methods Module
|
263
283
|
# @see PredicateMethods
|
284
|
+
# @private
|
264
285
|
def iterable
|
265
286
|
var_name
|
266
287
|
end
|
@@ -269,10 +290,12 @@ module Neo4j
|
|
269
290
|
self
|
270
291
|
end
|
271
292
|
|
293
|
+
# @private
|
272
294
|
def in?(values)
|
273
295
|
binary_operator("", " IN [#{values.map { |x| %Q["#{x}"] }.join(',')}]")
|
274
296
|
end
|
275
297
|
|
298
|
+
# Only return distinct values/nodes/rels/paths
|
276
299
|
def distinct
|
277
300
|
@var_name = "distinct #{@var_name}"
|
278
301
|
self
|
@@ -290,16 +313,19 @@ module Neo4j
|
|
290
313
|
end
|
291
314
|
end
|
292
315
|
|
316
|
+
# @private
|
293
317
|
def function(func_name_pre, func_name_post = "")
|
294
318
|
ExprOp.new(self, nil, func_name_pre, func_name_post)
|
295
319
|
end
|
296
320
|
|
321
|
+
# @private
|
297
322
|
def binary_operator(op, post_fix = "")
|
298
323
|
ExprOp.new(self, nil, op, post_fix).binary!
|
299
324
|
end
|
300
325
|
end
|
301
326
|
|
302
327
|
class Start < Expression
|
328
|
+
# @private
|
303
329
|
attr_reader :var_name
|
304
330
|
include Variable
|
305
331
|
include Matchable
|
@@ -311,7 +337,9 @@ module Neo4j
|
|
311
337
|
|
312
338
|
end
|
313
339
|
|
340
|
+
# Can be created from a <tt>node</tt> dsl method.
|
314
341
|
class StartNode < Start
|
342
|
+
# @private
|
315
343
|
attr_reader :nodes
|
316
344
|
|
317
345
|
def initialize(nodes, expressions)
|
@@ -325,7 +353,10 @@ module Neo4j
|
|
325
353
|
end
|
326
354
|
end
|
327
355
|
|
356
|
+
|
357
|
+
# Can be created from a <tt>rel</tt> dsl method.
|
328
358
|
class StartRel < Start
|
359
|
+
# @private
|
329
360
|
attr_reader :rels
|
330
361
|
|
331
362
|
def initialize(rels, expressions)
|
@@ -381,10 +412,12 @@ module Neo4j
|
|
381
412
|
opts.each_pair { |k, v| self.send(k, v) }
|
382
413
|
end
|
383
414
|
|
415
|
+
# @private
|
384
416
|
def return_method
|
385
417
|
@name_or_ref.respond_to?(:return_method) && @name_or_ref.return_method
|
386
418
|
end
|
387
419
|
|
420
|
+
# @private
|
388
421
|
def as_return_method
|
389
422
|
if return_method[:bracket]
|
390
423
|
"#{return_method[:name]}(#@var_name)"
|
@@ -432,6 +465,7 @@ module Neo4j
|
|
432
465
|
end
|
433
466
|
end
|
434
467
|
|
468
|
+
# Can be used to skip result from a return clause
|
435
469
|
class Skip < Expression
|
436
470
|
def initialize(expressions, value)
|
437
471
|
super(expressions, :skip)
|
@@ -443,6 +477,7 @@ module Neo4j
|
|
443
477
|
end
|
444
478
|
end
|
445
479
|
|
480
|
+
# Can be used to limit result from a return clause
|
446
481
|
class Limit < Expression
|
447
482
|
def initialize(expressions, value)
|
448
483
|
super(expressions, :limit)
|
@@ -479,8 +514,11 @@ module Neo4j
|
|
479
514
|
end
|
480
515
|
end
|
481
516
|
|
517
|
+
# Created from a node's match operator like >> or <.
|
482
518
|
class Match < Expression
|
519
|
+
# @private
|
483
520
|
attr_reader :dir, :expressions, :left, :right, :var_name, :dir_op
|
521
|
+
# @private
|
484
522
|
attr_accessor :algorithm, :next, :prev
|
485
523
|
include Variable
|
486
524
|
|
@@ -495,19 +533,29 @@ module Neo4j
|
|
495
533
|
end
|
496
534
|
|
497
535
|
|
536
|
+
# Generates a <tt>x in nodes(m3)</tt> cypher expression.
|
537
|
+
#
|
538
|
+
# @example
|
539
|
+
# p.nodes.all? { |x| x[:age] > 30 }
|
498
540
|
def nodes
|
499
541
|
Entities.new(@expressions, "nodes", self)
|
500
542
|
end
|
501
543
|
|
544
|
+
# Generates a <tt>x in relationships(m3)</tt> cypher expression.
|
545
|
+
#
|
546
|
+
# @example
|
547
|
+
# p.relationships.all? { |x| x[:age] > 30 }
|
502
548
|
def rels
|
503
549
|
Entities.new(@expressions, "relationships", self)
|
504
550
|
end
|
505
551
|
|
552
|
+
# returns the length of the path
|
506
553
|
def length
|
507
554
|
self.return_method = {:name => 'length', :bracket => true}
|
508
555
|
self
|
509
556
|
end
|
510
557
|
|
558
|
+
# @private
|
511
559
|
def find_match_start
|
512
560
|
c = self
|
513
561
|
while (c.prev) do
|
@@ -516,26 +564,32 @@ module Neo4j
|
|
516
564
|
c
|
517
565
|
end
|
518
566
|
|
567
|
+
# @private
|
519
568
|
def left_var_name
|
520
569
|
@left.respond_to?(:var_name) ? @left.var_name : @left.to_s
|
521
570
|
end
|
522
571
|
|
572
|
+
# @private
|
523
573
|
def right_var_name
|
524
574
|
@right.respond_to?(:var_name) ? @right.var_name : @right.to_s
|
525
575
|
end
|
526
576
|
|
577
|
+
# @private
|
527
578
|
def right_expr
|
528
579
|
@right.respond_to?(:expr) ? @right.expr : right_var_name
|
529
580
|
end
|
530
581
|
|
582
|
+
# @private
|
531
583
|
def referenced!
|
532
584
|
@referenced = true
|
533
585
|
end
|
534
586
|
|
587
|
+
# @private
|
535
588
|
def referenced?
|
536
589
|
!!@referenced
|
537
590
|
end
|
538
591
|
|
592
|
+
# @private
|
539
593
|
def to_s
|
540
594
|
curr = find_match_start
|
541
595
|
result = (referenced? || curr.referenced?) ? "#{var_name} = " : ""
|
@@ -548,6 +602,8 @@ module Neo4j
|
|
548
602
|
end
|
549
603
|
end
|
550
604
|
|
605
|
+
# The left part of a match clause, e.g. node < rel(':friends')
|
606
|
+
# Can return {MatchRelRight} using a match operator method.
|
551
607
|
class MatchRelLeft < Match
|
552
608
|
def initialize(left, right, expressions, dir)
|
553
609
|
super(left, right, expressions, dir, dir == :incoming ? '<-' : '-')
|
@@ -619,6 +675,7 @@ module Neo4j
|
|
619
675
|
"#{dir_op}(#{right_var_name})"
|
620
676
|
end
|
621
677
|
|
678
|
+
# negate this match
|
622
679
|
def not
|
623
680
|
expressions.delete(self)
|
624
681
|
ExprOp.new(left, nil, "not").binary!
|
@@ -635,6 +692,8 @@ module Neo4j
|
|
635
692
|
|
636
693
|
end
|
637
694
|
|
695
|
+
# The right part of a match clause (node_b), e.g. node_a > rel(':friends') > node_b
|
696
|
+
#
|
638
697
|
class MatchNode < Match
|
639
698
|
attr_reader :dir_op
|
640
699
|
|
data/lib/neo4j-core/database.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Neo4j
|
2
2
|
module Core
|
3
3
|
|
4
|
-
# Implements the Neo4j PruneEvaluator Java interface, only used internally.
|
5
|
-
# @private
|
6
4
|
module Traversal
|
5
|
+
# Implements the Neo4j PruneEvaluator Java interface, only used internally.
|
6
|
+
# @private
|
7
7
|
class PruneEvaluator
|
8
8
|
include Java::OrgNeo4jGraphdbTraversal::PruneEvaluator
|
9
9
|
|
data/lib/neo4j-core/version.rb
CHANGED
data/neo4j-core.gemspec
CHANGED
@@ -27,5 +27,5 @@ It comes included with the Apache Lucene document database.
|
|
27
27
|
s.extra_rdoc_files = %w( README.rdoc )
|
28
28
|
s.rdoc_options = ["--quiet", "--title", "Neo4j::Core", "--line-numbers", "--main", "README.rdoc", "--inline-source"]
|
29
29
|
|
30
|
-
s.add_dependency("neo4j-community", "1.7.0")
|
30
|
+
s.add_dependency("neo4j-community", ">= 1.7.0")
|
31
31
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: neo4j-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.15
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Andreas Ronge
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-04-
|
13
|
+
date: 2012-04-27 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: neo4j-community
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
|
-
- - "
|
21
|
+
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 1.7.0
|
24
24
|
type: :runtime
|