pacer 1.0.1-java → 1.0.2-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/.gitignore +0 -1
  2. data/Gemfile +29 -0
  3. data/lib/pacer/core/graph/edges_route.rb +4 -4
  4. data/lib/pacer/core/graph/element_route.rb +1 -1
  5. data/lib/pacer/core/graph/vertices_route.rb +13 -9
  6. data/lib/pacer/core/route.rb +0 -25
  7. data/lib/pacer/graph/pacer_graph.rb +13 -13
  8. data/lib/pacer/pipe/loop_pipe.rb +2 -5
  9. data/lib/pacer/pipe/path_wrapping_pipe.rb +3 -9
  10. data/lib/pacer/pipe/simple_visitor_pipe.rb +1 -2
  11. data/lib/pacer/pipe/wrapping_pipe.rb +1 -7
  12. data/lib/pacer/route.rb +18 -7
  13. data/lib/pacer/side_effect/is_unique.rb +18 -12
  14. data/lib/pacer/transform/join.rb +4 -5
  15. data/lib/pacer/utils/trie.rb +1 -4
  16. data/lib/pacer/utils/tsort.rb +2 -2
  17. data/lib/pacer/version.rb +1 -1
  18. data/lib/pacer/wrappers/edge_wrapper.rb +17 -17
  19. data/lib/pacer/wrappers/element_wrapper.rb +4 -29
  20. data/lib/pacer/wrappers/index_wrapper.rb +1 -2
  21. data/lib/pacer/wrappers/vertex_wrapper.rb +10 -7
  22. data/lib/pacer/wrappers/wrapper_selector.rb +2 -2
  23. data/lib/pacer/wrappers/wrapping_pipe_function.rb +6 -13
  24. data/lib/{pacer-1.0.1-standalone.jar → pacer-1.0.2-standalone.jar} +0 -0
  25. data/lib/pacer.rb +0 -1
  26. data/pacer.gemspec +0 -2
  27. data/pom.xml +1 -1
  28. data/spec/pacer/core/graph/vertices_route_spec.rb +12 -0
  29. data/spec/pacer/filter/property_filter_spec.rb +3 -6
  30. data/spec/pacer/side_effect/as_spec.rb +8 -5
  31. data/spec/pacer/side_effect/is_unique_spec.rb +11 -0
  32. data/spec/pacer/transform/map_spec.rb +2 -2
  33. data/spec/pacer/transform/process_spec.rb +1 -1
  34. data/spec/pacer/wrapper/edge_wrapper_spec.rb +2 -4
  35. data/spec/pacer/wrapper/element_wrapper_spec.rb +17 -6
  36. data/spec/pacer/wrapper/vertex_wrapper_spec.rb +2 -4
  37. metadata +12 -25
  38. data/Gemfile-dev +0 -33
  39. data/Gemfile-release +0 -4
  40. data/lib/pacer/extensions/block_filter_element.rb +0 -17
  41. data/lib/pacer/extensions.rb +0 -6
  42. data/tags +0 -1165
data/.gitignore CHANGED
@@ -11,7 +11,6 @@ doc
11
11
  # bundler
12
12
  .bundle
13
13
  Gemfile.lock
14
- Gemfile
15
14
 
16
15
  # jeweler generated
17
16
  pkg
data/Gemfile CHANGED
@@ -2,3 +2,32 @@
2
2
  source "http://rubygems.org"
3
3
 
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'rspec', '~> 2.10.0'
8
+ gem 'rr', '~> 1.0'
9
+ gem 'simplecov'
10
+ gem 'yard'
11
+ gem 'rake'
12
+
13
+ # pacer-* gems are required for testing pacer.
14
+ # If you have the gem repos cloned locally, we'll use them.
15
+ #
16
+ libs = [
17
+ ['pacer-neo4j', '2.0.0.pre'],
18
+ ['pacer-orient', '2.0.0.pre'],
19
+ ['pacer-dex', '2.0.0.pre']
20
+ ]
21
+ libs.each do |lib, version|
22
+ if File.directory? "../#{lib}"
23
+ gem lib, :path => "../#{lib}"
24
+ end
25
+ end
26
+
27
+
28
+ gem 'autotest-standalone'
29
+ gem 'autotest-growl'
30
+ gem 'pry'
31
+ gem 'awesome_print', '0.4.0'
32
+ end
33
+
@@ -9,7 +9,7 @@ module Pacer::Core::Graph
9
9
  # Extends the route with out vertices from this route's matching edges.
