neo4j-core 5.0.10 → 5.1.0.rc.1

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.
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