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)
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