10
10
  #
11
11
  # @param [Array<Hash, extension>, Hash, extension] filter see {Pacer::Route#property_filter}
12
- # @yield [VertexWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
12
+ # @yield [VertexWrapper] filter proc, see {Pacer::Route#property_filter}
13
13
  # @return [VerticesRoute]
14
14
  def out_v(*filters, &block)
15
15
  Pacer::Route.property_filter(chain_route(:element_type => :vertex,
@@ -21,7 +21,7 @@ module Pacer::Core::Graph
21
21
  # Extends the route with in vertices from this route's matching edges.
22
22
  #
23
23
  # @param [Array<Hash, extension>, Hash, extension] filter see {Pacer::Route#property_filter}
24
- # @yield [VertexWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
24
+ # @yield [VertexWrapper] filter proc, see {Pacer::Route#property_filter}
25
25
  # @return [VerticesRoute]
26
26
  def in_v(*filters, &block)
27
27
  Pacer::Route.property_filter(chain_route(:element_type => :vertex,
@@ -33,7 +33,7 @@ module Pacer::Core::Graph
33
33
  # Extends the route with both in and oud vertices from this route's matching edges.
34
34
  #
35
35
  # @param [Array<Hash, extension>, Hash, extension] filter see {Pacer::Route#property_filter}
36
- # @yield [VertexWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
36
+ # @yield [VertexWrapper] filter proc, see {Pacer::Route#property_filter}
37
37
  # @return [VerticesRoute]
38
38
  def both_v(*filters, &block)
39
39
  Pacer::Route.property_filter(chain_route(:element_type => :vertex,
@@ -45,7 +45,7 @@ module Pacer::Core::Graph
45
45
  # Extend route with the additional edge label, property and block filters.
46
46
  #
47
47
  # @param [Array<Hash, extension>, Hash, extension] filter see {Pacer::Route#property_filter}
48
- # @yield [EdgeWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
48
+ # @yield [EdgeWrapper] filter proc, see {Pacer::Route#property_filter}
49
49
  # @return [EdgesRoute]
50
50
  def e(*filters, &block)
51
51
  filter(*filters, &block)
@@ -10,7 +10,7 @@ module Pacer::Core::Graph
10
10
  # Attach a filter to the current route.
11
11
  #
12
12
  # @param [Array<Hash, extension>, Hash, extension] filter see {Pacer::Route#property_filter}
13
- # @yield [ElementWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
13
+ # @yield [ElementWrapper] filter proc, see {Pacer::Route#property_filter}
14
14
  # @return [ElementRoute] the same type and extensions as the source route.
15
15
  def filter(*filters, &block)
16
16
  Pacer::Route.property_filter(self, filters, block)
@@ -15,7 +15,7 @@ module Pacer::Core::Graph
15
15
  # If string(s) or symbol(s) are given, they will be treated as edge
16
16
  # labels. Unlike other property filters which all must be matched, an
17
17
  # edge will pass the filter if it matches any of the given labels.
18
- # @yield [EdgeWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
18
+ # @yield [EdgeWrapper] filter proc, see {Pacer::Route#property_filter}
19
19
  # @return [EdgesRoute]
20
20
  def out_e(*filters, &block)
21
21
  filters = extract_labels(filters)
@@ -32,13 +32,15 @@ module Pacer::Core::Graph
32
32
  # If string(s) or symbol(s) are given, they will be treated as edge
33
33
  # labels. Unlike other property filters which all must be matched, an
34
34
  # edge will pass the filter if it matches any of the given labels.
35
- # @yield [VertexWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
35
+ # @yield [VertexWrapper] filter proc, see {Pacer::Route#property_filter}
36
36
  # @return [VerticesRoute]
37
37
  def out(*filters, &block)
38
38
  filters = extract_labels(filters)
39
39
  Pacer::Route.property_filter(chain_route(:element_type => :vertex,
40
40
  :pipe_class => OutPipe,
41
41
  :pipe_args => route_labels,
42
+ :wrapper => nil,
43
+ :extensions => [],
42
44
  :route_name => edge_route_name('out')),
43
45
  filters, block)
44
46
  end
@@ -49,7 +51,7 @@ module Pacer::Core::Graph
49
51
  # If string(s) or symbol(s) are given, they will be treated as edge
50
52
  # labels. Unlike other property filters which all must be matched, an
51
53
  # edge will pass the filter if it matches any of the given labels.
52
- # @yield [EdgeWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
54
+ # @yield [EdgeWrapper] filter proc, see {Pacer::Route#property_filter}
53
55
  # @return [EdgesRoute]
54
56
  def in_e(*filters, &block)
55
57
  filters = extract_labels(filters)
@@ -66,13 +68,15 @@ module Pacer::Core::Graph
66
68
  # If string(s) or symbol(s) are given, they will be treated as edge
67
69
  # labels. Unlike other property filters which all must be matched, an
68
70
  # edge will pass the filter if it matches any of the given labels.
69
- # @yield [VertexWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
71
+ # @yield [VertexWrapper] filter proc, see {Pacer::Route#property_filter}
70
72
  # @return [VerticesRoute]
71
73
  def in(*filters, &block)
72
74
  filters = extract_labels(filters)
73
75
  Pacer::Route.property_filter(chain_route(:element_type => :vertex,
74
76
  :pipe_class => InPipe,
75
77
  :pipe_args => route_labels,
78
+ :wrapper => nil,
79
+ :extensions => [],
76
80
  :route_name => edge_route_name('in')),
77
81
  filters, block)
78
82
  end
@@ -83,7 +87,7 @@ module Pacer::Core::Graph
83
87
  # If string(s) or symbol(s) are given, they will be treated as edge
84
88
  # labels. Unlike other property filters which all must be matched, an
85
89
  # edge will pass the filter if it matches any of the given labels.
86
- # @yield [EdgeWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
90
+ # @yield [EdgeWrapper] filter proc, see {Pacer::Route#property_filter}
87
91
  # @return [EdgesRoute]
88
92
  def both_e(*filters, &block)
89
93
  filters = extract_labels(filters)
@@ -100,13 +104,15 @@ module Pacer::Core::Graph
100
104
  # If string(s) or symbol(s) are given, they will be treated as edge
101
105
  # labels. Unlike other property filters which all must be matched, an
102
106
  # edge will pass the filter if it matches any of the given labels.
103
- # @yield [VertexWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
107
+ # @yield [VertexWrapper] filter proc, see {Pacer::Route#property_filter}
104
108
  # @return [VerticesRoute]
105
109
  def both(*filters, &block)
106
110
  filters = extract_labels(filters)
107
111
  Pacer::Route.property_filter(chain_route(:element_type => :vertex,
108
112
  :pipe_class => BothPipe,
109
113
  :pipe_args => route_labels,
114
+ :wrapper => nil,
115
+ :extensions => [],
110
116
  :route_name => edge_route_name('both')),
111
117
  filters, block)
112
118
  end
@@ -117,7 +123,7 @@ module Pacer::Core::Graph
117
123
  # If string(s) or symbol(s) are given, they will be treated as edge
118
124
  # labels. Unlike other property filters which all must be matched, an
119
125
  # edge will pass the filter if it matches any of the given labels.
120
- # @yield [VertexWrapper(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
126
+ # @yield [VertexWrapper] filter proc, see {Pacer::Route#property_filter}
121
127
  # @return [VerticesRoute]
122
128
  def v(*filters, &block)
123
129
  filter(*filters, &block)
@@ -165,8 +171,6 @@ module Pacer::Core::Graph
165
171
  else
166
172
  to_vertices = [to_vertices].compact
167
173
  end
168
- graph = self.graph
169
-
170
174
  has_props = !props.empty?
171
175
  edge_ids = []
172
176
  counter = 0
@@ -203,31 +203,6 @@ module Pacer
203
203
  chain_route wrapper: wrapper
204
204
  end
205
205
 
206
- def wrapper
207
- @wrapper
208
- end
209
-
210
- # Get the set of extensions currently on this route.
211
- #
212
- # The order of extensions for custom defined wrappers are
213
- # guaranteed. If a wrapper is iterated with additional extensions,
214
- # a new wrapper will be created dynamically with the original
215
- # extensions in order followed by any additional extensions in
216
- # undefined order.
217
- #
218
- # Returns an Array
219
- #
220
- # @return [Array[extension]]
221
- attr_reader :extensions
222
-
223
- def all_extensions
224
- if wrapper
225
- wrapper.extensions + extensions
226
- else
227
- extensions
228
- end
229
- end
230
-
231
206
  # If any objects in the given array are modules that contain a Route
232
207
  # submodule, extend this route with the Route module.
233
208
  # @return [self]
@@ -9,7 +9,11 @@ module Pacer
9
9
  attr_reader :blueprints_graph, :encoder
10
10
 
11
11
  def initialize(encoder, open, shutdown = nil)
12
- @reopen = open
12
+ if open.is_a? Proc
13
+ @reopen = open
14
+ else
15
+ @reopen = proc { open }
16
+ end
13
17
  @shutdown = shutdown
14
18
  reopen
15
19
  @encoder = encoder
@@ -62,12 +66,11 @@ module Pacer
62
66
  if v
63
67
  wrapper = modules.detect { |obj| obj.ancestors.include? Pacer::Wrappers::VertexWrapper }
64
68
  if wrapper
65
- v = wrapper.new v
69
+ v = wrapper.new graph, v
66
70
  modules.delete wrapper
67
71
  else
68
- v = Pacer::Wrappers::VertexWrapper.new v
72
+ v = Pacer::Wrappers::VertexWrapper.new graph, v
69
73
  end
70
- v.graph = self
71
74
  v.add_extensions modules
72
75
  else
73
76
  v
@@ -90,12 +93,11 @@ module Pacer
90
93
  if v
91
94
  wrapper = modules.detect { |obj| obj.ancestors.include? Pacer::Wrappers::EdgeWrapper }
92
95
  if wrapper
93
- v = wrapper.new v
96
+ v = wrapper.new graph, v
94
97
  modules.delete wrapper
95
98
  else
96
- v = Pacer::Wrappers::EdgeWrapper.new v
99
+ v = Pacer::Wrappers::EdgeWrapper.new graph, v
97
100
  end
98
- v.graph = self
99
101
  v.add_extensions modules
100
102
  end
101
103
  end
@@ -116,14 +118,13 @@ module Pacer
116
118
  id, wrapper, modules, props = id_modules_properties(args)
117
119
  raw_vertex = creating_elements { blueprints_graph.addVertex(id) }
118
120
  if wrapper
119
- vertex = wrapper.new raw_vertex
121
+ vertex = wrapper.new graph, raw_vertex
120
122
  else
121
- vertex = Pacer::Wrappers::VertexWrapper.new raw_vertex
123
+ vertex = Pacer::Wrappers::VertexWrapper.new graph, raw_vertex
122
124
  end
123
125
  if modules.any?
124
126
  vertex = vertex.add_extensions modules
125
127
  end
126
- vertex.graph = self
127
128
  props.each { |k, v| vertex[k.to_s] = v } if props
128
129
  vertex
129
130
  end
@@ -143,14 +144,13 @@ module Pacer
143
144
  _, wrapper, modules, props = id_modules_properties(args)
144
145
  raw_edge = creating_elements { blueprints_graph.addEdge(id, from_v.element, to_v.element, label.to_s) }
145
146
  if wrapper
146
- edge = wrapper.new raw_edge
147
+ edge = wrapper.new graph, raw_edge
147
148
  else
148
- edge = Pacer::Wrappers::EdgeWrapper.new raw_edge
149
+ edge = Pacer::Wrappers::EdgeWrapper.new graph, raw_edge
149
150
  end
150
151
  if modules.any?
151
152
  edge = edge.add_extensions modules
152
153
  end
153
- edge.graph = self
154
154
  props.each { |k, v| edge[k.to_s] = v } if props
155
155
  edge
156
156
  end
@@ -52,12 +52,9 @@ module Pacer::Pipes
52
52
  end
53
53
  depth = 0
54
54
  end
55
- wrapped = wrapper.new(element)
56
- wrapped.graph = graph if wrapped.respond_to? :graph=
55
+ wrapped = wrapper.new(graph, element)
57
56
  path = @next_path.map do |e|
58
- w = wrapper.new e
59
- w.graph = graph if w.respond_to? :graph=
60
- w
57
+ wrapper.new graph, e
61
58
  end
62
59
  case control_block.call wrapped, depth, path
63
60
  when :loop
@@ -19,17 +19,11 @@ module Pacer
19
19
  path = starts.next
20
20
  path.collect do |item|
21
21
  if item.is_a? Pacer::Vertex
22
- wrapped = vertex_wrapper.new item
23
- wrapped.graph = graph
24
- wrapped
22
+ vertex_wrapper.new graph, item
25
23
  elsif item.is_a? Pacer::Edge
26
- wrapped = edge_wrapper.new item
27
- wrapped.graph = graph
28
- wrapped
24
+ edge_wrapper.new graph, item
29
25
  elsif other_wrapper
30
- wrapped = other_wrapper.new item
31
- wrapped.graph = graph if wrapped.respond_to? :graph
32
- wrapped
26
+ other_wrapper.new graph, item
33
27
  else
34
28
  item
35
29
  end
@@ -24,8 +24,7 @@ module Pacer
24
24
  current = starts.next
25
25
  @in_section = true unless in_section
26
26
  if use_on_element
27
- wrapped = wrapper.new current
28
- wrapped.graph = graph
27
+ wrapped = wrapper.new graph, current
29
28
  visitor.on_element(wrapped)
30
29
  end
31
30
  return current
@@ -24,13 +24,7 @@ module Pacer
24
24
  end
25
25
 
26
26
  def processNextStart
27
- e = wrapper.new starts.next
28
- if element_type == :vertex or element_type == :edge or element_type == :mixed
29
- e.graph = graph
30
- elsif e.respond_to? :graph=
31
- e.graph = graph
32
- end
33
- e
27
+ wrapper.new graph, starts.next
34
28
  end
35
29
  end
36
30
  end
data/lib/pacer/route.rb CHANGED
@@ -1,4 +1,4 @@
1
- [Pacer::Core::Route, Pacer::Wrappers::ElementWrapper, Pacer::Wrappers::EdgeWrapper, Pacer::Wrappers::VertexWrapper].each do |klass|
1
+ [Pacer::Core::Route, Pacer::Wrappers::ElementWrapper].each do |klass|
2
2
  klass.class_eval %{
3
3
  def chain_route(args_hash)
4
4
  Pacer::RouteBuilder.current.chain self, args_hash
@@ -182,19 +182,30 @@ module Pacer
182
182
 
183
183
  attr_reader :config
184
184
 
185
+ # The wrapper object to use to wrap elements in.
186
+ #
187
+ # If it responds to #add_extensions and the rout also has additional
188
+ # extensions, it will be used to generate a new wrapper dynamically.
185
189
  def wrapper
186
190
  config[:wrapper]
187
191
  end
188
192
 
193
+ # Get the set of extensions currently on this route.
194
+ #
195
+ # The order of extensions for custom defined wrappers are
196
+ # guaranteed. If a wrapper is iterated with additional extensions,
197
+ # a new wrapper will be created dynamically with the original
198
+ # extensions in order followed by any additional extensions in
199
+ # undefined order.
200
+ #
201
+ # Returns an Array
202
+ #
203
+ # @return [Array[extension]]
189
204
  def extensions
190
- config[:extensions]
191
- end
192
-
193
- def all_extensions
194
205
  if wrapper
195
- (wrapper.extensions + extensions).uniq
206
+ (wrapper.extensions + config[:extensions]).uniq
196
207
  else
197
- extensions
208
+ config[:extensions]
198
209
  end
199
210
  end
200
211
 
@@ -1,12 +1,22 @@
1
1
  module Pacer
2
2
  module Routes
3
3
  module RouteOperations
4
- def is_unique
5
- chain_route :side_effect => :is_unique
4
+ # This method adds the IsUniquePipe to the pipeline and whenever the
5
+ # pipeline is built, yields the pipe to the block given here.
6
+ #
7
+ # See #unique? below for example usage.
8
+ def is_unique(&block)
9
+ chain_route side_effect: :is_unique, on_build_pipe: block
6
10
  end
7
11
 
12
+ # This method builds a pipe and ataches the IsUniquePipe to the end then
13
+ # iterates the pipeline until it finds a unique element or hits the end.
8
14
  def unique?
9
- is_unique.unique?
15
+ check = nil
16
+ is_unique { |pipe| check = pipe }.each do
17
+ return false unless check.unique?
18
+ end
19
+ true
10
20
  end
11
21
  end
12
22
  end
@@ -14,19 +24,15 @@ module Pacer
14
24
 
15
25
  module SideEffect
16
26
  module IsUnique
17
- def unique?
18
- checked = Pacer::Pipes::IsUniquePipe.new
19
- checked.setStarts pipe
20
- checked.next while checked.unique?
21
- false
22
- rescue Pacer::EmptyPipe, java.util.NoSuchElementException
23
- true
24
- end
27
+ attr_accessor :on_build_pipe
25
28
 
26
29
  protected
27
30
 
28
31
  def attach_pipe(end_pipe)
29
- end_pipe
32
+ checked = Pacer::Pipes::IsUniquePipe.new
33
+ checked.setStarts end_pipe
34
+ on_build_pipe.call checked if on_build_pipe
35
+ checked
30
36
  end
31
37
  end
32
38
  end
@@ -66,8 +66,7 @@ module Pacer
66
66
  def processNextStart
67
67
  while true
68
68
  if current_keys.empty?
69
- element = wrapper.new starts.next
70
- element.graph = from_graph if element.respond_to? :graph
69
+ element = wrapper.new from_graph, starts.next
71
70
  self.current_keys = get_keys(element)
72
71
  self.current_values = get_values(element) unless current_keys.empty?
73
72
  else
@@ -110,10 +109,10 @@ module Pacer
110
109
  array = pipe.next
111
110
  array.map do |element|
112
111
  if element.is_a? Pacer::Element
113
- element = wrapper.new element
114
- element.graph = from_graph if element.respond_to? :graph
112
+ wrapper.new from_graph, element
113
+ else
114
+ element
115
115
  end
116
- element
117
116
  end
118
117
  end
119
118
 
@@ -23,9 +23,7 @@ module Pacer::Utils
23
23
  def find(array)
24
24
  found = find_partial(array)
25
25
  if found.length == array.length
26
- result = found.last.in_vertex.add_extensions [Trie]
27
- result.graph = graph
28
- result
26
+ found.last.in_vertex.add_extensions [Trie]
29
27
  end
30
28
  end
31
29
 
@@ -64,7 +62,6 @@ module Pacer::Utils
64
62
  end
65
63
  end
66
64
  result[:end] = true
67
- result.graph = graph
68
65
  result.add_extensions [Trie]
69
66
  end
70
67
 
@@ -59,9 +59,9 @@ module Pacer
59
59
 
60
60
  def tsort_dependencies(tsort_anon_mod = nil)
61
61
  if self.class.const_defined? :DependenciesBlock
62
- self.class::DependenciesBlock.call(self).add_extensions([tsort_anon_mod])
62
+ self.class::DependenciesBlock.call(self).add_extensions([TSort, tsort_anon_mod])
63
63
  else
64
- self.in
64
+ self.in(extensions)
65
65
  end
66
66
  end
67
67
  end
data/lib/pacer/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Pacer
2
2
  unless const_defined? :VERSION
3
- VERSION = "1.0.1"
3
+ VERSION = "1.0.2"
4
4
 
5
5
  JAR = "pacer-#{ VERSION }-standalone.jar"
6
6
  JAR_PATH = "lib/#{ JAR }"
@@ -42,14 +42,12 @@ module Pacer::Wrappers
42
42
  def in_vertex(extensions = nil)
43
43
  v = element.getVertex Pacer::Pipes::IN
44
44
  if extensions.is_a? Enumerable
45
- v = VertexWrapper.wrapper_for(extensions).new v
45
+ VertexWrapper.wrapper_for(extensions).new graph, v
46
46
  elsif extensions
47
- v = VertexWrapper.wrapper_for([extensions]).new v
47
+ VertexWrapper.wrapper_for([extensions]).new graph, v
48
48
  else
49
- v = VertexWrapper.new v
49
+ VertexWrapper.new graph, v
50
50
  end
51
- v.graph = graph
52
- v
53
51
  end
54
52
 
55
53
  # The outgoing vertex for this edge.
@@ -57,14 +55,12 @@ module Pacer::Wrappers
57
55
  def out_vertex(extensions = nil)
58
56
  v = element.getVertex Pacer::Pipes::OUT
59
57
  if extensions.is_a? Enumerable
60
- v = VertexWrapper.wrapper_for(extensions).new v
58
+ VertexWrapper.wrapper_for(extensions).new graph, v
61
59
  elsif extensions
62
- v = VertexWrapper.wrapper_for([extensions]).new v
60
+ VertexWrapper.wrapper_for([extensions]).new graph, v
63
61
  else
64
- v = VertexWrapper.new v
62
+ VertexWrapper.new graph, v
65
63
  end
66
- v.graph = graph
67
- v
68
64
  end
69
65
 
70
66
  # This method must be defined here rather than in the superclass in order
@@ -83,9 +79,7 @@ module Pacer::Wrappers
83
79
  # the extensions
84
80
  def add_extensions(exts)
85
81
  if exts.any?
86
- e = self.class.wrap(element, extensions + exts.to_a)
87
- e.graph = graph
88
- e
82
+ self.class.wrap(self, extensions + exts.to_a)
89
83
  else
90
84
  self
91
85
  end
@@ -94,7 +88,7 @@ module Pacer::Wrappers
94
88
  # Returns the element with a new simple wrapper.
95
89
  # @return [EdgeWrapper]
96
90
  def no_extensions
97
- EdgeWrapper.new element
91
+ EdgeWrapper.new graph, element
98
92
  end
99
93
 
100
94
  # Returns a human-readable representation of the edge using the
@@ -138,8 +132,7 @@ module Pacer::Wrappers
138
132
  unless e
139
133
  e = e_idx.first('id', element_id)
140
134
  if e
141
- e = EdgeWrapper.new(e)
142
- e.graph = target_graph
135
+ e = EdgeWrapper.new(graph, e)
143
136
  end
144
137
  end
145
138
  unless e
@@ -193,12 +186,19 @@ module Pacer::Wrappers
193
186
  # If the other instance is an unwrapped edge, this will always return
194
187
  # false because otherwise the == method would not be symetrical.
195
188
  #
196
- # @see #eql?
197
189
  # @param other
198
190
  def ==(other)
199
191
  other.is_a? EdgeWrapper and
200
192
  element_id == other.element_id and
201
193
  graph == other.graph
202
194
  end
195
+ alias eql? ==
196
+
197
+ # Neo4j and Orient both have hash collisions between vertices and
198
+ # edges which causes problems when making a set out of a path for
199
+ # instance. Simple fix: negate edge hashes.
200
+ def hash
201
+ -element.hash
202
+ end
203
203
  end
204
204
  end
@@ -8,11 +8,7 @@ module Pacer::Wrappers
8
8
 
9
9
  class << self
10
10
  def wrap(element, exts)
11
- if element.respond_to? :element
12
- wrapper_for(exts).new(element.element)
13
- else
14
- wrapper_for(exts).new(element)
15
- end
11
+ wrapper_for(exts).new(element.graph, element.element)
16
12
  end
17
13
 
18
14
  def extensions
@@ -83,10 +79,11 @@ module Pacer::Wrappers
83
79
  # the element.
84
80
  #
85
81
  # @return [PacerGraph]
86
- attr_accessor :graph
82
+ attr_reader :graph
87
83
  attr_reader :element
88
84
 
89
- def initialize(element)
85
+ def initialize(graph, element)
86
+ @graph = graph
90
87
  if element.is_a? ElementWrapper
91
88
  @element = element.element
92
89
  else
@@ -95,10 +92,6 @@ module Pacer::Wrappers
95
92
  after_initialize
96
93
  end
97
94
 
98
- def hash
99
- element.hash
100
- end
101
-
102
95
  # Convenience method to retrieve a property by name.
103
96
  #
104
97
  # @param [#to_s] key the property name
@@ -177,24 +170,6 @@ module Pacer::Wrappers
177
170
  display_name.to_s <=> other.display_name.to_s
178
171
  end
179
172
 
180
- # Test object equality of the element instance.
181
- #
182
- # Wrappers/extensions (if any) are ignored, the underlying element
183
- # only is compared
184
- #
185
- # If the graphdb instantiates multiple copies of the same element
186
- # this method will return false when comparing them.
187
- #
188
- # @see #==
189
- # @param other
190
- def eql?(other)
191
- if other.respond_to? :element_id
192
- other.graph == graph and other.element_id == element_id
193
- else
194
- element.equals other
195
- end
196
- end
197
-
198
173
  protected
199
174
 
200
175
  def after_initialize
@@ -19,9 +19,8 @@ module Pacer::Wrappers
19
19
  def first(key, value, extensions = nil)
20
20
  e = index.get(key, value).first
21
21
  if e
22
- e = wrapper.new e
22
+ e = wrapper.new graph, e
23
23
  e = e.add_extensions extensions if extensions
24
- e.graph = graph
25
24
  end
26
25
  e
27
26
  end