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
avm-tools-0.76.0 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
avm-tools-0.75.1 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
avm-tools-0.75.0 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
avm-tools-0.74.1 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
avm-tools-0.74.0 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
avm-tools-0.73.0 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
avm-tools-0.72.0 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
eac_cli-0.9.0 lib/eac_cli/parser/positional_collection.rb
avm-tools-0.71.0 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
avm-tools-0.70.2 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
ehbrs-tools-0.15.0 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
ehbrs-tools-0.14.1 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
avm-tools-0.70.1 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
avm-tools-0.70.0 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
avm-tools-0.69.3 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
eac_cli-0.8.0 lib/eac_cli/parser/positional_collection.rb
ehbrs-tools-0.14.0 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
eac_cli-0.7.0 lib/eac_cli/parser/positional_collection.rb
avm-tools-0.69.2 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb
avm-tools-0.69.1 vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb