neo4j-cypher 1.0.0 → 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4ab6db292610780f4016937d4872254f49424496
4
+ data.tar.gz: 7cb2c9c1fb21c70686fef80d3b8c268740f94843
5
+ SHA512:
6
+ metadata.gz: 54514ebfad0fbce0db6b8016fdded8d78f63873dc9dcee0d8fde59e0d77735844ea1217ca12c180d82149c2f7a12d8841d30c75f2a0ffa3538e3edfc46dc80b2
7
+ data.tar.gz: f7286c628777fc15f810b8176eaa6e1011e3545f33f2b3654a6dc90b15a8c07e4abb798d3b25428a479b211e54c7d7302a8e3a503ef10c618eb32fbab6279115
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :gemcutter
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
@@ -5,7 +5,8 @@ The JRuby neo4j-core gem's cypher dsl has been moved to this gem.
5
5
 
6
6
  == Docs
7
7
 
8
- * {Neo4j Wiki Cypher}[https://github.com/andreasronge/neo4j/wiki/Neo4j%3A%3ACypher]
8
+ * {The Cypher DSL docs}[https://github.com/andreasronge/neo4j/wiki/Neo4j%3A%3ACypher]
9
+ * {Blog: The Cypher Ruby DSL}[http://www.jayway.com/2012/10/04/the-cypher-ruby-dsl-for-the-neo4j-graph-database/]
9
10
  * {Neo4j Cypher Docs}[http://docs.neo4j.org/chunked/stable/]
10
11
  * RSpecs (100% test coverage)
11
12
 
@@ -5,10 +5,10 @@ module Neo4j
5
5
  # Does expect a #clause method when included
6
6
  module Clause
7
7
 
8
- ORDER = [:start, :match, :create, :where, :with, :foreach, :set, :delete, :return, :order_by, :skip, :limit]
8
+ ORDER = [:start, :match, :create, :where, :with, :foreach, :set, :delete, :remove, :return, :order_by, :skip, :limit]
9
9
  NAME = {:start => 'START', :create => 'CREATE', :match => 'MATCH', :where => "WHERE", :with => 'WITH',
10
10
  :return => 'RETURN', :order_by => 'ORDER BY', :skip => 'SKIP', :limit => 'LIMIT', :set => 'SET',
11
- :delete => 'DELETE', :foreach => 'FOREACH'}
11
+ :remove => 'REMOVE', :delete => 'DELETE', :foreach => 'FOREACH'}
12
12
 
13
13
  attr_accessor :clause_type, :clause_list, :eval_context, :expr, :insert_order
14
14
 
@@ -108,9 +108,9 @@ module Neo4j
108
108
 
109
109
  def prefix_for_depth_2
110
110
  if include?(:match) && include?(:where)
111
- [:set, :delete, :create, :where]
111
+ [:set, :delete, :create, :remove, :where]
112
112
  else
113
- [:set, :delete, :create]
113
+ [:set, :delete, :create, :remove]
114
114
  end
115
115
 
116
116
  end
@@ -297,6 +297,16 @@ module Neo4j
297
297
  self
298
298
  end
299
299
 
300
+ def set_label(*labels)
301
+ Label.new(clause_list, clause, labels, :set)
302
+ self
303
+ end
304
+
305
+ def del_label(*labels)
306
+ Label.new(clause_list, clause, labels, :remove)
307
+ self
308
+ end
309
+
300
310
  def del
301
311
  Delete.new(clause_list, clause)
302
312
  self
@@ -1,6 +1,20 @@
1
1
  module Neo4j
2
2
  module Cypher
3
3
 
4
+ class Label
5
+ include Clause
6
+
7
+ def initialize(clause_list, var, labels, clause_type)
8
+ super(clause_list, clause_type)
9
+ @var = var
10
+ @labels = labels
11
+ end
12
+
13
+ def to_cypher
14
+ "#{@var.var_name.to_s} :#{@labels.map(&:to_s).join(':')}"
15
+ end
16
+ end
17
+
4
18
  class Delete
5
19
  include Clause
6
20
 
@@ -19,9 +33,10 @@ module Neo4j
19
33
  class Create
20
34
  include Clause
21
35
 
22
- def initialize(clause_list, props)
36
+ def initialize(clause_list, props, labels=nil)
23
37
  super(clause_list, :create, EvalContext)
24
- @props = props
38
+ @props = props unless props && props.empty?
39
+ @labels = labels unless labels && labels.empty?
25
40
  end
26
41
 
27
42
  def as_create_path?
@@ -37,10 +52,12 @@ module Neo4j
37
52
  end
38
53
 
39
54
  def to_cypher
55
+ label_suffix = @labels && ":" + @labels.map{|name| "`#{name.to_s}`"}.join(':')
56
+
40
57
  without_parantheses = if @props
41
- "#{var_name} #{to_prop_string(@props)}"
58
+ "#{var_name}#{label_suffix} #{to_prop_string(@props)}"
42
59
  else
43
- var_name
60
+ "#{var_name}#{label_suffix}"
44
61
  end
45
62
 
46
63
  as_create_path? ? without_parantheses : "(#{without_parantheses})"
@@ -47,9 +47,9 @@ module Neo4j
47
47
  super
48
48
  end
49
49
 
50
- def new(props = nil)
50
+ def new(props = nil, *labels)
51
51
  clause.clause_list.delete(clause)
52
- Create.new(clause_list, props).eval_context
52
+ Create.new(clause_list, props, labels).eval_context
53
53
  end
54
54
 
55
55
  def [](p)
@@ -13,6 +13,8 @@ module Neo4j
13
13
  # r[0][:n].neo_id.should == @a.neo_id
14
14
  # r[1][:n].neo_id.should == @b.neo_id
15
15
  class ResultWrapper
16
+ class ResultsAlreadyConsumedException < Exception; end;
17
+
16
18
  include Enumerable
17
19
 
18
20
  # @return the original result from the Neo4j Cypher Engine, once forward read only !
@@ -20,6 +22,7 @@ module Neo4j
20
22
 
21
23
  def initialize(source)
22
24
  @source = source
25
+ @unread = true
23
26
  end
24
27
 
25
28
  # @return [Array<Symbol>] the columns in the query result
@@ -29,12 +32,20 @@ module Neo4j
29
32
 
30
33
  # for the Enumerable contract
31
34
  def each
32
- @source.each { |row| yield map(row) }
35
+ raise ResultsAlreadyConsumedException unless @unread
36
+
37
+ if block_given?
38
+ @unread = false
39
+ @source.each { |row| yield symbolize_row_keys(row) }
40
+ else
41
+ Enumerator.new(self)
42
+ end
33
43
  end
34
44
 
45
+ private
46
+
35
47
  # Maps each row so that we can use symbols for column names.
36
- # @private
37
- def map(row)
48
+ def symbolize_row_keys(row)
38
49
  out = {} # move to a real hash!
39
50
  row.each do |key, value|
40
51
  out[key.to_sym] = value.respond_to?(:wrapper) ? value.wrapper : value
@@ -14,6 +14,8 @@ module Neo4j
14
14
  return if clause_list.include?(:return)
15
15
  return if clause_list.include?(:with)
16
16
  return if clause_list.include?(:delete)
17
+ return if clause_list.include?(:set)
18
+ return if clause_list.include?(:remove)
17
19
  end
18
20
  create_returns(result)
19
21
  end
@@ -1,5 +1,5 @@
1
1
  module Neo4j
2
2
  module Cypher
3
- VERSION = '1.0.0'
3
+ VERSION = '1.0.1'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,22 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neo4j-cypher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 1.0.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Andreas Ronge
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-10-02 00:00:00.000000000 Z
11
+ date: 2013-10-04 00:00:00.000000000 Z
13
12
  dependencies: []
14
- description: ! 'This gem is used in the JRuby neo4j gem but should work on any Ruby
15
- implementation since it simply
16
-
13
+ description: |
14
+ This gem is used in the JRuby neo4j gem but should work on any Ruby implementation since it simply
17
15
  translate a Ruby block (the dsl) to a cypher string.
18
-
19
- '
20
16
  email: andreas.ronge@gmail.com
21
17
  executables: []
22
18
  extensions: []
@@ -53,6 +49,7 @@ files:
53
49
  - neo4j-cypher.gemspec
54
50
  homepage: http://github.com/andreasronge/neo4j-cypher/tree
55
51
  licenses: []
52
+ metadata: {}
56
53
  post_install_message:
57
54
  rdoc_options:
58
55
  - --quiet
@@ -65,24 +62,19 @@ rdoc_options:
65
62
  require_paths:
66
63
  - lib
67
64
  required_ruby_version: !ruby/object:Gem::Requirement
68
- none: false
69
65
  requirements:
70
- - - ! '>='
66
+ - - '>='
71
67
  - !ruby/object:Gem::Version
72
68
  version: 1.8.7
73
69
  required_rubygems_version: !ruby/object:Gem::Requirement
74
- none: false
75
70
  requirements:
76
- - - ! '>='
71
+ - - '>='
77
72
  - !ruby/object:Gem::Version
78
73
  version: '0'
79
- segments:
80
- - 0
81
- hash: -2728689632116511744
82
74
  requirements: []
83
75
  rubyforge_project: neo4j-cypher
84
- rubygems_version: 1.8.24
76
+ rubygems_version: 2.1.5
85
77
  signing_key:
86
- specification_version: 3
78
+ specification_version: 4
87
79
  summary: A Ruby DSL for Cypher - the Neo4j Graph Query Language
88
80
  test_files: []