Sha256: 6e690e0f8195317f9d588eb9f05cfd3bc2172d3de74fac0b1c3dda0df5bd8f38

Contents?: true

Size: 876 Bytes

Versions: 3

Compression:

Stored size: 876 Bytes

Contents

module Squib
  # @api private
  module Args
    class CardRange
      include Enumerable

      def initialize(input, deck_size: 1)
        @range = validate(input, deck_size)
      end

      # Hook into enumerable by delegating to @range
      def each(&block)
        @range.each { |i| block.call(i) }
      end

      def size
        @range.size
      end

      private
      def validate(input, deck_size)
        input ||= :all # default
        input = 0..(deck_size - 1) if input == :all
        input = (input.to_i)..(input.to_i) if input.respond_to? :to_i
        raise ArgumentError.new("#{input} must be Enumerable (i.e. respond_to :each).") unless input.respond_to? :each
        raise ArgumentError.new("#{input} is outside of deck range of 0..#{deck_size - 1}") if (!input.max.nil?) && (input.max > (deck_size - 1))
        input
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
squib-0.15.2 lib/squib/args/card_range.rb
squib-0.15.1 lib/squib/args/card_range.rb
squib-0.14.2 lib/squib/args/card_range.rb