class Baf::Option

Constants

LONG_NORMALIZE_REPLACE
LONG_PREFIX
LONG_WITH_ARG_GLUE
PARSER_MESSAGE
PARSER_MESSAGE_TAIL

Attributes

arg[RW]
block[RW]
desc[RW]
long[RW]
short[RW]
tail[RW]

Public Class Methods

new(*args, tail: false) click to toggle source
# File lib/baf/option.rb, line 12
def initialize *args, tail: false
  attrs = args.size > 1 ? build_attrs(*args) : args[0]
  attrs.each { |k, v| send :"#{k}=", v }
  self.tail = tail
end

Public Instance Methods

block?() click to toggle source
# File lib/baf/option.rb, line 22
def block?
  !!block
end
env_definition() click to toggle source
# File lib/baf/option.rb, line 18
def env_definition
  :accessor
end
tail?() click to toggle source
# File lib/baf/option.rb, line 26
def tail?
  !!tail
end
to_parser_arguments(env) click to toggle source
# File lib/baf/option.rb, line 30
def to_parser_arguments env
  message = tail? ? PARSER_MESSAGE_TAIL : PARSER_MESSAGE
  mblock = if block?
    -> *args { block[*args, env] }
  else
    parser_argument_block env
  end
  [message, "-#{short}", parser_argument_long, parser_argument_desc, mblock]
end

Private Instance Methods

build_attrs(short, long, arg_or_desc = nil, desc_or_block = nil, block = nil) click to toggle source
# File lib/baf/option.rb, line 42
def build_attrs short, long, arg_or_desc = nil, desc_or_block = nil, block = nil
  {
    short: short,
    long: long,
    desc: arg_or_desc
  }.merge case desc_or_block
  when Proc
    {
      desc: arg_or_desc,
      block: desc_or_block
    }
  when String
    {
      arg: arg_or_desc,
      desc: desc_or_block,
      block: block
    }
  else
    {}
  end
end
parser_argument_block(env) click to toggle source
# File lib/baf/option.rb, line 77
def parser_argument_block env
  -> v { env.send :"#{long}=", v }
end
parser_argument_desc() click to toggle source
# File lib/baf/option.rb, line 73
def parser_argument_desc
  desc
end
parser_argument_long() click to toggle source
# File lib/baf/option.rb, line 64
def parser_argument_long
  [
    LONG_PREFIX + long
      .to_s
      .tr(LONG_NORMALIZE_SEARCH, LONG_NORMALIZE_REPLACE),
    arg
  ].compact.join LONG_WITH_ARG_GLUE
end