pacer 0.9.1.1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. data/.autotest +8 -0
  2. data/.document +5 -0
  3. data/.gitignore +26 -0
  4. data/.rspec +1 -0
  5. data/.rvmrc +0 -0
  6. data/CONTRIBUTORS +5 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.txt +24 -0
  9. data/README.md +187 -0
  10. data/Rakefile +49 -0
  11. data/autotest/discover.rb +1 -0
  12. data/bin/autospec +16 -0
  13. data/bin/autotest +16 -0
  14. data/bin/rake +16 -0
  15. data/bin/rcov +16 -0
  16. data/bin/rspec +16 -0
  17. data/bin/yard +16 -0
  18. data/bin/yardoc +16 -0
  19. data/lib/pacer/blueprints/extensions.rb +77 -0
  20. data/lib/pacer/blueprints/multi_graph.rb +121 -0
  21. data/lib/pacer/blueprints/ruby_graph.rb +199 -0
  22. data/lib/pacer/blueprints/tg.rb +100 -0
  23. data/lib/pacer/blueprints.rb +4 -0
  24. data/lib/pacer/core/graph/edges_route.rb +92 -0
  25. data/lib/pacer/core/graph/element_route.rb +171 -0
  26. data/lib/pacer/core/graph/graph_index_route.rb +48 -0
  27. data/lib/pacer/core/graph/graph_route.rb +55 -0
  28. data/lib/pacer/core/graph/mixed_route.rb +96 -0
  29. data/lib/pacer/core/graph/vertices_route.rb +220 -0
  30. data/lib/pacer/core/graph.rb +13 -0
  31. data/lib/pacer/core/route.rb +502 -0
  32. data/lib/pacer/core/side_effect.rb +11 -0
  33. data/lib/pacer/core.rb +8 -0
  34. data/lib/pacer/exceptions.rb +11 -0
  35. data/lib/pacer/extensions/block_filter_element.rb +22 -0
  36. data/lib/pacer/extensions.rb +6 -0
  37. data/lib/pacer/filter/block_filter.rb +31 -0
  38. data/lib/pacer/filter/collection_filter.rb +109 -0
  39. data/lib/pacer/filter/empty_filter.rb +70 -0
  40. data/lib/pacer/filter/future_filter.rb +68 -0
  41. data/lib/pacer/filter/index_filter.rb +30 -0
  42. data/lib/pacer/filter/loop_filter.rb +95 -0
  43. data/lib/pacer/filter/object_filter.rb +55 -0
  44. data/lib/pacer/filter/property_filter/edge_filters.rb +93 -0
  45. data/lib/pacer/filter/property_filter/filters.rb +269 -0
  46. data/lib/pacer/filter/property_filter.rb +111 -0
  47. data/lib/pacer/filter/random_filter.rb +13 -0
  48. data/lib/pacer/filter/range_filter.rb +104 -0
  49. data/lib/pacer/filter/uniq_filter.rb +12 -0
  50. data/lib/pacer/filter/where_filter/node_visitor.rb +280 -0
  51. data/lib/pacer/filter/where_filter.rb +47 -0
  52. data/lib/pacer/filter.rb +17 -0
  53. data/lib/pacer/function_resolver.rb +43 -0
  54. data/lib/pacer/graph/edge_mixin.rb +127 -0
  55. data/lib/pacer/graph/element_mixin.rb +202 -0
  56. data/lib/pacer/graph/graph_indices_mixin.rb +93 -0
  57. data/lib/pacer/graph/graph_mixin.rb +361 -0
  58. data/lib/pacer/graph/graph_transactions_mixin.rb +207 -0
  59. data/lib/pacer/graph/index_mixin.rb +30 -0
  60. data/lib/pacer/graph/vertex_mixin.rb +119 -0
  61. data/lib/pacer/graph.rb +14 -0
  62. data/lib/pacer/pipe/blackbox_pipeline.rb +48 -0
  63. data/lib/pacer/pipe/block_filter_pipe.rb +38 -0
  64. data/lib/pacer/pipe/collection_filter_pipe.rb +10 -0
  65. data/lib/pacer/pipe/cross_product_transform_pipe.rb +48 -0
  66. data/lib/pacer/pipe/enumerable_pipe.rb +30 -0
  67. data/lib/pacer/pipe/expandable_pipe.rb +63 -0
  68. data/lib/pacer/pipe/id_collection_filter_pipe.rb +33 -0
  69. data/lib/pacer/pipe/is_empty_pipe.rb +30 -0
  70. data/lib/pacer/pipe/is_unique_pipe.rb +61 -0
  71. data/lib/pacer/pipe/label_collection_filter_pipe.rb +21 -0
  72. data/lib/pacer/pipe/label_prefix_pipe.rb +21 -0
  73. data/lib/pacer/pipe/loop_pipe.rb +86 -0
  74. data/lib/pacer/pipe/map_pipe.rb +36 -0
  75. data/lib/pacer/pipe/never_pipe.rb +9 -0
  76. data/lib/pacer/pipe/process_pipe.rb +37 -0
  77. data/lib/pacer/pipe/property_comparison_pipe.rb +40 -0
  78. data/lib/pacer/pipe/ruby_pipe.rb +25 -0
  79. data/lib/pacer/pipe/simple_visitor_pipe.rb +43 -0
  80. data/lib/pacer/pipe/stream_sort_pipe.rb +84 -0
  81. data/lib/pacer/pipe/stream_uniq_pipe.rb +33 -0
  82. data/lib/pacer/pipe/type_filter_pipe.rb +22 -0
  83. data/lib/pacer/pipe/unary_transform_pipe.rb +59 -0
  84. data/lib/pacer/pipe/variable_store_iterator_wrapper.rb +26 -0
  85. data/lib/pacer/pipe/visitor_pipe.rb +67 -0
  86. data/lib/pacer/pipes.rb +61 -0
  87. data/lib/pacer/route/mixin/bulk_operations.rb +52 -0
  88. data/lib/pacer/route/mixin/route_operations.rb +107 -0
  89. data/lib/pacer/route/mixin/variable_route_module.rb +26 -0
  90. data/lib/pacer/route/mixins.rb +3 -0
  91. data/lib/pacer/route.rb +228 -0
  92. data/lib/pacer/routes.rb +6 -0
  93. data/lib/pacer/side_effect/aggregate.rb +31 -0
  94. data/lib/pacer/side_effect/counted.rb +30 -0
  95. data/lib/pacer/side_effect/group_count.rb +44 -0
  96. data/lib/pacer/side_effect/is_unique.rb +32 -0
  97. data/lib/pacer/side_effect/section.rb +25 -0
  98. data/lib/pacer/side_effect/visitor.rb +37 -0
  99. data/lib/pacer/side_effect.rb +11 -0
  100. data/lib/pacer/support/array_list.rb +28 -0
  101. data/lib/pacer/support/enumerable.rb +100 -0
  102. data/lib/pacer/support/hash.rb +9 -0
  103. data/lib/pacer/support/iterator_mixins.rb +110 -0
  104. data/lib/pacer/support/native_exception.rb +22 -0
  105. data/lib/pacer/support/proc.rb +16 -0
  106. data/lib/pacer/support.rb +10 -0
  107. data/lib/pacer/transform/cap.rb +50 -0
  108. data/lib/pacer/transform/gather.rb +9 -0
  109. data/lib/pacer/transform/has_count_cap.rb +41 -0
  110. data/lib/pacer/transform/join.rb +181 -0
  111. data/lib/pacer/transform/map.rb +23 -0
  112. data/lib/pacer/transform/path.rb +50 -0
  113. data/lib/pacer/transform/process.rb +23 -0
  114. data/lib/pacer/transform/scatter.rb +23 -0
  115. data/lib/pacer/transform/sort_section.rb +103 -0
  116. data/lib/pacer/transform/stream_sort.rb +21 -0
  117. data/lib/pacer/transform/stream_uniq.rb +21 -0
  118. data/lib/pacer/transform.rb +16 -0
  119. data/lib/pacer/utils/graph_analysis.rb +112 -0
  120. data/lib/pacer/utils/trie.rb +93 -0
  121. data/lib/pacer/utils/tsort.rb +65 -0
  122. data/lib/pacer/utils/y_files.rb +127 -0
  123. data/lib/pacer/utils.rb +10 -0
  124. data/lib/pacer/version.rb +13 -0
  125. data/lib/pacer/wrappers/edge_wrapper.rb +51 -0
  126. data/lib/pacer/wrappers/element_wrapper.rb +78 -0
  127. data/lib/pacer/wrappers/new_element.rb +106 -0
  128. data/lib/pacer/wrappers/vertex_wrapper.rb +51 -0
  129. data/lib/pacer/wrappers.rb +19 -0
  130. data/lib/pacer-0.9.1.1-standalone.jar +0 -0
  131. data/lib/pacer.rb +290 -0
  132. data/pacer.gemspec +30 -0
  133. data/pom/standalone.xml +22 -0
  134. data/pom.xml +124 -0
  135. data/samples/grateful-dead.xml +26380 -0
  136. data/samples/grateful_dead.rb +63 -0
  137. data/samples/profile.rb +15 -0
  138. data/spec/data/grateful-dead.xml +26380 -0
  139. data/spec/data/pacer.graphml +319 -0
  140. data/spec/pacer/blueprints/dex_spec.rb +172 -0
  141. data/spec/pacer/blueprints/neo4j_spec.rb +177 -0
  142. data/spec/pacer/blueprints/tg_spec.rb +128 -0
  143. data/spec/pacer/core/graph/edges_route_spec.rb +52 -0
  144. data/spec/pacer/core/graph/element_route_spec.rb +46 -0
  145. data/spec/pacer/core/graph/graph_route_spec.rb +94 -0
  146. data/spec/pacer/core/graph/vertices_route_spec.rb +169 -0
  147. data/spec/pacer/core/route_spec.rb +197 -0
  148. data/spec/pacer/filter/collection_filter_spec.rb +19 -0
  149. data/spec/pacer/filter/empty_filter_spec.rb +29 -0
  150. data/spec/pacer/filter/future_filter_spec.rb +97 -0
  151. data/spec/pacer/filter/loop_filter_spec.rb +31 -0
  152. data/spec/pacer/filter/property_filter_spec.rb +111 -0
  153. data/spec/pacer/filter/random_filter_spec.rb +17 -0
  154. data/spec/pacer/filter/uniq_filter_spec.rb +18 -0
  155. data/spec/pacer/filter/where_filter_spec.rb +93 -0
  156. data/spec/pacer/graph/edge_mixin_spec.rb +116 -0
  157. data/spec/pacer/graph/element_mixin_spec.rb +297 -0
  158. data/spec/pacer/graph/graph_mixin_spec.rb +538 -0
  159. data/spec/pacer/graph/index_mixin_spec.rb +0 -0
  160. data/spec/pacer/graph/vertex_mixin_spec.rb +192 -0
  161. data/spec/pacer/pipe/block_filter_pipe_spec.rb +0 -0
  162. data/spec/pacer/pipe/labels_filter_pipe_spec.rb +0 -0
  163. data/spec/pacer/pipe/ruby_pipe_spec.rb +0 -0
  164. data/spec/pacer/pipe/type_filter_pipe_spec.rb +0 -0
  165. data/spec/pacer/route/mixin/base_spec.rb +419 -0
  166. data/spec/pacer/route/mixin/bulk_operations_spec.rb +30 -0
  167. data/spec/pacer/route/mixin/route_operations_spec.rb +127 -0
  168. data/spec/pacer/support/array_list_spec.rb +0 -0
  169. data/spec/pacer/support/enumerable_spec.rb +115 -0
  170. data/spec/pacer/transform/join_spec.rb +138 -0
  171. data/spec/pacer/transform/path_spec.rb +54 -0
  172. data/spec/pacer/utils/tsort_spec.rb +89 -0
  173. data/spec/pacer/wrapper/edge_wrapper_spec.rb +33 -0
  174. data/spec/pacer/wrapper/element_wrapper_spec.rb +169 -0
  175. data/spec/pacer/wrapper/vertex_wrapper_spec.rb +33 -0
  176. data/spec/pacer_spec.rb +0 -0
  177. data/spec/spec_helper.rb +91 -0
  178. data/spec/support/contexts.rb +14 -0
  179. data/spec/support/graph_runner.rb +142 -0
  180. data/spec/support/matchers.rb +19 -0
  181. data/spec/support/use_transactions.rb +31 -0
  182. data/spec/tackle/simple_mixin.rb +21 -0
  183. data/spec/tackle/tinkerpop_graph_mixins.rb +60 -0
  184. metadata +364 -0
