alf-shell 0.13.0

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 (189) hide show
  1. data/CHANGELOG.md +4 -0
  2. data/Gemfile +17 -0
  3. data/Gemfile.lock +35 -0
  4. data/LICENCE.md +22 -0
  5. data/Manifest.txt +13 -0
  6. data/README.md +11 -0
  7. data/Rakefile +11 -0
  8. data/bin/alf +17 -0
  9. data/lib/alf-shell.rb +1 -0
  10. data/lib/alf/shell.rb +48 -0
  11. data/lib/alf/shell/command.rb +21 -0
  12. data/lib/alf/shell/command/exec.rb +16 -0
  13. data/lib/alf/shell/command/help.rb +30 -0
  14. data/lib/alf/shell/command/main.rb +175 -0
  15. data/lib/alf/shell/command/show.rb +49 -0
  16. data/lib/alf/shell/doc_manager.rb +83 -0
  17. data/lib/alf/shell/ext/signature.rb +45 -0
  18. data/lib/alf/shell/from_argv.rb +78 -0
  19. data/lib/alf/shell/loader.rb +2 -0
  20. data/lib/alf/shell/operator.rb +63 -0
  21. data/lib/alf/shell/support.rb +28 -0
  22. data/lib/alf/shell/version.rb +16 -0
  23. data/spec/integration/__database__/group.alf +3 -0
  24. data/spec/integration/__database__/parts.rash +6 -0
  25. data/spec/integration/__database__/suppliers.rash +5 -0
  26. data/spec/integration/__database__/suppliers_csv.csv +6 -0
  27. data/spec/integration/__database__/supplies.rash +12 -0
  28. data/spec/integration/alf/alf.db +0 -0
  29. data/spec/integration/alf/alf_db.cmd +1 -0
  30. data/spec/integration/alf/alf_db.stdout +5 -0
  31. data/spec/integration/alf/alf_e.cmd +1 -0
  32. data/spec/integration/alf/alf_e.stdout +4 -0
  33. data/spec/integration/alf/alf_help.cmd +1 -0
  34. data/spec/integration/alf/alf_help.stdout +72 -0
  35. data/spec/integration/alf/alf_json.cmd +1 -0
  36. data/spec/integration/alf/alf_json.stdout +1 -0
  37. data/spec/integration/alf/alf_r.cmd +1 -0
  38. data/spec/integration/alf/alf_r.stdout +5 -0
  39. data/spec/integration/alf/alf_version.cmd +1 -0
  40. data/spec/integration/alf/alf_version.stdout +2 -0
  41. data/spec/integration/alf/alf_yaml.cmd +1 -0
  42. data/spec/integration/alf/alf_yaml.stdout +22 -0
  43. data/spec/integration/alf/rel.rash +1 -0
  44. data/spec/integration/autonum/autonum_0.cmd +1 -0
  45. data/spec/integration/autonum/autonum_0.stdout +9 -0
  46. data/spec/integration/autonum/autonum_1.cmd +1 -0
  47. data/spec/integration/autonum/autonum_1.stdout +9 -0
  48. data/spec/integration/clip/clip_0.cmd +1 -0
  49. data/spec/integration/clip/clip_0.stdout +9 -0
  50. data/spec/integration/clip/clip_1.cmd +1 -0
  51. data/spec/integration/clip/clip_1.stdout +9 -0
  52. data/spec/integration/coerce/coerce_1.cmd +1 -0
  53. data/spec/integration/coerce/coerce_1.stdout +5 -0
  54. data/spec/integration/compact/compact_0.cmd +1 -0
  55. data/spec/integration/compact/compact_0.stdout +9 -0
  56. data/spec/integration/defaults/defaults_0.cmd +1 -0
  57. data/spec/integration/defaults/defaults_0.stdout +9 -0
  58. data/spec/integration/defaults/defaults_1.cmd +1 -0
  59. data/spec/integration/defaults/defaults_1.stdout +9 -0
  60. data/spec/integration/defaults/defaults_2.cmd +1 -0
  61. data/spec/integration/defaults/defaults_2.stdout +9 -0
  62. data/spec/integration/extend/extend_0.cmd +1 -0
  63. data/spec/integration/extend/extend_0.stdout +16 -0
  64. data/spec/integration/generator/generator_1.cmd +1 -0
  65. data/spec/integration/generator/generator_1.stdout +10 -0
  66. data/spec/integration/generator/generator_2.cmd +1 -0
  67. data/spec/integration/generator/generator_2.stdout +5 -0
  68. data/spec/integration/generator/generator_3.cmd +1 -0
  69. data/spec/integration/generator/generator_3.stdout +5 -0
  70. data/spec/integration/group/group_0.cmd +1 -0
  71. data/spec/integration/group/group_0.stdout +32 -0
  72. data/spec/integration/group/group_1.cmd +1 -0
  73. data/spec/integration/group/group_1.stdout +32 -0
  74. data/spec/integration/help/help_1.cmd +1 -0
  75. data/spec/integration/help/help_1.stdout +25 -0
  76. data/spec/integration/intersect/intersect_0.cmd +1 -0
  77. data/spec/integration/intersect/intersect_0.stdout +9 -0
  78. data/spec/integration/join/join_0.cmd +1 -0
  79. data/spec/integration/join/join_0.stdout +16 -0
  80. data/spec/integration/matching/matching_0.cmd +1 -0
  81. data/spec/integration/matching/matching_0.stdout +8 -0
  82. data/spec/integration/minus/minus_0.cmd +1 -0
  83. data/spec/integration/minus/minus_0.stdout +4 -0
  84. data/spec/integration/not-matching/not-matching_0.cmd +1 -0
  85. data/spec/integration/not-matching/not-matching_0.stdout +5 -0
  86. data/spec/integration/project/project_0.cmd +1 -0
  87. data/spec/integration/project/project_0.stdout +9 -0
  88. data/spec/integration/project/project_1.cmd +1 -0
  89. data/spec/integration/project/project_1.stdout +9 -0
  90. data/spec/integration/quota/quota_0.cmd +1 -0
  91. data/spec/integration/quota/quota_0.stdout +16 -0
  92. data/spec/integration/rank/rank_1.cmd +1 -0
  93. data/spec/integration/rank/rank_1.stdout +10 -0
  94. data/spec/integration/rank/rank_2.cmd +1 -0
  95. data/spec/integration/rank/rank_2.stdout +10 -0
  96. data/spec/integration/rank/rank_3.cmd +1 -0
  97. data/spec/integration/rank/rank_3.stdout +10 -0
  98. data/spec/integration/rank/rank_4.cmd +1 -0
  99. data/spec/integration/rank/rank_4.stdout +6 -0
  100. data/spec/integration/rank/rank_5.cmd +1 -0
  101. data/spec/integration/rank/rank_5.stdout +6 -0
  102. data/spec/integration/rename/rename_0.cmd +1 -0
  103. data/spec/integration/rename/rename_0.stdout +9 -0
  104. data/spec/integration/restrict/restrict_0.cmd +1 -0
  105. data/spec/integration/restrict/restrict_0.stdout +6 -0
  106. data/spec/integration/restrict/restrict_1.cmd +1 -0
  107. data/spec/integration/restrict/restrict_1.stdout +6 -0
  108. data/spec/integration/show/show_base.cmd +1 -0
  109. data/spec/integration/show/show_base.stdout +5 -0
  110. data/spec/integration/show/show_base_sort_1.cmd +1 -0
  111. data/spec/integration/show/show_base_sort_1.stdout +9 -0
  112. data/spec/integration/show/show_base_sort_2.cmd +1 -0
  113. data/spec/integration/show/show_base_sort_2.stdout +9 -0
  114. data/spec/integration/show/show_conflictual.cmd +1 -0
  115. data/spec/integration/show/show_conflictual.stdout +5 -0
  116. data/spec/integration/show/show_ff.cmd +1 -0
  117. data/spec/integration/show/show_ff.stdout +10 -0
  118. data/spec/integration/show/show_rash.cmd +1 -0
  119. data/spec/integration/show/show_rash.stdout +5 -0
  120. data/spec/integration/show/show_rash_pretty.cmd +1 -0
  121. data/spec/integration/show/show_rash_pretty.stdout +30 -0
  122. data/spec/integration/show/show_yaml.cmd +1 -0
  123. data/spec/integration/show/show_yaml.stdout +22 -0
  124. data/spec/integration/sort/sort_0.cmd +1 -0
  125. data/spec/integration/sort/sort_0.stdout +9 -0
  126. data/spec/integration/sort/sort_1.cmd +1 -0
  127. data/spec/integration/sort/sort_1.stdout +9 -0
  128. data/spec/integration/sort/sort_2.cmd +1 -0
  129. data/spec/integration/sort/sort_2.stdout +9 -0
  130. data/spec/integration/sort/sort_3.cmd +1 -0
  131. data/spec/integration/sort/sort_3.stdout +9 -0
  132. data/spec/integration/summarize/summarize_0.cmd +1 -0
  133. data/spec/integration/summarize/summarize_0.stdout +8 -0
  134. data/spec/integration/test_shell.rb +56 -0
  135. data/spec/integration/union/union_0.cmd +1 -0
  136. data/spec/integration/union/union_0.stdout +9 -0
  137. data/spec/integration/unwrap/unwrap_0.cmd +1 -0
  138. data/spec/integration/unwrap/unwrap_0.stdout +9 -0
  139. data/spec/integration/wrap/wrap_0.cmd +1 -0
  140. data/spec/integration/wrap/wrap_0.stdout +9 -0
  141. data/spec/spec_helper.rb +21 -0
  142. data/spec/test_shell.rb +10 -0
  143. data/spec/unit/doc_manager/dynamic.md +1 -0
  144. data/spec/unit/doc_manager/example.md +1 -0
  145. data/spec/unit/doc_manager/example_1.txt +11 -0
  146. data/spec/unit/doc_manager/static.md +1 -0
  147. data/spec/unit/doc_manager/test_call.rb +43 -0
  148. data/spec/unit/ext/signature/test_argv2args.rb +82 -0
  149. data/spec/unit/ext/signature/test_to_shell.rb +103 -0
  150. data/spec/unit/from_argv/test_to_attr_list.rb +30 -0
  151. data/spec/unit/from_argv/test_to_attr_name.rb +27 -0
  152. data/spec/unit/from_argv/test_to_boolean.rb +32 -0
  153. data/spec/unit/from_argv/test_to_heading.rb +37 -0
  154. data/spec/unit/from_argv/test_to_ordering.rb +28 -0
  155. data/spec/unit/from_argv/test_to_predicate.rb +26 -0
  156. data/spec/unit/from_argv/test_to_renaming.rb +23 -0
  157. data/spec/unit/from_argv/test_to_size.rb +32 -0
  158. data/spec/unit/from_argv/test_to_summarization.rb +19 -0
  159. data/spec/unit/from_argv/test_to_tuple_computation.rb +18 -0
  160. data/spec/unit/from_argv/test_to_tuple_expression.rb +38 -0
  161. data/spec/unit/main/test_class_methods.rb +44 -0
  162. data/spec/unit/operator/test_autonum.rb +28 -0
  163. data/spec/unit/operator/test_clip.rb +29 -0
  164. data/spec/unit/operator/test_coerce.rb +22 -0
  165. data/spec/unit/operator/test_compact.rb +16 -0
  166. data/spec/unit/operator/test_defaults.rb +29 -0
  167. data/spec/unit/operator/test_extend.rb +21 -0
  168. data/spec/unit/operator/test_generator.rb +37 -0
  169. data/spec/unit/operator/test_group.rb +32 -0
  170. data/spec/unit/operator/test_infer_heading.rb +16 -0
  171. data/spec/unit/operator/test_intersect.rb +18 -0
  172. data/spec/unit/operator/test_join.rb +18 -0
  173. data/spec/unit/operator/test_matching.rb +18 -0
  174. data/spec/unit/operator/test_minus.rb +18 -0
  175. data/spec/unit/operator/test_not_matching.rb +18 -0
  176. data/spec/unit/operator/test_project.rb +38 -0
  177. data/spec/unit/operator/test_quota.rb +23 -0
  178. data/spec/unit/operator/test_rank.rb +30 -0
  179. data/spec/unit/operator/test_rename.rb +21 -0
  180. data/spec/unit/operator/test_restrict.rb +36 -0
  181. data/spec/unit/operator/test_sort.rb +49 -0
  182. data/spec/unit/operator/test_summarize.rb +30 -0
  183. data/spec/unit/operator/test_ungroup.rb +28 -0
  184. data/spec/unit/operator/test_union.rb +18 -0
  185. data/spec/unit/operator/test_unwrap.rb +28 -0
  186. data/spec/unit/operator/test_wrap.rb +30 -0
  187. data/tasks/gem.rake +8 -0
  188. data/tasks/test.rake +6 -0
  189. metadata +317 -0
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+ module Alf
3
+ describe Shell, ".from_argv(argv, Size)" do
4
+
5
+ subject{ Shell.from_argv(argv, Size) }
6
+
7
+ context 'on an empty array' do
8
+ let(:argv){ [ ] }
9
+ it{ should eq(0) }
10
+ end
11
+
12
+ context 'with a single string' do
13
+ let(:argv){ [ "12" ] }
14
+ it{ should eq(12) }
15
+ end
16
+
17
+ context 'on a big array' do
18
+ let(:argv){ ["12", "hello"] }
19
+ specify{
20
+ lambda{ subject }.should raise_error(Myrrha::Error)
21
+ }
22
+ end
23
+
24
+ context 'when not coercable' do
25
+ let(:argv){ ["hello"] }
26
+ specify{
27
+ lambda{ subject }.should raise_error(Myrrha::Error)
28
+ }
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ module Alf
3
+ describe Shell, ".from_argv(argv, Summarization)" do
4
+
5
+ subject{ Shell.from_argv(argv, Summarization) }
6
+
7
+ context "from an Array" do
8
+ let(:argv){ ["s", "sum{ qty }", "m", "max{ size }"] }
9
+
10
+ it{ should be_a(Summarization) }
11
+
12
+ specify{
13
+ subject.to_hash.keys.to_set.should eq([:s, :m].to_set)
14
+ subject.to_hash.values.all?{|v| v.should be_a(Aggregator)}
15
+ }
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ module Alf
3
+ describe Shell, ".from_argv(argv, TupleComputation)" do
4
+
5
+ subject{ Shell.from_argv(argv, TupleComputation) }
6
+
7
+ describe "from an Array with coercions" do
8
+ let(:argv){ ["hello", "who", "hello2", "2"] }
9
+ let(:expected){
10
+ TupleComputation.new(
11
+ :hello => Alf::TupleExpression.coerce("who"),
12
+ :hello2 => Alf::TupleExpression.coerce("2"))
13
+ }
14
+ it{ should eql(expected) }
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+ module Alf
3
+ describe Shell, ".from_argv(argv, TupleExpression)" do
4
+
5
+ let(:scope) {
6
+ Support::TupleScope.new(:status => 10)
7
+ }
8
+
9
+ subject{ Shell.from_argv(argv, TupleExpression) }
10
+
11
+ context "with a String (1)" do
12
+ let(:argv){ %w{true} }
13
+ it { should be_a(TupleExpression) }
14
+ specify{
15
+ subject.evaluate(scope).should eql(true)
16
+ subject.source.should eq("true")
17
+ }
18
+ end
19
+
20
+ context "with a String (2)" do
21
+ let(:argv){ ["status > 10"] }
22
+ it { should be_a(TupleExpression) }
23
+ specify{
24
+ subject.evaluate(scope).should eql(false)
25
+ subject.source.should eq("status > 10")
26
+ }
27
+ end
28
+
29
+ context "with two String" do
30
+ let(:argv){ %w{hello world} }
31
+ specify{
32
+ lambda{ subject }.should raise_error(Myrrha::Error)
33
+ }
34
+ end
35
+
36
+
37
+ end
38
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+ module Alf
3
+ module Shell
4
+ describe Main, "class methods for doc" do
5
+
6
+ specify "relational_operators" do
7
+ Shell::Main.relational_operators.should_not be_empty
8
+ Shell::Main.relational_operators.each do |cmd|
9
+ cmd.should_not be_command
10
+ cmd.should be_operator
11
+ cmd.should respond_to(:run)
12
+ end
13
+ end
14
+
15
+ specify "experimental_operators" do
16
+ Shell::Main.experimental_operators.should_not be_empty
17
+ Shell::Main.experimental_operators.each do |cmd|
18
+ cmd.should_not be_command
19
+ cmd.should be_operator
20
+ cmd.should respond_to(:run)
21
+ end
22
+ end
23
+
24
+ specify "non_relational_operators" do
25
+ Shell::Main.non_relational_operators.should_not be_empty
26
+ Shell::Main.non_relational_operators.each do |cmd|
27
+ cmd.should_not be_command
28
+ cmd.should be_operator
29
+ cmd.should respond_to(:run)
30
+ end
31
+ end
32
+
33
+ specify "other_non_relational_commands" do
34
+ Shell::Main.other_non_relational_commands.should_not be_empty
35
+ Shell::Main.other_non_relational_commands.each do |cmd|
36
+ cmd.should be_command
37
+ cmd.should_not be_operator
38
+ cmd.should respond_to(:run)
39
+ end
40
+ end
41
+
42
+ end # class methods for doc
43
+ end # module Shell
44
+ end # module Alf
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe Autonum do
4
+
5
+ let(:input){ suppliers }
6
+ subject{ Autonum.run(argv) }
7
+
8
+ before do
9
+ subject.should be_a(Alf::Algebra::Autonum)
10
+ subject.operands.should eq([input])
11
+ end
12
+
13
+ context "with default attribute name" do
14
+ let(:argv){ [input] }
15
+ specify{
16
+ subject.as.should eq(:autonum)
17
+ }
18
+ end
19
+
20
+ context "with explicit attribute name" do
21
+ let(:argv){ [input, "--", "unique"] }
22
+ specify{
23
+ subject.as.should eq(:unique)
24
+ }
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe Clip do
4
+
5
+ let(:input){ suppliers }
6
+ subject{ Clip.run(argv) }
7
+
8
+ before do
9
+ subject.should be_a(Alf::Algebra::Clip)
10
+ subject.attributes.should eq(Alf::AttrList[:a, :b])
11
+ subject.operands.should eq([input])
12
+ end
13
+
14
+ context "--no-allbut" do
15
+ let(:argv){ [input, "--", "a", "b"] }
16
+ specify{
17
+ subject.allbut.should be_false
18
+ }
19
+ end
20
+
21
+ context "--allbut" do
22
+ let(:argv){ [input, "--allbut", "--", "a", "b"] }
23
+ specify{
24
+ subject.allbut.should be_true
25
+ }
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe Coerce do
4
+
5
+ let(:input){ suppliers }
6
+ subject{ Coerce.run(argv) }
7
+
8
+ before do
9
+ subject.should be_a(Alf::Algebra::Coerce)
10
+ subject.operands.should eq([input])
11
+ end
12
+
13
+ context "a typical coercion" do
14
+ let(:argv){ [input] + %w{-- a Integer b Float} }
15
+ specify{
16
+ expected = Alf::Heading[:a => Integer, :b => Float]
17
+ subject.coercions.should eq(expected)
18
+ }
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe Compact do
4
+
5
+ let(:input){ suppliers }
6
+ subject{ Compact.run(argv) }
7
+
8
+ context "the default config" do
9
+ let(:argv){ [input] }
10
+ specify{
11
+ subject.should be_a(Alf::Algebra::Compact)
12
+ }
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe Defaults do
4
+
5
+ let(:input){ suppliers }
6
+ subject{ Defaults.run(argv) }
7
+
8
+ before do
9
+ subject.should be_a(Alf::Algebra::Defaults)
10
+ subject.defaults.should eq(Alf::TupleComputation[:a => Alf::TupleExpression["1"], :c => Alf::TupleExpression["'blue'"]])
11
+ subject.operands.should eq([input])
12
+ end
13
+
14
+ context "--no-strict" do
15
+ let(:argv){ [input] + %w{-- a 1 c 'blue'} }
16
+ specify{
17
+ subject.strict.should eq(false)
18
+ }
19
+ end
20
+
21
+ context "--strict" do
22
+ let(:argv){ [input] + %w{--strict -- a 1 c 'blue'} }
23
+ specify{
24
+ subject.strict.should eq(true)
25
+ }
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe Extend do
4
+
5
+ let(:input){ suppliers }
6
+ subject{ Extend.run(argv) }
7
+
8
+ before do
9
+ subject.should be_a(Alf::Algebra::Extend)
10
+ subject.operands.should eq([input])
11
+ end
12
+
13
+ context "a typical config" do
14
+ let(:argv){ [input] + %w{-- big} + ["tested > 10"] }
15
+ specify{
16
+ subject.ext.should eq(Alf::TupleComputation[:big => Alf::TupleExpression["tested > 10"]])
17
+ }
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe Generator do
4
+
5
+ subject{ Generator.run(argv) }
6
+
7
+ before do
8
+ subject.should be_a(Alf::Algebra::Generator)
9
+ subject.operands.should eq([])
10
+ end
11
+
12
+ context "with empty args" do
13
+ let(:argv){ %w{} }
14
+ specify{
15
+ subject.size.should eq(10)
16
+ subject.as.should eq(:num)
17
+ }
18
+ end
19
+
20
+ context "with a size" do
21
+ let(:argv){ %w{-- 2} }
22
+ specify{
23
+ subject.size.should eq(2)
24
+ subject.as.should eq(:num)
25
+ }
26
+ end
27
+
28
+ context "with a size and a name" do
29
+ let(:argv){ %w{-- 2 -- generated} }
30
+ specify{
31
+ subject.size.should eq(2)
32
+ subject.as.should eq(:generated)
33
+ }
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe Group do
4
+
5
+ let(:input){ suppliers }
6
+ subject{ Group.run(argv) }
7
+
8
+ before do
9
+ subject.should be_a(Alf::Algebra::Group)
10
+ subject.operands.should eq([input])
11
+ end
12
+
13
+ context "--no-allbut" do
14
+ let(:argv){ [input, "--", "time", "b", "--", "as"] }
15
+ specify{
16
+ subject.attributes.should eq(Alf::AttrList[:time, :b])
17
+ subject.as.should eq(:as)
18
+ subject.allbut.should eq(false)
19
+ }
20
+ end
21
+
22
+ context "--allbut" do
23
+ let(:argv){ [input, "--allbut", "--","a", "--", "as"] }
24
+ specify{
25
+ subject.attributes.should eq(Alf::AttrList[:a])
26
+ subject.as.should eq(:as)
27
+ subject.allbut.should eq(true)
28
+ }
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe InferHeading do
4
+
5
+ let(:input){ suppliers }
6
+ subject{ InferHeading.run(argv) }
7
+
8
+ context "the default config" do
9
+ let(:argv){ [input] }
10
+ specify{
11
+ subject.should be_a(Alf::Algebra::InferHeading)
12
+ }
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe Intersect do
4
+
5
+ let(:left) { suppliers }
6
+ let(:right){ suppliers }
7
+ subject{ Intersect.run(argv) }
8
+
9
+ context "the default config" do
10
+ let(:argv){ [left, right] }
11
+ specify{
12
+ subject.should be_a(Alf::Algebra::Intersect)
13
+ subject.operands.should eq([left, right])
14
+ }
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe Join do
4
+
5
+ let(:left) { suppliers }
6
+ let(:right){ suppliers }
7
+ subject{ Join.run(argv) }
8
+
9
+ context "the default config" do
10
+ let(:argv){ [left, right] }
11
+ specify{
12
+ subject.should be_a(Alf::Algebra::Join)
13
+ subject.operands.should eq([left, right])
14
+ }
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ module Alf::Shell::Operator
3
+ describe Matching do
4
+
5
+ let(:left) { suppliers }
6
+ let(:right){ suppliers }
7
+ subject{ Matching.run(argv) }
8
+
9
+ context "the default config" do
10
+ let(:argv){ [left, right] }
11
+ specify{
12
+ subject.should be_a(Alf::Algebra::Matching)
13
+ subject.operands.should eq([left, right])
14
+ }
15
+ end
16
+
17
+ end
18
+ end