pacer 0.9.1.1-java

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