Sha256: 231966c74d73bef404db88aa9c240a19dc20b2073c4fea40246ed795fa798cb8

Contents?: true

Size: 1007 Bytes

Versions: 2

Compression:

Stored size: 1007 Bytes

Contents

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ThiagoLelis-backgroundjob-1.0.5 lib/main/mode.rb
ThiagoLelis-backgroundjob-1.0.6 lib/main/mode.rb