Sha256: bc4b35c42304296ac2ae8dfb17b31d48d38cbe072a278eacc1553ee932bddec6

Contents?: true

Size: 1.22 KB

Versions: 26

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'
require 'eac_cli/parser/error'

module EacCli
  class Parser
    class PositionalCollection
      common_constructor(:definition, :argv, :collector) { collect }

      private

      def collected
        @collected ||= ::Set.new
      end

      def collect
        argv.each { |argv_value| colect_argv_value(argv_value) }
        return unless pending_required_positional?

        raise ::EacCli::Parser::Error.new(
          definition, argv, 'No value for required positional ' \
            "\"#{current_positional.identifier}\""
        )
      end

      def colect_argv_value(argv_value)
        collector.collect(current_positional, argv_value)
        collected << current_positional
        positional_enumerator.next unless current_positional.repeat?
      end

      def pending_required_positional?
        !(current_positional.blank? || current_positional.optional? ||
            collected.include?(current_positional))
      end

      def positional_enumerator
        @positional_enumerator ||= definition.positional.each
      end

      def current_positional
        positional_enumerator.peek
      rescue ::StopIteration
        nil
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 3 rubygems

Version Path
eac_cli-0.6.1 lib/eac_cli/parser/positional_collection.rb
avm-tools-0.69.0 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
eac_cli-0.6.0 lib/eac_cli/parser/positional_collection.rb
eac_cli-0.5.1 lib/eac_cli/parser/positional_collection.rb
eac_cli-0.5.0 lib/eac_cli/parser/positional_collection.rb
ehbrs-tools-0.13.1 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb