clamp 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,33 +5,33 @@ describe Clamp::Command do
5
5
  include OutputCapture
6
6
 
7
7
  describe "with included module" do
8
-
9
- before do
8
+
9
+ let(:command) do
10
10
 
11
11
  shared_options = Module.new do
12
12
  extend Clamp::Option::Declaration
13
13
  option "--size", "SIZE", :default => 4
14
14
  end
15
15
 
16
- @command_class = Class.new(Clamp::Command) do
17
-
16
+ command_class = Class.new(Clamp::Command) do
17
+
18
18
  include shared_options
19
-
19
+
20
20
  def execute
21
21
  puts "size = #{size}"
22
22
  end
23
-
23
+
24
24
  end
25
25
 
26
- @command = @command_class.new("foo")
26
+ command_class.new("foo")
27
27
 
28
28
  end
29
29
 
30
30
  it "accepts options from included module" do
31
- @command.run(["--size", "42"])
31
+ command.run(["--size", "42"])
32
32
  stdout.should == "size = 42\n"
33
33
  end
34
-
34
+
35
35
  end
36
-
36
+
37
37
  end
@@ -4,31 +4,31 @@ describe Clamp::Option do
4
4
 
5
5
  describe "with String argument" do
6
6
 
7
- before do
8
- @option = Clamp::Option.new("--key-file", "FILE", "SSH identity")
7
+ let(:option) do
8
+ Clamp::Option.new("--key-file", "FILE", "SSH identity")
9
9
  end
10
10
 
11
11
  it "has a long_switch" do
12
- @option.long_switch.should == "--key-file"
12
+ option.long_switch.should == "--key-file"
13
13
  end
14
14
 
15
15
  it "has a type" do
16
- @option.type.should == "FILE"
16
+ option.type.should == "FILE"
17
17
  end
18
18
 
19
19
  it "has a description" do
20
- @option.description.should == "SSH identity"
20
+ option.description.should == "SSH identity"
21
21
  end
22
22
 
23
23
  describe "#attribute_name" do
24
24
 
25
25
  it "is derived from the (long) switch" do
26
- @option.attribute_name.should == "key_file"
26
+ option.attribute_name.should == "key_file"
27
27
  end
28
28
 
29
29
  it "can be overridden" do
30
- @option = Clamp::Option.new("--key-file", "FILE", "SSH identity", :attribute_name => "ssh_identity")
31
- @option.attribute_name.should == "ssh_identity"
30
+ option = Clamp::Option.new("--key-file", "FILE", "SSH identity", :attribute_name => "ssh_identity")
31
+ option.attribute_name.should == "ssh_identity"
32
32
  end
33
33
 
34
34
  end
@@ -36,12 +36,13 @@ describe Clamp::Option do
36
36
  describe "#default_value" do
37
37
 
38
38
  it "defaults to nil" do
39
- @option.default_value.should == nil
39
+ option = Clamp::Option.new("-n", "N", "iterations")
40
+ option.default_value.should == nil
40
41
  end
41
42
 
42
43
  it "can be overridden" do
43
- @option = Clamp::Option.new("-n", "N", "iterations", :default => 1)
44
- @option.default_value.should == 1
44
+ option = Clamp::Option.new("-n", "N", "iterations", :default => 1)
45
+ option.default_value.should == 1
45
46
  end
46
47
 
47
48
  end
@@ -49,7 +50,7 @@ describe Clamp::Option do
49
50
  describe "#help" do
50
51
 
51
52
  it "combines switch, type and description" do
52
- @option.help.should == ["--key-file FILE", "SSH identity"]
53
+ option.help.should == ["--key-file FILE", "SSH identity"]
53
54
  end
54
55
 
55
56
  end
@@ -58,14 +59,14 @@ describe Clamp::Option do
58
59
 
59
60
  describe "flag" do
60
61
 
61
- before do
62
- @option = Clamp::Option.new("--verbose", :flag, "Blah blah blah")
62
+ let(:option) do
63
+ Clamp::Option.new("--verbose", :flag, "Blah blah blah")
63
64
  end
64
65
 
65
66
  describe "#help" do
66
67
 
67
68
  it "excludes option argument" do
68
- @option.help.should == ["--verbose", "Blah blah blah"]
69
+ option.help.should == ["--verbose", "Blah blah blah"]
69
70
  end
70
71
 
71
72
  end
@@ -74,20 +75,20 @@ describe Clamp::Option do
74
75
 
75
76
  describe "negatable flag" do
76
77
 
