Class: Git::ArgsBuilder Private

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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)
  validate_configured_options!(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