toys-core 0.11.5 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +62 -0
  3. data/LICENSE.md +1 -1
  4. data/README.md +5 -2
  5. data/docs/guide.md +1 -1
  6. data/lib/toys/acceptor.rb +13 -4
  7. data/lib/toys/arg_parser.rb +7 -7
  8. data/lib/toys/cli.rb +170 -120
  9. data/lib/toys/compat.rb +71 -23
  10. data/lib/toys/completion.rb +18 -6
  11. data/lib/toys/context.rb +24 -15
  12. data/lib/toys/core.rb +6 -2
  13. data/lib/toys/dsl/base.rb +87 -0
  14. data/lib/toys/dsl/flag.rb +26 -20
  15. data/lib/toys/dsl/flag_group.rb +18 -14
  16. data/lib/toys/dsl/internal.rb +206 -0
  17. data/lib/toys/dsl/positional_arg.rb +26 -16
  18. data/lib/toys/dsl/tool.rb +180 -218
  19. data/lib/toys/errors.rb +64 -8
  20. data/lib/toys/flag.rb +662 -656
  21. data/lib/toys/flag_group.rb +24 -10
  22. data/lib/toys/input_file.rb +13 -7
  23. data/lib/toys/loader.rb +293 -140
  24. data/lib/toys/middleware.rb +46 -22
  25. data/lib/toys/mixin.rb +10 -8
  26. data/lib/toys/positional_arg.rb +21 -20
  27. data/lib/toys/settings.rb +914 -0
  28. data/lib/toys/source_info.rb +147 -35
  29. data/lib/toys/standard_middleware/add_verbosity_flags.rb +2 -0
  30. data/lib/toys/standard_middleware/apply_config.rb +6 -4
  31. data/lib/toys/standard_middleware/handle_usage_errors.rb +1 -0
  32. data/lib/toys/standard_middleware/set_default_descriptions.rb +19 -18
  33. data/lib/toys/standard_middleware/show_help.rb +19 -5
  34. data/lib/toys/standard_middleware/show_root_version.rb +2 -0
  35. data/lib/toys/standard_mixins/bundler.rb +24 -15
  36. data/lib/toys/standard_mixins/exec.rb +43 -34
  37. data/lib/toys/standard_mixins/fileutils.rb +3 -1
  38. data/lib/toys/standard_mixins/gems.rb +21 -17
  39. data/lib/toys/standard_mixins/git_cache.rb +46 -0
  40. data/lib/toys/standard_mixins/highline.rb +8 -8
  41. data/lib/toys/standard_mixins/terminal.rb +5 -5
  42. data/lib/toys/standard_mixins/xdg.rb +56 -0
  43. data/lib/toys/template.rb +11 -9
  44. data/lib/toys/{tool.rb → tool_definition.rb} +292 -226
  45. data/lib/toys/utils/completion_engine.rb +7 -2
  46. data/lib/toys/utils/exec.rb +162 -132
  47. data/lib/toys/utils/gems.rb +85 -60
  48. data/lib/toys/utils/git_cache.rb +813 -0
  49. data/lib/toys/utils/help_text.rb +117 -37
  50. data/lib/toys/utils/terminal.rb +11 -3
  51. data/lib/toys/utils/xdg.rb +293 -0
  52. data/lib/toys/wrappable_string.rb +9 -2
  53. data/lib/toys-core.rb +18 -6
  54. metadata +14 -7
@@ -17,11 +17,12 @@ module Toys
17
17
  #
18
18
  # @param type [Symbol] The type of group. Default is `:optional`.
19
19
  # @param desc [String,Array<String>,Toys::WrappableString] Short
20
- # description for the group. See {Toys::Tool#desc=} for a description
21
- # of allowed formats. Defaults to `"Flags"`.
20
+ # description for the group. See {Toys::ToolDefinition#desc} for a
21
+ # description of allowed formats. Defaults to `"Flags"`.
22
22
  # @param long_desc [Array<String,Array<String>,Toys::WrappableString>]
23
- # Long description for the flag group. See {Toys::Tool#long_desc=} for
24
- # a description of allowed formats. Defaults to the empty array.
23
+ # Long description for the flag group. See
24
+ # {Toys::ToolDefinition#long_desc} for a description of allowed
25
+ # formats. Defaults to the empty array.
25
26
  # @param name [String,Symbol,nil] The name of the group, or nil for no
26
27
  # name.
27
28
  # @return [Toys::FlagGroup::Base] A flag group of the correct subclass.