77
- before do
78
- @option = Clamp::Option.new("--[no-]force", :flag, "Force installation")
78
+ let(:option) do
79
+ Clamp::Option.new("--[no-]force", :flag, "Force installation")
79
80
  end
80
81
 
81
82
  it "handles both positive and negative forms" do
82
- @option.handles?("--force").should be_true
83
- @option.handles?("--no-force").should be_true
83
+ option.handles?("--force").should be_true
84
+ option.handles?("--no-force").should be_true
84
85
  end
85
86
 
86
87
  describe "#flag_value" do
87
88
 
88
89
  it "returns true for the positive variant" do
89
- @option.flag_value("--force").should be_true
90
- @option.flag_value("--no-force").should be_false
90
+ option.flag_value("--force").should be_true
91
+ option.flag_value("--no-force").should be_false
91
92
  end
92
93
 
93
94
  end
@@ -95,7 +96,7 @@ describe Clamp::Option do
95
96
  describe "#attribute_name" do
96
97
 
97
98
  it "is derived from the (long) switch" do
98
- @option.attribute_name.should == "force"
99
+ option.attribute_name.should == "force"
99
100
  end
100
101
 
101
102
  end
@@ -104,19 +105,19 @@ describe Clamp::Option do
104
105
 
105
106
  describe "with both short and long switches" do
106
107
 
107
- before do
108
- @option = Clamp::Option.new(["-k", "--key-file"], "FILE", "SSH identity")
108
+ let(:option) do
109
+ Clamp::Option.new(["-k", "--key-file"], "FILE", "SSH identity")
109
110
  end
110
111
 
111
112
  it "handles both switches" do
112
- @option.handles?("--key-file").should be_true
113
- @option.handles?("-k").should be_true
113
+ option.handles?("--key-file").should be_true
114
+ option.handles?("-k").should be_true
114
115
  end
115
116
 
116
117
  describe "#help" do
117
118
 
118
119
  it "includes both switches" do
119
- @option.help.should == ["-k, --key-file FILE", "SSH identity"]
120
+ option.help.should == ["-k, --key-file FILE", "SSH identity"]
120
121
  end
121
122
 
122
123
  end
@@ -125,28 +126,28 @@ describe Clamp::Option do
125
126
 
126
127
  describe "with an associated environment variable" do
127
128
 
128
- before do
129
- @option = Clamp::Option.new("-x", "X", "mystery option", :environment_variable => "APP_X")
129
+ let(:option) do
130
+ Clamp::Option.new("-x", "X", "mystery option", :environment_variable => "APP_X")
130
131
  end
131
132
 
132
133
  describe "#help" do
133
134
 
134
135
  it "describes environment variable" do
135
- @option.help.should == ["-x X", "mystery option (default: $APP_X)"]
136
+ option.help.should == ["-x X", "mystery option (default: $APP_X)"]
136
137
  end
137
138
 
138
139
  end
139
140
 
140
141
  describe "and a default value" do
141
142
 
142
- before do
143
- @option = Clamp::Option.new("-x", "X", "mystery option", :environment_variable => "APP_X", :default => "xyz")
143
+ let(:option) do
144
+ Clamp::Option.new("-x", "X", "mystery option", :environment_variable => "APP_X", :default => "xyz")
144
145
  end
145
146
 
146
147
  describe "#help" do
147
148
 
148
149
  it "describes both environment variable and default" do
149
- @option.help.should == ["-x X", %{mystery option (default: $APP_X, or "xyz")}]
150
+ option.help.should == ["-x X", %{mystery option (default: $APP_X, or "xyz")}]
150
151
  end
151
152
 
152
153
  end
@@ -157,9 +158,9 @@ describe Clamp::Option do
157
158
 
158
159
  describe "in subcommand" do
159
160
 
160
- before do
161
+ let(:command_class) do
161
162
 
162
- @command = Class.new(Clamp::Command) do
163
+ Class.new(Clamp::Command) do
163
164
  subcommand "foo", "FOO!" do
164
165
  option "--bar", "BAR", "Bars foo."
165
166
  end
@@ -170,7 +171,7 @@ describe Clamp::Option do
170
171
  describe "Command#help" do
171
172
 
172
173
  it "includes help for each option exactly once" do
173
- subcommand = @command.new("").send(:find_subcommand, 'foo')
174
+ subcommand = command_class.new("").send(:find_subcommand, 'foo')
174
175
  subcommand_help = subcommand.subcommand_class.help("")
175
176
  subcommand_help.lines.grep(/--bar BAR/).count.should == 1
