class UserAgentDecoder
Attributes
result[R]
user_agent_string[W]
Public Class Methods
new(user_agent_string = nil)
click to toggle source
# 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
Public Instance Methods
find_browser()
click to toggle source
# 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()
click to toggle source
# 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()
click to toggle source
# 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()
click to toggle source
# File lib/user_agent_decoder.rb, line 96 def load_rules @rules = YAML.load_file(File.join(File.dirname(File.expand_path(__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()
click to toggle source
# File lib/user_agent_decoder.rb, line 28 def parse find_os find_os_version_name find_browser @result end