Method: Brigadier#toggle

Defined in:
lib/brigadier.rb

#toggle(name, description, args = {}, &block) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/brigadier.rb', line 94

def toggle(name, description, args = {}, &block)
  new_aliases = []
  new_inverse_aliases = []
  aliases = args.fetch(:aliases, [])
  modifiers = %w( -- - )
  inverse_modifiers = %w( -no- --no- -not- --not- -no_ --no_ -not_ --not_ )

  ([ *name ] + aliases).each do |n|
    alt_name = n.gsub(/[ -]/, '_')

    modifiers.each do |modifier|
      new_aliases << '%s%s' % [ modifier, n]
      new_aliases << '%s%s' % [ modifier, alt_name ]
    end

    inverse_modifiers.each do |modifier|
      new_inverse_aliases << '%s%s' % [ modifier, n]
      new_inverse_aliases << '%s%s' % [ modifier, alt_name ]
    end
  end

  new_aliases.uniq!
  new_inverse_aliases.uniq!
  all_aliases = [ new_aliases + new_inverse_aliases ].uniq.flatten
  args[:aliases] = new_aliases
  args[:inverse_aliases] = new_inverse_aliases

  toggles[all_aliases] = Parameters::Toggle.new(name, description, args, block)
end