Class: Toys::Context
- Inherits:
-
Object
- Object
- Toys::Context
- Defined in:
- lib/toys/context.rb
Overview
This is the base class for tool execution. It represents self
when your
tool's methods (such as run
) are called, and it defines the methods that
can be called by your tool (such as #logger and #exit.)
This class also manages the "data" available to your tool when it runs. This data is a hash of key-value pairs. It consists of values set by flags and arguments defined by the tool, plus some "well-known" values such as the logger and verbosity level.
You can obtain a value from the data using the #get method.
Additionally, convenience methods are provided for many of the well-known
keys. For instance, you can call #verbosity to obtain the
value for the key Key::VERBOSITY. Finally, flags and
positional arguments that store their data here will also typically
generate convenience methods. For example, an argument with key :abc
will
add a method called abc
that you can call to get the value.
By convention, flags and arguments defined by your tool should use strings or symbols as keys. Keys that are not strings or symbols should either be well-known keys such as Key::VERBOSITY, or should be used for internal private information needed by middleware and mixins. The module Key defines a number of well-known keys as constants.
Direct Known Subclasses
Defined Under Namespace
Modules: Key
Class Method Summary collapse
-
.exit(code = 0) ⇒ void
Exit immediately with the given status code.
Instance Method Summary collapse
-
#[](key) ⇒ Object
(also: #get, #__get)
Fetch an option or other piece of data by key.
-
#[]=(key, value) ⇒ Object
Set an option or other piece of context data by key.
-
#__exit ⇒ void
Exit immediately with the given status code.
-
#args ⇒ Array<String>
(also: #__args)
The raw arguments passed to the tool, as an array of strings.
-
#cli ⇒ Toys::CLI
(also: #__cli)
The currently running CLI.
-
#context_directory ⇒ String?
(also: #__context_directory)
Return the context directory for this tool.
-
#exit(code = 0) ⇒ void
Exit immediately with the given status code.
-
#find_data(path, type: nil) ⇒ String?
(also: #__find_data)
Find the given data file or directory in this tool's search path.
-
#logger ⇒ Logger
(also: #__logger)
The logger for this execution.
-
#options ⇒ Hash
(also: #__options)
The subset of the context that uses string or symbol keys.
-
#set(key, value = nil) ⇒ self
(also: #__set)
Set one or more options or other context data by key.
-
#tool_name ⇒ Array<String>
(also: #__tool_name)
The full name of the tool being executed, as an array of strings.
-
#tool_source ⇒ Toys::SourceInfo
(also: #__tool_source)
The source of the tool being executed.
-
#usage_errors ⇒ Array<Toys::ArgParser::UsageError>
(also: #__usage_errors)
The (possibly empty) array of errors detected during argument parsing.
-
#verbosity ⇒ Integer
(also: #__verbosity)
The current verbosity setting as an integer.
Class Method Details
.exit(code = 0) ⇒ void
This method returns an undefined value.
Exit immediately with the given status code. This class method can be called if the instance method is or could be replaced by the tool.
374 375 376 377 |
# File 'lib/toys/context.rb', line 374 def self.exit(code = 0) code = -1 unless code.is_a?(::Integer) throw :result, code end |
Instance Method Details
#[](key) ⇒ Object Also known as: get, __get
Fetch an option or other piece of data by key.
If the get
method is overridden by the tool, you can still access it
using the name __get
or the []
operator.
270 271 272 |
# File 'lib/toys/context.rb', line 270 def [](key) @__data[key] end |
#[]=(key, value) ⇒ Object
Set an option or other piece of context data by key.
282 283 284 |
# File 'lib/toys/context.rb', line 282 def []=(key, value) @__data[key] = value end |
#__exit ⇒ void
This method returns an undefined value.
Exit immediately with the given status code.
If the exit
method is overridden by the tool, you can still access it
using the name __exit
or by calling exit.
364 365 366 |
# File 'lib/toys/context.rb', line 364 def exit(code = 0) Context.exit(code) end |
#args ⇒ Array<String> Also known as: __args
The raw arguments passed to the tool, as an array of strings. This does not include the tool name itself.
This is a convenience getter for Toys::Context::Key::ARGS.
If the args
method is overridden by the tool, you can still access it
using the name __args
.
147 148 149 |
# File 'lib/toys/context.rb', line 147 def args @__data[Key::ARGS] end |
#cli ⇒ Toys::CLI Also known as: __cli
The currently running CLI.
This is a convenience getter for Toys::Context::Key::CLI.
If the cli
method is overridden by the tool, you can still access it
using the name __cli
.
162 163 164 |
# File 'lib/toys/context.rb', line 162 def cli @__data[Key::CLI] end |
#context_directory ⇒ String? Also known as: __context_directory
Return the context directory for this tool. Generally, this defaults to the directory containing the toys config directory structure being read, but it may be changed by setting a different context directory for the tool.
This is a convenience getter for Toys::Context::Key::CONTEXT_DIRECTORY.
If the context_directory
method is overridden by the tool, you can
still access it using the name __context_directory
.
181 182 183 |
# File 'lib/toys/context.rb', line 181 def context_directory @__data[Key::CONTEXT_DIRECTORY] end |
#exit(code = 0) ⇒ void
This method returns an undefined value.
Exit immediately with the given status code.
If the exit
method is overridden by the tool, you can still access it
using the name __exit
or by calling exit.
361 362 363 |
# File 'lib/toys/context.rb', line 361 def exit(code = 0) Context.exit(code) end |
#find_data(path, type: nil) ⇒ String? Also known as: __find_data
Find the given data file or directory in this tool's search path.
If the find_data
method is overridden by the tool, you can still access
it using the name __find_data
.
346 347 348 |
# File 'lib/toys/context.rb', line 346 def find_data(path, type: nil) @__data[Key::TOOL_SOURCE].find_data(path, type: type) end |
#logger ⇒ Logger Also known as: __logger
The logger for this execution.
This is a convenience getter for Toys::Context::Key::LOGGER.
If the logger
method is overridden by the tool, you can still access it
using the name __logger
.
196 197 198 |
# File 'lib/toys/context.rb', line 196 def logger @__data[Key::LOGGER] end |
#options ⇒ Hash Also known as: __options
The subset of the context that uses string or symbol keys. By convention, this includes keys that are set by tool flags and arguments, but does not include well-known context values such as verbosity or private context values used by middleware or mixins.
If the options
method is overridden by the tool, you can still access
it using the name __options
.
326 327 328 329 330 |
# File 'lib/toys/context.rb', line 326 def @__data.select do |k, _v| k.is_a?(::Symbol) || k.is_a?(::String) end end |
#set(key, value) ⇒ self #set(hash) ⇒ self Also known as: __set
Set one or more options or other context data by key.
If the set
method is overridden by the tool, you can still access it
using the name __set
.
305 306 307 308 309 310 311 312 |
# File 'lib/toys/context.rb', line 305 def set(key, value = nil) if key.is_a?(::Hash) @__data.merge!(key) else @__data[key] = value end self end |
#tool_name ⇒ Array<String> Also known as: __tool_name
The full name of the tool being executed, as an array of strings.
This is a convenience getter for Toys::Context::Key::TOOL_NAME.
If the tool_name
method is overridden by the tool, you can still access
it using the name __tool_name
.
211 212 213 |
# File 'lib/toys/context.rb', line 211 def tool_name @__data[Key::TOOL_NAME] end |
#tool_source ⇒ Toys::SourceInfo Also known as: __tool_source
The source of the tool being executed.
This is a convenience getter for Toys::Context::Key::TOOL_SOURCE.
If the tool_source
method is overridden by the tool, you can still
access it using the name __tool_source
.
226 227 228 |
# File 'lib/toys/context.rb', line 226 def tool_source @__data[Key::TOOL_SOURCE] end |
#usage_errors ⇒ Array<Toys::ArgParser::UsageError> Also known as: __usage_errors
The (possibly empty) array of errors detected during argument parsing.
This is a convenience getter for Toys::Context::Key::USAGE_ERRORS.
If the usage_errors
method is overridden by the tool, you can still
access it using the name __usage_errors
.
241 242 243 |
# File 'lib/toys/context.rb', line 241 def usage_errors @__data[Key::USAGE_ERRORS] end |
#verbosity ⇒ Integer Also known as: __verbosity
The current verbosity setting as an integer.
This is a convenience getter for Toys::Context::Key::VERBOSITY.
If the verbosity
method is overridden by the tool, you can still access
it using the name __verbosity
.
256 257 258 |
# File 'lib/toys/context.rb', line 256 def verbosity @__data[Key::VERBOSITY] end |