Sha256: 6df8ad9c4e6671e13405c538a7a8f8dda136b82573c12c92d4e98ca33fcc9538

Contents?: true

Size: 1.09 KB

Versions: 5

Compression:

Stored size: 1.09 KB

Contents

module Monolens
  module Type
    class Strategy
      include Type::ErrorHandling

      def initialize(kind, valid)
        @kind = kind
        @valid = valid
      end

      def self.selection(valid)
        new('selection', valid)
      end

      def self.error(valid)
        new('error', valid)
      end

      def self.missing(valid)
        new('missing', valid)
      end

      def self.priority(valid)
        new('priority', valid)
      end

      def dress(arg, registry, &block)
        case arg
        when ::Symbol
          fail!(arg, &block) unless @valid.include?(arg.to_s)
          arg
        when ::String
          fail!(arg, &block) unless @valid.include?(arg)
          arg.to_sym
        when ::Array
          fail!(arg, &block) unless (arg.map(&:to_s) - @valid).empty?
          arg.map(&:to_sym)
        else
          fail!(arg, &block)
        end
      end

      def ===(arg)
        !!dress(arg, nil)
      rescue TypeError
        false
      end

    private

      def fail!(arg, &block)
        super("Invalid #{kind}strategy `#{arg}`", &block)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
monolens-0.6.4 lib/monolens/type/strategy.rb
monolens-0.6.3 lib/monolens/type/strategy.rb
monolens-0.6.2 lib/monolens/type/strategy.rb
monolens-0.6.1 lib/monolens/type/strategy.rb
monolens-0.6.0 lib/monolens/type/strategy.rb