toys-core 0.11.5 → 0.13.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 (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
data/lib/toys/errors.rb CHANGED
@@ -40,10 +40,13 @@ module Toys
40
40
  end
41
41
 
42
42
  ##
43
- # A wrapper exception used to provide user-oriented context for an exception
43
+ # A wrapper exception used to provide user-oriented context for an error
44
+ # thrown during tool execution.
44
45
  #
45
46
  class ContextualError < ::StandardError
46
- ## @private
47
+ ##
48
+ # @private
49
+ #
47
50
  def initialize(cause, banner,
48
51
  config_path: nil, config_line: nil,
49
52
  tool_name: nil, tool_args: nil)
@@ -54,18 +57,69 @@ module Toys
54
57
  @config_line = config_line
55
58
  @tool_name = tool_name
56
59
  @tool_args = tool_args
60
+ set_backtrace(cause.backtrace)
57
61
  end
58
62
 
63
+ ##
64
+ # The underlying exception
65
+ # @return [::StandardError]
66
+ #
59
67
  attr_reader :cause
68
+
69
+ ##
70
+ # An overall banner message
71
+ # @return [String]
72
+ #
60
73
  attr_reader :banner
61
74
 
62
- attr_accessor :config_path
63
- attr_accessor :config_line
64
- attr_accessor :tool_name
65
- attr_accessor :tool_args
75
+ ##
76
+ # The path to the toys config file in which the error was detected
77
+ # @return [String]
78
+ #
79
+ attr_reader :config_path
80
+
81
+ ##
82
+ # The line number in the toys config file in which the error was detected
83
+ # @return [Integer]
84
+ #
85
+ attr_reader :config_line
86
+
87
+ ##
88
+ # The full name of the tool that was running when the error occurred
89
+ # @return [Array<String>]
90
+ #
91
+ attr_reader :tool_name
92
+
93
+ ##
94
+ # The arguments passed to the tool that was running when the error occurred
95
+ # @return [Array<String>]
96
+ #
97
+ attr_reader :tool_args
98
+
99
+ ##
100
+ # @private
101
+ #
102
+ attr_writer :config_path
103
+
104
+ ##
105
+ # @private
106
+ #
107
+ attr_writer :config_line
108
+
109
+ ##
110
+ # @private
111
+ #
112
+ attr_writer :tool_name
113
+
114
+ ##
115
+ # @private
116
+ #
117
+ attr_writer :tool_args
66
118
 
67
119
  class << self
68
- ## @private
120
+ ##
121
+ # @private
122
+ #
69
123
  def capture_path(banner, path, **opts)
70
124
  yield
71
125
  rescue ContextualError => e
@@ -85,7 +139,9 @@ module Toys
85
139
  raise e
86
140
  end
87
141
 
88
- ## @private
142
+ ##
143
+ # @private
144
+ #
89
145
  def capture(banner, **opts)
90
146
  yield
91
147
  rescue ContextualError => e