Sha256: 7ff1fb2a41a8ddd1673407915178d5eb0973ce407a480380a7d24d16bee69b09

Contents?: true

Size: 1.04 KB

Versions: 1

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

1 entries across 1 versions & 1 rubygems

Version Path
main-2.9.3 lib/main/mode.rb