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
@@ -15,7 +15,11 @@ Run.all :read_only do
15
15
  its(:extensions) { should == v_exts }
16
16
 
17
17
  describe 'instance' do
18
- subject { v_wrapper_class.new pacer }
18
+ subject do
19
+ v = v_wrapper_class.new pacer.element
20
+ v.graph = graph
21
+ v
22
+ end
19
23
  it { should_not be_nil }
20
24
  its(:element) { should_not be_nil }
21
25
  it { should == pacer }
@@ -24,10 +28,293 @@ Run.all :read_only do
24
28
  its(:extensions) { should == v_exts }
25
29
 
26
30
  describe 'with more extensions added' do
27
- subject { v_wrapper_class.new(pacer).add_extensions([Pacer::Utils::TSort]) }
31
+ subject { v_wrapper_class.new(pacer.element).add_extensions([Pacer::Utils::TSort]) }
28
32
  its(:class) { should_not == v_wrapper_class }
29
33
  its(:extensions) { should == v_exts + [Pacer::Utils::TSort] }
30
34
  end
31
35
  end
32
36
  end
33
37
  end
38
+
39
+ module VertexWrapperSpec
40
+ module Project
41
+ def self.route_conditions
42
+ { :type => 'project' }
43
+ end
44
+
45
+ module Vertex
46
+ end
47
+ end
48
+
49
+ module IsRuby
50
+ def self.route_conditions
51
+ { :language => 'ruby' }
52
+ end
53
+
54
+ module Vertex
55
+ end
56
+ end
57
+ end
58
+
59
+ shared_examples_for Pacer::Wrappers::VertexWrapper do
60
+ use_simple_graph_data
61
+
62
+ describe '#v' do
63
+ subject { v0.v }
64
+ it { should be_a_vertices_route }
65
+ its(:element_type) { should == :vertex }
66
+ end
67
+
68
+ describe '#add_extensions' do
69
+ context 'no extensions' do
70
+ subject { v0.add_extensions([]) }
71
+ its('extensions.to_a') { should == [] }
72
+ its(:class) { should == Pacer::Wrappers::VertexWrapper }
73
+ end
74
+
75
+ context 'with extensions' do
76
+ subject { v0.add_extensions([Tackle::SimpleMixin]) }
77
+ its('extensions.to_a') { should == [Tackle::SimpleMixin] }
78
+ it { should be_a(Pacer::Wrappers::ElementWrapper) }
79
+ it { should be_a(Pacer::Wrappers::VertexWrapper) }
80
+ it { should_not be_a(Pacer::Wrappers::EdgeWrapper) }
81
+
82
+ describe '#v' do
83
+ subject { v0.add_extensions([Tackle::SimpleMixin]).v }
84
+ its('extensions.to_a') { should == [Tackle::SimpleMixin] }
85
+ it { should be_a_vertices_route }
86
+ it { should be_a(Tackle::SimpleMixin::Route) }
87
+ end
88
+ end
89
+ end
90
+
91
+ describe '#as?' do
92
+ let(:v) { graph.create_vertex type: 'project' }
93
+ context 'Project' do
94
+ subject { v.as?(VertexWrapperSpec::Project) }
95
+ it { should be_true }
96
+ end
97
+ context 'IsRuby' do
98
+ subject { v.as?(VertexWrapperSpec::IsRuby) }
99
+ it { should_not be_true }
100
+ end
101
+ context 'Project, IsRuby' do
102
+ subject { v.as?(VertexWrapperSpec::Project, VertexWrapperSpec::IsRuby) }
103
+ it { should_not be_true }
104
+ end
105
+ end
106
+
107
+ describe '#as' do
108
+ context 'vertex is a Project' do
109
+ let(:v) { graph.create_vertex type: 'project' }
110
+
111
+ it 'should yield a Project' do
112
+ yielded = false
113
+ v.as(VertexWrapperSpec::Project) do |v2|
114
+ yielded = true
115
+ v2.should == v
116
+ v2.extensions.should include VertexWrapperSpec::Project
117
+ v2.should be_a VertexWrapperSpec::Project::Vertex
118
+ end
119
+ yielded.should be_true
120
+ end
121
+
122
+ it 'should not yield a IsRuby' do
123
+ yielded = false
124
+ v.as(VertexWrapperSpec::IsRuby) do |v2|
125
+ yielded = true
126
+ end
127
+ yielded.should be_false
128
+ end
129
+ end
130
+ end
131
+
132
+ describe '#only_as' do
133
+ context 'able' do
134
+ subject { graph.create_vertex VertexWrapperSpec::IsRuby, type: 'project', language: 'ruby' }
135
+
136
+ its(:extensions) { should include VertexWrapperSpec::IsRuby }
137
+
138
+ it 'should yield a Project' do
139
+ yielded = false
140
+ subject.only_as(VertexWrapperSpec::Project) do |v2|
141
+ yielded = true
142
+ v2.should == subject
143
+ v2.extensions.should == [VertexWrapperSpec::Project]
144
+ v2.should be_a VertexWrapperSpec::Project::Vertex
145
+ end
146
+ yielded.should be_true
147
+ end
148
+ end
149
+
150
+ context 'unable' do
151
+ subject { graph.create_vertex VertexWrapperSpec::IsRuby, language: 'ruby' }
152
+
153
+ it 'should not yield a Project' do
154
+ yielded = false
155
+ subject.only_as(VertexWrapperSpec::Project) do |v2|
156
+ yielded = true
157
+ end
158
+ yielded.should be_false
159
+ end
160
+ end
161
+ end
162
+
163
+ describe '#delete!' do
164
+ before do
165
+ @vertex_id = v0.element_id
166
+ v0.delete!
167
+ c = example.metadata[:graph_commit]
168
+ c.call if c
169
+ end
170
+ it 'should be removed' do
171
+ graph.vertex(@vertex_id).should be_nil
172
+ end
173
+ end
174
+
175
+ contexts(
176
+ 'into new tg' => proc {
177
+ let(:dest) { Pacer.tg }
178
+ },
179
+ 'into graph2' => proc {
180
+ before { pending 'support temporary hash indices for clone/copy' unless graph.features.supportsIndices }
181
+ let(:dest) { graph2 }
182
+ }) do
183
+ describe '#clone_into', :transactions => false do
184
+ subject { v0.clone_into(dest) }
185
+ its(:properties) { should == { 'name' => 'eliza' } }
186
+ its(:graph) { should equal(dest) }
187
+ its('element_id.to_s') { should == v0.element_id.to_s unless graph.features.ignoresSuppliedIds }
188
+ end
189
+
190
+ describe '#copy_into', :transaction => false do
191
+ subject { v1.copy_into(dest) }
192
+ its(:properties) { should == { 'name' => 'darrick' } }
193
+ its(:graph) { should equal(dest) }
194
+ end
195
+ end
196
+
197
+ subject { v0 }
198
+ its(:graph) { should equal(graph) }
199
+ its(:display_name) { should be_nil }
200
+ its(:inspect) { should =~ /#<[VM]\[#{v0.element_id}\]>/ }
201
+ context 'with label proc' do
202
+ before do
203
+ graph.vertex_name = proc { |e| "some name" }
204
+ end
205
+ its(:display_name) { should == "some name" }
206
+ its(:inspect) { should =~ /#<[VM]\[#{ v0.element_id }\] some name>/ }
207
+ end
208
+ it { should_not == v1 }
209
+ it { should == v0 }
210
+ context 'edge with same element id', :transactions => false do
211
+ it { should_not == e0 }
212
+ end
213
+
214
+ context 'with more data' do
215
+ let(:from_v) { graph.create_vertex }
216
+ let(:to_v) { graph.create_vertex }
217
+
218
+ before do
219
+ %w[ a a a b b c ].each do |label|
220
+ v = graph.create_vertex
221
+ graph.create_edge nil, from_v, v, label
222
+ graph.create_edge nil, v, to_v, label
223
+ end
224
+ end
225
+
226
+ describe '#in_edges' do
227
+ specify 'to_v should have 6 in edges' do
228
+ to_v.in_edges.count.should == 6
229
+ end
230
+
231
+ specify 'to_v should have 3 in edges with label a' do
232
+ to_v.in_edges('a').count.should == 3
233
+ end
234
+
235
+ specify 'to_v should have 4 in edges with label a or c' do
236
+ to_v.in_edges('a', 'c').count.should == 4
237
+ end
238
+
239
+ it 'should add an extension' do
240
+ edge = to_v.in_edges(Tackle::SimpleMixin).first
241
+ edge.should be_a(Pacer::Wrappers::EdgeWrapper)
242
+ edge.extensions.should include(Tackle::SimpleMixin)
243
+ end
244
+
245
+ it 'should be able to mix labels and mixins as arguments' do
246
+ edge = to_v.in_edges('a', Tackle::SimpleMixin, 'b').first
247
+ edge.should be_a(Pacer::Wrappers::EdgeWrapper)
248
+ edge.extensions.should include(Tackle::SimpleMixin)
249
+ end
250
+
251
+ it 'should filter correctly with a mix of labels and mixins as arguments' do
252
+ to_v.in_edges('a', Tackle::SimpleMixin, 'b').count.should == 5
253
+ end
254
+ end
255
+
256
+ describe '#out_edges' do
257
+ specify 'from_v should have 6 out edges' do
258
+ from_v.out_edges.count.should == 6
259
+ end
260
+
261
+ specify 'from_v should have 3 out edges with label a' do
262
+ from_v.out_edges('a').count.should == 3
263
+ end
264
+
265
+ specify 'from_v should have 4 out edges with label a or c' do
266
+ from_v.out_edges('a', 'c').count.should == 4
267
+ end
268
+
269
+ it 'should add an extension' do
270
+ edge = from_v.out_edges(Tackle::SimpleMixin).first
271
+ edge.should be_a(Pacer::Wrappers::EdgeWrapper)
272
+ edge.extensions.should include(Tackle::SimpleMixin)
273
+ end
274
+
275
+ it 'should be able to mix labels and mixins as arguments' do
276
+ edge = from_v.out_edges('a', Tackle::SimpleMixin, 'b').first
277
+ edge.should be_a(Pacer::Wrappers::EdgeWrapper)
278
+ edge.extensions.should include(Tackle::SimpleMixin)
279
+ end
280
+
281
+ it 'should filter correctly with a mix of labels and mixins as arguments' do
282
+ from_v.out_edges('a', Tackle::SimpleMixin, 'b').count.should == 5
283
+ end
284
+ end
285
+
286
+ describe '#both_edges' do
287
+ specify 'from_v should have 6 edges' do
288
+ from_v.both_edges.count.should == 6
289
+ end
290
+
291
+ specify 'from_v should have 3 edges with label a' do
292
+ from_v.both_edges('a').count.should == 3
293
+ end
294
+
295
+ specify 'from_v should have 4 edges with label a or c' do
296
+ from_v.both_edges('a', 'c').count.should == 4
297
+ end
298
+
299
+ it 'should add an extension' do
300
+ edge = from_v.both_edges(Tackle::SimpleMixin).first
301
+ edge.should be_a(Pacer::Wrappers::EdgeWrapper)
302
+ edge.extensions.should include(Tackle::SimpleMixin)
303
+ end
304
+
305
+ it 'should be able to mix labels and mixins as arguments' do
306
+ edge = from_v.both_edges('a', Tackle::SimpleMixin, 'b').first
307
+ edge.should be_a(Pacer::Wrappers::EdgeWrapper)
308
+ edge.extensions.should include(Tackle::SimpleMixin)
309
+ end
310
+
311
+ it 'should filter correctly with a mix of labels and mixins as arguments' do
312
+ from_v.both_edges('a', Tackle::SimpleMixin, 'b').count.should == 5
313
+ end
314
+ end
315
+ end
316
+ end
317
+
318
+ Run.all do
319
+ it_uses Pacer::Wrappers::VertexWrapper
320
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,9 @@
1
+ def maybe_require(file)
2
+ require file
3
+ rescue LoadError
4
+ puts "Not using #{ file }"
5
+ end
6
+
1
7
  require "rubygems"
2
8
  require "bundler"
3
9
  Bundler.setup(:default, :development)
@@ -5,6 +11,9 @@ require 'rspec'
5
11
  require 'pacer'
6
12
  require 'set'
7
13
 
14
+ require 'simplecov'
15
+ SimpleCov.start if ENV['COVERAGE']
16
+
8
17
  Dir['./spec/support/**/*.rb'].map {|f| require f}
9
18
  Dir['./spec/tackle/*.rb'].map {|f| require f}
10
19
 
@@ -20,9 +29,9 @@ def in_editor?
20
29
  ENV.has_key?('TM_MODE') || ENV.has_key?('EMACS') || ENV.has_key?('VIM')
21
30
  end
22
31
 
23
- require 'pacer-neo4j'
24
- # require 'pacer-dex'
25
- Pacer::DexGraph = Class.new unless defined? Pacer::DexGraph
32
+ maybe_require 'pacer-neo4j'
33
+ maybe_require 'pacer-orient'
34
+ maybe_require 'pacer-dex'
26
35
 
27
36
  Run = RSpec::GraphRunner.new ENV['GRAPHS']
28
37
 
@@ -38,11 +47,11 @@ def use_pacer_graphml_data(usage_style = :read_write)
38
47
  if usage_style == :read_only
39
48
  let(:setup_data) { }
40
49
  before(:all) do
41
- graph.import 'spec/data/pacer.graphml' if graph
50
+ Pacer::GraphML.import graph, 'spec/data/pacer.graphml' if graph
42
51
  end
43
52
  else
44
53
  let(:setup_data) do
45
- graph.import 'spec/data/pacer.graphml' if graph
54
+ Pacer::GraphML.import graph, 'spec/data/pacer.graphml' if graph
46
55
  end
47
56
  end
48
57
  let(:pangloss) { graph.v(:name => 'pangloss', :type => 'person').first }
@@ -55,11 +64,11 @@ def use_grateful_dead_data(usage_style = :read_write)
55
64
  if usage_style == :read_only
56
65
  let(:setup_data) { }
57
66
  before(:all) do
58
- graph.import 'spec/data/grateful-dead.xml' if graph
67
+ Pacer::GraphML.import graph, 'spec/data/grateful-dead.xml' if graph
59
68
  end
60
69
  else
61
70
  let(:setup_data) do
62
- graph.import 'spec/data/grateful-dead.xml' if graph
71
+ Pacer::GraphML.import graph, 'spec/data/grateful-dead.xml' if graph
63
72
  end
64
73
  end
65
74
  end
@@ -1,4 +1,31 @@
1
+ maybe_require 'pacer-neo4j/rspec'
2
+ maybe_require 'pacer-orient/rspec'
3
+ maybe_require 'pacer-dex/rspec'
4
+
1
5
  class RSpec::GraphRunner
6
+ module Stubs
7
+ def all(*args)
8
+ end
9
+
10
+ def tg(*args)
11
+ end
12
+
13
+ def neo4j(*args)
14
+ end
15
+
16
+ def rg(*args)
17
+ end
18
+
19
+ def multigraph(*args)
20
+ end
21
+
22
+ def dex(*args)
23
+ end
24
+
25
+ def orient(*args)
26
+ end
27
+ end
28
+
2
29
  module Tg
3
30
  def all(usage_style = :read_write, indices = true, &block)
4
31
  tg(usage_style, indices, &block)
@@ -7,21 +34,11 @@ class RSpec::GraphRunner
7
34
  def tg(usage_style = :read_write, indices = true, &block)
8
35
  return unless use_graph? 'tg'
9
36
  describe 'tg' do
10
- let(:graph) do
11
- g = Pacer.tg
12
- unless indices
13
- g.drop_index :vertices
14
- g.drop_index :edges
15
- end
16
- g
17
- end
37
+ let(:graph) { Pacer.tg }
18
38
  let(:graph2) { Pacer.tg }
19
39
  instance_eval(&block)
20
40
  end
21
41
  end
22
-
23
- def dex(*args)
24
- end
25
42
  end
26
43
 
27
44
  module RubyGraph
@@ -37,11 +54,11 @@ class RSpec::GraphRunner
37
54
  protected
38
55
 
39
56
  def ruby_graph
40
- Pacer::RubyGraph.new
57
+ Pacer::PacerGraph.new Pacer::SimpleEncoder, proc { Pacer::RubyGraph.new }
41
58
  end
42
59
 
43
60
  def ruby_graph2
44
- Pacer::RubyGraph.new
61
+ Pacer::PacerGraph.new Pacer::SimpleEncoder, proc { Pacer::RubyGraph.new }
45
62
  end
46
63
  end
47
64
 
@@ -58,17 +75,22 @@ class RSpec::GraphRunner
58
75
  protected
59
76
 
60
77
  def multi_graph
61
- Pacer::MultiGraph.new
78
+ Pacer::MultiGraph.blank
62
79
  end
63
80
 
64
81
  def multi_graph2
65
- Pacer::MultiGraph.new
82
+ Pacer::MultiGraph.blank
66
83
  end
67
84
  end
68
85
 
86
+
87
+ include Stubs
69
88
  include Tg
70
- include RubyGraph
71
- include MultiGraph
89
+ #include RubyGraph
90
+ #include MultiGraph
91
+ include Neo4j if defined? Neo4j
92
+ include Dex if defined? Dex
93
+ include Orient if defined? Orient
72
94
 
73
95
  def initialize(*graphs)
74
96
  @graphs = graphs.map { |s| s.to_s.downcase.split(/\s*,\s*/) }.flatten.map { |s| s.strip }.reject { |s| s == '' }
@@ -94,6 +116,7 @@ protected
94
116
 
95
117
  def for_graph(name, usage_style, indices, transactions, source_graph_1, source_graph_2, unindexed_graph, block)
96
118
  return unless use_graph? name
119
+ clear_graph = proc { |g| clear g }
97
120
  describe name do
98
121
  let(:graph) do
99
122
  if indices
@@ -107,27 +130,32 @@ protected
107
130
  end
108
131
  if usage_style == :read_only
109
132
  before(:all) do
110
- source_graph_1.v.delete!
111
- source_graph_2.v.delete!
112
- unindexed_graph.v.delete! if unindexed_graph
133
+ if indices
134
+ clear_graph.call source_graph_1
135
+ elsif unindexed_graph
136
+ clear_graph.call unindexed_graph
137
+ end
138
+ clear_graph.call source_graph_2
113
139
  end
114
140
  end
115
141
  around do |spec|
116
142
  if usage_style == :read_write
117
- source_graph_1.v.delete!
118
- source_graph_2.v.delete!
119
- unindexed_graph.v.delete! if unindexed_graph
143
+ if indices
144
+ clear_graph.call source_graph_1
145
+ elsif unindexed_graph
146
+ clear_graph.call unindexed_graph
147
+ end
148
+ clear_graph.call source_graph_2
120
149
  end
121
150
  if transactions and spec.use_transactions?
122
- graph.manual_transactions do
123
- graph2.manual_transactions do
151
+ graph.transaction do |g1_commit, g1_rollback|
152
+ graph2.transaction do |_, g2_rollback|
153
+ spec.metadata[:graph_commit] = g1_commit
124
154
  begin
125
- graph.begin_transaction
126
- graph2.begin_transaction
127
155
  spec.run
128
156
  ensure
129
- graph.rollback_transaction rescue nil
130
- graph2.rollback_transaction rescue nil
157
+ g1_rollback.call rescue nil
158
+ g2_rollback.call rescue nil
131
159
  end
132
160
  end
133
161
  end
@@ -138,5 +166,28 @@ protected
138
166
  instance_eval(&block)
139
167
  end
140
168
  end
169
+
170
+ def clear(graph)
171
+ graph.transaction do
172
+ graph.blueprints_graph.getVertices.each do |v|
173
+ begin
174
+ graph.remove_vertex v
175
+ rescue
176
+ end
177
+ end
178
+ graph.indices.each do |idx|
179
+ graph.drop_index idx.index_name
180
+ end
181
+ end
182
+ #if graph.v.any?
183
+ # fail "Graph still has vertices"
184
+ #elsif graph.e.any?
185
+ # fail "Graph still has edges"
186
+ #elsif graph.indices.any?
187
+ # fail "Graph still has indices"
188
+ #elsif graph.key_indices.any?
189
+ # fail "Graph still has key indices"
190
+ #end
191
+ end
141
192
  end
142
193