Class: Git::ArgsBuilder Private
- Inherits:
-
Object
- Object
- Git::ArgsBuilder
- Defined in:
- lib/git/args_builder.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Takes a hash of user options and a declarative map and produces an array of command-line arguments. Also validates that only supported options are provided based on the map.
Constant Summary collapse
- ARG_BUILDERS =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
This hash maps an option type to a lambda that knows how to build the corresponding command-line argument. This is a scalable dispatch table.
{ boolean: ->(config, value) { value ? config[:flag] : [] }, valued_equals: ->(config, value) { "#{config[:flag]}=#{value}" if value }, valued_space: ->(config, value) { [config[:flag], value.to_s] if value }, repeatable_valued_space: lambda do |config, value| Array(value).flat_map { |v| [config[:flag], v.to_s] } end, custom: ->(config, value) { config[:builder].call(value) }, validate_only: ->(_config, _value) { [] } # Does not build any args }.freeze
Class Method Summary collapse
-
.build(opts, option_map)
private
Main entrypoint to validate options and build arguments.
-
.validate!(opts, option_map)
private
Public validation method that can be called independently.
Instance Method Summary collapse
- #build private
-
#initialize(opts, option_map) ⇒ ArgsBuilder
constructor
private
A new instance of ArgsBuilder.
Constructor Details
#initialize(opts, option_map) ⇒ ArgsBuilder
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of ArgsBuilder.
40 41 42 43 |
# File 'lib/git/args_builder.rb', line 40 def initialize(opts, option_map) @opts = opts @option_map = option_map end |
Class Method Details
.build(opts, option_map)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Main entrypoint to validate options and build arguments
29 30 31 32 |
# File 'lib/git/args_builder.rb', line 29 def self.build(opts, option_map) validate!(opts, option_map) new(opts, option_map).build end |
.validate!(opts, option_map)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Public validation method that can be called independently
35 36 37 38 |
# File 'lib/git/args_builder.rb', line 35 def self.validate!(opts, option_map) validate_unsupported_keys!(opts, option_map) (opts, option_map) end |
Instance Method Details
#build
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/git/args_builder.rb', line 45 def build @option_map.flat_map do |config| type = config[:type] next config[:flag] if type == :static key = config[:keys].find { |k| @opts.key?(k) } next [] unless key build_arg_for_option(config, @opts[key]) end.compact end |