Class: Hiiro::Runners::Subcommand

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(bin_name, name, handler, values = {}, opts: nil, subcmd_args: [], subcmd_opts: nil) ⇒ Subcommand

Returns a new instance of Subcommand.



708
709
710
711
712
713
714
715
716
# File 'lib/hiiro.rb', line 708

def initialize(bin_name, name, handler, values={}, opts: nil, subcmd_args: [], subcmd_opts: nil)
  @bin_name = bin_name
  @name = name.to_s
  @handler = handler
  @values = values || {}
  @opts = opts
  @subcmd_args = subcmd_args || []
  @subcmd_opts = subcmd_opts
end

Instance Attribute Details

#bin_nameObject (readonly)

Returns the value of attribute bin_name.



705
706
707
# File 'lib/hiiro.rb', line 705

def bin_name
  @bin_name
end

#handlerObject (readonly)

Returns the value of attribute handler.



705
706
707
# File 'lib/hiiro.rb', line 705

def handler
  @handler
end

#nameObject (readonly) Also known as: subcommand_name

Returns the value of attribute name.



705
706
707
# File 'lib/hiiro.rb', line 705

def name
  @name
end

#optsObject (readonly)

Returns the value of attribute opts.



705
706
707
# File 'lib/hiiro.rb', line 705

def opts
  @opts
end

#subcmd_argsObject (readonly)

Returns the value of attribute subcmd_args.



705
706
707
# File 'lib/hiiro.rb', line 705

def subcmd_args
  @subcmd_args
end

#subcmd_optsObject (readonly)

Returns the value of attribute subcmd_opts.



705
706
707
# File 'lib/hiiro.rb', line 705

def subcmd_opts
  @subcmd_opts
end

#valuesObject (readonly)

Returns the value of attribute values.



705
706
707
# File 'lib/hiiro.rb', line 705

def values
  @values
end

Instance Method Details

#exact_match?(subcmd) ⇒ Boolean

Returns:

  • (Boolean)


727
728
729
# File 'lib/hiiro.rb', line 727

def exact_match?(subcmd)
  name == subcmd.to_s
end

#full_nameObject



735
736
737
# File 'lib/hiiro.rb', line 735

def full_name
  [bin_name, name].join(?-)
end

#locationObject



743
744
745
# File 'lib/hiiro.rb', line 743

def location
  handler.source_location&.join(':')
end

#match?(subcmd) ⇒ Boolean

Returns:

  • (Boolean)


731
732
733
# File 'lib/hiiro.rb', line 731

def match?(subcmd)
  name.start_with?(subcmd.to_s)
end

#opts_hintObject



771
772
773
# File 'lib/hiiro.rb', line 771

def opts_hint
  subcmd_opts&.hint
end

#params_stringObject



747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
# File 'lib/hiiro.rb', line 747

def params_string
  if subcmd_args.any?
    return subcmd_args.map { |a| "<#{a}>" }.join(' ')
  end

  return nil unless handler.respond_to?(:parameters)

  params = handler.parameters
  return nil if params.empty?
  return nil if params == [[:rest]] || params == [[:rest, :args]]

  params.map { |type, name|
    case type
    when :req then "<#{name}>"
    when :opt then "[#{name}]"
    when :rest then "[*#{name}]" if name
    when :keyreq then "<#{name}:>"
    when :key then "[#{name}:]"
    when :keyrest then "[**#{name}]" if name
    when :block then "[&#{name}]" if name
    end
  }.compact.join(' ')
end

#run(*args) ⇒ Object



718
719
720
721
722
723
724
725
# File 'lib/hiiro.rb', line 718

def run(*args)
  if opts
    parsed = opts.parse(args)
    handler.call(parsed)
  else
    handler.call(*args)
  end
end

#typeObject



739
740
741
# File 'lib/hiiro.rb', line 739

def type
  :subcommand
end