pacer 0.9.1.1-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. data/.autotest +8 -0
  2. data/.document +5 -0
  3. data/.gitignore +26 -0
  4. data/.rspec +1 -0
  5. data/.rvmrc +0 -0
  6. data/CONTRIBUTORS +5 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.txt +24 -0
  9. data/README.md +187 -0
  10. data/Rakefile +49 -0
  11. data/autotest/discover.rb +1 -0
  12. data/bin/autospec +16 -0
  13. data/bin/autotest +16 -0
  14. data/bin/rake +16 -0
  15. data/bin/rcov +16 -0
  16. data/bin/rspec +16 -0
  17. data/bin/yard +16 -0
  18. data/bin/yardoc +16 -0
  19. data/lib/pacer/blueprints/extensions.rb +77 -0
  20. data/lib/pacer/blueprints/multi_graph.rb +121 -0
  21. data/lib/pacer/blueprints/ruby_graph.rb +199 -0
  22. data/lib/pacer/blueprints/tg.rb +100 -0
  23. data/lib/pacer/blueprints.rb +4 -0
  24. data/lib/pacer/core/graph/edges_route.rb +92 -0
  25. data/lib/pacer/core/graph/element_route.rb +171 -0
  26. data/lib/pacer/core/graph/graph_index_route.rb +48 -0
  27. data/lib/pacer/core/graph/graph_route.rb +55 -0
  28. data/lib/pacer/core/graph/mixed_route.rb +96 -0
  29. data/lib/pacer/core/graph/vertices_route.rb +220 -0
  30. data/lib/pacer/core/graph.rb +13 -0
  31. data/lib/pacer/core/route.rb +502 -0
  32. data/lib/pacer/core/side_effect.rb +11 -0
  33. data/lib/pacer/core.rb +8 -0
  34. data/lib/pacer/exceptions.rb +11 -0
  35. data/lib/pacer/extensions/block_filter_element.rb +22 -0
  36. data/lib/pacer/extensions.rb +6 -0
  37. data/lib/pacer/filter/block_filter.rb +31 -0
  38. data/lib/pacer/filter/collection_filter.rb +109 -0
  39. data/lib/pacer/filter/empty_filter.rb +70 -0
  40. data/lib/pacer/filter/future_filter.rb +68 -0
  41. data/lib/pacer/filter/index_filter.rb +30 -0
  42. data/lib/pacer/filter/loop_filter.rb +95 -0
  43. data/lib/pacer/filter/object_filter.rb +55 -0
  44. data/lib/pacer/filter/property_filter/edge_filters.rb +93 -0
  45. data/lib/pacer/filter/property_filter/filters.rb +269 -0
  46. data/lib/pacer/filter/property_filter.rb +111 -0
  47. data/lib/pacer/filter/random_filter.rb +13 -0
  48. data/lib/pacer/filter/range_filter.rb +104 -0
  49. data/lib/pacer/filter/uniq_filter.rb +12 -0
  50. data/lib/pacer/filter/where_filter/node_visitor.rb +280 -0
  51. data/lib/pacer/filter/where_filter.rb +47 -0
  52. data/lib/pacer/filter.rb +17 -0
  53. data/lib/pacer/function_resolver.rb +43 -0
  54. data/lib/pacer/graph/edge_mixin.rb +127 -0
  55. data/lib/pacer/graph/element_mixin.rb +202 -0
  56. data/lib/pacer/graph/graph_indices_mixin.rb +93 -0
  57. data/lib/pacer/graph/graph_mixin.rb +361 -0
  58. data/lib/pacer/graph/graph_transactions_mixin.rb +207 -0
  59. data/lib/pacer/graph/index_mixin.rb +30 -0
  60. data/lib/pacer/graph/vertex_mixin.rb +119 -0
  61. data/lib/pacer/graph.rb +14 -0
  62. data/lib/pacer/pipe/blackbox_pipeline.rb +48 -0
  63. data/lib/pacer/pipe/block_filter_pipe.rb +38 -0
  64. data/lib/pacer/pipe/collection_filter_pipe.rb +10 -0
  65. data/lib/pacer/pipe/cross_product_transform_pipe.rb +48 -0
  66. data/lib/pacer/pipe/enumerable_pipe.rb +30 -0
  67. data/lib/pacer/pipe/expandable_pipe.rb +63 -0
  68. data/lib/pacer/pipe/id_collection_filter_pipe.rb +33 -0
  69. data/lib/pacer/pipe/is_empty_pipe.rb +30 -0
  70. data/lib/pacer/pipe/is_unique_pipe.rb +61 -0
  71. data/lib/pacer/pipe/label_collection_filter_pipe.rb +21 -0
  72. data/lib/pacer/pipe/label_prefix_pipe.rb +21 -0
  73. data/lib/pacer/pipe/loop_pipe.rb +86 -0
  74. data/lib/pacer/pipe/map_pipe.rb +36 -0
  75. data/lib/pacer/pipe/never_pipe.rb +9 -0
  76. data/lib/pacer/pipe/process_pipe.rb +37 -0
  77. data/lib/pacer/pipe/property_comparison_pipe.rb +40 -0
  78. data/lib/pacer/pipe/ruby_pipe.rb +25 -0
  79. data/lib/pacer/pipe/simple_visitor_pipe.rb +43 -0
  80. data/lib/pacer/pipe/stream_sort_pipe.rb +84 -0
  81. data/lib/pacer/pipe/stream_uniq_pipe.rb +33 -0
  82. data/lib/pacer/pipe/type_filter_pipe.rb +22 -0
  83. data/lib/pacer/pipe/unary_transform_pipe.rb +59 -0
  84. data/lib/pacer/pipe/variable_store_iterator_wrapper.rb +26 -0
  85. data/lib/pacer/pipe/visitor_pipe.rb +67 -0
  86. data/lib/pacer/pipes.rb +61 -0
  87. data/lib/pacer/route/mixin/bulk_operations.rb +52 -0
  88. data/lib/pacer/route/mixin/route_operations.rb +107 -0
  89. data/lib/pacer/route/mixin/variable_route_module.rb +26 -0
  90. data/lib/pacer/route/mixins.rb +3 -0
  91. data/lib/pacer/route.rb +228 -0
  92. data/lib/pacer/routes.rb +6 -0
  93. data/lib/pacer/side_effect/aggregate.rb +31 -0
  94. data/lib/pacer/side_effect/counted.rb +30 -0
  95. data/lib/pacer/side_effect/group_count.rb +44 -0
  96. data/lib/pacer/side_effect/is_unique.rb +32 -0
  97. data/lib/pacer/side_effect/section.rb +25 -0
  98. data/lib/pacer/side_effect/visitor.rb +37 -0
  99. data/lib/pacer/side_effect.rb +11 -0
  100. data/lib/pacer/support/array_list.rb +28 -0
  101. data/lib/pacer/support/enumerable.rb +100 -0
  102. data/lib/pacer/support/hash.rb +9 -0
  103. data/lib/pacer/support/iterator_mixins.rb +110 -0
  104. data/lib/pacer/support/native_exception.rb +22 -0
  105. data/lib/pacer/support/proc.rb +16 -0
  106. data/lib/pacer/support.rb +10 -0
  107. data/lib/pacer/transform/cap.rb +50 -0
  108. data/lib/pacer/transform/gather.rb +9 -0
  109. data/lib/pacer/transform/has_count_cap.rb +41 -0
  110. data/lib/pacer/transform/join.rb +181 -0
  111. data/lib/pacer/transform/map.rb +23 -0
  112. data/lib/pacer/transform/path.rb +50 -0
  113. data/lib/pacer/transform/process.rb +23 -0
  114. data/lib/pacer/transform/scatter.rb +23 -0
  115. data/lib/pacer/transform/sort_section.rb +103 -0
  116. data/lib/pacer/transform/stream_sort.rb +21 -0
  117. data/lib/pacer/transform/stream_uniq.rb +21 -0
  118. data/lib/pacer/transform.rb +16 -0
  119. data/lib/pacer/utils/graph_analysis.rb +112 -0
  120. data/lib/pacer/utils/trie.rb +93 -0
  121. data/lib/pacer/utils/tsort.rb +65 -0
  122. data/lib/pacer/utils/y_files.rb +127 -0
  123. data/lib/pacer/utils.rb +10 -0
  124. data/lib/pacer/version.rb +13 -0
  125. data/lib/pacer/wrappers/edge_wrapper.rb +51 -0
  126. data/lib/pacer/wrappers/element_wrapper.rb +78 -0
  127. data/lib/pacer/wrappers/new_element.rb +106 -0
  128. data/lib/pacer/wrappers/vertex_wrapper.rb +51 -0
  129. data/lib/pacer/wrappers.rb +19 -0
  130. data/lib/pacer-0.9.1.1-standalone.jar +0 -0
  131. data/lib/pacer.rb +290 -0
  132. data/pacer.gemspec +30 -0
  133. data/pom/standalone.xml +22 -0
  134. data/pom.xml +124 -0
  135. data/samples/grateful-dead.xml +26380 -0
  136. data/samples/grateful_dead.rb +63 -0
  137. data/samples/profile.rb +15 -0
  138. data/spec/data/grateful-dead.xml +26380 -0
  139. data/spec/data/pacer.graphml +319 -0
  140. data/spec/pacer/blueprints/dex_spec.rb +172 -0
  141. data/spec/pacer/blueprints/neo4j_spec.rb +177 -0
  142. data/spec/pacer/blueprints/tg_spec.rb +128 -0
  143. data/spec/pacer/core/graph/edges_route_spec.rb +52 -0
  144. data/spec/pacer/core/graph/element_route_spec.rb +46 -0
  145. data/spec/pacer/core/graph/graph_route_spec.rb +94 -0
  146. data/spec/pacer/core/graph/vertices_route_spec.rb +169 -0
  147. data/spec/pacer/core/route_spec.rb +197 -0
  148. data/spec/pacer/filter/collection_filter_spec.rb +19 -0
  149. data/spec/pacer/filter/empty_filter_spec.rb +29 -0
  150. data/spec/pacer/filter/future_filter_spec.rb +97 -0
  151. data/spec/pacer/filter/loop_filter_spec.rb +31 -0
  152. data/spec/pacer/filter/property_filter_spec.rb +111 -0
  153. data/spec/pacer/filter/random_filter_spec.rb +17 -0
  154. data/spec/pacer/filter/uniq_filter_spec.rb +18 -0
  155. data/spec/pacer/filter/where_filter_spec.rb +93 -0
  156. data/spec/pacer/graph/edge_mixin_spec.rb +116 -0
  157. data/spec/pacer/graph/element_mixin_spec.rb +297 -0
  158. data/spec/pacer/graph/graph_mixin_spec.rb +538 -0
  159. data/spec/pacer/graph/index_mixin_spec.rb +0 -0
  160. data/spec/pacer/graph/vertex_mixin_spec.rb +192 -0
  161. data/spec/pacer/pipe/block_filter_pipe_spec.rb +0 -0
  162. data/spec/pacer/pipe/labels_filter_pipe_spec.rb +0 -0
  163. data/spec/pacer/pipe/ruby_pipe_spec.rb +0 -0
  164. data/spec/pacer/pipe/type_filter_pipe_spec.rb +0 -0
  165. data/spec/pacer/route/mixin/base_spec.rb +419 -0
  166. data/spec/pacer/route/mixin/bulk_operations_spec.rb +30 -0
  167. data/spec/pacer/route/mixin/route_operations_spec.rb +127 -0
  168. data/spec/pacer/support/array_list_spec.rb +0 -0
  169. data/spec/pacer/support/enumerable_spec.rb +115 -0
  170. data/spec/pacer/transform/join_spec.rb +138 -0
  171. data/spec/pacer/transform/path_spec.rb +54 -0
  172. data/spec/pacer/utils/tsort_spec.rb +89 -0
  173. data/spec/pacer/wrapper/edge_wrapper_spec.rb +33 -0
  174. data/spec/pacer/wrapper/element_wrapper_spec.rb +169 -0
  175. data/spec/pacer/wrapper/vertex_wrapper_spec.rb +33 -0
  176. data/spec/pacer_spec.rb +0 -0
  177. data/spec/spec_helper.rb +91 -0
  178. data/spec/support/contexts.rb +14 -0
  179. data/spec/support/graph_runner.rb +142 -0
  180. data/spec/support/matchers.rb +19 -0
  181. data/spec/support/use_transactions.rb +31 -0
  182. data/spec/tackle/simple_mixin.rb +21 -0
  183. data/spec/tackle/tinkerpop_graph_mixins.rb +60 -0
  184. metadata +364 -0
@@ -0,0 +1,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
File without changes
@@ -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,14 @@
1
+ module RSpec
2
+ module Core
3
+ module SharedExampleGroup
4
+ def contexts(ctxts, &block)
5
+ ctxts.each do |name, setup_proc|
6
+ context(*[*name]) do
7
+ instance_eval &setup_proc
8
+ instance_eval &block
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ 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