pacer 0.9.1.1-java → 1.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
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