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