Class: UserAgent
- Inherits:
-
Object
- Object
- UserAgent
- Includes:
- Comparable
- Defined in:
- lib/user_agent.rb,
lib/user_agent/version.rb,
lib/user_agent/browsers.rb,
lib/user_agent/comparable.rb,
lib/user_agent/browsers/base.rb,
lib/user_agent/browsers/edge.rb,
lib/user_agent/browsers/gecko.rb,
lib/user_agent/browsers/opera.rb,
lib/user_agent/browsers/chrome.rb,
lib/user_agent/browsers/itunes.rb,
lib/user_agent/browsers/webkit.rb,
lib/user_agent/operating_systems.rb,
lib/user_agent/browsers/libavformat.rb,
lib/user_agent/browsers/playstation.rb,
lib/user_agent/browsers/podcast_addict.rb,
lib/user_agent/browsers/apple_core_media.rb,
lib/user_agent/browsers/internet_explorer.rb,
lib/user_agent/browsers/windows_media_player.rb
Defined Under Namespace
Modules: Browsers, Comparable, OperatingSystems Classes: Version
Constant Summary collapse
- MATCHER =
%r{ ^['"]* # Possible opening quote(s) ([^/\s]+) # Product /?([^\s,]*) # Version (\s\(([^\)]*)\)|,gzip\(gfe\))? # Comment }x.freeze
- DEFAULT_USER_AGENT =
"Mozilla/4.0 (compatible)"
Instance Attribute Summary collapse
-
#comment ⇒ Object
readonly
Returns the value of attribute comment.
-
#product ⇒ Object
readonly
Returns the value of attribute product.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Class Method Summary collapse
Instance Method Summary collapse
-
#<=>(other) ⇒ Object
Any comparison between two user agents with different products will always return false.
- #eql?(other) ⇒ Boolean
-
#initialize(product, version = nil, comment = nil) ⇒ UserAgent
constructor
A new instance of UserAgent.
- #to_s ⇒ Object
- #to_str ⇒ Object
Methods included from Comparable
Constructor Details
#initialize(product, version = nil, comment = nil) ⇒ UserAgent
Returns a new instance of UserAgent.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/user_agent.rb', line 32 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 |
Instance Attribute Details
#comment ⇒ Object (readonly)
Returns the value of attribute comment.
30 31 32 |
# File 'lib/user_agent.rb', line 30 def comment @comment end |
#product ⇒ Object (readonly)
Returns the value of attribute product.
30 31 32 |
# File 'lib/user_agent.rb', line 30 def product @product end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
30 31 32 |
# File 'lib/user_agent.rb', line 30 def version @version end |
Class Method Details
.parse(string) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/user_agent.rb', line 17 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 |
Instance Method Details
#<=>(other) ⇒ Object
Any comparison between two user agents with different products will always return false.
56 57 58 59 60 61 62 |
# File 'lib/user_agent.rb', line 56 def <=>(other) if @product == other.product @version <=> other.version else false end end |
#eql?(other) ⇒ Boolean
64 65 66 67 68 |
# File 'lib/user_agent.rb', line 64 def eql?(other) @product == other.product && @version == other.version && @comment == other.comment end |
#to_s ⇒ Object
70 71 72 |
# File 'lib/user_agent.rb', line 70 def to_s to_str end |
#to_str ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/user_agent.rb', line 74 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 |