class UserAgent
def self.parse(string)
def self.parse(string) if string.nil? || string.strip == "" string = DEFAULT_USER_AGENT end agents = Browsers::Base.new while m = string.to_s.match(MATCHER) agents << new(m[1], m[2], m[4]) string = string[m[0].length..-1].strip end Browsers.extend(agents) end
def <=>(other)
Any comparison between two user agents with different products will
def <=>(other) if @product == other.product @version <=> other.version else false end end
def detect_comment(&block)
def detect_comment(&block) comment && comment.detect(&block) end
def eql?(other)
def eql?(other) @product == other.product && @version == other.version && @comment == other.comment end
def initialize(product, version = nil, comment = nil)
def initialize(product, version = nil, comment = nil) if product @product = product else raise ArgumentError, "expected a value for product" end if version && !version.empty? @version = Version.new(version) else @version = Version.new end if comment.respond_to?(:split) @comment = comment.split("; ") else @comment = comment end end
def to_s
def to_s to_str end
def to_str
def to_str if @product && !@version.nil? && @comment "#{@product}/#{@version} (#{@comment.join("; ")})" elsif @product && !@version.nil? "#{@product}/#{@version}" elsif @product && @comment "#{@product} (#{@comment.join("; ")})" else @product end end