neo4j-core 5.0.10 → 5.1.0.rc.1

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: 973a3091e4ac4ffe027b846627a315a70b79e182
4
- data.tar.gz: d9cc32add98996c8efacb94e44034f78cd2c39b3
3
+ metadata.gz: 1ca70d80670e3232da4c5b05833cfa06ced3adf5
4
+ data.tar.gz: 7d32346859088e577bba8617ecd8b3d13f553880
5
5
  SHA512:
6
- metadata.gz: 38e2ebd378bfcccc0fad41b1adcae148da01a6f692f978c3bb134593ad7e2bcc93cb4e3ea7ca637386a4e747442ff2db232ef9eed18d551334c038a109b9f1c3
7
- data.tar.gz: c136b1a82abad7ca652b516cd4a3e50da7170a0cc4b6e529f8134d30cb734886f0d56351d13d0304faff390ffa590cb611931ddbd887a6605d9ad143c4288034
6
+ metadata.gz: 4853d0684c0d1a9b1ca8d0af69e414a3b31ddaacb68535e9bddd3c489a3bea65142bf68114e858903cdaf5a5f3b6d5fcdae7c52663477a0555821bd681175a61
7
+ data.tar.gz: f870bc4b2b1dad67d625fde00a37f1e5ace304e31d26b2cc48396e937fd72a0d94a10f73a05fe1977fc9c4cc9cd6a257ff1a80d9b74e0b4234b0562543553162
data/Gemfile CHANGED
@@ -2,20 +2,16 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'zip'
6
-
7
5
  # gem 'neo4j-advanced', '>= 1.8.1', '< 2.0', :require => false
8
6
  # gem 'neo4j-enterprise', '>= 1.8.1', '< 2.0', :require => false
9
7
 
10
8
  group 'development' do
11
9
  gem 'guard-rspec', require: false
12
- gem 'overcommit'
13
10
  end
14
11
 
15
12
  group 'test' do
16
13
  gem 'coveralls', require: false
17
14
  gem 'simplecov-html', require: false
18
- gem 'rake', '>= 0.8.7'
19
15
  gem 'rspec', '~> 3.0'
20
16
  gem 'rspec-its'
21
17
  end
data/README.md CHANGED
@@ -1,25 +1,51 @@
1
- # Neo4j-core v3.0 [![Code Climate](https://codeclimate.com/github/neo4jrb/neo4j-core.png)](https://codeclimate.com/github/neo4jrb/neo4j-core) [![Build Status](https://travis-ci.org/neo4jrb/neo4j-core.png)](https://travis-ci.org/neo4jrb/neo4j-core) [![Coverage Status](https://coveralls.io/repos/neo4jrb/neo4j-core/badge.png?branch=master)](https://coveralls.io/r/neo4jrb/neo4j-core?branch=master) [![PullReview stats](https://www.pullreview.com/github/neo4jrb/neo4j-core/badges/master.svg?)](https://www.pullreview.com/github/neo4jrb/neo4j-core/reviews/master)
1
+ # Neo4j-core [![Code Climate](https://codeclimate.com/github/neo4jrb/neo4j-core.png)](https://codeclimate.com/github/neo4jrb/neo4j-core) [![Build Status](https://travis-ci.org/neo4jrb/neo4j-core.png)](https://travis-ci.org/neo4jrb/neo4j-core) [![Coverage Status](https://coveralls.io/repos/neo4jrb/neo4j-core/badge.png?branch=master)](https://coveralls.io/r/neo4jrb/neo4j-core?branch=master) [![PullReview stats](https://www.pullreview.com/github/neo4jrb/neo4j-core/badges/master.svg?)](https://www.pullreview.com/github/neo4jrb/neo4j-core/reviews/master)
2
2
 
3
3
  A simple Ruby wrapper around the Neo4j graph database that works with the server and embedded Neo4j API. This gem can be used both from JRuby and normal MRI.
4
4
  It can be used standalone without the neo4j gem.
5
5
 
6
6
  ## Documentation
7
7
 