176
177
  end
@@ -4,27 +4,31 @@ describe Clamp::Parameter do
4
4
 
5
5
  describe "normal" do
6
6
 
7
- before do
8
- @parameter = Clamp::Parameter.new("COLOR", "hue of choice")
7
+ let(:parameter) do
8
+ Clamp::Parameter.new("COLOR", "hue of choice")
9
9
  end
10
10
 
11
11
  it "has a name" do
12
- @parameter.name.should == "COLOR"
12
+ parameter.name.should == "COLOR"
13
13
  end
14
14
 
15
15
  it "has a description" do
16
- @parameter.description.should == "hue of choice"
16
+ parameter.description.should == "hue of choice"
17
+ end
18
+
19
+ it "is single-valued" do
20
+ parameter.should_not be_multivalued
17
21
  end
18
22
 
19
23
  describe "#attribute_name" do
20
24
 
21
25
  it "is derived from the name" do
22
- @parameter.attribute_name.should == "color"
26
+ parameter.attribute_name.should == "color"
23
27
  end
24
28
 
25
29
  it "can be overridden" do
26
- @parameter = Clamp::Parameter.new("COLOR", "hue of choice", :attribute_name => "hue")
27
- @parameter.attribute_name.should == "hue"
30
+ parameter = Clamp::Parameter.new("COLOR", "hue of choice", :attribute_name => "hue")
31
+ parameter.attribute_name.should == "hue"
28
32
  end
29
33
 
30
34
  end
@@ -32,17 +36,17 @@ describe Clamp::Parameter do
32
36
  describe "#consume" do
33
37
 
34
38
  it "consumes one argument" do
35
- @arguments = %w(a b c)
36
- @parameter.consume(@arguments).should == "a"
37
- @arguments.should == %w(b c)
39
+ arguments = %w(a b c)
40
+ parameter.consume(arguments).should == "a"
41
+ arguments.should == %w(b c)
38
42
  end
39
43
 
40
44
  describe "with no arguments" do
41
45
 
42
46
  it "raises an Argument error" do
43
- @arguments = []
47
+ arguments = []
44
48
  lambda do
45
- @parameter.consume(@arguments)
49
+ parameter.consume(arguments)
46
50
  end.should raise_error(ArgumentError)
47
51
  end
48
52
 
@@ -54,14 +58,18 @@ describe Clamp::Parameter do
54
58
 
55
59
  describe "optional (name in square brackets)" do
56
60
 
57
- before do
58
- @parameter = Clamp::Parameter.new("[COLOR]", "hue of choice")
61
+ let(:parameter) do
62
+ Clamp::Parameter.new("[COLOR]", "hue of choice")
63
+ end
64
+
65
+ it "is single-valued" do
66
+ parameter.should_not be_multivalued
59
67
  end
60
68
 
61
69
  describe "#attribute_name" do
62
70
 
63
71
  it "omits the brackets" do
64
- @parameter.attribute_name.should == "color"
72
+ parameter.attribute_name.should == "color"
65
73
  end
66
74
 
67
75
  end
@@ -69,16 +77,16 @@ describe Clamp::Parameter do
69
77
  describe "#consume" do
70
78
 
71
79
  it "consumes one argument" do
72
- @arguments = %w(a b c)
73
- @parameter.consume(@arguments).should == "a"
74
- @arguments.should == %w(b c)
80
+ arguments = %w(a b c)
81
+ parameter.consume(arguments).should == "a"
82
+ arguments.should == %w(b c)
75
83
  end
76
84
 
77
85
  describe "with no arguments" do
78
86
 
79
87
  it "returns nil" do
80
- @arguments = []
81
- @parameter.consume(@arguments).should == nil
88
+ arguments = []
89
+ parameter.consume(arguments).should == nil
82
90
  end
83
91
 
84
92
  end
@@ -89,14 +97,18 @@ describe Clamp::Parameter do
89
97
 
90
98
  describe "list (name followed by ellipsis)" do
91
99
 
92
- before do
93
- @parameter = Clamp::Parameter.new("FILE ...", "files to process")
100
+ let(:parameter) do
101
+ Clamp::Parameter.new("FILE ...", "files to process")
102
+ end
103
+
104
+ it "is multi-valued" do
105
+ parameter.should be_multivalued
94
106
  end
95
107
 
96
108
  describe "#attribute_name" do
97
109
 
98
- it "indicates multiplicity" do
99
- @parameter.attribute_name.should == "file_list"
110
+ it "gets a _list suffix" do
111
+ parameter.attribute_name.should == "file_list"
100
112
  end
