pacer 0.9.1.1-java → 1.0.0-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 (152) hide show
  1. data/.autotest +4 -1
  2. data/.gitignore +4 -0
  3. data/.rspec +1 -1
  4. data/Gemfile-dev +33 -0
  5. data/Gemfile-release +4 -0
  6. data/README.md +27 -9
  7. data/Rakefile +26 -8
  8. data/bin/autotest +1 -1
  9. data/lib/pacer/blueprints/multi_graph.rb +7 -19
  10. data/lib/pacer/blueprints/ruby_graph.rb +77 -52
  11. data/lib/pacer/blueprints/tg.rb +6 -93
  12. data/lib/pacer/blueprints.rb +0 -1
  13. data/lib/pacer/core/graph/edges_route.rb +10 -12
  14. data/lib/pacer/core/graph/element_route.rb +14 -21
  15. data/lib/pacer/core/graph/graph_index_route.rb +12 -8
  16. data/lib/pacer/core/graph/graph_route.rb +2 -5
  17. data/lib/pacer/core/graph/mixed_route.rb +3 -5
  18. data/lib/pacer/core/graph/vertices_route.rb +26 -27
  19. data/lib/pacer/core/route.rb +35 -66
  20. data/lib/pacer/exceptions.rb +13 -6
  21. data/lib/pacer/extensions/block_filter_element.rb +0 -5
  22. data/lib/pacer/filter/collection_filter.rb +9 -2
  23. data/lib/pacer/filter/empty_filter.rb +12 -3
  24. data/lib/pacer/filter/future_filter.rb +5 -5
  25. data/lib/pacer/filter/loop_filter.rb +7 -13
  26. data/lib/pacer/filter/object_filter.rb +10 -16
  27. data/lib/pacer/filter/property_filter/filters.rb +134 -93
  28. data/lib/pacer/filter/property_filter.rb +22 -19
  29. data/lib/pacer/filter/where_filter/node_visitor.rb +47 -26
  30. data/lib/pacer/filter/where_filter.rb +24 -3
  31. data/lib/pacer/function_resolver.rb +7 -2
  32. data/lib/pacer/graph/graph_ml.rb +39 -0
  33. data/lib/pacer/graph/graph_transactions_mixin.rb +107 -175
  34. data/lib/pacer/graph/pacer_graph.rb +438 -0
  35. data/lib/pacer/graph/simple_encoder.rb +20 -0
  36. data/lib/pacer/graph/yaml_encoder.rb +81 -0
  37. data/lib/pacer/graph.rb +8 -10
  38. data/lib/pacer/pipe/blackbox_pipeline.rb +11 -4
  39. data/lib/pacer/pipe/block_filter_pipe.rb +5 -22
  40. data/lib/pacer/pipe/cross_product_transform_pipe.rb +5 -7
  41. data/lib/pacer/pipe/edges_pipe.rb +22 -0
  42. data/lib/pacer/pipe/enumerable_pipe.rb +3 -9
  43. data/lib/pacer/pipe/expandable_pipe.rb +2 -14
  44. data/lib/pacer/pipe/id_collection_filter_pipe.rb +2 -8
  45. data/lib/pacer/pipe/is_empty_pipe.rb +5 -12
  46. data/lib/pacer/pipe/is_unique_pipe.rb +3 -13
  47. data/lib/pacer/pipe/label_collection_filter_pipe.rb +1 -7
  48. data/lib/pacer/pipe/label_prefix_pipe.rb +0 -6
  49. data/lib/pacer/pipe/loop_pipe.rb +27 -25
  50. data/lib/pacer/pipe/never_pipe.rb +1 -1
  51. data/lib/pacer/pipe/path_wrapping_pipe.rb +40 -0
  52. data/lib/pacer/pipe/process_pipe.rb +2 -20
  53. data/lib/pacer/pipe/property_comparison_pipe.rb +0 -6
  54. data/lib/pacer/pipe/ruby_pipe.rb +10 -3
  55. data/lib/pacer/pipe/simple_visitor_pipe.rb +12 -11
  56. data/lib/pacer/pipe/stream_sort_pipe.rb +1 -7
  57. data/lib/pacer/pipe/stream_uniq_pipe.rb +0 -6
  58. data/lib/pacer/pipe/type_filter_pipe.rb +1 -7
  59. data/lib/pacer/pipe/unary_transform_pipe.rb +6 -8
  60. data/lib/pacer/pipe/unwrapping_pipe.rb +13 -0
  61. data/lib/pacer/pipe/vertices_pipe.rb +22 -0
  62. data/lib/pacer/pipe/visitor_pipe.rb +3 -7
  63. data/lib/pacer/pipe/wrapping_pipe.rb +37 -0
  64. data/lib/pacer/pipes.rb +17 -12
  65. data/lib/pacer/route/mixin/bulk_operations.rb +8 -9
  66. data/lib/pacer/route/mixin/route_operations.rb +17 -11
  67. data/lib/pacer/route/mixins.rb +0 -1
  68. data/lib/pacer/route.rb +198 -121
  69. data/lib/pacer/side_effect/aggregate.rb +22 -2
  70. data/lib/pacer/side_effect/as.rb +73 -0
  71. data/lib/pacer/side_effect/group_count.rb +0 -3
  72. data/lib/pacer/side_effect/is_unique.rb +7 -6
  73. data/lib/pacer/side_effect.rb +1 -1
  74. data/lib/pacer/support/enumerable.rb +14 -12
  75. data/lib/pacer/support/nil_class.rb +5 -0
  76. data/lib/pacer/support/proc.rb +2 -2
  77. data/lib/pacer/support.rb +1 -1
  78. data/lib/pacer/transform/cap.rb +1 -1
  79. data/lib/pacer/transform/has_count_cap.rb +1 -1
  80. data/lib/pacer/transform/join.rb +20 -16
  81. data/lib/pacer/transform/map.rb +6 -2
  82. data/lib/pacer/transform/path.rb +44 -20
  83. data/lib/pacer/transform/sort_section.rb +58 -51
  84. data/lib/pacer/utils/tsort.rb +7 -2
  85. data/lib/pacer/utils.rb +0 -1
  86. data/lib/pacer/version.rb +4 -3
  87. data/lib/pacer/visitors/section.rb +42 -0
  88. data/lib/pacer/visitors/visits_section.rb +32 -0
  89. data/lib/pacer/visitors.rb +7 -0
  90. data/lib/pacer/wrappers/edge_wrapper.rb +164 -11
  91. data/lib/pacer/wrappers/element_wrapper.rb +133 -8
  92. data/lib/pacer/wrappers/index_wrapper.rb +47 -0
  93. data/lib/pacer/wrappers/vertex_wrapper.rb +175 -12
  94. data/lib/pacer/wrappers/wrapper_selector.rb +40 -0
  95. data/lib/pacer/wrappers/wrapping_pipe_function.rb +90 -0
  96. data/lib/pacer/wrappers.rb +3 -1
  97. data/lib/pacer-1.0.0-standalone.jar +0 -0
  98. data/lib/pacer.rb +13 -47
  99. data/pacer.gemspec +0 -8
  100. data/pom.xml +10 -3
  101. data/spec/pacer/blueprints/dex_spec.rb +12 -26
  102. data/spec/pacer/blueprints/neo4j_spec.rb +14 -28
  103. data/spec/pacer/blueprints/tg_spec.rb +6 -54
  104. data/spec/pacer/core/graph/edges_route_spec.rb +1 -1
  105. data/spec/pacer/core/graph/element_route_spec.rb +2 -2
  106. data/spec/pacer/core/graph/graph_route_spec.rb +2 -2
  107. data/spec/pacer/core/graph/vertices_route_spec.rb +10 -3
  108. data/spec/pacer/core/route_spec.rb +35 -58
  109. data/spec/pacer/filter/empty_filter_spec.rb +5 -6
  110. data/spec/pacer/filter/future_filter_spec.rb +8 -8
  111. data/spec/pacer/filter/loop_filter_spec.rb +120 -6
  112. data/spec/pacer/filter/object_filter_spec.rb +15 -0
  113. data/spec/pacer/filter/property_filter/filters_spec.rb +169 -0
  114. data/spec/pacer/filter/property_filter_spec.rb +15 -12
  115. data/spec/pacer/filter/uniq_filter_spec.rb +1 -1
  116. data/spec/pacer/filter/where_filter_spec.rb +55 -7
  117. data/spec/pacer/graph/{graph_mixin_spec.rb → pacer_graph_spec.rb} +114 -185
  118. data/spec/pacer/route/mixin/base_spec.rb +36 -35
  119. data/spec/pacer/route/mixin/route_operations_spec.rb +4 -46
  120. data/spec/pacer/side_effect/as_spec.rb +34 -0
  121. data/spec/pacer/support/enumerable_spec.rb +6 -6
  122. data/spec/pacer/transform/join_spec.rb +7 -5
  123. data/spec/pacer/transform/map_spec.rb +55 -0
  124. data/spec/pacer/transform/path_spec.rb +30 -15
  125. data/spec/pacer/transform/process_spec.rb +42 -0
  126. data/spec/pacer/transform/sort_section_spec.rb +82 -0
  127. data/spec/pacer/wrapper/edge_wrapper_spec.rb +122 -2
  128. data/spec/pacer/wrapper/element_wrapper_spec.rb +289 -3
  129. data/spec/pacer/wrapper/vertex_wrapper_spec.rb +289 -2
  130. data/spec/spec_helper.rb +16 -7
  131. data/spec/support/graph_runner.rb +80 -29
  132. data/tags +1165 -0
  133. metadata +46 -107
  134. data/.rvmrc +0 -0
  135. data/lib/pacer/blueprints/extensions.rb +0 -77
  136. data/lib/pacer/graph/edge_mixin.rb +0 -127
  137. data/lib/pacer/graph/element_mixin.rb +0 -202
  138. data/lib/pacer/graph/graph_indices_mixin.rb +0 -93
  139. data/lib/pacer/graph/graph_mixin.rb +0 -361
  140. data/lib/pacer/graph/index_mixin.rb +0 -30
  141. data/lib/pacer/graph/vertex_mixin.rb +0 -119
  142. data/lib/pacer/pipe/map_pipe.rb +0 -36
  143. data/lib/pacer/pipe/variable_store_iterator_wrapper.rb +0 -26
  144. data/lib/pacer/route/mixin/variable_route_module.rb +0 -26
  145. data/lib/pacer/side_effect/section.rb +0 -25
  146. data/lib/pacer/support/iterator_mixins.rb +0 -110
  147. data/lib/pacer/wrappers/new_element.rb +0 -106
  148. data/lib/pacer-0.9.1.1-standalone.jar +0 -0
  149. data/spec/pacer/graph/edge_mixin_spec.rb +0 -116
  150. data/spec/pacer/graph/element_mixin_spec.rb +0 -297
  151. data/spec/pacer/graph/index_mixin_spec.rb +0 -0
  152. data/spec/pacer/graph/vertex_mixin_spec.rb +0 -192
