Sha256: fd7013002bee3f95be953252c2970d85bbeec61d551def603f990d6d640fd95d

Contents?: true

Size: 1.94 KB

Versions: 1

Compression:

Stored size: 1.94 KB

Contents

# frozen_string_literal: true

module Generated
  class Argument
    class UnrecognizedType < ArgumentError; end

    SEPARATOR = ":"

    attr_accessor :raw_name,
      :raw_type,
      :raw_required,
      :raw_default,
      :raw_desc,
      :raw_banner

    def initialize(value)
      @raw_name, @raw_type = value.split(SEPARATOR)

      @raw_required = true # Arguments are Required by Default
    end

    def parameter_type
      self.class.name.demodulize.underscore.to_sym
    end

    def argument?
      parameter_type == :argument
    end

    def option?
      parameter_type == :option
    end

    def name
      raw_name
    end

    def desc
      "<TODO: How will the '#{raw_name}' #{parameter_type} be used by the generator?>"
    end

    def banner
      required? ? banner_content : "[#{banner_content}]"
    end

    def type
      case raw_type
      when "integer", "float", "numeric"
        :numeric
      when "string", "text"
        :string
      when "array"
        :array
      when "hash"
        :hash
      when "boolean"
        :boolean
      else
        raise UnrecognizedType, raw_type
      end
    end

    def banner_content
      case type
      when :string
        name.upcase
      when :numeric
        default || "1"
      when :array
        "one two three"
      when :hash
        "key_one:value_one key_two:value_two"
      when :boolean
        nil
      else
        raw_banner
      end
    end

    def default
      # Required arguments/options don't get defaults
      return nil if required?

      case type
      when :string
        "<TODO>"
      when :numeric
        0
      when :array
        []
      when :hash
        {}
      when :boolean
        false
      else
        raw_default
      end
    end

    def required
      case raw_required
      when true, "true", 1
        true
      when false, "false", 0
        false
      end
    end

    def required? = required

    def optional? = !required
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
generated-0.1.1 lib/generated/argument.rb