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
data/cl.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+
3
+ $:.unshift File.expand_path('../lib', __FILE__)
4
+ require 'cl/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'travis-cl'
8
+ s.version = Cl::VERSION
9
+ s.authors = ['Sven Fuchs']
10
+ s.homepage = 'https://github.com/svenfuchs/cl'
11
+ s.licenses = ['MIT']
12
+ s.summary = 'Object-oriented OptionParser based CLI support'
13
+ s.description = <<-str.strip.gsub(/^ +/, '')
14
+ OptionParser based CLI support for rapid CLI development in an object-oriented
15
+ context.
16
+
17
+ This library wraps Ruby's OptionParser for parsing your options under the hood,
18
+ so you get all the goodness that the Ruby standard library provides.
19
+
20
+ On top of that it adds a rich and powerful DSL for defining, validating, and
21
+ normalizing options, as well as automatic and gorgeous help output (modeled
22
+ after `gem --help`).
23
+ str
24
+
25
+ s.files = Dir.glob('{examples/**/*,lib/**/*,[A-Z]*}')
26
+ s.platform = Gem::Platform::RUBY
27
+ s.require_path = 'lib'
28
+
29
+ s.add_dependency 'regstry', '~> 1.0'
30
+ end
@@ -0,0 +1,22 @@
1
+ # Cl Examples
2
+
3
+ This directory contains examples for using `cl`.
4
+
5
+ Examples are executable, so you can try them out and experiment with them. E.g.:
6
+
7
+ ```
8
+ git clone https://github.com/svenfuchs/cl.git /tmp/cl
9
+ cd /tmp/cl
10
+ examples/gem
11
+ ```
12
+
13
+ Examples are generated and verified by running:
14
+
15
+ ```
16
+ bundle exec bin/examples
17
+ ```
18
+
19
+ This command runs on [on Travis CI](https://github.com/svenfuchs/cl/blob/master/.travis.yml#L14)
20
+ in order to guarantee that all examples are up to date,
21
+ but also can be run in order to add or update examples.
22
+
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ <%= run sq(<<-'rb')
5
+ require 'cl'
6
+
7
+ module Cast
8
+ class Bool < Cl::Cmd
9
+ register :bool
10
+
11
+ arg :bool, type: :bool
12
+
13
+ def run
14
+ p cmd: registry_key, bool: bool
15
+ end
16
+ end
17
+
18
+ class Types < Cl::Cmd
19
+ register :types
20
+
21
+ arg :a, type: :bool
22
+ arg :b, type: :int
23
+ arg :c, type: :float
24
+ arg :d
25
+
26
+ def run
27
+ p cmd: registry_key, a: a, b: b, c: c, d: d
28
+ end
29
+ end
30
+ end
31
+ rb
32
+ -%>
33
+
34
+ <%= run 'Cl.new($0).run(%w(bool on))' %>
35
+
36
+ <%= out '{:cmd=>:bool, :bool=>true}' %>
37
+
38
+ <%= run 'Cl.new($0).run(%w(types true 1 1.2 foo))' %>
39
+
40
+ <%= out '{:cmd=>:types, :a=>true, :b=>1, :c=>1.2, :d=>"foo"}' %>
41
+
42
+ <%= run 'Cl.new($0).run(%w(types true 1 1.2 foo bar))' %>
43
+
44
+ <%= out sq(<<-'str')
45
+ Too many arguments: true 1 1.2 foo bar (given: 5, allowed: 4)
46
+
47
+ Usage: bin/examples types [a:bool] [b:int] [c:float] [d] [options]
48
+
49
+ Arguments:
50
+
51
+ a type: bool
52
+ b type: int
53
+ c type: float
54
+ d type: string
55
+
56
+ Options:
57
+
58
+ --help Get help on this command
59
+ str
60
+ %>
61
+
62
+ <%= run 'Cl.new($0).run(%w(types true one 1.2))' %>
63
+
64
+ <%= out sq(<<-'str')
65
+ Wrong argument type (given: "one", expected: int)
66
+
67
+ Usage: bin/examples types [a:bool] [b:int] [c:float] [d] [options]
68
+
69
+ Arguments:
70
+
71
+ a type: bool
72
+ b type: int
73
+ c type: float
74
+ d type: string
75
+
76
+ Options:
77
+
78
+ --help Get help on this command
79
+ str
80
+ %>
81
+
82
+ <%= run 'Cl.new($0).run(%w(types true 1 one))' %>
83
+
84
+ <%= out sq(<<-'str')
85
+ Wrong argument type (given: "one", expected: float)
86
+
87
+ Usage: bin/examples types [a:bool] [b:int] [c:float] [d] [options]
88
+
89
+ Arguments:
90
+
91
+ a type: bool
92
+ b type: int
93
+ c type: float
94
+ d type: string
95
+
96
+ Options:
97
+
98
+ --help Get help on this command
99
+ str
100
+ %>
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ <%= run sq(<<-'rb')
5
+ require 'cl'
6
+
7
+ module Opts
8
+ class Bool < Cl::Cmd
9
+ register :bool
10
+
11
+ arg :bool, type: :bool
12
+
13
+ def run
14
+ p cmd: registry_key, bool: bool
15
+ end
16
+ end
17
+
18
+ class Types < Cl::Cmd
19
+ register :types
20
+
21
+ arg :a, type: :bool
22
+ arg :b, type: :int
23
+ arg :c, type: :float
24
+ arg :d
25
+
26
+ def run
27
+ p cmd: registry_key, a: a, b: b, c: c, d: d
28
+ end
29
+ end
30
+ end
31
+ rb
32
+ -%>
33
+
34
+ <%= run 'Cl.new($0).run(%w(bool on))' %>
35
+
36
+ <%= out '{:cmd=>:bool, :bool=>true}' %>
37
+
38
+ <%= run 'Cl.new($0).run(%w(types true 1 1.2 foo))' %>
39
+
40
+ <%= out '{:cmd=>:types, :a=>true, :b=>1, :c=>1.2, :d=>"foo"}' %>
41
+
42
+ <%= run 'Cl.new($0).run(%w(types true 1 1.2 foo bar))' %>
43
+
44
+ <%= out sq(<<-'str')
45
+ Too many arguments: true 1 1.2 foo bar (given: 5, allowed: 4)
46
+
47
+ Usage: bin/examples types [a:bool] [b:int] [c:float] [d] [options]
48
+
49
+ Arguments:
50
+
51
+ a type: bool
52
+ b type: int
53
+ c type: float
54
+ d type: string
55
+
56
+ Options:
57
+
58
+ --help Get help on this command
59
+ str
60
+ %>
61
+
62
+ <%= run 'Cl.new($0).run(%w(types true one 1.2))' %>
63
+
64
+ <%= out sq(<<-'str')
65
+ Wrong argument type (given: "one", expected: int)
66
+
67
+ Usage: bin/examples types [a:bool] [b:int] [c:float] [d] [options]
68
+
69
+ Arguments:
70
+
71
+ a type: bool
72
+ b type: int
73
+ c type: float
74
+ d type: string
75
+
76
+ Options:
77
+
78
+ --help Get help on this command
79
+ str
80
+ %>
81
+
82
+ <%= run 'Cl.new($0).run(%w(types true 1 one))' %>
83
+
84
+ <%= out sq(<<-'str')
85
+ Wrong argument type (given: "one", expected: float)
86
+
87
+ Usage: bin/examples types [a:bool] [b:int] [c:float] [d] [options]
88
+
89
+ Arguments:
90
+
91
+ a type: bool
92
+ b type: int
93
+ c type: float
94
+ d type: string
95
+
96
+ Options:
97
+
98
+ --help Get help on this command
99
+ str
100
+ %>
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ <%= run sq(<<-'rb')
5
+ require 'cl'
6
+
7
+ class Required < Cl::Cmd
8
+ register :required
9
+
10
+ arg :one, required: true
11
+ arg :two
12
+
13
+ def run
14
+ p cmd: registry_key, one: one, two: two
15
+ end
16
+ end
17
+ rb
18
+ -%>
19
+
20
+ <%= run 'Cl.new($0).run(%w(required one two))' %>
21
+
22
+ <%= out '{:cmd=>:required, :one=>"one", :two=>"two"}' %>
23
+
24
+ <%= run 'Cl.new($0).run(%w(required one))' %>
25
+
26
+ <%= out '{:cmd=>:required, :one=>"one", :two=>nil}' %>
27
+
28
+ <%= run 'Cl.new($0).run(%w(required))' %>
29
+
30
+ <%= out sq(<<-'str')
31
+ Missing arguments (given: 0, required: 1)
32
+
33
+ Usage: bin/examples required one [two] [options]
34
+
35
+ Arguments:
36
+
37
+ one type: string, required
38
+ two type: string
39
+
40
+ Options:
41
+
42
+ --help Get help on this command
43
+ str
44
+ %>
45
+
46
+ <%= run 'Cl.new($0).run(%w(required one two three))' %>
47
+
48
+ <%= out sq(<<-'str')
49
+ Too many arguments: one two three (given: 3, allowed: 2)
50
+
51
+ Usage: bin/examples required one [two] [options]
52
+
53
+ Arguments:
54
+
55
+ one type: string, required
56
+ two type: string
57
+
58
+ Options:
59
+
60
+ --help Get help on this command
61
+ str
62
+ %>
63
+
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ <%= run sq(<<-'rb')
5
+ require 'cl'
6
+
7
+ module Splat
8
+ class Left < Cl::Cmd
9
+ register :left
10
+
11
+ arg :one, type: :array, splat: true
12
+ args :two, :three
13
+
14
+ def run
15
+ p cmd: registry_key, one: one, two: two, three: three
16
+ end
17
+ end
18
+
19
+ class Middle < Cl::Cmd
20
+ register :middle
21
+
22
+ arg :one
23
+ arg :two, type: :array, splat: true
24
+ arg :three
25
+
26
+ def run
27
+ p cmd: registry_key, one: one, two: two, three: three
28
+ end
29
+ end
30
+
31
+ class Right < Cl::Cmd
32
+ register :right
33
+
34
+ args :one, :two
35
+ arg :three, type: :array, splat: true
36
+
37
+ def run
38
+ p cmd: registry_key, one: one, two: two, three: three
39
+ end
40
+ end
41
+ end
42
+ rb
43
+ -%>
44
+
45
+ <%= run "Cl.new('splat').run(%w(left foo bar baz buz))" %>
46
+
47
+ <%= out '{:cmd=>:left, :one=>["foo", "bar"], :two=>"baz", :three=>"buz"}' %>
48
+
49
+ <%= run "Cl.new('splat').run(%w(middle foo bar baz buz))" %>
50
+
51
+ <%= out '{:cmd=>:middle, :one=>"foo", :two=>["bar", "baz"], :three=>"buz"}' %>
52
+
53
+ <%= run "Cl.new('splat').run(%w(right foo bar baz buz))" %>
54
+
55
+ <%= out '{:cmd=>:right, :one=>"foo", :two=>"bar", :three=>["baz", "buz"]}' %>
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ <%= run sq(<<-'rb')
5
+ require 'cl'
6
+
7
+ module Gem
8
+ module Release
9
+ module Cmds
10
+ class Release < Cl::Cmd
11
+ register 'release'
12
+
13
+ arg :gemspec
14
+
15
+ opt '-h', '--host HOST', 'Push to a compatible host other than rubygems.org'
16
+ opt '-k', '--key KEY', 'Rubygems API key to use'
17
+ opt '-q', '--quiet', 'Silence output'
18
+
19
+ def run
20
+ p cmd: registry_key, args: args, opts: opts
21
+ end
22
+ end
23
+
24
+ class Bump < Cl::Cmd
25
+ register 'bump'
26
+
27
+ opt '-v', '--version VERSION', 'The version to bump to [1.1.1|major|minor|patch|pre|rc|release]'
28
+ opt '--[no-]commit', 'Bump the version, but do not commit'
29
+
30
+ def run
31
+ p cmd: registry_key, args: args, opts: opts
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ rb
38
+ -%>
39
+
40
+ <%= run "Cl.new('gem').run(%w(help))" %>
41
+
42
+ <%= out sq(<<-'str')
43
+ Type "gem help COMMAND [SUBCOMMAND]" for more details:
44
+
45
+ gem release [gemspec] [options]
46
+ gem bump [options]
47
+ str
48
+ %>
49
+
50
+
51
+ <%= run "Cl.new('gem').run(%w(help release))" %>
52
+ # or:
53
+ #
54
+ # Cl.new('gem').run(%w(release --help)))
55
+ # Cl.new('gem').run(%w(release -h)))
56
+ #
57
+ <%= out sq(<<-'str')
58
+ Usage: gem release [gemspec] [options]
59
+
60
+ Arguments:
61
+
62
+ gemspec type: string
63
+
64
+ Options:
65
+
66
+ -h --host HOST Push to a compatible host other than rubygems.org (type: string)
67
+ -k --key KEY Rubygems API key to use (type: string)
68
+ -q --[no-]quiet Silence output
69
+ --help Get help on this command
70
+ str
71
+ %>
72
+
73
+
74
+ <%= run "Cl.new('gem').run(%w(help bump))" %>
75
+ # or:
76
+ #
77
+ # Cl.new('gem').run(%w(bump --help)))
78
+ # Cl.new('gem').run(%w(bump -h)))
79
+ #
80
+ <%= out sq(<<-'str')
81
+ Usage: gem bump [options]
82
+
83
+ Options:
84
+
85
+ -v --version VERSION The version to bump to [1.1.1|major|minor|patch|pre|rc|release] (type: string)
86
+ --[no-]commit Bump the version, but do not commit
87
+ --help Get help on this command
88
+ str
89
+ %>
90
+
91
+
92
+ <%= run "Cl.new('gem').run(%w(bump -v 1.1.1))" %>
93
+
94
+ <%= out '{:cmd=>:bump, :args=>[], :opts=>{:version=>"1.1.1"}}' %>
95
+
96
+
97
+ <%= run "Cl.new('gem').run(%w(release foo.gemspec -h host -k key -q))" %>
98
+
99
+ <%= out '{:cmd=>:release, :args=>["foo.gemspec"], :opts=>{:host=>"host", :key=>"key", :quiet=>true}}' %>
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ <%= run sq(<<-'rb')
5
+ require 'cl'
6
+
7
+ module Heroku
8
+ module Apps
9
+ class Create < Cl::Cmd
10
+ register 'apps:create'
11
+
12
+ arg :name, required: true
13
+
14
+ opt '-o', '--org ORG'
15
+
16
+ def run
17
+ p cmd: registry_key, args: args, opts: opts
18
+ end
19
+ end
20
+
21
+ class List < Cl::Cmd
22
+ register 'apps:info'
23
+
24
+ opt '-a', '--app APP'
25
+
26
+ def run
27
+ p cmd: registry_key, args: args, opts: opts
28
+ end
29
+ end
30
+ end
31
+ end
32
+ rb
33
+ -%>
34
+
35
+ <%= run "Cl.new('heroku').run(%w(apps:create name -o org))" %>
36
+ # or:
37
+ #
38
+ # Cl.new('heroku').run(%w(apps create name -o org))
39
+
40
+ <%= out '{:cmd=>:"apps:create", :args=>["name"], :opts=>{:org=>"org"}}' %>
41
+
42
+ <%= run "Cl.new('heroku').run(%w(apps:info -a app))" %>
43
+ # or:
44
+ #
45
+ # Cl.new('heroku').run(%w(apps info -a app))
46
+
47
+ <%= out '{:cmd=>:"apps:info", :args=>[], :opts=>{:app=>"app"}}' %>
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ <%= run sq(<<-'rb')
5
+ require 'cl'
6
+
7
+ module Rakeish
8
+ module Db
9
+ class Create < Cl::Cmd
10
+ register 'db:create'
11
+
12
+ arg :name
13
+
14
+ def run
15
+ p cmd: registry_key, args: args, opts: opts
16
+ end
17
+ end
18
+
19
+ class Drop < Cl::Cmd
20
+ register 'db:drop'
21
+
22
+ arg :name
23
+
24
+ opt '-f', '--force'
25
+
26
+ def run
27
+ p cmd: registry_key, args: args, opts: opts
28
+ end
29
+ end
30
+
31
+ class Migrate < Cl::Cmd
32
+ register 'db:migrate'
33
+
34
+ arg :name
35
+
36
+ opt '-v', '--version VERSION'
37
+
38
+ def run
39
+ p cmd: registry_key, args: args, opts: opts
40
+ end
41
+ end
42
+ end
43
+ end
44
+ rb
45
+ -%>
46
+
47
+ <%= run "Cl.new('rake', runner: :multi).run(%w(db:drop production -f db:create db:migrate production -v 1))" %>
48
+
49
+ <%= out sq(<<-'str')
50
+ {:cmd=>:"db:drop", :args=>["production"], :opts=>{:force=>true}}
51
+ {:cmd=>:"db:create", :args=>[], :opts=>{}}
52
+ {:cmd=>:"db:migrate", :args=>["production"], :opts=>{:version=>"1"}}
53
+ str
54
+ %>
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ require 'cl'
5
+
6
+ <%= run sq(<<-'rb')
7
+ class Base < Cl::Cmd
8
+ abstract
9
+ end
10
+
11
+ class Add < Base
12
+ register :add
13
+
14
+ def run
15
+ puts 'Success'
16
+ end
17
+ end
18
+ rb
19
+ -%>
20
+
21
+ <%= run "Cl.new('owners').run(%w(add))" %>
22
+
23
+ <%= out 'Success' %>
24
+
25
+ <%= run "Cl.new('owners').run(%w(base))" %>
26
+
27
+ <%= out 'Unknown command: base' %>
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ <%= run sq(<<-'rb')
5
+ require 'cl'
6
+
7
+ class Add < Cl::Cmd
8
+ register :add
9
+
10
+ opt '--to GROUP', alias: :group
11
+
12
+ def run
13
+ # p opts: opts, to: to, to?: to?, group: group, group?: group?
14
+ p opts: opts, to: to, to?: to?
15
+ end
16
+ end
17
+ rb
18
+ -%>
19
+
20
+ <%= run "Cl.new('owners').run(%w(add --group one))" %>
21
+
22
+ <%= out '{:opts=>{:to=>"one", :group=>"one"}, :to=>"one", :to?=>true}' %>
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ <%= run sq(<<-'rb')
5
+ require 'cl'
6
+
7
+ class Add < Cl::Cmd
8
+ register :add
9
+
10
+ arg :owner
11
+
12
+ def run
13
+ p owner: owner
14
+ end
15
+ end
16
+ rb
17
+ -%>
18
+
19
+ <%= run "Cl.new('owners').run(%w(add one))" %>
20
+
21
+ <%= out '{:owner=>"one"}' %>
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ <%= run sq(<<-'rb')
5
+ require 'cl'
6
+
7
+ class Add < Cl::Cmd
8
+ register :add
9
+
10
+ arg :owners, type: :array, sep: ','
11
+
12
+ def run
13
+ p owners: owners
14
+ end
15
+ end
16
+ rb
17
+ -%>
18
+
19
+ <%= run "Cl.new('owners').run(%w(add one,two))" %>
20
+
21
+ <%= out '{:owners=>["one", "two"]}' %>
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path('lib')
3
+
4
+ <%= run sq(<<-'rb')
5
+ require 'cl'
6
+
7
+ class Cmd < Cl::Cmd
8
+ register :cmd
9
+
10
+ arg :one, type: :integer
11
+ arg :two, type: :float
12
+ arg :three, type: :boolean
13
+
14
+ def run
15
+ p [one.class, two.class, three.class]
16
+ end
17
+ end
18
+ rb
19
+ -%>
20
+
21
+ <%= run "Cl.new('owners').run(%w(cmd 1 2.1 yes))" %>
22
+
23
+ <%= out "[#{RUBY_VERSION < '2.4' ? 'Fixnum' : 'Integer'}, Float, TrueClass]" %>