@@ -1,202 +0,0 @@
1
- module Pacer
2
- # This module is mixed into the raw Blueprints Edge and Vertex classes
3
- # from any graph implementation.
4
- #
5
- # Adds more convenient/rubyish methods and adds support for extensions
6
- # to some methods where needed.
7
- module ElementMixin
8
- class << self
9
- protected
10
- def included(target)
11
- target.send :include, Enumerable unless target.is_a? Enumerable
12
- end
13
- end
14
-
15
- # Which extensions does this element have?
16
- # @return [Set[extensions]]
17
- def extensions
18
- Set[]
19
- end
20
-
21
- # See {Core::Graph::VerticesRoute#v}
22
- # @return [Route]
23
- def v(*args)
24
- route = super
25
- if args.empty? and not block_given?
26
- route.add_extensions extensions
27
- end
28
- route
29
- end
30
-
31
- # See {Core::Graph::EdgesRoute#e}
32
- # @return [Route]
33
- def e(*args)
34
- route = super
35
- if args.empty? and not block_given?
36
- route.add_extensions extensions
37
- end
38
- route
39
- end
40
-
41
- # For internal use only.
42
- #
43
- # Specify the graph the element belongs to.
44
- def graph=(graph)
45
- @graph = graph
46
- end
47
-
48
- # The graph the element belongs to.
49
- #
50
- # Used to help prevent objects from different graphs from being
51
- # accidentally associated, as well as to get graph-specific data for
52
- # the element.
53
- #
54
- # @return [GraphMixin]
55
- def graph
56
- @graph
57
- end
58
-
59
- # Convenience method to retrieve a property by name.
60
- #
61
- # @param [#to_s] key the property name
62
- # @return [Object]
63
- def [](key)
64
- if key.is_a? Array
65
- key.map { |k| self[k] }
66
- else
67
- value = element.getProperty(key.to_s)
68
- if graph
69
- graph.decode_property(value)
70
- else
71
- value
72
- end
73
- end
74
- end
75
-
76
- # Convenience method to set a property by name to the given value.
77
- # @param [#to_s] key the property name
78
- # @param [Object] value the value to set the property to
79
- def []=(key, value)
80
- value = graph.encode_property(value) if graph
81
- key = key.to_s
82
- if value
83
- if value != element.getProperty(key)
84
- element.setProperty(key, value)
85
- end
86
- else
87
- element.removeProperty(key) if element.getPropertyKeys.include? key
88
- end
89
- end
90
-
91
- # Specialize result to return self for elements.
92
- # @return [ElementMixin] self
93
- def result(name = nil)
94
- self
95
- end
96
-
97
- # Query whether the current node belongs to the given graph.
98
- #
99
- # @param [Object] g the object to compare to {#graph}
100
- def from_graph?(g)
101
- g.equal? graph
102
- end
103
-
104
- # Returns a hash of property values by name.
105
- #
106
- # @return [Hash]
107
- def properties
108
- element.getPropertyKeys.inject({}) { |h, name| h[name] = element.getProperty(name); h }
109
- end
110
-
111
- # Replace the element's properties with the given hash
112
- #
113
- # @param [Hash] props the element's new properties
114
- def properties=(props)
115
- (element.getPropertyKeys - props.keys.collect { |k| k.to_s }).each do |key|
116
- element.removeProperty key
117
- end
118
- props.each do |key, value|
119
- self[key] = value
120
- end
121
- end
122
-
123
- def property_keys
124
- getPropertyKeys
125
- end
126
-
127
- # The id of the current element
128
- # @return [Object] element id (type varies by graph implementation.
129
- def element_id
130
- element.getId
131
- end
132
-
133
- # Sort objects semi arbitrarily based on {VertexMixin#display_name}
134
- # or {EdgeMixin#display_name}.
135
- # @param other
136
- #
137
- # @return [Fixnum]
138
- def <=>(other)
139
- display_name.to_s <=> other.display_name.to_s
140
- end
141
-
142
- # Test equality to another object.
143
- #
144
- # Elements are equal if they are the same type and have the same id
145
- # and the same graph, regardless of extensions.
146
- #
147
- # If the graphdb instantiates multiple copies of the same element
148
- # this method will return true when comparing them.
149
- #
150
- # @see #eql?
151
- # @param other
152
- def ==(other)
153
- if other.respond_to?(:element) and other.element.class == element.class and other.element_id == element_id
154
- if graph and other.graph
155
- other.graph == graph
156
- else
157
- true
158
- end
159
- end
160
- end
161
-
162
- # Test object equality of the element instance.
163
- #
164
- # Wrappers/extensions (if any) are ignored, the underlying element
165
- # only is compared
166
- #
167
- # If the graphdb instantiates multiple copies of the same element
168
- # this method will return false when comparing them.
169
- #
170
- # @see #==
171
- # @param other
172
- def eql?(other)
173
- if other.respond_to? :element
174
- super(other.element)
175
- else
176
- super
177
- end
178
- end
179
-
180
- # Yields the element once or returns an enumerator if no block is
181
- # given. Follows Ruby conventions and is meant to be used along
182
- # with the Enumerable mixin.
183
- #
184
- # @yield [ElementMixin] this element
185
- # @return [Enumerator] only if no block is given
186
- def each
187
- if block_given?
188
- yield self
189
- else
190
- [self].to_enum
191
- end
192
- end
193
-
194
- # Returns the underlying element. For unwrapped elements, returns
195
- # self.
196
- # @return [ElementMixin]
197
- def element
198
- self
199
- end
200
- alias no_extensions element
201
- end
202
- end
@@ -1,93 +0,0 @@
1
- module Pacer
2
- module GraphIndicesMixin
3
- # Return an index by name.
4
- #
5
- # @param [#to_s] name of the index
6
- # @param [:vertex, :edge, element type] type guarantees that the index returned is of the type specified.
7
- # @param [Hash] opts
8
- # @option opts [true] :create create the index if it doesn't exist
9
- # @return [Pacer::IndexMixin]
10
- def index_name(name, type = nil, opts = {})
11
- name = name.to_s
12
- if type
13
- idx = getIndices.detect { |i| i.index_name == name and i.index_class == index_class(type) }
14
- if idx.nil? and opts[:create]
15
- idx = createManualIndex name, element_type(type)
16
- end
17
- else
18
- idx = getIndices.detect { |i| i.index_name == name }
19
- end
20
- idx.graph = self if idx
21
- idx
22
- end
23
-
24
- # Drops and recreates an automatic index with the same keys.
25
- #
26
- # In some earlier graphdb versions it was possible to corrupt
27
- # automatic indices. This method provided a fast way to recreate
28
- # them.
29
- #
30
- # @param [Index] old_index this index will be dropped
31
- # @return [Index] rebuilt index
32
- def rebuild_automatic_index(old_index)
33
- name = old_index.getIndexName
34
- index_class = old_index.getIndexClass
35
- keys = old_index.getAutoIndexKeys
36
- drop_index name
37
- build_automatic_index(name, index_class, keys)
38
- end
39
-
40
- # Creates a new automatic index.
41
- #
42
- # @param [#to_s] name index name
43
- # @param [:vertex, :edge, element type] et element type
44
- # @param [[#to_s], nil] keys The keys to be indexed. If nil then
45
- # index all keys
46
- def build_automatic_index(name, et, keys = nil)
47
- if keys and not keys.is_a? java.util.Set
48
- set = java.util.HashSet.new
49
- keys.each { |k| set.add k.to_s }
50
- keys = set
51
- end
52
- index = createAutomaticIndex name.to_s, index_class(et), keys
53
- index.graph = self
54
- if index_class(et) == element_type(:vertex).java_class
55
- v.bulk_job do |v|
56
- Pacer::Utils::AutomaticIndexHelper.addElement(index, v)
57
- end
58
- else
59
- e.bulk_job do |e|
60
- Pacer::Utils::AutomaticIndexHelper.addElement(index, e)
61
- end
62
- end
63
- index
64
- end
65
-
66
- # Return an object that can be compared to the return value of
67
- # Index#index_class.
68
- def index_class(et)
69
- element_type(et).java_class.to_java
70
- end
71
-
72
- # Does this graph allow me to create or modify automatic indices?
73
- #
74
- # Specific graphs may override this method to return false.
75
- def supports_automatic_indices?
76
- true
77
- end
78
-
79
- # Does this graph allow me to create or modify manual indices?
80
- #
81
- # Specific graphs may override this method to return false.
82
- def supports_manual_indices?
83
- true
84
- end
85
-
86
- # Does this graph support indices on edges?
87
- #
88
- # Specific graphs may override this method to return false.
89
- def supports_edge_indices?
90
- true
91
- end
92
- end
93
- end
@@ -1,361 +0,0 @@
1
- module Pacer
2
- # Methods to be mixed into Blueprints Graph objects from any
3
- # implementation.
4
- #
5
- # Adds more convenient/rubyish methods and adds support for extensions
6
- # to some methods where needed.
7
- module GraphMixin
8
- def self.included(target)
9
- target.class_eval do
10
- protected :addVertex, :addEdge
11
- protected :add_vertex, :add_edge rescue nil
12
- protected :getVertex, :getEdge
13
- protected :get_vertex, :get_edge rescue nil
14
- end
15
- end
16
-
17
- attr_accessor :in_bulk_job
18
-
19
- def graph_id
20
- @graph_id = Pacer.next_graph_id unless defined? @graph_id
21
- @graph_id
22
- end
23
-
24
- # Get a vertex by id.
25
- #
26
- # @overload vertex(id)
27
- # @param [element id] id
28
- # @overload vertex(id, *modules)
29
- # @param [element id] id
30
- # @param [Module, Class] *modules extensions to add to the returned
31
- # vertex.
32
- def vertex(id, *modules)
33
- v = getVertex(id) rescue nil
34
- if v
35
- wrapper = modules.detect { |obj| obj.ancestors.include? Pacer::Wrappers::VertexWrapper }
36
- if wrapper
37
- v = wrapper.new v
38
- modules.delete wrapper
39
- end
40
- v.graph = self
41
- v.add_extensions modules
42
- else
43
- v
44
- end
45
- end
46
-
47
- # Get an edge by id.
48
- #
49
- # @overload edge(id)
50
- # @param [element id] id
51
- # @overload edge(id, *modules)
52
- # @param [element id] id
53
- # @param [Module, Class] *modules extensions to add to the returned
54
- # edge.
55
- def edge(id, *modules)
56
- v = getEdge(id) rescue nil
57
- if v
58
- wrapper = modules.detect { |obj| obj.ancestors.include? Pacer::Wrappers::EdgeWrapper }
59
- if wrapper
60
- v = wrapper.new v
61
- modules.delete wrapper
62
- end
63
- v.graph = self
64
- v.add_extensions modules
65
- end
66
- end
67
-
68
- # Create a vertex in the graph.
69
- #
70
- # @overload create_vertex(*args)
71
- # @param [extension, Hash] *args extension (Module/Class) arguments will be
72
- # added to the current vertex. A Hash will be
73
- # treated as element properties.
74
- # @overload create_vertex(id, *args)
75
- # @param [element id] id the desired element id. Some graphs
76
- # ignore this.
77
- # @param [extension, Hash] *args extension (Module/Class) arguments will be
78
- # added to the current vertex. A Hash will be
79
- # treated as element properties.
80
- def create_vertex(*args)
81
- id, wrapper, modules, props = id_modules_properties(args)
82
- vertex = creating_elements { addVertex(id) }
83
- vertex = wrapper.new vertex if wrapper
84
- vertex.graph = self
85
- props.each { |k, v| vertex[k.to_s] = v } if props
86
- if modules.any?
87
- vertex.add_extensions modules
88
- else
89
- vertex
90
- end
91
- end
92
-
93
- # Create an edge in the graph.
94
- #
95
- # @param [element id] id some graphs allow you to specify your own edge id.
96
- # @param [Pacer::VertexMixin] from_v the new edge's out_vertex
97
- # @param [Pacer::VertexMixin] to_v the new edge's in_vertex
98
- # @param [#to_s] label the edge label
99
- # @param [extension, Hash] *args extension (Module/Class) arguments will be
100
- # added to the returned edge. A Hash will be
101
- # treated as element properties.
102
- #
103
- # @todo make id param optional
104
- def create_edge(id, from_v, to_v, label, *args)
105
- _, wrapper, modules, props = id_modules_properties(args)
106
- edge = creating_elements { addEdge(id, from_v.element, to_v.element, label) }
107
- edge = wrapper.new edge if wrapper
108
- edge.graph = self
109
- props.each { |k, v| edge[k.to_s] = v } if props
110
- if modules.any?
111
- edge.add_extensions modules
112
- else
113
- edge
114
- end
115
- end
116
-
117
- # Import the data in a GraphML file.
118
- #
119
- # Will fail if the data already exsts in the current graph.
120
- #
121
- # @param [String] path
122
- def import(path)
123
- path = File.expand_path path
124
- begin
125
- stream = java.net.URL.new(path).open_stream
126
- rescue java.net.MalformedURLException
127
- stream = java.io.FileInputStream.new path
128
- end
129
- creating_elements do
130
- com.tinkerpop.blueprints.pgm.util.graphml.GraphMLReader.input_graph self, stream
131
- end
132
- true
133
- ensure
134
- stream.close if stream
135
- end
136
-
137
- # Export the graph to GraphML
138
- #
139
- # @param [String] path will be replaced if it exists
140
- def export(path)
141
- path = File.expand_path path
142
- stream = java.io.FileOutputStream.new path
143
- com.tinkerpop.blueprints.pgm.util.graphml.GraphMLWriter.outputGraph self, stream
144
- ensure
145
- stream.close if stream
146
- end
147
-
148
- # Set how many elements should go into each transaction in a bulk
149
- # job.
150
- #
151
- # @param [Fixnum] size number of elements
152
- def bulk_job_size=(size)
153
- @bulk_job_size = size
154
- end
155
-
156
- # The currently configured bulk job size.
157
- def bulk_job_size
158
- if defined? @bulk_job_size
159
- @bulk_job_size
160
- else
161
- 5000
162
- end
163
- end
164
-
165
- # Are we currently in the midst of a bulk job?
166
- def in_bulk_job?
167
- @in_bulk_job if defined? @in_bulk_job
168
- end
169
-
170
- # Directly loads an array of vertices by id.
171
- #
172
- # @param [[vertex ids]] ids
173
- # @return [[Pacer::VertexMixin]]
174
- def load_vertices(ids)
175
- ids.map do |id|
176
- vertex id
177
- end.compact
178
- end
179
-
180
- # Directly loads an array of edges by id.
181
- #
182
- # @param [[edge ids]] ids
183
- # @return [[Pacer::EdgeMixin]]
184
- def load_edges(ids)
185
- ids.map do |id|
186
- edge id
187
- end.compact
188
- end
189
-
190
- # The current graph
191
- #
192
- # @return [Graph] returns self
193
- def graph
194
- self
195
- end
196
-
197
- def equals(other)
198
- self == other
199
- end
200
-
201
- # The proc used to name vertices.
202
- #
203
- # @return [Proc]
204
- def vertex_name
205
- @vertex_name if defined? @vertex_name
206
- end
207
-
208
- # Set the proc used to name vertices.
209
- #
210
- # @param [Proc(vertex)] a_proc returns a string given a vertex
211
- def vertex_name=(a_proc)
212
- @vertex_name = a_proc
213
- end
214
-
215
- # The proc used to name edges.
216
- #
217
- # @return [Proc]
218
- def edge_name
219
- @edge_name if defined? @edge_name
220
- end
221
-
222
- # Set the proc used to name edges.
223
- #
224
- # @param [Proc(edge)] a_proc returns a string given an edge
225
- def edge_name=(a_proc)
226
- @edge_name = a_proc
227
- end
228
-
229
- # Is the element type given supported by this graph?
230
- #
231
- # @param [:edge, :vertex, :mixed, element_type, Object] et the
232
- # object we're testing
233
- def element_type?(et)
234
- if [element_type(:vertex), element_type(:edge), element_type(:mixed)].include? element_type(et)
235
- true
236
- else
237
- false
238
- end
239
- end
240
-
241
- # Does this graph support edges where the in_vertex and the
242
- # out_vertex are the same?
243
- #
244
- # Specific graphs may override this method to return false.
245
- def supports_circular_edges?
246
- true
247
- end
248
-
249
- # When creating an element, does this graph allow me to specify the
250
- # element_id?
251
- #
252
- # Specific graphs may override this method to return false.
253
- def supports_custom_element_ids?
254
- true
255
- end
256
-
257
- # Does this graph allow me to create or modify automatic indices?
258
- #
259
- # Specific graphs may override this method to return false.
260
- def supports_automatic_indices?
261
- false
262
- end
263
-
264
- # Does this graph allow me to create or modify manual indices?
265
- #
266
- # Specific graphs may override this method to return false.
267
- def supports_manual_indices?
268
- false
269
- end
270
-
271
- # Does this graph support indices on edges?
272
- #
273
- # Specific graphs may override this method to return false.
274
- def supports_edge_indices?
275
- false
276
- end
277
-
278
- def element_type(et = nil)
279
- return nil unless et
280
- result = if et == vertex_class or et == edge_class or et == element_class
281
- et
282
- else
283
- case et
284
- when :vertex, Pacer::Vertex, VertexMixin
285
- vertex_class
286
- when :edge, Pacer::Edge, EdgeMixin
287
- edge_class
288
- when :mixed, Pacer::Element, ElementMixin
289
- element_class
290
- when :object
291
- Object
292
- else
293
- if et == Object
294
- Object
295
- elsif vertex_class.respond_to? :java_class
296
- if et == vertex_class.java_class.to_java
297
- vertex_class
298
- elsif et == edge_class.java_class.to_java
299
- edge_class
300
- elsif et == Pacer::Vertex.java_class.to_java
301
- vertex_class
302
- elsif et == Pacer::Edge.java_class.to_java
303
- edge_class
304
- end
305
- end
306
- end
307
- end
308
- if result
309
- result
310
- else
311
- raise ArgumentError, 'Element type may be one of :vertex, :edge, :mixed or :object'
312
- end
313
- end
314
-
315
- def sanitize_properties(props)
316
- props
317
- end
318
-
319
- def encode_property(value)
320
- if value.is_a? String
321
- value = value.strip
322
- value unless value == ''
323
- else
324
- value
325
- end
326
- end
327
-
328
- def decode_property(value)
329
- value
330
- end
331
-
332
- def edges
333
- getEdges
334
- end
335
-
336
- protected
337
-
338
- # Helper method to wrap element creation in exception handling.
339
- def creating_elements
340
- begin
341
- yield
342
- rescue NativeException => e
343
- if e.message =~ /already exists/
344
- raise ElementExists, e.message
345
- else
346
- raise
347
- end
348
- end
349
- end
350
-
351
- def id_modules_properties(args)
352
- props = args.last if args.last.is_a? Hash
353
- modules = args.select { |obj| obj.is_a? Module or obj.is_a? Class }
354
- wrapper = modules.detect { |obj| obj.is_a? Class and obj.ancestors.include? Pacer::Wrappers::ElementWrapper }
355
- modules.delete wrapper
356
- id = args.first
357
- id = nil if id == props or modules.include? id or id == wrapper
358
- [id, wrapper, modules, props]
359
- end
360
- end
361
- end
@@ -1,30 +0,0 @@
1
- module Pacer
2
- module IndexMixin
3
- def graph=(graph)
4
- @graph = graph
5
- end
6
-
7
- def graph
8
- @graph if defined? @graph
9
- end
10
-
11
- def first(key, value, extensions = nil)
12
- e = get(key, value).first
13
- if e and (graph or extensions)
14
- e.graph = graph
15
- e.add_extensions extensions
16
- end
17
- e
18
- end
19
-
20
- def all(key, value, extensions = nil)
21
- iter = get(key, value)
22
- if graph or extensions
23
- iter.extend Pacer::Core::Route::IteratorExtensionsMixin
24
- iter.graph = graph
25
- iter.extensions = extensions
26
- end
27
- iter
28
- end
29
- end
30
- end