Class: UserAgentDecoder
- Inherits:
-
Object
- Object
- UserAgentDecoder
- Defined in:
- lib/user_agent_decoder.rb
Instance Attribute Summary collapse
-
#result ⇒ Object
readonly
Returns the value of attribute result.
-
#user_agent_string ⇒ Object
writeonly
Sets the attribute user_agent_string.
Instance Method Summary collapse
- #find_browser ⇒ Object
- #find_os ⇒ Object
- #find_os_version_name ⇒ Object
-
#initialize(user_agent_string = nil) ⇒ UserAgentDecoder
constructor
A new instance of UserAgentDecoder.
- #load_rules ⇒ Object
- #parse ⇒ Object
Constructor Details
#initialize(user_agent_string = nil) ⇒ UserAgentDecoder
Returns a new instance of UserAgentDecoder.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/user_agent_decoder.rb', line 7 def initialize user_agent_string = nil load_rules @result = { os: { token: '', name: '', version: '', version_name: '' }, browser: { name: '', version: '' } } if user_agent_string && user_agent_string.strip != '' @user_agent_string = user_agent_string end end |
Instance Attribute Details
#result ⇒ Object (readonly)
Returns the value of attribute result.
4 5 6 |
# File 'lib/user_agent_decoder.rb', line 4 def result @result end |
#user_agent_string=(value) ⇒ Object (writeonly)
Sets the attribute user_agent_string
5 6 7 |
# File 'lib/user_agent_decoder.rb', line 5 def user_agent_string=(value) @user_agent_string = value end |
Instance Method Details
#find_browser ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/user_agent_decoder.rb', line 74 def find_browser catch :found_browser do if @result[:os][:token] && @result[:os][:token].strip != '' browsers = @rules['os_browsers'][@result[:os][:token]].each do | browser | @rules['browsers'][browser]['regex'].each do | regex | matches = Regexp.new(regex, 'i').match @user_agent_string if matches @result[:browser][:name] = @rules['browsers'][browser]['name'] if matches[1] @result[:browser][:version] = matches[1].gsub '_', '.' end throw :found_browser end end end end end end |
#find_os ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/user_agent_decoder.rb', line 36 def find_os catch :found_os do @rules['os'].each do | token, os | os['regex'].each do | regex | matches = Regexp.new(regex, 'i').match @user_agent_string if matches @result[:os][:token] = token @result[:os][:name] = os['name'] if matches[1] @result[:os][:version] = matches[1].gsub '_', '.' end throw :found_os end end end end end |
#find_os_version_name ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/user_agent_decoder.rb', line 58 def find_os_version_name catch :found_os_version_name do version_names = @rules['os_version_names'][@result[:os][:token]] if version_names version_names.each do | version_name | if Regexp.new("^#{version_name['version']}").match @result[:os][:version] @result[:os][:version_name] = version_name['name'] throw :found_os_version_name end end end end end |
#load_rules ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/user_agent_decoder.rb', line 96 def load_rules @rules = YAML.load_file(File.join(File.dirname(File.(__FILE__)), 'user_agent_rules.yml')) # Add fallbacks # OS fallback @rules['os']['fallback'] = { 'name' => 'Unknown OS', 'regex' => [''] } # Browser fallback @rules['browsers']['fallback'] = { 'name' => 'Unknown Browser', 'regex' => [''] } # Fallback broswser to every os_browser combinations @rules['os_browsers'].each do | os, browsers | @rules['os_browsers'][os] << 'fallback' end # Add all browsers to the fallback os @rules['os_browsers']['fallback'] = [] @rules['browsers'].each do | browser, info | @rules['os_browsers']['fallback'] << browser end end |
#parse ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/user_agent_decoder.rb', line 28 def parse find_os find_os_version_name find_browser @result end |