clamp 1.2.1 → 1.3.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +12 -4
  3. data/.travis.yml +4 -6
  4. data/CHANGES.md +7 -0
  5. data/Gemfile +8 -6
  6. data/Guardfile +3 -1
  7. data/Rakefile +8 -0
  8. data/clamp.gemspec +8 -6
  9. data/examples/admin +3 -2
  10. data/examples/defaulted +4 -3
  11. data/examples/flipflop +1 -0
  12. data/examples/fubar +1 -0
  13. data/examples/gitdown +2 -1
  14. data/examples/scoop +3 -2
  15. data/examples/speak +3 -2
  16. data/examples/subcommand_missing +1 -0
  17. data/examples/word +1 -0
  18. data/lib/clamp.rb +3 -1
  19. data/lib/clamp/attribute/declaration.rb +5 -0
  20. data/lib/clamp/attribute/definition.rb +15 -12
  21. data/lib/clamp/attribute/instance.rb +5 -3
  22. data/lib/clamp/command.rb +9 -1
  23. data/lib/clamp/errors.rb +7 -3
  24. data/lib/clamp/help.rb +8 -6
  25. data/lib/clamp/messages.rb +21 -14
  26. data/lib/clamp/option/declaration.rb +4 -0
  27. data/lib/clamp/option/definition.rb +9 -3
  28. data/lib/clamp/option/parsing.rb +37 -32
  29. data/lib/clamp/parameter/declaration.rb +4 -0
  30. data/lib/clamp/parameter/definition.rb +9 -3
  31. data/lib/clamp/parameter/parsing.rb +5 -1
  32. data/lib/clamp/subcommand/declaration.rb +15 -13
  33. data/lib/clamp/subcommand/definition.rb +2 -0
  34. data/lib/clamp/subcommand/execution.rb +11 -0
  35. data/lib/clamp/subcommand/parsing.rb +4 -0
  36. data/lib/clamp/truthy.rb +4 -2
  37. data/lib/clamp/version.rb +3 -1
  38. data/spec/clamp/command_group_spec.rb +27 -9
  39. data/spec/clamp/command_spec.rb +84 -49
  40. data/spec/clamp/messages_spec.rb +5 -4
  41. data/spec/clamp/option/definition_spec.rb +13 -11
  42. data/spec/clamp/option_module_spec.rb +3 -1
  43. data/spec/clamp/option_reordering_spec.rb +6 -4
  44. data/spec/clamp/parameter/definition_spec.rb +14 -12
  45. data/spec/spec_helper.rb +3 -3
  46. metadata +4 -4
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require "spec_helper"
3
4
 
@@ -6,8 +7,8 @@ describe Clamp::Messages do
6
7
  describe "message" do
7
8
  before do
8
9
  Clamp.messages = {
9
- :too_many_arguments => "Way too many!",
10
- :custom_message => "Say %<what>s to %<whom>s"
10
+ too_many_arguments: "Way too many!",
11
+ custom_message: "Say %<what>s to %<whom>s"
11
12
  }
12
13
  end
13
14
 
@@ -24,7 +25,7 @@ describe Clamp::Messages do
24
25
  end
25
26
 
26
27
  it "formats the message" do
27
- expect(Clamp.message(:custom_message, :what => "hello", :whom => "Clamp")).to eql "Say hello to Clamp"
28
+ expect(Clamp.message(:custom_message, what: "hello", whom: "Clamp")).to eql "Say hello to Clamp"
28
29
  end
29
30
  end
30
31
 
@@ -33,7 +34,7 @@ describe Clamp::Messages do
33
34
  default_msg = Clamp.message(:too_many_arguments).clone
34
35
 
35
36
  Clamp.messages = {
36
- :too_many_arguments => "Way too many!"
37
+ too_many_arguments: "Way too many!"
37
38
  }
38
39
  Clamp.clear_messages!
39
40
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Clamp::Option::Definition do
@@ -27,7 +29,7 @@ describe Clamp::Option::Definition do
27
29
  end
28
30
 
29
31
  it "can be overridden" do
30
- option = described_class.new("--key-file", "FILE", "SSH identity", :attribute_name => "ssh_identity")
32
+ option = described_class.new("--key-file", "FILE", "SSH identity", attribute_name: "ssh_identity")
31
33
  expect(option.attribute_name).to eql "ssh_identity"
32
34
  end
33
35
 
@@ -49,7 +51,7 @@ describe Clamp::Option::Definition do
49
51
  end
50
52
 
51
53
  it "can be overridden" do
52
- option = described_class.new("-n", "N", "iterations", :default => 1)
54
+ option = described_class.new("-n", "N", "iterations", default: 1)
53
55
  expect(option.default_value).to eql 1
54
56
  end
55
57
 
@@ -149,7 +151,7 @@ describe Clamp::Option::Definition do
149
151
  context "with an associated environment variable" do
150
152
 
151
153
  let(:option) do
