travis-cl 1.2.4

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 (114) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +134 -0
  3. data/Gemfile +11 -0
  4. data/Gemfile.lock +59 -0
  5. data/MIT_LICENSE.md +21 -0
  6. data/README.md +1283 -0
  7. data/cl.gemspec +30 -0
  8. data/examples/README.md +22 -0
  9. data/examples/_src/args/cast.erb.rb +100 -0
  10. data/examples/_src/args/opts.erb.rb +100 -0
  11. data/examples/_src/args/required.erb.rb +63 -0
  12. data/examples/_src/args/splat.erb.rb +55 -0
  13. data/examples/_src/gem.erb.rb +99 -0
  14. data/examples/_src/heroku.erb.rb +47 -0
  15. data/examples/_src/rakeish.erb.rb +54 -0
  16. data/examples/_src/readme/abstract.erb.rb +27 -0
  17. data/examples/_src/readme/alias.erb.rb +22 -0
  18. data/examples/_src/readme/arg.erb.rb +21 -0
  19. data/examples/_src/readme/arg_array.erb.rb +21 -0
  20. data/examples/_src/readme/arg_type.erb.rb +23 -0
  21. data/examples/_src/readme/args_splat.erb.rb +55 -0
  22. data/examples/_src/readme/array.erb.rb +21 -0
  23. data/examples/_src/readme/basic.erb.rb +72 -0
  24. data/examples/_src/readme/default.erb.rb +21 -0
  25. data/examples/_src/readme/deprecated.erb.rb +21 -0
  26. data/examples/_src/readme/deprecated_alias.erb.rb +21 -0
  27. data/examples/_src/readme/description.erb.rb +60 -0
  28. data/examples/_src/readme/downcase.erb.rb +21 -0
  29. data/examples/_src/readme/enum.erb.rb +35 -0
  30. data/examples/_src/readme/example.erb.rb +25 -0
  31. data/examples/_src/readme/format.erb.rb +35 -0
  32. data/examples/_src/readme/internal.erb.rb +28 -0
  33. data/examples/_src/readme/negate.erb.rb +37 -0
  34. data/examples/_src/readme/note.erb.rb +25 -0
  35. data/examples/_src/readme/opts.erb.rb +33 -0
  36. data/examples/_src/readme/opts_block.erb.rb +30 -0
  37. data/examples/_src/readme/range.erb.rb +35 -0
  38. data/examples/_src/readme/registry.erb.rb +18 -0
  39. data/examples/_src/readme/required.erb.rb +35 -0
  40. data/examples/_src/readme/requireds.erb.rb +46 -0
  41. data/examples/_src/readme/requires.erb.rb +35 -0
  42. data/examples/_src/readme/runner.erb.rb +29 -0
  43. data/examples/_src/readme/runner_custom.erb.rb +25 -0
  44. data/examples/_src/readme/secret.erb.rb +22 -0
  45. data/examples/_src/readme/see.erb.rb +25 -0
  46. data/examples/_src/readme/type.erb.rb +21 -0
  47. data/examples/args/cast +98 -0
  48. data/examples/args/opts +98 -0
  49. data/examples/args/required +62 -0
  50. data/examples/args/splat +58 -0
  51. data/examples/gem +97 -0
  52. data/examples/heroku +48 -0
  53. data/examples/rakeish +50 -0
  54. data/examples/readme/abstract +28 -0
  55. data/examples/readme/alias +21 -0
  56. data/examples/readme/arg +20 -0
  57. data/examples/readme/arg_array +20 -0
  58. data/examples/readme/arg_type +22 -0
  59. data/examples/readme/args_splat +58 -0
  60. data/examples/readme/array +20 -0
  61. data/examples/readme/basic +67 -0
  62. data/examples/readme/default +20 -0
  63. data/examples/readme/deprecated +20 -0
  64. data/examples/readme/deprecated_alias +20 -0
  65. data/examples/readme/description +56 -0
  66. data/examples/readme/downcase +20 -0
  67. data/examples/readme/enum +33 -0
  68. data/examples/readme/example +21 -0
  69. data/examples/readme/format +33 -0
  70. data/examples/readme/internal +24 -0
  71. data/examples/readme/negate +44 -0
  72. data/examples/readme/note +21 -0
  73. data/examples/readme/opts +31 -0
  74. data/examples/readme/opts_block +29 -0
  75. data/examples/readme/range +33 -0
  76. data/examples/readme/registry +15 -0
  77. data/examples/readme/required +33 -0
  78. data/examples/readme/requireds +46 -0
  79. data/examples/readme/requires +33 -0
  80. data/examples/readme/runner +30 -0
  81. data/examples/readme/runner_custom +22 -0
  82. data/examples/readme/secret +21 -0
  83. data/examples/readme/see +21 -0
  84. data/examples/readme/type +20 -0
  85. data/lib/cl/arg.rb +79 -0
  86. data/lib/cl/args.rb +92 -0
  87. data/lib/cl/cast.rb +55 -0
  88. data/lib/cl/cmd.rb +74 -0
  89. data/lib/cl/config/env.rb +52 -0
  90. data/lib/cl/config/files.rb +34 -0
  91. data/lib/cl/config.rb +30 -0
  92. data/lib/cl/ctx.rb +36 -0
  93. data/lib/cl/dsl.rb +182 -0
  94. data/lib/cl/errors.rb +119 -0
  95. data/lib/cl/help/cmd.rb +118 -0
  96. data/lib/cl/help/cmds.rb +26 -0
  97. data/lib/cl/help/format.rb +69 -0
  98. data/lib/cl/help/table.rb +58 -0
  99. data/lib/cl/help/usage.rb +26 -0
  100. data/lib/cl/help.rb +37 -0
  101. data/lib/cl/helper/suggest.rb +10 -0
  102. data/lib/cl/helper.rb +47 -0
  103. data/lib/cl/opt.rb +276 -0
  104. data/lib/cl/opts/validate.rb +117 -0
  105. data/lib/cl/opts.rb +114 -0
  106. data/lib/cl/parser/format.rb +63 -0
  107. data/lib/cl/parser.rb +70 -0
  108. data/lib/cl/runner/default.rb +86 -0
  109. data/lib/cl/runner/multi.rb +34 -0
  110. data/lib/cl/runner.rb +10 -0
  111. data/lib/cl/ui.rb +146 -0
  112. data/lib/cl/version.rb +3 -0
  113. data/lib/cl.rb +62 -0
  114. metadata +177 -0
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--to GROUP', alias: :group
10
+
11
+ def run
12
+ # p opts: opts, to: to, to?: to?, group: group, group?: group?
13
+ p opts: opts, to: to, to?: to?
14
+ end
15
+ end
16
+
17
+ Cl.new('owners').run(%w(add --group one))
18
+
19
+ # Output:
20
+ #
21
+ # {:opts=>{:to=>"one", :group=>"one"}, :to=>"one", :to?=>true}
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ arg :owner
10
+
11
+ def run
12
+ p owner: owner
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add one))
17
+
18
+ # Output:
19
+ #
20
+ # {:owner=>"one"}
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ arg :owners, type: :array, sep: ','
10
+
11
+ def run
12
+ p owners: owners
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add one,two))
17
+
18
+ # Output:
19
+ #
20
+ # {:owners=>["one", "two"]}
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Cmd < Cl::Cmd
7
+ register :cmd
8
+
9
+ arg :one, type: :integer
10
+ arg :two, type: :float
11
+ arg :three, type: :boolean
12
+
13
+ def run
14
+ p [one.class, two.class, three.class]
15
+ end
16
+ end
17
+
18
+ Cl.new('owners').run(%w(cmd 1 2.1 yes))
19
+
20
+ # Output:
21
+ #
22
+ # [Integer, Float, TrueClass]
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Lft < Cl::Cmd
7
+ register :lft
8
+
9
+ arg :a, type: :array, splat: true
10
+ arg :b
11
+ arg :c
12
+
13
+ def run
14
+ p [a, b, c]
15
+ end
16
+ end
17
+
18
+ class Mid < Cl::Cmd
19
+ register :mid
20
+
21
+ arg :a
22
+ arg :b, type: :array, splat: true
23
+ arg :c
24
+
25
+ def run
26
+ p [a, b, c]
27
+ end
28
+ end
29
+
30
+ class Rgt < Cl::Cmd
31
+ register :rgt
32
+
33
+ arg :a
34
+ arg :b
35
+ arg :c, type: :array, splat: true
36
+
37
+ def run
38
+ p [a, b, c]
39
+ end
40
+ end
41
+
42
+ Cl.new('splat').run(%w(lft 1 2 3 4 5))
43
+
44
+ # Output:
45
+ #
46
+ # [["1", "2", "3"], "4", "5"]
47
+
48
+ Cl.new('splat').run(%w(mid 1 2 3 4 5))
49
+
50
+ # Output:
51
+ #
52
+ # ["1", ["2", "3", "4"], "5"]
53
+
54
+ Cl.new('splat').run(%w(rgt 1 2 3 4 5))
55
+
56
+ # Output:
57
+ #
58
+ # ["1", "2", ["3", "4", "5"]]
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--to GROUP', type: :array
10
+
11
+ def run
12
+ p to
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add --to one --to two))
17
+
18
+ # Output:
19
+ #
20
+ # ["one", "two"]
@@ -0,0 +1,67 @@
1
+ require 'cl'
2
+
3
+ # e.g. lib/owners/add.rb
4
+ module Owners
5
+ class Add < Cl::Cmd
6
+ register :add
7
+
8
+ summary 'Add one or more owners to an existing owner group'
9
+
10
+ description <<~str
11
+ Use this command to add one or more owners to an existing
12
+ owner group.
13
+
14
+ [...]
15
+ str
16
+
17
+ args :owner
18
+
19
+ opt '-t', '--to TO', 'An existing owner group'
20
+
21
+ def run
22
+ # implement adding the owner as given in `owner` (as well as `args`)
23
+ # to the group given in `to` (as well as `opts[:to]`).
24
+ p owner: owner, to: to, to?: to?, args: args, opts: opts
25
+ end
26
+ end
27
+ end
28
+
29
+ # Running this, e.g. using `bin/owners add one,two --to group` will instantiate the
30
+ # class `Owners::Add`, and call the method `run` on it.
31
+
32
+ # e.g. bin/owners
33
+ #
34
+ # args normally would be ARGV
35
+ args = %w(add one --to group)
36
+
37
+ Cl.new('owners').run(args)
38
+
39
+ # Output:
40
+ #
41
+ # {:owner=>"one", :to=>"group", :to?=>true, :args=>["one"], :opts=>{:to=>"group"}}
42
+
43
+ Cl.new('owners').run(%w(add --help))
44
+
45
+ # Output:
46
+ #
47
+ # Usage: owners add [owner] [options]
48
+ #
49
+ # Summary:
50
+ #
51
+ # Add one or more owners to an existing owner group
52
+ #
53
+ # Description:
54
+ #
55
+ # Use this command to add one or more owners to an existing
56
+ # owner group.
57
+ #
58
+ # [...]
59
+ #
60
+ # Arguments:
61
+ #
62
+ # owner type: string
63
+ #
64
+ # Options:
65
+ #
66
+ # -t --to TO An existing owner group (type: string)
67
+ # --help Get help on this command
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--to GROUP', default: 'default'
10
+
11
+ def run
12
+ p to: to
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add))
17
+
18
+ # Output:
19
+ #
20
+ # {:to=>"default"}
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--target GROUP', deprecated: 'Deprecated.'
10
+
11
+ def run
12
+ p target: target, deprecations: deprecations
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add --target one))
17
+
18
+ # Output:
19
+ #
20
+ # {:target=>"one", :deprecations=>{:target=>"Deprecated."}}
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--to GROUP', alias: :target, deprecated: :target
10
+
11
+ def run
12
+ p to: to, deprecations: deprecations
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add --target one))
17
+
18
+ # Output:
19
+ #
20
+ # {:to=>"one", :deprecations=>{:target=>:to}}
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ module Owners
7
+ class Add < Cl::Cmd
8
+ register :add
9
+
10
+ summary 'Add one or more owners to an existing owner group'
11
+
12
+ description <<~str
13
+ Use this command to add one or more owners to an existing
14
+ owner group.
15
+ str
16
+
17
+ examples <<~str
18
+ Adding a single user to the group admins:
19
+
20
+ owners add user --to admins
21
+
22
+ Adding a several users at once:
23
+
24
+ owners add one two three --to admins
25
+ str
26
+ end
27
+ end
28
+
29
+ Cl.new('owners').run(%w(add --help))
30
+
31
+ # Output:
32
+ #
33
+ # Usage: owners add [options]
34
+ #
35
+ # Summary:
36
+ #
37
+ # Add one or more owners to an existing owner group
38
+ #
39
+ # Description:
40
+ #
41
+ # Use this command to add one or more owners to an existing
42
+ # owner group.
43
+ #
44
+ # Options:
45
+ #
46
+ # --help Get help on this command
47
+ #
48
+ # Examples:
49
+ #
50
+ # Adding a single user to the group admins:
51
+ #
52
+ # owners add user --to admins
53
+ #
54
+ # Adding a several users at once:
55
+ #
56
+ # owners add one two three --to admins
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--to GROUP', downcase: true
10
+
11
+ def run
12
+ p to: to
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add --to ONE))
17
+
18
+ # Output:
19
+ #
20
+ # {:to=>"one"}
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--to GROUP', enum: %w(one two)
10
+
11
+ def run
12
+ p to: to
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add --to one))
17
+
18
+ # Output:
19
+ #
20
+ # {:to=>"one"}
21
+
22
+ Cl.new('owners').run(%w(add --to unknown))
23
+
24
+ # Output:
25
+ #
26
+ # Unknown value: to=unknown (known values: one, two)
27
+ #
28
+ # Usage: owners add [options]
29
+ #
30
+ # Options:
31
+ #
32
+ # --to GROUP type: string, known values: one, two
33
+ # --help Get help on this command
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--to GROUP', example: 'group-one'
10
+ end
11
+
12
+ Cl.new('owners').run(%w(add --help))
13
+
14
+ # Output:
15
+ #
16
+ # Usage: owners add [options]
17
+ #
18
+ # Options:
19
+ #
20
+ # --to GROUP type: string, e.g.: group-one
21
+ # --help Get help on this command
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--to GROUP', format: /^\w+$/
10
+
11
+ def run
12
+ p to: to
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add --to one))
17
+
18
+ # Output:
19
+ #
20
+ # {:to=>"one"}
21
+
22
+ Cl.new('owners').run(['add', '--to', 'does not match!'])
23
+
24
+ # Output:
25
+ #
26
+ # Invalid format: to (format: /^\w+$/)
27
+ #
28
+ # Usage: owners add [options]
29
+ #
30
+ # Options:
31
+ #
32
+ # --to GROUP type: string, format: /^\w+$/
33
+ # --help Get help on this command
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ require 'cl'
7
+
8
+ class Add < Cl::Cmd
9
+ register :add
10
+
11
+ opt '--to GROUP'
12
+ opt '--hidden', internal: true
13
+ end
14
+
15
+ Cl.new('owners').run(%w(add --help))
16
+
17
+ # Output:
18
+ #
19
+ # Usage: owners add [options]
20
+ #
21
+ # Options:
22
+ #
23
+ # --to GROUP type: string
24
+ # --help Get help on this command
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--notifications', 'Send out notifications to the team', negate: %w(skip)
10
+
11
+ def run
12
+ p notifications?
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add --notifications))
17
+
18
+ # Output:
19
+ #
20
+ # true
21
+
22
+ Cl.new('owners').run(%w(add --no_notifications))
23
+
24
+ # Output:
25
+ #
26
+ # false
27
+
28
+ Cl.new('owners').run(%w(add --no-notifications))
29
+
30
+ # Output:
31
+ #
32
+ # false
33
+
34
+ Cl.new('owners').run(%w(add --skip_notifications))
35
+
36
+ # Output:
37
+ #
38
+ # false
39
+
40
+ Cl.new('owners').run(%w(add --skip-notifications))
41
+
42
+ # Output:
43
+ #
44
+ # false
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--to GROUP', note: 'needs to be a group'
10
+ end
11
+
12
+ Cl.new('owners').run(%w(add --help))
13
+
14
+ # Output:
15
+ #
16
+ # Usage: owners add [options]
17
+ #
18
+ # Options:
19
+ #
20
+ # --to GROUP type: string, note: needs to be a group
21
+ # --help Get help on this command
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--to GROUP', 'Target group to add owners to'
10
+
11
+ def run
12
+ p opts: opts, to: to, to?: to?
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add --to one))
17
+
18
+ # Output:
19
+ #
20
+ # {:opts=>{:to=>"one"}, :to=>"one", :to?=>true}
21
+
22
+ Cl.new('owners').run(%w(add --help))
23
+
24
+ # Output:
25
+ #
26
+ # Usage: owners add [options]
27
+ #
28
+ # Options:
29
+ #
30
+ # --to GROUP Target group to add owners to (type: string)
31
+ # --help Get help on this command
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ # depending on its arity the block can receive:
10
+ #
11
+ # * value
12
+ # * value, name
13
+ # * value, name, type
14
+ # * value, name, type, opts
15
+ opt '--to GROUP' do |value|
16
+ opts[:to] = "group-#{value}"
17
+ end
18
+
19
+ def run
20
+ p to: to
21
+ end
22
+ end
23
+
24
+ Cl.new('owners').run(%w(add --to one))
25
+
26
+ # Output:
27
+ #
28
+ # {:to=>"group-one"}
29
+
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--retries COUNT', type: :integer, min: 1, max: 5
10
+
11
+ def run
12
+ p retries: retries
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add --retries 1))
17
+
18
+ # Output:
19
+ #
20
+ # {:retries=>1}
21
+
22
+ Cl.new('owners').run(%w(add --retries 10))
23
+
24
+ # Output:
25
+ #
26
+ # Out of range: retries (min: 1, max: 5)
27
+ #
28
+ # Usage: owners add [options]
29
+ #
30
+ # Options:
31
+ #
32
+ # --retries COUNT type: integer, min: 1, max: 5
33
+ # --help Get help on this command
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ module Cmd
5
+ class One < Cl::Cmd
6
+ register :one
7
+ end
8
+
9
+ class Two < Cl::Cmd
10
+ register :two
11
+ end
12
+ end
13
+
14
+ p Cl::Cmd[:one] # => Cmd::One
15
+ p Cl::Cmd[:two] # => Cmd::Two
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ class Add < Cl::Cmd
7
+ register :add
8
+
9
+ opt '--to GROUP', required: true
10
+
11
+ def run
12
+ p to: to
13
+ end
14
+ end
15
+
16
+ Cl.new('owners').run(%w(add --to one))
17
+
18
+ # Output:
19
+ #
20
+ # {:to=>"one"}
21
+
22
+ Cl.new('owners').run(%w(add))
23
+
24
+ # Output:
25
+ #
26
+ # Missing required option: to
27
+ #
28
+ # Usage: owners add [options]
29
+ #
30
+ # Options:
31
+ #
32
+ # --to GROUP type: string, required
33
+ # --help Get help on this command