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