command_kit 0.4.1 → 0.5.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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog.md +6 -0
  3. data/README.md +3 -0
  4. data/command_kit.gemspec +7 -2
  5. data/lib/command_kit/completion/install.rb +276 -0
  6. data/lib/command_kit/env/prefix.rb +41 -0
  7. data/lib/command_kit/env/shell.rb +58 -0
  8. data/lib/command_kit/version.rb +1 -1
  9. metadata +4 -64
  10. data/spec/arguments/argument_spec.rb +0 -133
  11. data/spec/arguments/argument_value_spec.rb +0 -66
  12. data/spec/arguments_spec.rb +0 -279
  13. data/spec/bug_report_spec.rb +0 -266
  14. data/spec/colors_spec.rb +0 -771
  15. data/spec/command_kit_spec.rb +0 -8
  16. data/spec/command_name_spec.rb +0 -130
  17. data/spec/command_spec.rb +0 -123
  18. data/spec/commands/auto_load/subcommand_spec.rb +0 -82
  19. data/spec/commands/auto_load_spec.rb +0 -159
  20. data/spec/commands/auto_require_spec.rb +0 -142
  21. data/spec/commands/fixtures/test_auto_load/cli/commands/test1.rb +0 -10
  22. data/spec/commands/fixtures/test_auto_load/cli/commands/test2.rb +0 -10
  23. data/spec/commands/fixtures/test_auto_require/lib/test_auto_require/cli/commands/test1.rb +0 -10
  24. data/spec/commands/help_spec.rb +0 -66
  25. data/spec/commands/parent_command_spec.rb +0 -40
  26. data/spec/commands/subcommand_spec.rb +0 -99
  27. data/spec/commands_spec.rb +0 -865
  28. data/spec/description_spec.rb +0 -179
  29. data/spec/edit_spec.rb +0 -72
  30. data/spec/env/home_spec.rb +0 -46
  31. data/spec/env/path_spec.rb +0 -84
  32. data/spec/env_spec.rb +0 -123
  33. data/spec/examples_spec.rb +0 -211
  34. data/spec/exception_handler_spec.rb +0 -103
  35. data/spec/file_utils_spec.rb +0 -59
  36. data/spec/fixtures/template.erb +0 -5
  37. data/spec/help/man_spec.rb +0 -345
  38. data/spec/help_spec.rb +0 -94
  39. data/spec/inflector_spec.rb +0 -166
  40. data/spec/interactive_spec.rb +0 -415
  41. data/spec/main_spec.rb +0 -179
  42. data/spec/man_spec.rb +0 -46
  43. data/spec/open_app_spec.rb +0 -85
  44. data/spec/options/option_spec.rb +0 -343
  45. data/spec/options/option_value_spec.rb +0 -171
  46. data/spec/options/parser_spec.rb +0 -274
  47. data/spec/options/quiet_spec.rb +0 -51
  48. data/spec/options/verbose_spec.rb +0 -51
  49. data/spec/options/version_spec.rb +0 -146
  50. data/spec/options_spec.rb +0 -465
  51. data/spec/os/linux_spec.rb +0 -164
  52. data/spec/os_spec.rb +0 -233
  53. data/spec/package_manager_spec.rb +0 -806
  54. data/spec/pager_spec.rb +0 -217
  55. data/spec/printing/fields_spec.rb +0 -167
  56. data/spec/printing/indent_spec.rb +0 -132
  57. data/spec/printing/lists_spec.rb +0 -99
  58. data/spec/printing/tables/border_style.rb +0 -43
  59. data/spec/printing/tables/cell_builer_spec.rb +0 -135
  60. data/spec/printing/tables/row_builder_spec.rb +0 -165
  61. data/spec/printing/tables/style_spec.rb +0 -377
  62. data/spec/printing/tables/table_builder_spec.rb +0 -252
  63. data/spec/printing/tables/table_formatter_spec.rb +0 -1190
  64. data/spec/printing/tables_spec.rb +0 -1069
  65. data/spec/printing_spec.rb +0 -106
  66. data/spec/program_name_spec.rb +0 -70
  67. data/spec/spec_helper.rb +0 -3
  68. data/spec/stdio_spec.rb +0 -264
  69. data/spec/sudo_spec.rb +0 -51
  70. data/spec/terminal_spec.rb +0 -231
  71. data/spec/usage_spec.rb +0 -237
  72. data/spec/xdg_spec.rb +0 -191
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a35e836c936c91aa916f33e691260a591d2e363de6a0fd3d9259150b86add15
4
- data.tar.gz: fe2e2cc87a8a0fe889cba23b5567b307bb088fdf3ee4eff7d681694a981b5143
3
+ metadata.gz: 5f815869f166ce21da0c32699e8dcd7cebdb17cdbcc74fba1be3572ebb2d15a0
4
+ data.tar.gz: 2e2db9a8f190308d473959274dad507095baba55e0e73f7fcd969a4f23267054
5
5
  SHA512:
