Sha256: 8a746e3a3c5e23537f16917ada3e9b249aba4a4f0bf88941d6a4d47ef1a5e743

Contents?: true

Size: 1.25 KB

Versions: 6

Compression:

Stored size: 1.25 KB

Contents

require "clamp/attribute/definition"

module Clamp
  module Parameter

    class Definition < Attribute::Definition

      def initialize(name, description, options = {})
        @name = name
        @description = description
        super(options)
        @multivalued = (@name =~ ELLIPSIS_SUFFIX)
        @required = options.fetch(:required) do
          (@name !~ OPTIONAL)
        end
        @inheritable = options.fetch(:inheritable, true)
      end

      attr_reader :name

      def inheritable?
        @inheritable
      end

      def help_lhs
        name
      end

      def consume(arguments)
        raise ArgumentError, Clamp.message(:no_value_provided) if required? && arguments.empty?
        arguments.shift(multivalued? ? arguments.length : 1)
      end

      private

      ELLIPSIS_SUFFIX = / \.\.\.$/
      OPTIONAL = /^\[(.*)\]/

      VALID_ATTRIBUTE_NAME = /^[a-z0-9_]+$/

      def infer_attribute_name
        inferred_name = name.downcase.tr("-", "_").sub(ELLIPSIS_SUFFIX, "").sub(OPTIONAL) { Regexp.last_match(1) }
        unless inferred_name =~ VALID_ATTRIBUTE_NAME
          raise "cannot infer attribute_name from #{name.inspect}"
        end
        inferred_name += "_list" if multivalued?
        inferred_name
      end

    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
clamp-1.2.1 lib/clamp/parameter/definition.rb
clamp-1.2.0 lib/clamp/parameter/definition.rb
clamp-1.2.0.beta1 lib/clamp/parameter/definition.rb
clamp-1.1.2 lib/clamp/parameter/definition.rb
clamp-1.1.1 lib/clamp/parameter/definition.rb
clamp-1.1.0 lib/clamp/parameter/definition.rb