152
- described_class.new("-x", "X", "mystery option", :environment_variable => "APP_X")
154
+ described_class.new("-x", "X", "mystery option", environment_variable: "APP_X")
153
155
  end
154
156
 
155
157
  describe "#help" do
@@ -163,7 +165,7 @@ describe Clamp::Option::Definition do
163
165
  context "and a default value" do
164
166
 
165
167
  let(:option) do
166
- described_class.new("-x", "X", "mystery option", :environment_variable => "APP_X", :default => "xyz")
168
+ described_class.new("-x", "X", "mystery option", environment_variable: "APP_X", default: "xyz")
167
169
  end
168
170
 
169
171
  describe "#help" do
@@ -181,7 +183,7 @@ describe Clamp::Option::Definition do
181
183
  context "multivalued" do
182
184
 
183
185
  let(:option) do
184
- described_class.new(["-H", "--header"], "HEADER", "extra header", :multivalued => true)
186
+ described_class.new(["-H", "--header"], "HEADER", "extra header", multivalued: true)
185
187
  end
186
188
 
187
189
  it "is multivalued" do
@@ -195,7 +197,7 @@ describe Clamp::Option::Definition do
195
197
  end
196
198
 
197
199
  it "can be overridden" do
198
- option = described_class.new("-H", "HEADER", "extra header", :multivalued => true, :default => [1, 2, 3])
200
+ option = described_class.new("-H", "HEADER", "extra header", multivalued: true, default: [1, 2, 3])
199
201
  expect(option.default_value).to eql [1, 2, 3]
200
202
  end
201
203
 
@@ -247,19 +249,19 @@ describe Clamp::Option::Definition do
247
249
  it "rejects :default" do
248
250
  expect do
249
251
  described_class.new("--key-file", "FILE", "SSH identity",
250
- :required => true, :default => "hello")
252
+ required: true, default: "hello")
251
253
  end.to raise_error(ArgumentError)
252
254
  end
253
255
 
254
256
  it "rejects :flag options" do
255
257
  expect do
256
- described_class.new("--awesome", :flag, "Be awesome?", :required => true)
258
+ described_class.new("--awesome", :flag, "Be awesome?", required: true)
257
259
  end.to raise_error(ArgumentError)
258
260
  end
259
261
  end
260
262
 
261
263
  describe "a hidden option" do
262
- let(:option) { described_class.new("--unseen", :flag, "Something", :hidden => true) }
264
+ let(:option) { described_class.new("--unseen", :flag, "Something", hidden: true) }
263
265
  it "is hidden" do
264
266
  expect(option).to be_hidden
265
267
  end
@@ -268,7 +270,7 @@ describe Clamp::Option::Definition do
268
270
  describe "a hidden option in a command" do
269
271
  let(:command_class) do
270
272
  Class.new(Clamp::Command) do
271
- option "--unseen", :flag, "Something", :hidden => true
273
+ option "--unseen", :flag, "Something", hidden: true
272
274
 
273
275
  def execute
274
276
  # this space intentionally left blank
@@ -277,7 +279,7 @@ describe Clamp::Option::Definition do
277
279
  end
278
280
 
279
281
  it "is not shown in the help" do
280
- expect(command_class.help("foo")).not_to match /^ +--unseen +Something$/
282
+ expect(command_class.help("foo")).not_to match(/^ +--unseen +Something$/)
281
283
  end
282
284
 
283
285
  it "sets the expected accessor" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Clamp::Command do
@@ -10,7 +12,7 @@ describe Clamp::Command do
10
12
 
11
13
  shared_options = Module.new do
12
14
  extend Clamp::Option::Declaration
13
- option "--size", "SIZE", :default => 4
15
+ option "--size", "SIZE", default: 4
14
16
  end
15
17
 
16
18
  command_class = Class.new(Clamp::Command) do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Clamp::Command do
@@ -23,7 +25,7 @@ describe Clamp::Command do
23
25
 
24
26
  option "--loud", :flag, "say it loud"
25
27
 
26
- parameter "WORDS ...", "the thing to say", :attribute_name => :words
28
+ parameter "WORDS ...", "the thing to say", attribute_name: :words
27
29
 
28
30
  def execute
29
31
  message = words.join(" ")
@@ -37,17 +39,17 @@ describe Clamp::Command do
37
39
  end
38
40
 
39
41
  it "still works" do
40
- command.run(%w(say foo))
42
+ command.run(%w[say foo])
41
43
  expect(stdout).to eql("foo\n")
42
44
  end
43
45
 
44
46
  it "honours options after positional arguments" do
45
- command.run(%w(say blah --verbose))
47
+ command.run(%w[say blah --verbose])
46
48
  expect(stdout).to eql("blahblahblah\n")
47
49
  end
48
50
 
49
51
  it "honours options declared on subcommands" do
50
- command.run(%w(say --loud blah))
52
+ command.run(%w[say --loud blah])
51
53
  expect(stdout).to eql("BLAH\n")
