Sha256: f0e9b7450e57c56f1705c546e920ee0726659279a33bdcf3fa982e4d4e1683aa

Contents?: true

Size: 927 Bytes

Versions: 2

Compression:

Stored size: 927 Bytes

Contents

require 'hamster'
require_relative 'utilities'
require_relative 'switches'

module Lino
  class SubcommandBuilder
    include Lino::Utilities
    include Lino::Switches

    class <<self
      def for_subcommand(subcommand)
        SubcommandBuilder.new(subcommand: subcommand)
      end
    end

    def initialize(subcommand: nil, switches: [])
      @subcommand = subcommand
      @switches = Hamster::Vector.new(switches)
    end

    def build(option_separator, option_quoting)
      components = [
        @subcommand,
        map_and_join(
          @switches,
          &(quote_with(option_quoting) >> join_with(option_separator))
        )
      ]
      components.reject(&:empty?).join(' ')
    end

    private

    def with(**replacements)
      SubcommandBuilder.new(**state.merge(replacements))
    end

    def state
      {
        subcommand: @subcommand,
        switches: @switches
      }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lino-1.9.0 lib/lino/subcommand_builder.rb
lino-1.8.0.pre.2 lib/lino/subcommand_builder.rb