pacer 0.9.1.1-java
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +8 -0
- data/.document +5 -0
- data/.gitignore +26 -0
- data/.rspec +1 -0
- data/.rvmrc +0 -0
- data/CONTRIBUTORS +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +24 -0
- data/README.md +187 -0
- data/Rakefile +49 -0
- data/autotest/discover.rb +1 -0
- data/bin/autospec +16 -0
- data/bin/autotest +16 -0
- data/bin/rake +16 -0
- data/bin/rcov +16 -0
- data/bin/rspec +16 -0
- data/bin/yard +16 -0
- data/bin/yardoc +16 -0
- data/lib/pacer/blueprints/extensions.rb +77 -0
- data/lib/pacer/blueprints/multi_graph.rb +121 -0
- data/lib/pacer/blueprints/ruby_graph.rb +199 -0
- data/lib/pacer/blueprints/tg.rb +100 -0
- data/lib/pacer/blueprints.rb +4 -0
- data/lib/pacer/core/graph/edges_route.rb +92 -0
- data/lib/pacer/core/graph/element_route.rb +171 -0
- data/lib/pacer/core/graph/graph_index_route.rb +48 -0
- data/lib/pacer/core/graph/graph_route.rb +55 -0
- data/lib/pacer/core/graph/mixed_route.rb +96 -0
- data/lib/pacer/core/graph/vertices_route.rb +220 -0
- data/lib/pacer/core/graph.rb +13 -0
- data/lib/pacer/core/route.rb +502 -0
- data/lib/pacer/core/side_effect.rb +11 -0
- data/lib/pacer/core.rb +8 -0
- data/lib/pacer/exceptions.rb +11 -0
- data/lib/pacer/extensions/block_filter_element.rb +22 -0
- data/lib/pacer/extensions.rb +6 -0
- data/lib/pacer/filter/block_filter.rb +31 -0
- data/lib/pacer/filter/collection_filter.rb +109 -0
- data/lib/pacer/filter/empty_filter.rb +70 -0
- data/lib/pacer/filter/future_filter.rb +68 -0
- data/lib/pacer/filter/index_filter.rb +30 -0
- data/lib/pacer/filter/loop_filter.rb +95 -0
- data/lib/pacer/filter/object_filter.rb +55 -0
- data/lib/pacer/filter/property_filter/edge_filters.rb +93 -0
- data/lib/pacer/filter/property_filter/filters.rb +269 -0
- data/lib/pacer/filter/property_filter.rb +111 -0
- data/lib/pacer/filter/random_filter.rb +13 -0
- data/lib/pacer/filter/range_filter.rb +104 -0
- data/lib/pacer/filter/uniq_filter.rb +12 -0
- data/lib/pacer/filter/where_filter/node_visitor.rb +280 -0
- data/lib/pacer/filter/where_filter.rb +47 -0
- data/lib/pacer/filter.rb +17 -0
- data/lib/pacer/function_resolver.rb +43 -0
- data/lib/pacer/graph/edge_mixin.rb +127 -0
- data/lib/pacer/graph/element_mixin.rb +202 -0
- data/lib/pacer/graph/graph_indices_mixin.rb +93 -0
- data/lib/pacer/graph/graph_mixin.rb +361 -0
- data/lib/pacer/graph/graph_transactions_mixin.rb +207 -0
- data/lib/pacer/graph/index_mixin.rb +30 -0
- data/lib/pacer/graph/vertex_mixin.rb +119 -0
- data/lib/pacer/graph.rb +14 -0
- data/lib/pacer/pipe/blackbox_pipeline.rb +48 -0
- data/lib/pacer/pipe/block_filter_pipe.rb +38 -0
- data/lib/pacer/pipe/collection_filter_pipe.rb +10 -0
- data/lib/pacer/pipe/cross_product_transform_pipe.rb +48 -0
- data/lib/pacer/pipe/enumerable_pipe.rb +30 -0
- data/lib/pacer/pipe/expandable_pipe.rb +63 -0
- data/lib/pacer/pipe/id_collection_filter_pipe.rb +33 -0
- data/lib/pacer/pipe/is_empty_pipe.rb +30 -0
- data/lib/pacer/pipe/is_unique_pipe.rb +61 -0
- data/lib/pacer/pipe/label_collection_filter_pipe.rb +21 -0
- data/lib/pacer/pipe/label_prefix_pipe.rb +21 -0
- data/lib/pacer/pipe/loop_pipe.rb +86 -0
- data/lib/pacer/pipe/map_pipe.rb +36 -0
- data/lib/pacer/pipe/never_pipe.rb +9 -0
- data/lib/pacer/pipe/process_pipe.rb +37 -0
- data/lib/pacer/pipe/property_comparison_pipe.rb +40 -0
- data/lib/pacer/pipe/ruby_pipe.rb +25 -0
- data/lib/pacer/pipe/simple_visitor_pipe.rb +43 -0
- data/lib/pacer/pipe/stream_sort_pipe.rb +84 -0
- data/lib/pacer/pipe/stream_uniq_pipe.rb +33 -0
- data/lib/pacer/pipe/type_filter_pipe.rb +22 -0
- data/lib/pacer/pipe/unary_transform_pipe.rb +59 -0
- data/lib/pacer/pipe/variable_store_iterator_wrapper.rb +26 -0
- data/lib/pacer/pipe/visitor_pipe.rb +67 -0
- data/lib/pacer/pipes.rb +61 -0
- data/lib/pacer/route/mixin/bulk_operations.rb +52 -0
- data/lib/pacer/route/mixin/route_operations.rb +107 -0
- data/lib/pacer/route/mixin/variable_route_module.rb +26 -0
- data/lib/pacer/route/mixins.rb +3 -0
- data/lib/pacer/route.rb +228 -0
- data/lib/pacer/routes.rb +6 -0
- data/lib/pacer/side_effect/aggregate.rb +31 -0
- data/lib/pacer/side_effect/counted.rb +30 -0
- data/lib/pacer/side_effect/group_count.rb +44 -0
- data/lib/pacer/side_effect/is_unique.rb +32 -0
- data/lib/pacer/side_effect/section.rb +25 -0
- data/lib/pacer/side_effect/visitor.rb +37 -0
- data/lib/pacer/side_effect.rb +11 -0
- data/lib/pacer/support/array_list.rb +28 -0
- data/lib/pacer/support/enumerable.rb +100 -0
- data/lib/pacer/support/hash.rb +9 -0
- data/lib/pacer/support/iterator_mixins.rb +110 -0
- data/lib/pacer/support/native_exception.rb +22 -0
- data/lib/pacer/support/proc.rb +16 -0
- data/lib/pacer/support.rb +10 -0
- data/lib/pacer/transform/cap.rb +50 -0
- data/lib/pacer/transform/gather.rb +9 -0
- data/lib/pacer/transform/has_count_cap.rb +41 -0
- data/lib/pacer/transform/join.rb +181 -0
- data/lib/pacer/transform/map.rb +23 -0
- data/lib/pacer/transform/path.rb +50 -0
- data/lib/pacer/transform/process.rb +23 -0
- data/lib/pacer/transform/scatter.rb +23 -0
- data/lib/pacer/transform/sort_section.rb +103 -0
- data/lib/pacer/transform/stream_sort.rb +21 -0
- data/lib/pacer/transform/stream_uniq.rb +21 -0
- data/lib/pacer/transform.rb +16 -0
- data/lib/pacer/utils/graph_analysis.rb +112 -0
- data/lib/pacer/utils/trie.rb +93 -0
- data/lib/pacer/utils/tsort.rb +65 -0
- data/lib/pacer/utils/y_files.rb +127 -0
- data/lib/pacer/utils.rb +10 -0
- data/lib/pacer/version.rb +13 -0
- data/lib/pacer/wrappers/edge_wrapper.rb +51 -0
- data/lib/pacer/wrappers/element_wrapper.rb +78 -0
- data/lib/pacer/wrappers/new_element.rb +106 -0
- data/lib/pacer/wrappers/vertex_wrapper.rb +51 -0
- data/lib/pacer/wrappers.rb +19 -0
- data/lib/pacer-0.9.1.1-standalone.jar +0 -0
- data/lib/pacer.rb +290 -0
- data/pacer.gemspec +30 -0
- data/pom/standalone.xml +22 -0
- data/pom.xml +124 -0
- data/samples/grateful-dead.xml +26380 -0
- data/samples/grateful_dead.rb +63 -0
- data/samples/profile.rb +15 -0
- data/spec/data/grateful-dead.xml +26380 -0
- data/spec/data/pacer.graphml +319 -0
- data/spec/pacer/blueprints/dex_spec.rb +172 -0
- data/spec/pacer/blueprints/neo4j_spec.rb +177 -0
- data/spec/pacer/blueprints/tg_spec.rb +128 -0
- data/spec/pacer/core/graph/edges_route_spec.rb +52 -0
- data/spec/pacer/core/graph/element_route_spec.rb +46 -0
- data/spec/pacer/core/graph/graph_route_spec.rb +94 -0
- data/spec/pacer/core/graph/vertices_route_spec.rb +169 -0
- data/spec/pacer/core/route_spec.rb +197 -0
- data/spec/pacer/filter/collection_filter_spec.rb +19 -0
- data/spec/pacer/filter/empty_filter_spec.rb +29 -0
- data/spec/pacer/filter/future_filter_spec.rb +97 -0
- data/spec/pacer/filter/loop_filter_spec.rb +31 -0
- data/spec/pacer/filter/property_filter_spec.rb +111 -0
- data/spec/pacer/filter/random_filter_spec.rb +17 -0
- data/spec/pacer/filter/uniq_filter_spec.rb +18 -0
- data/spec/pacer/filter/where_filter_spec.rb +93 -0
- data/spec/pacer/graph/edge_mixin_spec.rb +116 -0
- data/spec/pacer/graph/element_mixin_spec.rb +297 -0
- data/spec/pacer/graph/graph_mixin_spec.rb +538 -0
- data/spec/pacer/graph/index_mixin_spec.rb +0 -0
- data/spec/pacer/graph/vertex_mixin_spec.rb +192 -0
- data/spec/pacer/pipe/block_filter_pipe_spec.rb +0 -0
- data/spec/pacer/pipe/labels_filter_pipe_spec.rb +0 -0
- data/spec/pacer/pipe/ruby_pipe_spec.rb +0 -0
- data/spec/pacer/pipe/type_filter_pipe_spec.rb +0 -0
- data/spec/pacer/route/mixin/base_spec.rb +419 -0
- data/spec/pacer/route/mixin/bulk_operations_spec.rb +30 -0
- data/spec/pacer/route/mixin/route_operations_spec.rb +127 -0
- data/spec/pacer/support/array_list_spec.rb +0 -0
- data/spec/pacer/support/enumerable_spec.rb +115 -0
- data/spec/pacer/transform/join_spec.rb +138 -0
- data/spec/pacer/transform/path_spec.rb +54 -0
- data/spec/pacer/utils/tsort_spec.rb +89 -0
- data/spec/pacer/wrapper/edge_wrapper_spec.rb +33 -0
- data/spec/pacer/wrapper/element_wrapper_spec.rb +169 -0
- data/spec/pacer/wrapper/vertex_wrapper_spec.rb +33 -0
- data/spec/pacer_spec.rb +0 -0
- data/spec/spec_helper.rb +91 -0
- data/spec/support/contexts.rb +14 -0
- data/spec/support/graph_runner.rb +142 -0
- data/spec/support/matchers.rb +19 -0
- data/spec/support/use_transactions.rb +31 -0
- data/spec/tackle/simple_mixin.rb +21 -0
- data/spec/tackle/tinkerpop_graph_mixins.rb +60 -0
- metadata +364 -0
@@ -0,0 +1,169 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pacer/graph/element_mixin_spec'
|
3
|
+
|
4
|
+
Run.all do
|
5
|
+
# This runs about 500 specs, basically it should test all the ways
|
6
|
+
# that wrappers act the same as native elements
|
7
|
+
describe Pacer::Wrappers::ElementWrapper do
|
8
|
+
it_uses Pacer::ElementMixin do
|
9
|
+
let(:v0) { graph.create_vertex(Tackle::SimpleMixin, :name => 'eliza') }
|
10
|
+
let(:v1) { graph.create_vertex(Tackle::SimpleMixin, :name => 'darrick') }
|
11
|
+
let(:e0) { graph.create_edge nil, v0, v1, :links, Tackle::SimpleMixin }
|
12
|
+
let(:e1) { graph.create_edge nil, v0, v1, :relinks, Tackle::SimpleMixin }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe Pacer, '.wrap_vertex' do
|
18
|
+
before { Pacer.edge_wrapper Tackle::SimpleMixin }
|
19
|
+
subject { Pacer.vertex_wrapper Tackle::SimpleMixin }
|
20
|
+
its(:name) { should =~ /^Pacer::Wrap::/ }
|
21
|
+
its(:ancestors) { should include Pacer::Wrappers::VertexWrapper }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe Pacer, '.wrap_vertex' do
|
25
|
+
before { Pacer.vertex_wrapper Tackle::SimpleMixin }
|
26
|
+
subject { Pacer.edge_wrapper Tackle::SimpleMixin }
|
27
|
+
its(:name) { should =~ /^Pacer::Wrap::/ }
|
28
|
+
its(:ancestors) { should include Pacer::Wrappers::EdgeWrapper }
|
29
|
+
end
|
30
|
+
|
31
|
+
Run.tg :read_only do
|
32
|
+
use_pacer_graphml_data :read_only
|
33
|
+
|
34
|
+
describe Pacer::Wrappers::ElementWrapper do
|
35
|
+
subject { Pacer.vertex_wrapper Tackle::SimpleMixin }
|
36
|
+
|
37
|
+
its(:name) { should =~ /^Pacer::Wrap::/ }
|
38
|
+
its(:extensions) { should == [Tackle::SimpleMixin] }
|
39
|
+
|
40
|
+
describe '.clear_cache' do
|
41
|
+
before do
|
42
|
+
subject.const_set :ORIGINAL, true
|
43
|
+
Pacer.vertex_wrapper(Tackle::SimpleMixin).const_defined?(:ORIGINAL).should be_true
|
44
|
+
Pacer::Wrappers::ElementWrapper.clear_cache
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should get rid of the Pacer::Wrap namespace' do
|
48
|
+
Pacer.const_defined?(:Wrap).should be_false
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should not be the same object if redefined' do
|
52
|
+
# if the wrapper is redefined identically, you can't use a normal
|
53
|
+
# comparison to see if it's actually been redefined.
|
54
|
+
Pacer.vertex_wrapper(Tackle::SimpleMixin).const_defined?(:ORIGINAL).should be_false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'extension ordering' do
|
59
|
+
before do
|
60
|
+
Pacer::Wrappers::ElementWrapper.clear_cache
|
61
|
+
end
|
62
|
+
subject { Pacer.vertex_wrapper TP::Person, Tackle::SimpleMixin, TP::Coder }
|
63
|
+
|
64
|
+
its(:extensions) { should == [TP::Person, Tackle::SimpleMixin, TP::Coder] }
|
65
|
+
it 'should have the ancestors set in the correct order' do
|
66
|
+
# Ruby searches for methods down this list, so order is
|
67
|
+
# important for method overrides.
|
68
|
+
subject.ancestors[0...6].should == [
|
69
|
+
Pacer::Wrap::VertexWrapperTP_PersonTackle_SimpleMixinTP_Coder,
|
70
|
+
TP::Coder::Route,
|
71
|
+
Tackle::SimpleMixin::Vertex,
|
72
|
+
Tackle::SimpleMixin::Route,
|
73
|
+
TP::Person::Route,
|
74
|
+
Pacer::Wrappers::VertexWrapper,
|
75
|
+
]
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should preserve the order once it is established for that combination of extensions' do
|
79
|
+
subject.ancestors.should == Pacer.vertex_wrapper(TP::Coder, TP::Person, Tackle::SimpleMixin).ancestors
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'should preserve extension order if a route uses the wrapper and adds more extensions' do
|
83
|
+
let(:wrapper) { Pacer.vertex_wrapper TP::Person, Tackle::SimpleMixin, TP::Coder }
|
84
|
+
subject do
|
85
|
+
route = graph.v(wrapper, Pacer::Utils::TSort)
|
86
|
+
first = route.first
|
87
|
+
first.should_not be_nil
|
88
|
+
first.class
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'should have ancestors in the correct order' do
|
92
|
+
subject.ancestors[0...9].should == [
|
93
|
+
Pacer::Wrap::VertexWrapperTP_PersonTackle_SimpleMixinTP_CoderPacer_Utils_TSort,
|
94
|
+
Pacer::Utils::TSort::Vertex,
|
95
|
+
Pacer::Utils::TSort::Route,
|
96
|
+
TSort,
|
97
|
+
TP::Coder::Route,
|
98
|
+
Tackle::SimpleMixin::Vertex,
|
99
|
+
Tackle::SimpleMixin::Route,
|
100
|
+
TP::Person::Route,
|
101
|
+
Pacer::Wrappers::VertexWrapper,
|
102
|
+
]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
context 'should preserve extension order in a block filter' do
|
107
|
+
subject do
|
108
|
+
klass = nil
|
109
|
+
route = graph.v(TP::Person, Tackle::SimpleMixin, TP::Coder) { |e| klass = e.class }
|
110
|
+
route.first.should_not be_nil
|
111
|
+
klass
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'should have ancestors in the correct order' do
|
115
|
+
subject.ancestors[0...7].should == [
|
116
|
+
Pacer::Wrap::VertexWrapperTP_PersonTackle_SimpleMixinTP_CoderPacer_Extensions_BlockFilterElement,
|
117
|
+
Pacer::Extensions::BlockFilterElement::Route,
|
118
|
+
TP::Coder::Route,
|
119
|
+
Tackle::SimpleMixin::Vertex,
|
120
|
+
Tackle::SimpleMixin::Route,
|
121
|
+
TP::Person::Route,
|
122
|
+
Pacer::Wrappers::VertexWrapper,
|
123
|
+
]
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context 'should be in a different order if cleared and defined differently' do
|
128
|
+
before { Pacer::Wrappers::ElementWrapper.clear_cache }
|
129
|
+
subject { Pacer.vertex_wrapper Tackle::SimpleMixin, TP::Person, TP::Coder }
|
130
|
+
|
131
|
+
its(:extensions) { should == [Tackle::SimpleMixin, TP::Person, TP::Coder] }
|
132
|
+
it 'should have the ancestors set in the correct order' do
|
133
|
+
# Ruby searches for methods down this list, so order is
|
134
|
+
# important for method overrides.
|
135
|
+
subject.ancestors[0...6].should == [
|
136
|
+
Pacer::Wrap::VertexWrapperTackle_SimpleMixinTP_PersonTP_Coder,
|
137
|
+
TP::Coder::Route,
|
138
|
+
TP::Person::Route,
|
139
|
+
Tackle::SimpleMixin::Vertex,
|
140
|
+
Tackle::SimpleMixin::Route,
|
141
|
+
Pacer::Wrappers::VertexWrapper,
|
142
|
+
]
|
143
|
+
end
|
144
|
+
|
145
|
+
context 'should preserve extension order if a route adds more extensions' do
|
146
|
+
subject do
|
147
|
+
klass = nil
|
148
|
+
route = graph.v(Tackle::SimpleMixin, TP::Person, TP::Coder) { |e| klass = e.class }
|
149
|
+
route.first.should_not be_nil
|
150
|
+
klass
|
151
|
+
end
|
152
|
+
|
153
|
+
it { should_not be_nil }
|
154
|
+
it 'should have ancestors in the correct order' do
|
155
|
+
subject.ancestors[0...7].should == [
|
156
|
+
Pacer::Wrap::VertexWrapperTackle_SimpleMixinTP_PersonTP_CoderPacer_Extensions_BlockFilterElement,
|
157
|
+
Pacer::Extensions::BlockFilterElement::Route,
|
158
|
+
TP::Coder::Route,
|
159
|
+
TP::Person::Route,
|
160
|
+
Tackle::SimpleMixin::Vertex,
|
161
|
+
Tackle::SimpleMixin::Route,
|
162
|
+
Pacer::Wrappers::VertexWrapper,
|
163
|
+
]
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
Run.all :read_only do
|
4
|
+
use_pacer_graphml_data :read_only
|
5
|
+
|
6
|
+
describe Pacer::Wrappers::VertexWrapper do
|
7
|
+
|
8
|
+
let(:v_exts) { [Tackle::SimpleMixin, TP::Project] }
|
9
|
+
let(:v_wrapper_class) { Pacer::Wrappers::VertexWrapper.wrapper_for v_exts }
|
10
|
+
|
11
|
+
subject { v_wrapper_class }
|
12
|
+
|
13
|
+
it { should_not be_nil }
|
14
|
+
its(:route_conditions) { should == { type: 'project' } }
|
15
|
+
its(:extensions) { should == v_exts }
|
16
|
+
|
17
|
+
describe 'instance' do
|
18
|
+
subject { v_wrapper_class.new pacer }
|
19
|
+
it { should_not be_nil }
|
20
|
+
its(:element) { should_not be_nil }
|
21
|
+
it { should == pacer }
|
22
|
+
it { should_not equal pacer }
|
23
|
+
its(:element_id) { should == pacer.element_id }
|
24
|
+
its(:extensions) { should == v_exts }
|
25
|
+
|
26
|
+
describe 'with more extensions added' do
|
27
|
+
subject { v_wrapper_class.new(pacer).add_extensions([Pacer::Utils::TSort]) }
|
28
|
+
its(:class) { should_not == v_wrapper_class }
|
29
|
+
its(:extensions) { should == v_exts + [Pacer::Utils::TSort] }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/spec/pacer_spec.rb
ADDED
File without changes
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler"
|
3
|
+
Bundler.setup(:default, :development)
|
4
|
+
require 'rspec'
|
5
|
+
require 'pacer'
|
6
|
+
require 'set'
|
7
|
+
|
8
|
+
Dir['./spec/support/**/*.rb'].map {|f| require f}
|
9
|
+
Dir['./spec/tackle/*.rb'].map {|f| require f}
|
10
|
+
|
11
|
+
include Pacer::Routes
|
12
|
+
|
13
|
+
class RSpec::Core::ExampleGroup
|
14
|
+
def self.run_all(reporter=nil)
|
15
|
+
run(reporter || NullObject.new)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def in_editor?
|
20
|
+
ENV.has_key?('TM_MODE') || ENV.has_key?('EMACS') || ENV.has_key?('VIM')
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'pacer-neo4j'
|
24
|
+
# require 'pacer-dex'
|
25
|
+
Pacer::DexGraph = Class.new unless defined? Pacer::DexGraph
|
26
|
+
|
27
|
+
Run = RSpec::GraphRunner.new ENV['GRAPHS']
|
28
|
+
|
29
|
+
def use_simple_graph_data
|
30
|
+
let(:setup_data) { e0; e1 }
|
31
|
+
let(:v0) { graph.create_vertex :name => 'eliza' }
|
32
|
+
let(:v1) { graph.create_vertex :name => 'darrick' }
|
33
|
+
let(:e0) { graph.create_edge nil, v0, v1, :links }
|
34
|
+
let(:e1) { graph.create_edge nil, v0, v1, :relinks }
|
35
|
+
end
|
36
|
+
|
37
|
+
def use_pacer_graphml_data(usage_style = :read_write)
|
38
|
+
if usage_style == :read_only
|
39
|
+
let(:setup_data) { }
|
40
|
+
before(:all) do
|
41
|
+
graph.import 'spec/data/pacer.graphml' if graph
|
42
|
+
end
|
43
|
+
else
|
44
|
+
let(:setup_data) do
|
45
|
+
graph.import 'spec/data/pacer.graphml' if graph
|
46
|
+
end
|
47
|
+
end
|
48
|
+
let(:pangloss) { graph.v(:name => 'pangloss', :type => 'person').first }
|
49
|
+
let(:pacer) { graph.v(:name => 'pacer', :type => 'project').first }
|
50
|
+
let(:people) { graph.v(:type => 'person') }
|
51
|
+
let(:pangloss_wrote_pacer) { pangloss.out_e(:wrote) { |e| e.in_vertex == pacer }.first }
|
52
|
+
end
|
53
|
+
|
54
|
+
def use_grateful_dead_data(usage_style = :read_write)
|
55
|
+
if usage_style == :read_only
|
56
|
+
let(:setup_data) { }
|
57
|
+
before(:all) do
|
58
|
+
graph.import 'spec/data/grateful-dead.xml' if graph
|
59
|
+
end
|
60
|
+
else
|
61
|
+
let(:setup_data) do
|
62
|
+
graph.import 'spec/data/grateful-dead.xml' if graph
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
RSpec.configure do |c|
|
68
|
+
c.color_enabled = !in_editor?
|
69
|
+
c.filter_run :focus => true
|
70
|
+
c.run_all_when_everything_filtered = true
|
71
|
+
Pacer.hide_route_elements = true
|
72
|
+
Pacer.verbose = false
|
73
|
+
c.mock_with :rr
|
74
|
+
|
75
|
+
c.alias_it_should_behave_like_to :it_uses, '-'
|
76
|
+
|
77
|
+
puts "Using JRuby #{ JRUBY_VERSION } in #{ RUBY_VERSION } mode."
|
78
|
+
puts Run.inspect
|
79
|
+
|
80
|
+
# Not sure what this does: ...
|
81
|
+
# c.filter_run_excluding :ruby => lambda {|version|
|
82
|
+
# case version.to_s
|
83
|
+
# when "!jruby"
|
84
|
+
# RUBY_ENGINE != "jruby"
|
85
|
+
# when /^> (.*)/
|
86
|
+
# !(RUBY_VERSION.to_s > $1)
|
87
|
+
# else
|
88
|
+
# !(RUBY_VERSION.to_s =~ /^#{version.to_s}/)
|
89
|
+
# end
|
90
|
+
# }
|
91
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
class RSpec::GraphRunner
|
2
|
+
module Tg
|
3
|
+
def all(usage_style = :read_write, indices = true, &block)
|
4
|
+
tg(usage_style, indices, &block)
|
5
|
+
end
|
6
|
+
|
7
|
+
def tg(usage_style = :read_write, indices = true, &block)
|
8
|
+
return unless use_graph? 'tg'
|
9
|
+
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
|
18
|
+
let(:graph2) { Pacer.tg }
|
19
|
+
instance_eval(&block)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def dex(*args)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module RubyGraph
|
28
|
+
def all(usage_style = :read_write, indices = true, &block)
|
29
|
+
super
|
30
|
+
rg(usage_style, indices, &block)
|
31
|
+
end
|
32
|
+
|
33
|
+
def rg(usage_style = :read_write, indices = true, &block)
|
34
|
+
for_graph('rg', usage_style, indices, false, ruby_graph, ruby_graph2, nil, block)
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
|
39
|
+
def ruby_graph
|
40
|
+
Pacer::RubyGraph.new
|
41
|
+
end
|
42
|
+
|
43
|
+
def ruby_graph2
|
44
|
+
Pacer::RubyGraph.new
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
module MultiGraph
|
49
|
+
def all(usage_style = :read_write, indices = true, &block)
|
50
|
+
super
|
51
|
+
multigraph(usage_style, indices, &block)
|
52
|
+
end
|
53
|
+
|
54
|
+
def multigraph(usage_style = :read_write, indices = true, &block)
|
55
|
+
for_graph('multigraph', usage_style, indices, false, multi_graph, multi_graph2, nil, block)
|
56
|
+
end
|
57
|
+
|
58
|
+
protected
|
59
|
+
|
60
|
+
def multi_graph
|
61
|
+
Pacer::MultiGraph.new
|
62
|
+
end
|
63
|
+
|
64
|
+
def multi_graph2
|
65
|
+
Pacer::MultiGraph.new
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
include Tg
|
70
|
+
include RubyGraph
|
71
|
+
include MultiGraph
|
72
|
+
|
73
|
+
def initialize(*graphs)
|
74
|
+
@graphs = graphs.map { |s| s.to_s.downcase.split(/\s*,\s*/) }.flatten.map { |s| s.strip }.reject { |s| s == '' }
|
75
|
+
end
|
76
|
+
|
77
|
+
def inspect
|
78
|
+
if @graphs.empty?
|
79
|
+
"Testing all graphs."
|
80
|
+
else
|
81
|
+
"Testing graphs: #{ @graphs.join ', ' }."
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def use_graph?(name)
|
86
|
+
if @graphs.empty?
|
87
|
+
true
|
88
|
+
else
|
89
|
+
@graphs.include? name
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
protected
|
94
|
+
|
95
|
+
def for_graph(name, usage_style, indices, transactions, source_graph_1, source_graph_2, unindexed_graph, block)
|
96
|
+
return unless use_graph? name
|
97
|
+
describe name do
|
98
|
+
let(:graph) do
|
99
|
+
if indices
|
100
|
+
source_graph_1
|
101
|
+
else
|
102
|
+
unindexed_graph
|
103
|
+
end
|
104
|
+
end
|
105
|
+
let(:graph2) do
|
106
|
+
source_graph_2
|
107
|
+
end
|
108
|
+
if usage_style == :read_only
|
109
|
+
before(:all) do
|
110
|
+
source_graph_1.v.delete!
|
111
|
+
source_graph_2.v.delete!
|
112
|
+
unindexed_graph.v.delete! if unindexed_graph
|
113
|
+
end
|
114
|
+
end
|
115
|
+
around do |spec|
|
116
|
+
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
|
120
|
+
end
|
121
|
+
if transactions and spec.use_transactions?
|
122
|
+
graph.manual_transactions do
|
123
|
+
graph2.manual_transactions do
|
124
|
+
begin
|
125
|
+
graph.begin_transaction
|
126
|
+
graph2.begin_transaction
|
127
|
+
spec.run
|
128
|
+
ensure
|
129
|
+
graph.rollback_transaction rescue nil
|
130
|
+
graph2.rollback_transaction rescue nil
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
else
|
135
|
+
spec.run
|
136
|
+
end
|
137
|
+
end
|
138
|
+
instance_eval(&block)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Core
|
3
|
+
module Matchers
|
4
|
+
def fail
|
5
|
+
raise_error(::RSpec::Expectations::ExpectationNotMetError)
|
6
|
+
end
|
7
|
+
|
8
|
+
def fail_with(message)
|
9
|
+
raise_error(::RSpec::Expectations::ExpectationNotMetError, message)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
RSpec::Matchers.define :be_one_of do |*list|
|
16
|
+
match do |item|
|
17
|
+
list.include? item
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Core
|
3
|
+
class Example
|
4
|
+
module ProcsyTransactions
|
5
|
+
def use_transactions?
|
6
|
+
find_metadata(metadata, :transactions) != false
|
7
|
+
end
|
8
|
+
|
9
|
+
def find_metadata(hash, key)
|
10
|
+
return unless hash.is_a? Hash
|
11
|
+
if hash.key? key
|
12
|
+
hash[key]
|
13
|
+
elsif hash.key? :example_group
|
14
|
+
find_metadata(hash[:example_group], key)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
if not defined? Procsy or Procsy.class == Module
|
20
|
+
# RSpec version >= '2.5.0'
|
21
|
+
module Procsy
|
22
|
+
include ProcsyTransactions
|
23
|
+
end
|
24
|
+
else
|
25
|
+
class Procsy
|
26
|
+
include ProcsyTransactions
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Tackle
|
2
|
+
module SimpleMixin
|
3
|
+
module Route
|
4
|
+
def route_mixin_method
|
5
|
+
true
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module Vertex
|
10
|
+
def vertex_mixin_method
|
11
|
+
true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module Edge
|
16
|
+
def edge_mixin_method
|
17
|
+
true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module TP
|
2
|
+
module Person
|
3
|
+
def self.route_conditions
|
4
|
+
{ :type => 'person' }
|
5
|
+
end
|
6
|
+
|
7
|
+
module Route
|
8
|
+
def projects
|
9
|
+
out_e.in_v(Project)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
class Project
|
16
|
+
def self.route_conditions
|
17
|
+
{ :type => 'project' }
|
18
|
+
end
|
19
|
+
|
20
|
+
module Route
|
21
|
+
def people
|
22
|
+
in_e.out_v(Person)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class Pangloss
|
28
|
+
def self.route(base)
|
29
|
+
base.v(:name => 'pangloss')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module Coder
|
34
|
+
module Route
|
35
|
+
def projects
|
36
|
+
out(Project, Software)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
module Software
|
42
|
+
module Route
|
43
|
+
def coders
|
44
|
+
self.in(Coder)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
module Wrote
|
50
|
+
def self.route_conditions
|
51
|
+
{ label: 'wrote' }
|
52
|
+
end
|
53
|
+
|
54
|
+
module Edge
|
55
|
+
def writer
|
56
|
+
out_vertex
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|