8
- * [3.0 Documentation](https://github.com/neo4jrb/neo4j-core/wiki)
9
- * [2.x Documentation](https://github.com/neo4jrb/neo4j-core/tree/v2.x)
8
+ ### 3.0+ Documentation:
10
9
 
10
+ * http://neo4jrb.readthedocs.org/en/stable/
11
+ * https://github.com/neo4jrb/neo4j-core/wiki
12
+
13
+ ### 2.x Documentation
14
+
15
+ https://github.com/neo4jrb/neo4j-core/tree/v2.x
11
16
 
12
17
  ## Support
13
18
 
14
- * [Neo4j.rb mailing list](https://groups.google.com/forum/#!forum/neo4jrb)
15
- * Consulting support ? ask any of the developers
19
+ ### Issues
20
+
21
+ [![Next Release](https://badge.waffle.io/neo4jrb/neo4j-core.png?label=Next%20Release&title=Next%20Release) ![In Progress](https://badge.waffle.io/neo4jrb/neo4j-core.png?label=In%20Progress&title=In%20Progress) ![In Master](https://badge.waffle.io/neo4jrb/neo4j-core.png?label=In%20Master&title=In%20Master)](https://waffle.io/neo4jrb/neo4j-core)
22
+
23
+ [![Post an issue](https://img.shields.io/badge/Bug%3F-Post%20an%20issue!-blue.svg)](https://waffle.io/neo4jrb/neo4j-core)
24
+
25
+
26
+ ### Get Support
27
+
28
+ #### Documentation
29
+
30
+ All new documentation will be done via our [readthedocs](http://neo4jrb.readthedocs.org) site, though some old documentation has yet to be moved from our [wiki](https://github.com/neo4jrb/neo4j/wiki) (also there is the [neo4j-core wiki](https://github.com/neo4jrb/neo4j-core/wiki))
31
+
32
+ #### Contact Us
33
+
34
+ [![StackOverflow](https://img.shields.io/badge/StackOverflow-Ask%20a%20question!-blue.svg)](http://stackoverflow.com/questions/ask?tags=neo4j.rb+neo4j+ruby) [![Gitter](https://img.shields.io/badge/Gitter-Join%20our%20chat!-blue.svg)](https://gitter.im/neo4jrb/neo4j?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Twitter](https://img.shields.io/badge/Twitter-Tweet%20with%20us!-blue.svg)](https://twitter.com/neo4jrb) [![Mailing list](https://img.shields.io/badge/Mailing%20list-Mail%20us!-blue.svg)](https://groups.google.com/forum/#!forum/neo4jrb)
35
+
16
36
 
17
37
  ## Developers
18
38
 
19
- * [Andreas Ronge](https://github.com/neo4jrb)
39
+ ### Original Author
40
+
41
+ * [Andreas Ronge](https://github.com/andreasronge)
42
+
43
+ ### Current Maintainers
44
+
20
45
  * [Brian Underwood](https://github.com/cheerfulstoic)
21
46
  * [Chris Grigg](https://github.com/subvertallchris)
22
47
 
48
+ Consulting support? Contact [Chris](http://subvertallmedia.com/) and/or [Brian](http://www.brian-underwood.codes/)
23
49
 
24
50
  ## Contributing
25
51
 
data/lib/neo4j-core.rb CHANGED
@@ -9,7 +9,6 @@ require 'neo4j/property_validator'
9
9
  require 'neo4j/property_container'
10
10
  require 'neo4j-core/active_entity'
11
11
  require 'neo4j-core/helpers'
12
- require 'neo4j-core/cypher_translator'
13
12
  require 'neo4j-core/query_find_in_batches'
14
13
  require 'neo4j-core/query'
15
14
 
@@ -1,18 +1,13 @@
1
1
  module Neo4j
2
2
  module Core
3
- module ArgumentHelper
4
- def self.session(args)
5
- args.last.is_a?(Neo4j::Session) ? args.pop : Neo4j::Session.current!
6
- end
7
- end
8
-
9
3
  module TxMethods
10
4
  def tx_methods(*methods)
11
5
  methods.each do |method|
12
6
  tx_method = "#{method}_in_tx"
13
7
  send(:alias_method, tx_method, method)
14
8
  send(:define_method, method) do |*args, &block|
15
- session = ArgumentHelper.session(args)
9
+ session = args.last.is_a?(Neo4j::Session) ? args.pop : Neo4j::Session.current!
10
+
16
11
  Neo4j::Transaction.run(session.auto_commit?) { send(tx_method, *args, &block) }
17
12
  end
18
13
  end
@@ -18,6 +18,10 @@ module Neo4j
18
18
 
19
19
  attr_accessor :clauses
20
20
 
21
+ class << self
22
+ attr_accessor :pretty_cypher
23
+ end
24
+
21
25
  def initialize(options = {})
22
26
  @session = options[:session] || Neo4j::Session.current
23
27
 
@@ -26,6 +30,10 @@ module Neo4j
26
30
  @_params = {}
27
31
  end
28
32
 
33
+ def inspect
34
+ "#<Query CYPHER: #{to_cypher.inspect}>"
35
+ end
36
+
29
37
  # @method start *args
30
38
  # START clause
31
39
  # @return [Query]
@@ -174,8 +182,9 @@ module Neo4j
174
182
  def response
175
183
  return @response if @response
176
184
  cypher = to_cypher
185
+ pretty_cypher = to_cypher(pretty: true).gsub(/\e[^m]+m/, '') #if self.class.pretty_cypher
177
186
 
178
- @response = @session._query(cypher, merge_params, context: @options[:context])
187
+ @response = @session._query(cypher, merge_params, context: @options[:context], pretty_cypher: pretty_cypher)
179
188
 
180
189
  if !response.respond_to?(:error?) || !response.error?
181
190
  response
@@ -268,22 +277,27 @@ module Neo4j
268
277
  #
269
278
  # @return [String] Resulting cypher query string
270
279
  EMPTY = ' '
271
- def to_cypher
280
+ NEWLINE = "\n"
281
+ def to_cypher(options = {})
272
282
  cypher_string = PartitionedClauses.new(@clauses).map do |clauses|
273
283
  clauses_by_class = clauses.group_by(&:class)
274
284
 
275
285
  cypher_parts = CLAUSES.map do |clause_class|
276
- clause_class.to_cypher(clauses) if clauses = clauses_by_class[clause_class]
286
+ clause_class.to_cypher(clauses, options) if clauses = clauses_by_class[clause_class]
277
287
  end
278
288
 
279
289
  cypher_parts.compact!
280
- cypher_parts.join(EMPTY).tap(&:strip!)
281
- end.join EMPTY
290
+ cypher_parts.join(options[:pretty] ? NEWLINE : EMPTY).tap(&:strip!)
291
+ end.join(options[:pretty] ? NEWLINE : EMPTY)
282
292
 
283
293
  cypher_string = "CYPHER #{@options[:parser]} #{cypher_string}" if @options[:parser]
284
294
  cypher_string.tap(&:strip!)
285
295
  end
286
296
 
297
+ def print_cypher
298
+ puts to_cypher(pretty: true).gsub(/\e[^m]+m/, '')
299
+ end
300
+
287
301
  # Returns a CYPHER query specifying the union of the callee object's query and the argument's query
288
302
  #
289
303
  # @example
@@ -11,7 +11,6 @@ module Neo4j
11
11
 
12
12
 
13
13
  class Clause
14
- include CypherTranslator
15
14
  UNDERSCORE = '_'
16
15
  COMMA_SPACE = ', '
17
16
  AND = ' AND '
@@ -53,8 +52,10 @@ module Neo4j
53
52
  end
54
53
 
55
54
  def node_from_key_and_value(key, value, options = {})
56
- var = var_from_key_and_value(key, value, options[:prefer] || :var)
57
- label = label_from_key_and_value(key, value, options[:prefer] || :var)
55
+ prefer = options[:prefer] || :var
56
+ var = var_from_key_and_value(key, value, prefer)
57
+ label = label_from_key_and_value(key, value, prefer)
58
+
58
59
  attributes = attributes_from_key_and_value(key, value)
59
60
 
60
61
  prefix_value = value
@@ -131,13 +132,34 @@ module Neo4j
131
132
  new(arg, options) if !arg.respond_to?(:empty?) || !arg.empty?
132
133
  end
133
134
 
134
- def to_cypher(clauses)
135
+ def to_cypher(clauses, options = {})
135
136
  @question_mark_param_index = 1
136
137
 
137
- string = clause_string(clauses)
138
- string.strip!
138
+ string = clause_string(clauses, options)
139
+
140
+ final_keyword = if options[:pretty]
141
+ "#{clause_color}#{keyword}#{ANSI::CLEAR}"
142
+ else
143
+ keyword
144
+ end
145
+
146
+ "#{final_keyword} #{string}" if string.size > 0
147
+ end
148
+
149
+ def clause_string(clauses, options = {})
150
+ join_string = clause_join + (options[:pretty] ? "\n " : '')
139
151
 
140
- "#{keyword} #{string}" if string.size > 0
152
+ strings = clause_strings(clauses)
153
+ string = ((options[:pretty] && strings.size > 1) ? "\n " : '')
154
+ string + strings.join(join_string).strip
155
+ end
156
+
157
+ def clause_join
158
+ ''
159
+ end
160
+
161
+ def clause_color
162
+ ANSI::CYAN
141
163
  end
142
164
  end
143
165
 
@@ -228,8 +250,12 @@ module Neo4j
228
250
  end
229
251
 
230
252
  class << self
231
- def clause_string(clauses)
232
- clauses.map!(&:value).join(Clause::COMMA_SPACE)
253
+ def clause_strings(clauses)
254
+ clauses.map!(&:value)
255
+ end
256
+
257
+ def clause_join
258
+ Clause::COMMA_SPACE
233
259
  end
234
260
  end
235
261
  end
@@ -249,8 +275,12 @@ module Neo4j
249
275
  end
250
276
 
251
277
  class << self
252
- def clause_string(clauses)
253
- clauses.map!(&:value).tap(&:flatten!).map! { |value| "(#{value})" }.join(Clause::AND)
278
+ def clause_strings(clauses)
279
+ clauses.map!(&:value).tap(&:flatten!).map! { |value| "(#{value})" }
280
+ end
281
+
282
+ def clause_join
283
+ Clause::AND
254
284
  end
255
285
  end
256
286
 
@@ -322,8 +352,12 @@ module Neo4j
322
352
  end
323
353
 
324
354
  class << self
325
- def clause_string(clauses)
326
- clauses.map!(&:value).join(Clause::COMMA_SPACE)
355
+ def clause_strings(clauses)
356
+ clauses.map!(&:value)
357
+ end
358
+
359
+ def clause_join
360
+ Clause::COMMA_SPACE
327
361
  end
328
362
  end
329
363
  end
@@ -344,8 +378,12 @@ module Neo4j
344
378
  end
345
379
 
346
380
  class << self
347
- def clause_string(clauses)
348
- clauses.map!(&:value).join(Clause::COMMA_SPACE)
381
+ def clause_strings(clauses)
382
+ clauses.map!(&:value)
383
+ end
384
+
385
+ def clause_join
386
+ Clause::COMMA_SPACE
349
387
  end
350
388
  end
351
389
  end
@@ -354,8 +392,12 @@ module Neo4j
354
392
  KEYWORD = 'USING'
355
393
 
356
394
  class << self
357
- def clause_string(clauses)
358
- clauses.map!(&:value).join(" #{keyword} ")
395
+ def clause_strings(clauses)
396
+ clauses.map!(&:value)
397
+ end
398
+
399
+ def clause_join
400
+ " #{keyword} "
359
401
  end
360
402
  end
361
403
  end
@@ -386,8 +428,16 @@ module Neo4j
386
428
  end
387
429
 
388
430
  class << self
389
- def clause_string(clauses)
390
- clauses.map!(&:value).join(', ')
431
+ def clause_strings(clauses)
432
+ clauses.map!(&:value)
433
+ end
434
+
435
+ def clause_join
436
+ ', '
437
+ end
438
+
439
+ def clause_color
440
+ ANSI::GREEN
391
441
  end
392
442
  end
393
443
  end
@@ -398,6 +448,12 @@ module Neo4j
398
448
 
399
449
  class MergeClause < CreateClause
400
450
  KEYWORD = 'MERGE'
451
+
452
+ class << self
453
+ def clause_color
454
+ ANSI::MAGENTA
455
+ end
456
+ end
401
457
  end
402
458
 
403
459
  class DeleteClause < Clause
@@ -408,8 +464,16 @@ module Neo4j
408
464
  end
409
465
 
410
466
  class << self
411
- def clause_string(clauses)
412
- clauses.map!(&:value).join(Clause::COMMA_SPACE)
467
+ def clause_strings(clauses)
468
+ clauses.map!(&:value)
469
+ end
470
+
471
+ def clause_join
472
+ Clause::COMMA_SPACE
473
+ end
474
+
475
+ def clause_color
476
+ ANSI::RED
413
477
  end
414
478
  end
415
479
  end
@@ -435,8 +499,12 @@ module Neo4j
435
499
  end
436
500
 
437
501
  class << self
438
- def clause_string(clauses)
439
- clauses.map!(&:value).join(Clause::COMMA_SPACE)
502
+ def clause_strings(clauses)
503
+ clauses.map!(&:value)
504
+ end
505
+
506
+ def clause_join
507
+ Clause::COMMA_SPACE
440
508
  end
441
509
  end
442
510
  end
@@ -461,8 +529,8 @@ module Neo4j
461
529
  end
462
530
 
463
531
  class << self
464
- def clause_string(clauses)
465
- clauses.last.value
532
+ def clause_strings(clauses)
533
+ [clauses.last.value]
466
534
  end
467
535
  end
468
536
  end
@@ -483,8 +551,8 @@ module Neo4j
483
551
  end
484
552
 
485
553
  class << self
486
- def clause_string(clauses)
487
- clauses.last.value
554
+ def clause_strings(clauses)
555
+ [clauses.last.value]
488
556
  end
489
557
  end
490
558
  end
@@ -510,8 +578,16 @@ module Neo4j
510
578
  end
511
579
 
512
580
  class << self
513
- def clause_string(clauses)
514
- clauses.map!(&:value).join(Clause::COMMA_SPACE)
581
+ def clause_strings(clauses)
582
+ clauses.map!(&:value)
583
+ end
584
+
585
+ def clause_join
586
+ Clause::COMMA_SPACE
587
+ end
588
+
589
+ def clause_color
590
+ ANSI::YELLOW
515
591
  end
516
592
  end
517
593
  end
@@ -550,8 +626,12 @@ module Neo4j
550
626
  end
551
627
 
552
628
  class << self
553
- def clause_string(clauses)
554
- clauses.map!(&:value).join(Clause::COMMA_SPACE)
629
+ def clause_strings(clauses)
630
+ clauses.map!(&:value)
631
+ end
632
+
633
+ def clause_join
634
+ Clause::COMMA_SPACE
555
635
  end
556
636
  end
557
637
  end
@@ -571,8 +651,12 @@ module Neo4j
571
651
  end
572
652
 
573
653
  class << self
574
- def clause_string(clauses)
575
- clauses.map!(&:value).join(' UNWIND ')
654
+ def clause_strings(clauses)
655
+ clauses.map!(&:value)
656
+ end
657
+
658
+ def clause_join
659
+ ' UNWIND '
576
660
  end
577
661
  end
578
662
  end
@@ -602,8 +686,12 @@ module Neo4j
602
686
  end
603
687
 
604
688
  class << self
605
- def clause_string(clauses)
606
- clauses.map!(&:value).join(Clause::COMMA_SPACE)
689
+ def clause_strings(clauses)
690
+ clauses.map!(&:value)
691
+ end
692
+
693
+ def clause_join
694
+ Clause::COMMA_SPACE
607
695
  end
608
696
  end
609
697
  end