101
113
 
102
114
  end
@@ -104,35 +116,56 @@ describe Clamp::Parameter do
104
116
  describe "#consume" do
105
117
 
106
118
  it "consumes all the remaining arguments" do
107
- @arguments = %w(a b c)
108
- @parameter.consume(@arguments).should == %w(a b c)
109
- @arguments.should == []
119
+ arguments = %w(a b c)
120
+ parameter.consume(arguments).should == %w(a b c)
121
+ arguments.should == []
110
122
  end
111
123
 
112
124
  describe "with no arguments" do
113
125
 
114
126
  it "raises an Argument error" do
115
- @arguments = []
127
+ arguments = []
116
128
  lambda do
117
- @parameter.consume(@arguments)
129
+ parameter.consume(arguments)
118
130
  end.should raise_error(ArgumentError)
119
131
  end
120
132
 
121
133
  end
122
134
 
123
135
  end
136
+
137
+ context "with a weird parameter name, and an explicit attribute_name" do
138
+
139
+ let(:parameter) do
140
+ Clamp::Parameter.new("KEY=VALUE ...", "config-settings", :attribute_name => :config_settings)
141
+ end
142
+
143
+ describe "#attribute_name" do
144
+
145
+ it "is the specified one" do
146
+ parameter.attribute_name.should == "config_settings"
147
+ end
148
+
149
+ end
150
+
151
+ end
152
+
124
153
  end
125
154
 
126
155
  describe "optional list" do
127
156
 
128
- before do
129
- @parameter = Clamp::Parameter.new("[FILES] ...", "files to process")
157
+ let(:parameter) do
158
+ Clamp::Parameter.new("[FILES] ...", "files to process")
159
+ end
160
+
161
+ it "is multi-valued" do
162
+ parameter.should be_multivalued
130
163
  end
131
164
 
132
165
  describe "#attribute_name" do
133
166
 
134
- it "indicates multiplicity" do
135
- @parameter.attribute_name.should == "files_list"
167
+ it "gets a _list suffix" do
168
+ parameter.attribute_name.should == "files_list"
136
169
  end
137
170
 
138
171
  end
@@ -140,7 +173,7 @@ describe Clamp::Parameter do
140
173
  describe "#default_value" do
141
174
 
142
175
  it "is an empty list" do
143
- @parameter.default_value.should == []
176
+ parameter.default_value.should == []
144
177
  end
145
178
 
146
179
  end
@@ -148,21 +181,21 @@ describe Clamp::Parameter do
148
181
  describe "#help" do
149
182
 
150
183
  it "does not include default" do
151
- @parameter.help_rhs.should_not include("default:")
184
+ parameter.help_rhs.should_not include("default:")
152
185
  end
153
186
 
154
187
  end
155
188
 
156
189
  describe "with specified default value" do
157
190
 
158
- before do
159
- @parameter = Clamp::Parameter.new("[FILES] ...", "files to process", :default => %w(a b c))
191
+ let(:parameter) do
192
+ Clamp::Parameter.new("[FILES] ...", "files to process", :default => %w(a b c))
160
193
  end
161
194
 
162
195
  describe "#default_value" do
163
196
 
164
197
  it "is that specified" do
165
- @parameter.default_value.should == %w(a b c)
198
+ parameter.default_value.should == %w(a b c)
166
199
  end
167
200
 
168
201
  end
@@ -170,7 +203,7 @@ describe Clamp::Parameter do
170
203
  describe "#help" do
171
204
 
172
205
  it "includes the default value" do
173
- @parameter.help_rhs.should include("default:")
206
+ parameter.help_rhs.should include("default:")
174
207
  end
175
208
 
176
209
  end
@@ -178,16 +211,16 @@ describe Clamp::Parameter do
178
211
  describe "#consume" do
179
212
 
180
213
  it "consumes all the remaining arguments" do
181
- @arguments = %w(a b c)
182
- @parameter.consume(@arguments).should == %w(a b c)
183
- @arguments.should == []
214
+ arguments = %w(a b c)
215
+ parameter.consume(arguments).should == %w(a b c)
216
+ arguments.should == []
184
217
  end
185
218
 
186
219
  describe "with no arguments" do
187
220
 
188
221
  it "don't override defaults" do
189
- @arguments = []
190
- @parameter.consume(@arguments).should == nil
222
+ arguments = []
223
+ parameter.consume(arguments).should == nil
191
224
  end
192
225
 
193
226
  end