52
54
  end
53
55
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Clamp::Parameter::Definition do
@@ -27,7 +29,7 @@ describe Clamp::Parameter::Definition do
27
29
  end
28
30
 
29
31
  it "can be overridden" do
30
- parameter = described_class.new("COLOR", "hue of choice", :attribute_name => "hue")
32
+ parameter = described_class.new("COLOR", "hue of choice", attribute_name: "hue")
31
33
  expect(parameter.attribute_name).to eql "hue"
32
34
  end
33
35
 
@@ -36,9 +38,9 @@ describe Clamp::Parameter::Definition do
36
38
  describe "#consume" do
37
39
 
38
40
  it "consumes one argument" do
39
- arguments = %w(a b c)
41
+ arguments = %w[a b c]
40
42
  expect(parameter.consume(arguments)).to eql ["a"]
41
- expect(arguments).to eql %w(b c)
43
+ expect(arguments).to eql %w[b c]
42
44
  end
43
45
 
44
46
  describe "with no arguments" do
@@ -77,9 +79,9 @@ describe Clamp::Parameter::Definition do
77
79
  describe "#consume" do
78
80
 
79
81
  it "consumes one argument" do
80
- arguments = %w(a b c)
82
+ arguments = %w[a b c]
81
83
  expect(parameter.consume(arguments)).to eql ["a"]
82
- expect(arguments).to eql %w(b c)
84
+ expect(arguments).to eql %w[b c]
83
85
  end
84
86
 
85
87
  describe "with no arguments" do
@@ -124,8 +126,8 @@ describe Clamp::Parameter::Definition do
124
126
  describe "#consume" do
125
127
 
126
128
  it "consumes all the remaining arguments" do
127
- arguments = %w(a b c)
128
- expect(parameter.consume(arguments)).to eql %w(a b c)
129
+ arguments = %w[a b c]
130
+ expect(parameter.consume(arguments)).to eql %w[a b c]
129
131
  expect(arguments).to eql []
130
132
  end
131
133
 
@@ -145,7 +147,7 @@ describe Clamp::Parameter::Definition do
145
147
  context "with a weird parameter name, and an explicit attribute_name" do
146
148
 
147
149
  let(:parameter) do
148
- described_class.new("KEY=VALUE ...", "config-settings", :attribute_name => :config_settings)
150
+ described_class.new("KEY=VALUE ...", "config-settings", attribute_name: :config_settings)
149
151
  end
150
152
 
151
153
  describe "#attribute_name" do
@@ -197,13 +199,13 @@ describe Clamp::Parameter::Definition do
197
199
  context "with specified default value" do
198
200
 
199
201
  let(:parameter) do
200
- described_class.new("[FILES] ...", "files to process", :default => %w(a b c))
202
+ described_class.new("[FILES] ...", "files to process", default: %w[a b c])
201
203
  end
202
204
 
203
205
  describe "#default_value" do
204
206
 
205
207
  it "is that specified" do
206
- expect(parameter.default_value).to eql %w(a b c)
208
+ expect(parameter.default_value).to eql %w[a b c]
207
209
  end
208
210
 
209
211
  end
@@ -219,8 +221,8 @@ describe Clamp::Parameter::Definition do
219
221
  describe "#consume" do
220
222
 
221
223
  it "consumes all the remaining arguments" do
222
- arguments = %w(a b c)
223
- expect(parameter.consume(arguments)).to eql %w(a b c)
224
+ arguments = %w[a b c]
225
+ expect(parameter.consume(arguments)).to eql %w[a b c]
224
226
  expect(arguments).to eql []
225
227
  end
226
228
 
@@ -1,16 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rspec"
2
4
  require "clamp"
3
5
  require "stringio"
4
6
 
5
7
  RSpec.configure do |config|
6
8
 
7
- config.mock_with :rr
8
-
9
9
  config.around(:each) do |example|
10
10
  begin
11
11
  example.run
12
12
  rescue SystemExit => e
13
- fail "Unexpected exit with status #{e.status}"
13
+ raise "Unexpected exit with status #{e.status}"
14
14
  end
15
15
  end
16
16
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clamp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-13 00:00:00.000000000 Z
11
+ date: 2018-06-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  Clamp provides an object-model for command-line utilities.
@@ -67,7 +67,7 @@ files:
67
67
  - spec/clamp/option_reordering_spec.rb
68
68
  - spec/clamp/parameter/definition_spec.rb
69
69
  - spec/spec_helper.rb
70
- homepage: http://github.com/mdub/clamp
70
+ homepage: https://github.com/mdub/clamp
71
71
  licenses:
72
72
  - MIT
73
73
  metadata: {}
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  version: '0'
88
88
  requirements: []
89
89
  rubyforge_project:
90
- rubygems_version: 2.6.13
90
+ rubygems_version: 2.2.5
91
91
  signing_key:
92
92
  specification_version: 4
93
93
  summary: a minimal framework for command-line utilities