Sha256: e4360917874d4016125978304d6e85af173e2e9d703322372726058608e4e5f5

Contents?: true

Size: 1.25 KB

Versions: 38

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'
require 'eac_ruby_utils/struct'

module EacCli
  class Parser
    class Collector
      class << self
        def to_data(definition)
          collector = new(definition)
          yield(collector)
          collector.to_data
        end
      end

      common_constructor :definition do
        default_values
      end

      # @return [OpenStruct]
      def to_data
        ::EacRubyUtils::Struct.new(data.transform_keys(&:identifier))
      end

      def collect(option, value)
        if data[option].is_a?(::Array)
          data[option] << value
        else
          data[option] = value
        end
      end

      def supplied?(option)
        data[option].present?
      end

      private

      def data
        @data ||= {}
      end

      def default_values
        definition.options.each { |option| data[option] = option_default_value(option) }
        definition.positional.each do |positional|
          data[positional] = positional_default_value(positional)
        end
      end

      def option_default_value(option)
        option.argument? ? nil : false
      end

      def positional_default_value(positional)
        positional.repeat? ? [] : nil
      end
    end
  end
end

Version data entries

38 entries across 38 versions & 3 rubygems

Version Path
avm-tools-0.91.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
avm-tools-0.90.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
avm-tools-0.89.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
avm-tools-0.88.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
eac_cli-0.12.6 lib/eac_cli/parser/collector.rb
avm-tools-0.87.1 vendor/eac_cli/lib/eac_cli/parser/collector.rb
ehbrs-tools-0.19.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
ehbrs-tools-0.18.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
eac_cli-0.12.5 lib/eac_cli/parser/collector.rb
avm-tools-0.87.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
ehbrs-tools-0.17.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
avm-tools-0.86.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
avm-tools-0.85.1 vendor/eac_cli/lib/eac_cli/parser/collector.rb
avm-tools-0.85.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
ehbrs-tools-0.16.5 vendor/eac_cli/lib/eac_cli/parser/collector.rb
avm-tools-0.84.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
avm-tools-0.83.0 vendor/eac_cli/lib/eac_cli/parser/collector.rb
eac_cli-0.12.4 lib/eac_cli/parser/collector.rb
ehbrs-tools-0.16.4 vendor/eac_cli/lib/eac_cli/parser/collector.rb
avm-tools-0.82.1 vendor/eac_cli/lib/eac_cli/parser/collector.rb