Sha256: 274a83e6cf36f2a1c99f10555c927119056697e1594c8ef4b6c957d9c8412328

Contents?: true

Size: 878 Bytes

Versions: 5

Compression:

Stored size: 878 Bytes

Contents

module AcceptHeaders
  module Acceptable
    class Error < StandardError; end
    class InvalidQError < Error; end

    attr_reader :q

    def reject?(other)
      if q != 0.0
        false
      else
        match(other)
      end
    end

    def accept?(other)
      if q == 0.0
        false
      else
        match(other)
      end
    end

    def q=(value)
      begin
        q_float = Float(value)
      rescue ArgumentError => e
        raise InvalidQError.new(e.message)
      end
      if !q_float.between?(0.0, 1.0)
        raise InvalidQError.new("q must be between 0 and 1")
      end
      if q_float.to_s.match(/^\d\.(\d+)$/) && $1 && $1.size > 3
        raise InvalidQError.new("q must be at most 3 decimal places")
      end
      @q = q_float
    end

    def match(other)
      raise NotImplementedError.new("#match is not implemented")
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
accept_headers-0.1.0 lib/accept_headers/acceptable.rb
accept_headers-0.0.9 lib/accept_headers/acceptable.rb
accept_headers-0.0.8 lib/accept_headers/acceptable.rb
accept_headers-0.0.7 lib/accept_headers/acceptable.rb
accept_headers-0.0.6 lib/accept_headers/acceptable.rb