pacer 0.9.1.1-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 (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'