@@ -0,0 +1,96 @@
1
+ module Pacer::Core::Graph
2
+
3
+ # Basic methods for routes that may contain both vertices and edges. That can
4
+ # happen as the result of a branched route, for example.
5
+ module MixedRoute
6
+ include ElementRoute
7
+
8
+ # Pass through only vertices.
9
+ def v(*args, &block)
10
+ route = chain_route :element_type => :vertex,
11
+ :pipe_class => Pacer::Pipes::TypeFilterPipe,
12
+ :pipe_args => Pacer::VertexMixin,
13
+ :wrapper => wrapper,
14
+ :extensions => extensions
15
+ Pacer::Route.property_filter(route, args, block)
16
+ end
17
+
18
+ # Pass through only edges.
19
+ def e(*args, &block)
20
+ route = chain_route :element_type => :edge,
21
+ :pipe_class => Pacer::Pipes::TypeFilterPipe,
22
+ :pipe_args => Pacer::EdgeMixin,
23
+ :wrapper => wrapper,
24
+ :extensions => extensions
25
+ Pacer::Route.property_filter(route, args, block)
26
+ end
27
+
28
+ def filter(*args, &block)
29
+ mixed(*args, &block)
30
+ end
31
+
32
+ def mixed(*args, &block)
33
+ route = chain_route :pipe_class => Pacer::Pipes::IdentityPipe
34
+ Pacer::Route.property_filter(route, args, block)
35
+ end
36
+
37
+ # Out edges from matching vertices.
38
+ def out_e(*args, &block)
39
+ v.out_e(*args, &block)
40
+ end
41
+
42
+ # In edges from matching vertices.
43
+ def in_e(*args, &block)
44
+ v.in_e(*args, &block)
45
+ end
46
+
47
+ # All edges from matching vertices.
48
+ def both_e(*args, &block)
49
+ v.both_e(*args, &block)
50
+ end
51
+
52
+ # Out vertices from matching edges.
53
+ def out_v(*args, &block)
54
+ e.out_v(*args, &block)
55
+ end
56
+
57
+ # In vertices from matching edges.
58
+ def in_v(*args, &block)
59
+ e.in_v(*args, &block)
60
+ end
61
+
62
+ # All vertices from matching edges.
63
+ def both_v(*args, &block)
64
+ e.both_v(*args, &block)
65
+ end
66
+
67
+ # Return an iterator of or yield all labels on matching edges.
68
+ def labels(&block)
69
+ e.labels(&block)
70
+ end
71
+
72
+ def element_type
73
+ graph.element_type(:mixed)
74
+ end
75
+
76
+ # Calculate and save result.
77
+ def result(name = nil)
78
+ ids = collect do |element|
79
+ if element.is_a? Pacer::VertexMixin
80
+ [:vertex, element.element_id]
81
+ else
82
+ [:edge, element.element_id]
83
+ end
84
+ end
85
+ args = {
86
+ :graph => graph,
87
+ :element_type => :mixed,
88
+ :extensions => extensions,
89
+ :info => [name, info].compact.join(':')
90
+ }
91
+ ids.to_route(:info => "#{ ids.count } ids").map(args) do |method, id|
92
+ graph.send(method, id)
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,220 @@
1
+ module Pacer::Core::Graph
2
+
3
+ # Basic methods for routes that contain only vertices.
4
+ module VerticesRoute
5
+ import com.tinkerpop.pipes.transform.OutEdgesPipe
6
+ import com.tinkerpop.pipes.transform.OutPipe
7
+ import com.tinkerpop.pipes.transform.InEdgesPipe
8
+ import com.tinkerpop.pipes.transform.InPipe
9
+ import com.tinkerpop.pipes.transform.BothEdgesPipe
10
+ import com.tinkerpop.pipes.transform.BothPipe
11
+
12
+ include ElementRoute
13
+
14
+ # Extends the route with out edges from this route's matching vertices.
15
+ #
16
+ # @param [Array<Hash, String, Symbol, extension>, Hash, String, Symbol, extension] filter see {Pacer::Route#property_filter}
17
+ # If string(s) or symbol(s) are given, they will be treated as edge
18
+ # labels. Unlike other property filters which all must be matched, an
19
+ # edge will pass the filter if it matches any of the given labels.
20
+ # @yield [EdgeMixin(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
21
+ # @return [EdgesRoute]
22
+ def out_e(*filters, &block)
23
+ filters = extract_labels(filters)
24
+ Pacer::Route.property_filter(chain_route(:element_type => :edge,
25
+ :pipe_class => OutEdgesPipe,
26
+ :pipe_args => route_labels,
27
+ :route_name => edge_route_name('outE')),
28
+ filters, block)
29
+ end
30
+
31
+ # Extends the route with vertices via the out edges from this route's matching vertices.
32
+ #
33
+ # @param [Array<Hash, String, Symbol, extension>, Hash, String, Symbol, extension] filter see {Pacer::Route#property_filter}
34
+ # If string(s) or symbol(s) are given, they will be treated as edge
35
+ # labels. Unlike other property filters which all must be matched, an
36
+ # edge will pass the filter if it matches any of the given labels.
37
+ # @yield [VertexMixin(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
38
+ # @return [VerticesRoute]
39
+ def out(*filters, &block)
40
+ filters = extract_labels(filters)
41
+ Pacer::Route.property_filter(chain_route(:element_type => :vertex,
42
+ :pipe_class => OutPipe,
43
+ :pipe_args => route_labels,
44
+ :route_name => edge_route_name('out')),
45
+ filters, block)
46
+ end
47
+
48
+ # Extends the route with in edges from this route's matching vertices.
49
+ #
50
+ # @param [Array<Hash, String, Symbol, extension>, Hash, String, Symbol, extension] filter see {Pacer::Route#property_filter}
51
+ # If string(s) or symbol(s) are given, they will be treated as edge
52
+ # labels. Unlike other property filters which all must be matched, an
53
+ # edge will pass the filter if it matches any of the given labels.
54
+ # @yield [EdgeMixin(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
55
+ # @return [EdgesRoute]
56
+ def in_e(*filters, &block)
57
+ filters = extract_labels(filters)
58
+ Pacer::Route.property_filter(chain_route(:element_type => :edge,
59
+ :pipe_class => InEdgesPipe,
60
+ :pipe_args => route_labels,
61
+ :route_name => edge_route_name('inE')),
62
+ filters, block)
63
+ end
64
+
65
+ # Extends the route with vertices via the in edges from this route's matching vertices.
66
+ #
67
+ # @param [Array<Hash, String, Symbol, extension>, Hash, String, Symbol, extension] filter see {Pacer::Route#property_filter}
68
+ # If string(s) or symbol(s) are given, they will be treated as edge
69
+ # labels. Unlike other property filters which all must be matched, an
70
+ # edge will pass the filter if it matches any of the given labels.
71
+ # @yield [VertexMixin(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
72
+ # @return [VerticesRoute]
73
+ def in(*filters, &block)
74
+ filters = extract_labels(filters)
75
+ Pacer::Route.property_filter(chain_route(:element_type => :vertex,
76
+ :pipe_class => InPipe,
77
+ :pipe_args => route_labels,
78
+ :route_name => edge_route_name('in')),
79
+ filters, block)
80
+ end
81
+
82
+ # Extends the route with all edges from this route's matching vertices.
83
+ #
84
+ # @param [Array<Hash, String, Symbol, extension>, Hash, String, Symbol, extension] filter see {Pacer::Route#property_filter}
85
+ # If string(s) or symbol(s) are given, they will be treated as edge
86
+ # labels. Unlike other property filters which all must be matched, an
87
+ # edge will pass the filter if it matches any of the given labels.
88
+ # @yield [EdgeMixin(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
89
+ # @return [EdgesRoute]
90
+ def both_e(*filters, &block)
91
+ filters = extract_labels(filters)
92
+ Pacer::Route.property_filter(chain_route(:element_type => :edge,
93
+ :pipe_class => BothEdgesPipe,
94
+ :pipe_args => route_labels,
95
+ :route_name => edge_route_name('bothE')),
96
+ filters, block)
97
+ end
98
+
99
+ # Extends the route with vertices via all edges from this route's matching vertices.
100
+ #
101
+ # @param [Array<Hash, String, Symbol, extension>, Hash, String, Symbol, extension] filter see {Pacer::Route#property_filter}
102
+ # If string(s) or symbol(s) are given, they will be treated as edge
103
+ # labels. Unlike other property filters which all must be matched, an
104
+ # edge will pass the filter if it matches any of the given labels.
105
+ # @yield [VertexMixin(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
106
+ # @return [VerticesRoute]
107
+ def both(*filters, &block)
108
+ filters = extract_labels(filters)
109
+ Pacer::Route.property_filter(chain_route(:element_type => :vertex,
110
+ :pipe_class => BothPipe,
111
+ :pipe_args => route_labels,
112
+ :route_name => edge_route_name('both')),
113
+ filters, block)
114
+ end
115
+
116
+ # Extend route with the additional vertex property and block filters.
117
+ #
118
+ # @param [Array<Hash, String, Symbol, extension>, Hash, String, Symbol, extension] filter see {Pacer::Route#property_filter}
119
+ # If string(s) or symbol(s) are given, they will be treated as edge
120
+ # labels. Unlike other property filters which all must be matched, an
121
+ # edge will pass the filter if it matches any of the given labels.
122
+ # @yield [VertexMixin(Extensions::BlockFilterElement)] filter proc, see {Pacer::Route#property_filter}
123
+ # @return [VerticesRoute]
124
+ def v(*filters, &block)
125
+ filter(*filters, &block)
126
+ end
127
+
128
+ # The element type of this route for this graph implementation.
129
+ #
130
+ # @return [element_type(:vertex)] The actual type varies based on
131
+ # which graph is in use.
132
+ def element_type
133
+ graph.element_type(:vertex)
134
+ end
135
+
136
+ # Delete all matching vertices and all edges which link to this
137
+ # vertex.
138
+ def delete!
139
+ uniq.both_e.uniq.bulk_job { |e| e.delete! }
140
+ uniq.bulk_job { |e| e.delete! }
141
+ end
142
+
143
+ # Create associations with the given label from all vertices
144
+ # matching this route to all vertices matching the given
145
+ # to_route. If any properties are given, they will be applied
146
+ # to each created edge.
147
+ #
148
+ # If this route emits more than one element and the to_vertices
149
+ # param also emits (or contains) more than one element, the
150
+ # resulting edges will represent a cross-product between the two
151
+ # collections.
152
+ #
153
+ # If a vertex appears in either the this route or in to_vertices,
154
+ # it will be linked once for each time it appears.
155
+ #
156
+ # @param [#to_s] label the label to use for the new edges
157
+ # @param [VerticesRoute, Enumerable, java.util.Iterator] to_vertices
158
+ # collection of vertices that should have edges connecting them
159
+ # from the source edges.
160
+ # @param optional [Hash] props properties that should be set for
161
+ # each created edge
162
+ # @return [EdgesRoute, nil] includes all created edges or nil if no
163
+ # edges were created
164
+ def add_edges_to(label, to_vertices, props = {})
165
+ case to_vertices
166
+ when Pacer::Core::Route, Enumerable, java.util.Iterator
167
+ else
168
+ to_vertices = [to_vertices].compact
169
+ end
170
+ graph = self.graph
171
+
172
+ has_props = !props.empty?
173
+ edge_ids = []
174
+ counter = 0
175
+ graph.managed_transactions do
176
+ graph.managed_transaction do
177
+ each do |from_v|
178
+ to_vertices.each do |to_v|
179
+ counter += 1
180
+ graph.managed_checkpoint if counter % graph.bulk_job_size == 0
181
+ begin
182
+ edge = graph.create_edge(nil, from_v, to_v, label.to_s, props)
183
+ edge_ids << edge.element_id
184
+ end
185
+ end
186
+ end
187
+ end
188
+ end
189
+ if edge_ids.any?
190
+ edge_ids.id_to_element_route(:based_on => graph.e)
191
+ end
192
+ end
193
+
194
+ def route_labels
195
+ @route_labels
196
+ end
197
+
198
+ protected
199
+
200
+ def edge_route_name(prefix)
201
+ if route_labels.any?
202
+ "#{prefix}(#{route_labels.map { |l| l.to_sym.inspect }.join ', '})"
203
+ else
204
+ prefix
205
+ end
206
+ end
207
+
208
+ def extract_labels(filters)
209
+ filters = Pacer::Route.edge_filters(filters)
210
+ @route_labels = filters.labels
211
+ filters.labels = []
212
+ filters
213
+ end
214
+
215
+ # TODO: move id_pipe_class into the element_type object
216
+ def id_pipe_class
217
+ com.tinkerpop.pipes.transform.IdVertexPipe
218
+ end
219
+ end
220
+ end
@@ -0,0 +1,13 @@
1
+ module Pacer
2
+ module Core
3
+ module Graph
4
+ end
5
+ end
6
+ end
7
+
8
+ require 'pacer/core/graph/graph_route'
9
+ require 'pacer/core/graph/graph_index_route'
10
+ require 'pacer/core/graph/element_route'
11
+ require 'pacer/core/graph/edges_route'
12
+ require 'pacer/core/graph/vertices_route'
13
+ require 'pacer/core/graph/mixed_route'