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.
- data/.gitignore +0 -1
- data/Gemfile +29 -0
- data/lib/pacer/core/graph/edges_route.rb +4 -4
- data/lib/pacer/core/graph/element_route.rb +1 -1
- data/lib/pacer/core/graph/vertices_route.rb +13 -9
- data/lib/pacer/core/route.rb +0 -25
- data/lib/pacer/graph/pacer_graph.rb +13 -13
- data/lib/pacer/pipe/loop_pipe.rb +2 -5
- data/lib/pacer/pipe/path_wrapping_pipe.rb +3 -9
- data/lib/pacer/pipe/simple_visitor_pipe.rb +1 -2
- data/lib/pacer/pipe/wrapping_pipe.rb +1 -7
- data/lib/pacer/route.rb +18 -7
- data/lib/pacer/side_effect/is_unique.rb +18 -12
- data/lib/pacer/transform/join.rb +4 -5
- data/lib/pacer/utils/trie.rb +1 -4
- data/lib/pacer/utils/tsort.rb +2 -2
- data/lib/pacer/version.rb +1 -1
- data/lib/pacer/wrappers/edge_wrapper.rb +17 -17
- data/lib/pacer/wrappers/element_wrapper.rb +4 -29
- data/lib/pacer/wrappers/index_wrapper.rb +1 -2
- data/lib/pacer/wrappers/vertex_wrapper.rb +10 -7
- data/lib/pacer/wrappers/wrapper_selector.rb +2 -2
- data/lib/pacer/wrappers/wrapping_pipe_function.rb +6 -13
- data/lib/{pacer-1.0.1-standalone.jar → pacer-1.0.2-standalone.jar} +0 -0
- data/lib/pacer.rb +0 -1
- data/pacer.gemspec +0 -2
- data/pom.xml +1 -1
- data/spec/pacer/core/graph/vertices_route_spec.rb +12 -0
- data/spec/pacer/filter/property_filter_spec.rb +3 -6
- data/spec/pacer/side_effect/as_spec.rb +8 -5
- data/spec/pacer/side_effect/is_unique_spec.rb +11 -0
- data/spec/pacer/transform/map_spec.rb +2 -2
- data/spec/pacer/transform/process_spec.rb +1 -1
- data/spec/pacer/wrapper/edge_wrapper_spec.rb +2 -4
- data/spec/pacer/wrapper/element_wrapper_spec.rb +17 -6
- data/spec/pacer/wrapper/vertex_wrapper_spec.rb +2 -4
- metadata +12 -25
- data/Gemfile-dev +0 -33
- data/Gemfile-release +0 -4
- data/lib/pacer/extensions/block_filter_element.rb +0 -17
- data/lib/pacer/extensions.rb +0 -6
- data/tags +0 -1165
data/.gitignore
CHANGED
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
data/lib/pacer/core/route.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/pacer/pipe/loop_pipe.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
23
|
-
wrapped.graph = graph
|
24
|
-
wrapped
|
22
|
+
vertex_wrapper.new graph, item
|
25
23
|
elsif item.is_a? Pacer::Edge
|
26
|
-
|
27
|
-
wrapped.graph = graph
|
28
|
-
wrapped
|
24
|
+
edge_wrapper.new graph, item
|
29
25
|
elsif other_wrapper
|
30
|
-
|
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,13 +24,7 @@ module Pacer
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def processNextStart
|
27
|
-
|
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
|
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
|
-
|
5
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
data/lib/pacer/transform/join.rb
CHANGED
@@ -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
|
-
|
114
|
-
|
112
|
+
wrapper.new from_graph, element
|
113
|
+
else
|
114
|
+
element
|
115
115
|
end
|
116
|
-
element
|
117
116
|
end
|
118
117
|
end
|
119
118
|
|
data/lib/pacer/utils/trie.rb
CHANGED
@@ -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
|
-
|
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
|
|
data/lib/pacer/utils/tsort.rb
CHANGED
@@ -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
@@ -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
|
-
|
45
|
+
VertexWrapper.wrapper_for(extensions).new graph, v
|
46
46
|
elsif extensions
|
47
|
-
|
47
|
+
VertexWrapper.wrapper_for([extensions]).new graph, v
|
48
48
|
else
|
49
|
-
|
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
|
-
|
58
|
+
VertexWrapper.wrapper_for(extensions).new graph, v
|
61
59
|
elsif extensions
|
62
|
-
|
60
|
+
VertexWrapper.wrapper_for([extensions]).new graph, v
|
63
61
|
else
|
64
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|