@@ -55,6 +56,7 @@ module Toys
55
56
  # Create a flag group.
56
57
  # This argument list is subject to change. Use {Toys::FlagGroup.create}
57
58
  # instead for a more stable interface.
59
+ #
58
60
  # @private
59
61
  #
60
62
  def initialize(name, desc, long_desc)
@@ -167,12 +169,16 @@ module Toys
167
169
  self
168
170
  end
169
171
 
170
- ## @private
172
+ ##
173
+ # @private
174
+ #
171
175
  def <<(flag)
172
176
  flags << flag
173
177
  end
174
178
 
175
- ## @private
179
+ ##
180
+ # @private
181
+ #
176
182
  def validation_errors(_seen)
177
183
  []
178
184
  end
@@ -182,7 +188,9 @@ module Toys
182
188
  # A FlagGroup containing all required flags
183
189
  #
184
190
  class Required < Base
185
- ## @private
191
+ ##
192
+ # @private
193
+ #
186
194
  def validation_errors(seen)
187
195
  results = []
188
196
  flags.each do |flag|
@@ -205,7 +213,9 @@ module Toys
205
213
  # A FlagGroup in which exactly one flag must be set
206
214
  #
207
215
  class ExactlyOne < Base
208
- ## @private
216
+ ##
217
+ # @private
218
+ #
209
219
  def validation_errors(seen)
210
220
  seen_names = []
211
221
  flags.each do |flag|
@@ -228,7 +238,9 @@ module Toys
228
238
  # A FlagGroup in which at most one flag must be set
229
239
  #
230
240
  class AtMostOne < Base
231
- ## @private
241
+ ##
242
+ # @private
243
+ #
232
244
  def validation_errors(seen)
233
245
  seen_names = []
234
246
  flags.each do |flag|
@@ -248,7 +260,9 @@ module Toys
248
260
  # A FlagGroup in which at least one flag must be set
249
261
  #
250
262
  class AtLeastOne < Base
251
- ## @private
263
+ ##
264
+ # @private
265
+ #
252
266
  def validation_errors(seen)
253
267
  flags.each do |flag|
254
268
  return [] if seen.include?(flag.key)
@@ -5,17 +5,21 @@
5
5
  # is parsed, a module is created under this parent for that file's constants.
6
6
  #
7
7
  module Toys::InputFile # rubocop:disable Style/ClassAndModuleChildren
8
- ## @private
8
+ ##
9
+ # @private
10
+ #
9
11
  def self.__binding
10
12
  binding
11
13
  end
12
14
 
13
- ## @private
14
- def self.evaluate(tool_class, remaining_words, source)
15
+ ##
16
+ # @private
17
+ #
18
+ def self.evaluate(tool_class, words, priority, remaining_words, source, loader)
15
19
  namespace = ::Module.new
16
20
  namespace.module_eval do
17
21
  include ::Toys::Context::Key
18
- @tool_class = tool_class
22
+ @__tool_class = tool_class
19
23
  end
20
24
  path = source.source_path
21
25
  basename = ::File.basename(path).tr(".-", "_").gsub(/\W/, "")
@@ -23,7 +27,7 @@ module Toys::InputFile # rubocop:disable Style/ClassAndModuleChildren
23
27
  str = build_eval_string(name, ::IO.read(path))
24
28
  if str
25
29
  const_set(name, namespace)
26
- ::Toys::DSL::Tool.prepare(tool_class, remaining_words, source) do
30
+ ::Toys::DSL::Internal.prepare(tool_class, words, priority, remaining_words, source, loader) do
27
31
  ::Toys::ContextualError.capture_path("Error while loading Toys config!", path) do
28
32
  # rubocop:disable Security/Eval
29
33
  eval(str, __binding, path, -2)
@@ -33,13 +37,15 @@ module Toys::InputFile # rubocop:disable Style/ClassAndModuleChildren
33
37
  end
34
38
  end
35
39
 
36
- ## @private
40
+ ##
41
+ # @private
42
+ #
37
43
  def self.build_eval_string(module_name, string)
38
44
  index = string.index(/^\s*[^#\s]/)
39
45
  return nil if index.nil?
40
46
  "#{string[0, index]}\n" \
41
47
  "module #{module_name}\n" \
42
- "@tool_class.class_eval do\n" \
48
+ "@__tool_class.class_eval do\n" \
43
49
  "#{string[index..-1]}\n" \
44
50
  "end\n" \
45
51
  "end\n"