lib/useragent_parser.rb in useragent_parser-0.1.1 vs lib/useragent_parser.rb in useragent_parser-0.2.0

- old
+ new

@@ -1,15 +1,18 @@ require "useragent_parser/version" require "useragent_parser/parsers/user_agent_parser" require "useragent_parser/parsers/os_parser" require "useragent_parser/parsers/device_parser" +require "useragent_parser/parsers/referrer_parser" require "useragent_parser/user_agent" +require "yaml" module UseragentParser USER_AGENT_PARSERS = [] OS_PARSERS = [] DEVICE_PARSERS = [] + REFERRER_PARSERS = [] MOBILE_USER_AGENT_FAMILIES = [] MOBILE_OS_FAMILIES = [] def self.load_parsers! yaml = YAML.load_file(File.expand_path(File.dirname(__FILE__)) + "/../config/regexes.yaml") @@ -33,20 +36,44 @@ device_replacement = parser.fetch('device_replacement', nil) DEVICE_PARSERS.push UseragentParser::DeviceParser.new(regex, device_replacement) end + yaml['referrer_parsers'].each do |parser| + regex = parser['regex'] + referrer_replacement = parser.fetch('referrer_replacement', nil) + + REFERRER_PARSERS.push UseragentParser::ReferrerParser.new(regex, referrer_replacement) + end + MOBILE_USER_AGENT_FAMILIES.push *yaml['mobile_user_agent_families'] MOBILE_OS_FAMILIES.push *yaml['mobile_os_families'] end - def self.parse_all(user_agent_string, *js_args) - # UseragentParser::UserAgent.new{ + def self.parse(user_agent_string, *js_args) + UseragentParser::UserAgent.new(self.parse_browser(user_agent_string, *js_args)) + end + + def self.parse_with_referrer(user_agent_string, referrer = nil, *js_args) + UseragentParser::UserAgent.new(self.parse_email(user_agent_string, referrer, *js_args)) + end + + def self.parse_email(user_agent_string, referrer = nil, *js_args) { 'user_agent' => self.parse_user_agent(user_agent_string, *js_args), 'os' => self.parse_os(user_agent_string, *js_args), 'device' => self.parse_device(user_agent_string, *js_args), + 'string' => user_agent_string, + 'referrer' => self.parse_referrer(referrer) + } + end + + def self.parse_browser(user_agent_string, *js_args) + { + 'user_agent' => self.parse_user_agent(user_agent_string, *js_args), + 'os' => self.parse_os(user_agent_string, *js_args), + 'device' => self.parse_device(user_agent_string, *js_args), 'string' => user_agent_string } end def self.parse_user_agent(user_agent_string, js_user_agent_string = nil, js_user_agent_family = nil, js_user_agent_v1 = nil, js_user_agent_v2 = nil, js_user_agent_v3 = nil) @@ -105,9 +132,19 @@ else is_mobile = false end { 'family' => device, 'is_mobile' => is_mobile, 'is_spider' => (device == 'Spider') } + end + + def self.parse_referrer(referrer_string) + referrer = nil + REFERRER_PARSERS.each do |parser| + referrer = parser.parse(referrer_string) + break unless referrer.nil? + end + + { 'family' => referrer } end end UseragentParser.load_parsers!