6
- metadata.gz: da2676ab635edc9898457b1c532af6ac4c478c6f3a0ab19dfc42f0abc4ddd73ef4f473fe7699f8bed3ac5abec3381a7a9ca9c50736c4cc3697612ef36f3d6fea
7
- data.tar.gz: d30a04ab5274f489ef3e534950301669d47112ee56d43b59e51c5e816f7de21fba72197d43f3362331c40f3e75a70e0c316d53fe12bf8960daf79efec270a372
6
+ metadata.gz: b0055ba75d1dc4aef15bf280ed86f5d4a514e5e95c00bc1285c9f29327d5b03ab4415a6001bc4ee05be04bb5504b2d6a0a8de0d33f6048a1ea333adb93915f54
7
+ data.tar.gz: a198cc0fe966abb5f20f5025b52144bce290d06602e93afd13e2eca03d8aa87477511a598562f023ef921490084c200896c453e78b75d9061216dc8e548f923b
data/ChangeLog.md CHANGED
@@ -1,3 +1,9 @@
1
+ ### 0.5.0 / 2024-01-04
2
+
3
+ * Added {CommandKit::Env::Shell}.
4
+ * Added {CommandKit::Env::Prefix}.
5
+ * Added {CommandKit::Completion::Install}.
6
+
1
7
  ### 0.4.1 / 2024-01-03
2
8
 
3
9
  * Added more examples of how to define sub-commands and sub-sub-commands.
