clamp 0.5.0 → 0.5.1

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.
@@ -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