Class: Argy::Parameter Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/argy/parameter.rb

Overview

This class is abstract.

Subclasses must implement #label

Direct Known Subclasses

Argument, Option

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, desc: nil, type: :string, default: nil, required: false) ⇒ Parameter

Create a new Parameter

Parameters:

  • name (Symbol)

    name of the parameter

  • desc (String, nil) (defaults to: nil)

    description for the parameter

  • type (Symbol, #call) (defaults to: :string)

    type of parameter

  • default (Object) (defaults to: nil)

    default value for the parameter

  • required (TrueClass, FalseClass) (defaults to: false)

    whether or not the field is required



29
30
31
32
33
34
35
# File 'lib/argy/parameter.rb', line 29

def initialize(name, desc: nil, type: :string, default: nil, required: false)
  @name = name
  @type = type
  @desc = desc
  @default = default
  @required = required
end

Instance Attribute Details

#defaultObject (readonly)

The default value for the parameter

Returns:

  • (Object)


17
18
19
# File 'lib/argy/parameter.rb', line 17

def default
  @default
end

#descString (readonly)

The description for the parameter

Returns:

  • (String)


21
22
23
# File 'lib/argy/parameter.rb', line 21

def desc
  @desc
end

#nameString (readonly)

The name of the parameter

Returns:

  • (String)


9
10
11
# File 'lib/argy/parameter.rb', line 9

def name
  @name
end

#typeString (readonly)

The type of the parameter

Returns:

  • (String)


13
14
15
# File 'lib/argy/parameter.rb', line 13

def type
  @type
end

Instance Method Details

#coerce(value) ⇒ Object

Coerces a value to the correct type.

Parameters:

  • value (Object)

    the value to coerce

Raises:



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/argy/parameter.rb', line 64

def coerce(value)
  case type
  when :string, :boolean
    value
  when :integer
    Integer(value)
  when :float
    Float(value)
  when :array
    value.split(",")
  when :pathname
    Pathname.new(value).expand_path(Dir.pwd)
  else
    raise "Invalid type: #{type.inspect}" unless type.respond_to?(:call)
    type.call(value)
  end
rescue ArgumentError
  raise CoersionError, "`#{label}` received an invalid value"
end

#labelString

This method is abstract.

The display label for the paramter

Returns:

  • (String)

Raises:

  • (NotImplementedError)


40
41
42
# File 'lib/argy/parameter.rb', line 40

def label
  raise NotImplementedError, __method__
end

#required?TrueClass, FalseClass

Check if the parameter is required

Returns:

  • (TrueClass, FalseClass)


46
47
48
# File 'lib/argy/parameter.rb', line 46

def required?
  @required
end

#validate(value) ⇒ Object

Validates a value.

Returns:

  • (Object)

    the value

Raises:



53
54
55
56
57
58
59
# File 'lib/argy/parameter.rb', line 53

def validate(value)
  if required? && value.nil?
    raise ValidationError, "`#{label}` is a required parameter"
  end

  value
end