class Xenon::MediaRange

Constants

DEFAULT_Q

Attributes

params[R]
q[R]
subtype[R]
type[R]

Public Class Methods

new(type, subtype, params = {}) click to toggle source
# File lib/xenon/media_type.rb, line 116
def initialize(type, subtype, params = {})
  @type = type
  @subtype = subtype
  @q = Float(params.delete('q')) rescue DEFAULT_Q
  @params = params
end
parse(s) click to toggle source
# File lib/xenon/media_type.rb, line 123
def self.parse(s)
  tree = Parsers::MediaRange.new.parse(s)
  Parsers::MediaTypeTransform.new.apply(tree)
rescue Parslet::ParseFailed
  raise Xenon::ParseError.new("Invalid media range (#{s})")
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/xenon/media_type.rb, line 130
def <=>(other)
  dt = compare_types(@type, other.type)
  return dt if dt != 0
  ds = compare_types(@subtype, other.subtype)
  return ds if ds != 0
  dp = params.size <=> other.params.size
  return dp if dp != 0
  @q <=> other.q
end
===(media_type)
Alias for: =~
=~(media_type) click to toggle source
# File lib/xenon/media_type.rb, line 140
def =~(media_type)
  (type == '*' || type == media_type.type) &&
  (subtype == '*' || subtype == media_type.subtype) &&
  params.all? { |n, v| media_type.params[n] == v }
end
Also aliased as: ===
to_s() click to toggle source
# File lib/xenon/media_type.rb, line 148
def to_s
  s = "#{@type}/#{@subtype}"
  s << @params.map { |n, v| v ? "; #{n}=#{v}" : "; #{n}" }.join
  s << "; q=#{@q}" if @q != DEFAULT_Q
  s
end

Private Instance Methods

compare_types(a, b) click to toggle source
# File lib/xenon/media_type.rb, line 157
def compare_types(a, b)
  if a == b then 0
  elsif a == '*' then -1
  elsif b == '*' then 1
  else 0
  end
end