pacer 1.0.1-java → 1.0.2-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.
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