class CheckPlease::Flag

Attributes

cli_long[RW]
cli_short[RW]
default[W]
default_proc[RW]
description[RW]
name[RW]

Public Class Methods

new(attrs = {}) { |self| ... } click to toggle source
# File lib/check_please/flag.rb, line 11
def initialize(attrs = {})
  @validators = []
  attrs.each do |name, value|
    set_attribute! name, value
  end
  yield self if block_given?
  freeze
end

Public Instance Methods

coerce(&block) click to toggle source
# File lib/check_please/flag.rb, line 28
def coerce(&block)
  @coercer = block
end
default() click to toggle source
# File lib/check_please/flag.rb, line 20
def default
  if default_proc
    default_proc.call
  else
    @default
  end
end
description=(value) click to toggle source
# File lib/check_please/flag.rb, line 32
def description=(value)
  if value.is_a?(String) && value =~ /\n/m
    lines = value.lines
  else
    lines = Array(value).map(&:to_s)
  end

  @description = lines.map(&:rstrip)
end
mutually_exclusive_to(flag_name) click to toggle source
# File lib/check_please/flag.rb, line 42
def mutually_exclusive_to(flag_name)
  @validators << ->(flags, _) { flags.send(flag_name).empty? }
end
repeatable() click to toggle source
# File lib/check_please/flag.rb, line 46
def repeatable
  @repeatable = true
  self.default_proc = ->{ Array.new }
end
validate(&block) click to toggle source
# File lib/check_please/flag.rb, line 51
def validate(&block)
  @validators << block
end

Protected Instance Methods

__set__(value, on:, flags:) click to toggle source
# File lib/check_please/flag.rb, line 57
def __set__(value, on:, flags:)
  val = _coerce(value)
  _validate(flags, val)
  if @repeatable
    on[name] ||= []
    on[name].concat(Array(val))
  else
    on[name] = val
  end
end

Private Instance Methods

_coerce(value) click to toggle source
# File lib/check_please/flag.rb, line 70
def _coerce(value)
  return value if @coercer.nil?
  @coercer.call(value)
end
_validate(flags, value) click to toggle source
# File lib/check_please/flag.rb, line 75
def _validate(flags, value)
  return if @validators.empty?
  return if @validators.all? { |block| block.call(flags, value) }
  raise InvalidFlag, "#{value.inspect} is not a legal value for #{name}"
end
set_attribute!(name, value) click to toggle source
# File lib/check_please/flag.rb, line 81
def set_attribute!(name, value)
  self.send "#{name}=", value
rescue NoMethodError
  raise ArgumentError, "unrecognized attribute: #{name}"
end