module GroupOptionParser
Add grouping to Ruby's `OptionParser`
Constants
- TOP_INDEX
Attributes
current_top[W]
Public Instance Methods
group(name) { |self| ... }
click to toggle source
run block in context of a group, if group does not exist it's created
# File lib/group_option_parser.rb, line 42 def group(name, &_block) self.current_top = group_index(name) yield self self.current_top = TOP_INDEX end
remove(name=nil)
click to toggle source
@overload remove(name)
allows removing last or group by `name`
# File lib/group_option_parser.rb, line 32 def remove(name=nil) if name remove_group(name) else remove_last end end
top()
click to toggle source
changes the target of all functions to be set by `group`
# File lib/group_option_parser.rb, line 26 def top @stack[current_top] end
Private Instance Methods
current_top()
click to toggle source
# File lib/group_option_parser.rb, line 54 def current_top @current_top ||= TOP_INDEX end
group_index(name)
click to toggle source
# File lib/group_option_parser.rb, line 65 def group_index(name) name = name.to_s groups[name] || new_group(name) end
groups()
click to toggle source
# File lib/group_option_parser.rb, line 58 def groups @groups ||= { "tail" => 1, "top" => TOP_INDEX, } end
last_index()
click to toggle source
# File lib/group_option_parser.rb, line 88 def last_index @stack.size - 1 end
new_group(name)
click to toggle source
# File lib/group_option_parser.rb, line 70 def new_group(name) index = last_index groups[name] = index @stack.insert(index, OptionParser::List.new) index end
remove_group(name)
click to toggle source
# File lib/group_option_parser.rb, line 77 def remove_group(name) index = groups.delete(name.to_str) @stack.delete_at(index) if index end
remove_last()
click to toggle source
# File lib/group_option_parser.rb, line 82 def remove_last name, _ = groups.rassoc(last_index) groups.delete(name) if name @stack.pop end