Sha256: 0e0d853bdeb93477d46d613fdd55fdf5b3f4989ce695e80640130950e9d36505
Contents?: true
Size: 1.04 KB
Versions: 32
Compression:
Stored size: 1.04 KB
Contents
module Main class Mode < ::String class Error < ::StandardError; end class Duplicate < Error; end class Ambiguous < Error include Main::Softspoken end class List < ::Array def initialize *a, &b super ensure self.fields = [] end def add klass mode_name = Mode.new klass.mode_name raise Duplicate, mode_name if has_key? mode_name self[mode_name] = klass end def find_by_mode m, options = {} quiet = options['quiet'] || options[:quiet] each_pair do |mode, klass| return mode if mode == m end candidates = [] each_pair do |mode, klass| candidates << mode if mode.index(m) == 0 end case candidates.size when 0 nil when 1 candidates.first else raise Ambiguous, "ambiguous mode: #{ m } = (#{ candidates.sort.join ' or ' })?" end end end def self.list(*a, &b) List.new(*a, &b) end end end
Version data entries
32 entries across 31 versions & 2 rubygems