data/README.md CHANGED
@@ -214,11 +214,14 @@ end
214
214
  * [CommandKit::Commands](https://rubydoc.info/gems/command_kit/CommandKit/Commands)
215
215
  * [CommandKit::Commands::AutoLoad](https://rubydoc.info/gems/command_kit/CommandKit/Commands/AutoLoad)
216
216
  * [CommandKit::Commands::AutoRequire](https://rubydoc.info/gems/command_kit/CommandKit/Commands/AutoRequire)
217
+ * [CommandKit::Completion::Install](https://rubydoc.info/gems/command_kit/CommandKit/Completion/Install)
217
218
  * [CommandKit::Description](https://rubydoc.info/gems/command_kit/CommandKit/Description)
218
219
  * [CommandKit::Edit](https://rubydoc.info/gems/command_kit/CommandKit/Edit)
219
220
  * [CommandKit::Env](https://rubydoc.info/gems/command_kit/CommandKit/Env)
220
221
  * [CommandKit::Env::Home](https://rubydoc.info/gems/command_kit/CommandKit/Env/Home)
221
222
  * [CommandKit::Env::Path](https://rubydoc.info/gems/command_kit/CommandKit/Env/Path)
223
+ * [CommandKit::Env::Prefix](https://rubydoc.info/gems/command_kit/CommandKit/Env/Prefix)
224
+ * [CommandKit::Env::Shell](https://rubydoc.info/gems/command_kit/CommandKit/Env/Shell)
222
225
  * [CommandKit::Examples](https://rubydoc.info/gems/command_kit/CommandKit/Examples)
223
226
  * [CommandKit::ExceptionHandler](https://rubydoc.info/gems/command_kit/CommandKit/ExceptionHandler)
224
227
  * [CommandKit::FileUtils](https://rubydoc.info/gems/command_kit/CommandKit/FileUtils)
data/command_kit.gemspec CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  Gem::Specification.new do |gem|
@@ -20,12 +22,15 @@ Gem::Specification.new do |gem|
20
22
  gem.homepage = gemspec['homepage']
21
23
  gem.metadata = gemspec['metadata'] if gemspec['metadata']
22
24
 
23
- glob = lambda { |patterns| gem.files & Dir[*patterns] }
25
+ glob = ->(patterns) { gem.files & Dir[*patterns] }
24
26
 
25
27
  gem.files = if gemspec['files'] then glob[gemspec['files']]
26
28
  else `git ls-files`.split($/)
27
29
  end
28
30
 
31
+ # exclude test files from the packages gem
32
+ gem.files -= glob[gemspec['test_files'] || 'spec/{**/}*']
33
+
29
34
  gem.executables = gemspec.fetch('executables') do
30
35
  glob['bin/*'].map { |path| File.basename(path) }
31
36
  end
@@ -43,7 +48,7 @@ Gem::Specification.new do |gem|
43
48
  gem.required_rubygems_version = gemspec['required_rubygems_version']
44
49
  gem.post_install_message = gemspec['post_install_message']
45
50
 
46
- split = lambda { |string| string.split(/,\s*/) }
51
+ split = ->(string) { string.split(/,\s*/) }
47
52
 
48
53
  if gemspec['dependencies']
49
54
  gemspec['dependencies'].each do |name,versions|
@@ -0,0 +1,276 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'command_kit/printing'
4
+ require 'command_kit/env/home'
5
+ require 'command_kit/env/shell'
6
+ require 'command_kit/env/prefix'
7
+ require 'fileutils'
8
+
9
+ module CommandKit
10
+ module Completion
11
+ #
12
+ # Mixins that adds methods for installing shell completion files.
13
+ #
14
+ # ## Environment Variables
15
+ #
16
+ # * `SHELL` - The current shell.
17
+ # * `PREFIX` - The optional root prefix of the file-system.
18
+ #
19
+ # @api public
20
+ #
21
+ # @since 0.5.0
22
+ #
23
+ module Install
24
+ include Printing
25
+ include Env::Home
26
+ include Env::Shell
27
+ include Env::Prefix
28
+
29
+ # The installation directory for completion files for the current shell.
30
+ #
31
+ # @return [String, nil]
32
+ # * Bash
33
+ # * Regular users: `~/.local/share/bash-completion/completions`
34
+ # * Root users:`$PREFIX/usr/local/share/bash-completion/completions`
35
+ # * Zsh: `$PREFIX/usr/local/share/zsh/site-functions`
36
+ # * Fish:
37
+ # * Regular users: `~/.config/fish/completions`
38
+ # * Root users: `$PREFIX/usr/local/share/fish/completions`
39
+ #
40
+ # @api private
41
+ attr_reader :completions_dir
42
+
43
+ #
44
+ # Initialize {#completions_dir} based on the `SHELL` environment variable
45
+ # and the UID of the process.
46
+ #
47
+ # @param [Hash{Symbol => Object}] kwargs
48
+ # Additional keyword arguments.
49
+ #
50
+ # @api public
51
+ #
52
+ def initialize(**kwargs)
53
+ super(**kwargs)
54
+
55
+ @completions_dir = case shell_type
56
+ when :bash
57
+ if Process.uid == 0
58
+ File.join(root,'usr','local','share','bash-completion','completions')
59
+ else
60
+ xdg_data_home = env.fetch('XDG_DATA_HOME') do
61
+ File.join(home_dir,'.local','share')
62
+ end
63
+
64
+ File.join(xdg_data_home,'bash-completion','completions')
65
+ end
66
+ when :zsh
67
+ File.join(root,'usr','local','share','zsh','site-functions')
68
+ when :fish
69
+ if Process.uid == 0
70
+ File.join(root,'usr','local','share','fish','completions')
71
+ else
72
+ xdg_config_home = env.fetch('XDG_CONFIG_HOME') do
73
+ File.join(home_dir,'.config')
74
+ end
75
+
76
+ File.join(xdg_config_home,'fish','completions')
77
+ end
78
+ end
79
+ end
80
+
81
+ #
82
+ # Prints the shell completion file to stdout.
83
+ #
84
+ # @param [String] path
85
+ # The path to the shell completion file.
86
+ #
87
+ # @param [Hash{Symbol => Object}] kwargs
88
+ # Additional keyword arguments.
89
+ #
90
+ # @option kwargs [:bash, :zsh, :fish] :type (:bash)
91
+ # The type of the completion file.
92
+ #
93
+ # @example Prints a Bash completion file:
94
+ # print_completion_file 'path/to/completions/foo'
95
+ #
96
+ # @example Prints a Zsh completion file:
97
+ # print_completion_file 'path/to/completions/foo', type: :zsh
98
+ #
99
+ # @example Prints a Fish completion file:
100
+ # print_completion_file 'path/to/completions/foo', type: :fish
101
+ #
102
+ # @api public
103
+ #
104
+ def print_completion_file(path,**kwargs)
105
+ write_completion_file(path,stdout,**kwargs)
106
+ end
107
+
108
+ #
109
+ # Installs the shell completion file into {#completions_dir}.
110
+ #
111
+ # @param [String] path
112
+ # The path to the shell completion file.
113
+ #
114
+ # @param [:bash, :zsh, :fish] type
115
+ # The type of the shell completion file.
116
+ #
117
+ # @example Install a Bash completion file:
118
+ # install_completion_file 'path/to/completions/foo'
119
+ #
120
+ # @example Install a Zsh completion file:
121
+ # install_completion_file 'path/to/completions/foo', type: :zsh
122
+ #
123
+ # @example Install a Fish completion file:
124
+ # install_completion_file 'path/to/completions/foo', type: :fish
125
+ #
126
+ # @api public
127
+ #
128
+ def install_completion_file(path, type: :bash)
129
+ completion_file = normalize_completion_file(path, type: type)
130
+ completion_path = File.join(@completions_dir,completion_file)
131
+
132
+ begin
133
+ ::FileUtils.mkdir_p(@completions_dir)
134
+ rescue Errno::EACCES
135
+ print_error "cannot write to #{shell_type} completions directory: #{@completions_dir}"
136
+ exit(-1)
137
+ end
138
+
139
+ begin
140
+ File.open(completion_path,'w') do |output|
141
+ write_completion_file(path,output, type: type)
142
+ end
143
+ rescue Errno::EACCES
144
+ print_error "cannot write to #{shell_type} completion file: #{completion_path}"
145
+ exit(-1)
146
+ end
147
+ end
148
+
149
+ #
150
+ # Uninstalls a shell completion file for the specified command.
151
+ #
152
+ # @param [String] command
153
+ # The command to uninstall the completions for.
154
+ #
155
+ # @example Removes the completion file for the command 'foo':
156
+ # uninstall_completion_file_for 'foo'
157
+ #
158
+ # @api public
159
+ #
160
+ def uninstall_completion_file_for(command)
161
+ completion_file = completion_file_for_command(command)
162
+ completion_path = File.join(@completions_dir,completion_file)
163
+
164
+ begin
165
+ ::FileUtils.rm_f(completion_path)
166
+ rescue Errno::EACCES
167
+ print_error "cannot remove #{shell_type} completion file: #{completion_path}"
168
+ exit(-1)
169
+ end
170
+ end
171
+
172
+ private
173
+
174
+ #
175
+ # Calculates the installed completion file for the given command.
176
+ #
177
+ # @param [String] command
178
+ # The command name.
179
+ #
180
+ # @return [String]
181
+ # The path to the completion file for the command.
182
+ #
183
+ # @api private
184
+ #
185
+ def completion_file_for_command(command)
186
+ case shell_type
187
+ when :bash then command
188
+ when :zsh then "_#{command}"
189
+ when :fish then "#{command}.fish"
190
+ when nil
191
+ if shell then print_error("cannot identify shell: #{shell}")
192
+ else print_error("cannot identify shell")
193
+ end
194
+
195
+ exit(-1)
196
+ else
197
+ print_error("completions not support for the #{shell_type} shell: #{shell}")
198
+ exit(-1)
199
+ end
200
+ end
201
+
202
+ #
203
+ # Calculates the installation path for the given completion file.
204
+ #
205
+ # @param [String] path
206
+ # The path to the completion file that will be installed.
207
+ #
208
+ # @param [:bash, :zsh, :fish] type
209
+ # The type of the shell completion file.
210
+ #
211
+ # @return [String]
212
+ # The installation path for the completion file.
213
+ #
214
+ # @api private
215
+ #
216
+ def normalize_completion_file(path, type: :bash)
217
+ ext = File.extname(path)
218
+ file = File.basename(path,ext)
219
+
220
+ case [shell_type, type]
221
+ when [:bash, :bash] # no-op
222
+ when [:zsh, :zsh],
223
+ [:zsh, :bash]
224
+ unless file.start_with?('_')
225
+ file = "_#{file}"
226
+ end
227
+ when [:fish, :fish]
228
+ file = "#{file}.fish"
229
+ else
230
+ if shell_type
231
+ print_error("cannot install #{type} completion file into the #{shell_type} shell: #{path}")
232
+ elsif shell
233
+ print_error("cannot identify shell: #{shell}")
234
+ else
235
+ print_error("cannot identify shell")
236
+ end
237
+
238
+ exit(-1)
239
+ end
240
+
241
+ return file
242
+ end
243
+
244
+ #
245
+ # Writes the shell completion file to the output
246
+ #
247
+ # @param [String] path
248
+ # The path to the shell completion file.
249
+ #
250
+ # @param [IO] output
251
+ # The output stream to write to.
252
+ #
253
+ # @param [:bash, :zsh, :fish] type
254
+ # The type of the shell completion file.
255
+ #
256
+ # @api private
257
+ #
258
+ def write_completion_file(path,output, type: :bash)
259
+ if shell_type == :zsh && type == :bash
260
+ file_name = File.basename(path,File.extname(path))
261
+ command = file_name.sub(/\A_/,'')
262
+
263
+ # add the #compdef magic comments for zsh
264
+ output.puts "#compdef #{command}"
265
+ output.puts
266
+ end
267
+
268
+ File.open(path) do |file|
269
+ file.each_line do |line|
270
+ output.write(line)
271
+ end
272
+ end
273
+ end
274
+ end
275
+ end
276
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'command_kit/env'
4
+
5
+ module CommandKit
6
+ module Env
7
+ #
8
+ # Methods related to the `PREFIX` environment variable.
9
+ #
10
+ # ## Environment Variables
11
+ #
12
+ # * `PREFIX` - The optional root prefix of the file-system.
13
+ #
14
+ # @since 0.5.0
15
+ #
16
+ module Prefix
17
+ include Env
18
+
19
+ # The root of the file-system.
20
+ #
21
+ # @return [String]
22
+ # The `PREFIX` environment variable, or `/` if no `PREFIX` environment
23
+ # variable is given.
24
+ attr_reader :root
25
+
26
+ #
27
+ # Initialize {#root} based on the `PREFIX` environment
28
+ #
29
+ # @param [Hash{Symbol => Object}] kwargs
30
+ # Additional keyword arguments.
31
+ #
32
+ # @api public
33
+ #
34
+ def initialize(**kwargs)
35
+ super(**kwargs)
36
+
37
+ @root = env.fetch('PREFIX','/')
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'command_kit/env'
4
+
5
+ module CommandKit
6
+ module Env
7
+ #
8
+ # Methods related to the `SHELL` environment variable.
9
+ #
10
+ # ## Environment Variables
11
+ #
12
+ # * `SHELL` - The current shell.
13
+ #
14
+ # @since 0.5.0
15
+ #
16
+ module Shell
17
+ include Env
18
+
19
+ # The current shell.
20
+ #
21
+ # @return [String, nil]
22
+ attr_reader :shell
23
+
24
+ # The current shell type.
25
+ #
26
+ # @return [:bash, :zsh, :fish, :dash, :mksh, :ksh, :tcsh, :csh, :sh, nil]
27
+ attr_reader :shell_type
28
+
29
+ #
30
+ # Initialize {#shell} and {#shell_type} based on the `SHELL` environment
31
+ # variable.
32
+ #
33
+ # @param [Hash{Symbol => Object}] kwargs
34
+ # Additional keyword arguments.
35
+ #
36
+ # @api public
37
+ #
38
+ def initialize(**kwargs)
39
+ super(**kwargs)
40
+
41
+ @shell = env['SHELL']
42
+ @shell_type = if @shell
43
+ case File.basename(@shell)
44
+ when /bash/ then :bash
45
+ when /zsh/ then :zsh
46
+ when /fish/ then :fish
47
+ when /dash/ then :dash
48
+ when /mksh/ then :mksh
49
+ when /ksh/ then :ksh
50
+ when /tcsh/ then :tcsh
51
+ when /csh/ then :csh
52
+ when /sh/ then :sh
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,4 +1,4 @@
1
1
  module CommandKit
2
2
  # command_kit version
3
- VERSION = "0.4.1"
3
+ VERSION = "0.5.0"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: command_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Postmodern
@@ -73,11 +73,14 @@ files:
73
73
  - lib/command_kit/commands/help.rb
74
74
  - lib/command_kit/commands/parent_command.rb
75
75
  - lib/command_kit/commands/subcommand.rb
76
+ - lib/command_kit/completion/install.rb
76
77
  - lib/command_kit/description.rb
77
78
  - lib/command_kit/edit.rb
78
79
  - lib/command_kit/env.rb
79
80
  - lib/command_kit/env/home.rb
80
81
  - lib/command_kit/env/path.rb
82
+ - lib/command_kit/env/prefix.rb
83
+ - lib/command_kit/env/shell.rb
81
84
  - lib/command_kit/examples.rb
82
85
  - lib/command_kit/exception_handler.rb
83
86
  - lib/command_kit/file_utils.rb
@@ -117,69 +120,6 @@ files:
117
120
  - lib/command_kit/usage.rb
118
121
  - lib/command_kit/version.rb
119
122
  - lib/command_kit/xdg.rb
120
- - spec/arguments/argument_spec.rb
121
- - spec/arguments/argument_value_spec.rb
122
- - spec/arguments_spec.rb
123
- - spec/bug_report_spec.rb
124
- - spec/colors_spec.rb
125
- - spec/command_kit_spec.rb
126
- - spec/command_name_spec.rb
127
- - spec/command_spec.rb
128
- - spec/commands/auto_load/subcommand_spec.rb
129
- - spec/commands/auto_load_spec.rb
130
- - spec/commands/auto_require_spec.rb
131
- - spec/commands/fixtures/test_auto_load/cli/commands/test1.rb
132
- - spec/commands/fixtures/test_auto_load/cli/commands/test2.rb
133
- - spec/commands/fixtures/test_auto_require/lib/test_auto_require/cli/commands/test1.rb
134
- - spec/commands/help_spec.rb
135
- - spec/commands/parent_command_spec.rb
136
- - spec/commands/subcommand_spec.rb
137
- - spec/commands_spec.rb
138
- - spec/description_spec.rb
139
- - spec/edit_spec.rb
140
- - spec/env/home_spec.rb
141
- - spec/env/path_spec.rb
142
- - spec/env_spec.rb
143
- - spec/examples_spec.rb
144
- - spec/exception_handler_spec.rb
145
- - spec/file_utils_spec.rb
146
- - spec/fixtures/template.erb
147
- - spec/help/man_spec.rb
148
- - spec/help_spec.rb
149
- - spec/inflector_spec.rb
150
- - spec/interactive_spec.rb
151
- - spec/main_spec.rb
152
- - spec/man_spec.rb
153
- - spec/open_app_spec.rb
154
- - spec/options/option_spec.rb
155
- - spec/options/option_value_spec.rb
156
- - spec/options/parser_spec.rb
157
- - spec/options/quiet_spec.rb
158
- - spec/options/verbose_spec.rb
159
- - spec/options/version_spec.rb
160
- - spec/options_spec.rb
161
- - spec/os/linux_spec.rb
162
- - spec/os_spec.rb
163
- - spec/package_manager_spec.rb
164
- - spec/pager_spec.rb
165
- - spec/printing/fields_spec.rb
166
- - spec/printing/indent_spec.rb
167
- - spec/printing/lists_spec.rb
168
- - spec/printing/tables/border_style.rb
169
- - spec/printing/tables/cell_builer_spec.rb
170
- - spec/printing/tables/row_builder_spec.rb
171
- - spec/printing/tables/style_spec.rb
172
- - spec/printing/tables/table_builder_spec.rb
173
- - spec/printing/tables/table_formatter_spec.rb
174
- - spec/printing/tables_spec.rb
175
- - spec/printing_spec.rb
176
- - spec/program_name_spec.rb
177
- - spec/spec_helper.rb
178
- - spec/stdio_spec.rb
179
- - spec/sudo_spec.rb
180
- - spec/terminal_spec.rb
181
- - spec/usage_spec.rb
182
- - spec/xdg_spec.rb
183
123
  homepage: https://github.com/postmodern/command_kit.rb#readme
184
124
  licenses:
185
125
  - MIT
@@ -1,133 +0,0 @@
1
- require 'spec_helper'
2
- require 'command_kit/arguments/argument'
3
-
4
- describe CommandKit::Arguments::Argument do
5
- let(:name) { :foo }
6
- let(:usage) { 'FOO' }
7
- let(:required) { true }
8
- let(:repeats) { false }
9
- let(:desc) { 'Foo argument' }
10
-
11
- subject do
12
- described_class.new name, usage: usage,
13
- required: required,
14
- repeats: repeats,
15
- desc: desc
16
- end
17
-
18
- describe "#initialize" do
19
- context "when the usage: keyword is given" do
20
- subject { described_class.new(name, usage: usage, desc: desc) }
21
-
22
- it "must include usage: in #usage" do
23
- expect(subject.usage).to include(usage)
24
- end
25
- end
26
-
27
- context "when the usage: keyword is not given" do
28
- subject { described_class.new(name, desc: desc) }
29
-
30
- it "should use uppercased argument name in #usage" do
31
- expect(subject.usage).to include(name.to_s.upcase)
32
- end
33
- end
34
-
35
- context "when the required: keyword is given" do
36
- subject { described_class.new(name, required: required, desc: desc) }
37
-
38
- it "must set #required" do
39
- expect(subject.required).to eq(required)
40
- end
41
- end
42
-
43
- context "when the required: keyword is not given" do
44
- subject { described_class.new(name, desc: desc) }
45
-
46
- it "default #required to String" do
47
- expect(subject.required).to eq(true)
48
- end
49
- end
50
-
51
- context "when the repeats: keyword is given" do
52
- subject { described_class.new(name, repeats: repeats, desc: desc) }
53
-
54
- it "must set #repeats" do
55
- expect(subject.repeats?).to eq(repeats)
56
- end
57
- end
58
-
59
- context "when the repeats: keyword is not given" do
60
- subject { described_class.new(name, desc: desc) }
61
-
62
- it "default #repeats to String" do
63
- expect(subject.repeats?).to eq(false)
64
- end
65
- end
66
-
67
- context "when the desc: keyword is given" do
68
- subject { described_class.new(name, desc: desc) }
69
-
70
- it "must set #desc" do
71
- expect(subject.desc).to eq(desc)
72
- end
73
- end
74
-
75
- context "when the desc: keyword is not given" do
76
- it do
77
- expect {
78
- described_class.new(name)
79
- }.to raise_error(ArgumentError)
80
- end
81
- end
82
- end
83
-
84
- describe "#repeats?" do
85
- context "when initialized with repeats: true" do
86
- let(:repeats) { true }
87
-
88
- it { expect(subject.repeats?).to be(true) }
89
- end
90
-
91
- context "when initialized with repeats: false" do
92
- let(:repeats) { false }
93
-
94
- it { expect(subject.repeats?).to be(false) }
95
- end
96
- end
97
-
98
- describe "#usage" do
99
- let(:usage) { 'FOO' }
100
-
101
- context "initialized with required: true" do
102
- let(:required) { true }
103
-
104
- it "must return the usage unchanged" do
105
- expect(subject.usage).to eq(usage)
106
- end
107
- end
108
-
109
- context "initialized with required: false" do
110
- let(:required) { false }
111
-
112
- it "must wrap the usage in [ ] brackets" do
113
- expect(subject.usage).to eq("[#{usage}]")
114
- end
115
- end
116
-
117
- context "initialized with repeats: true" do
118
- let(:repeats) { true }
119
-
120
- it "must append the ... ellipses" do
121
- expect(subject.usage).to eq("#{usage} ...")
122
- end
123
- end
124
-
125
- context "initialized with repeats: false" do
126
- let(:repeats) { false }
127
-
128
- it "must return the usage name unchanged" do
129
- expect(subject.usage).to eq(usage)
130
- end
131
- end
132
- end
133
- end