Use user_agent_parser gem
Andrew Kane
committed May 08, 2014
commit a27a77d435ffb3fd597a9090e139c9e345b3fba6
Showing 3
changed files with
11 additions
and 22 deletions
ahoy_matey.gemspec
+1
-0
| @@ | @@ -22,6 +22,7 @@ Gem::Specification.new do |spec| |
| spec.add_dependency "browser", ">= 0.4.0" | |
| spec.add_dependency "geocoder" | |
| spec.add_dependency "referer-parser" | |
| + | spec.add_dependency "user_agent_parser" |
| spec.add_dependency "request_store" | |
| spec.add_development_dependency "bundler", "~> 1.5" | |
ahoy/model.rb b/lib/ahoy/model.rb
+4
-22
| @@ | @@ -29,30 +29,12 @@ module Ahoy |
| def set_technology | |
| if respond_to?(:user_agent) | |
| - | browser = Browser.new(ua: user_agent) |
| - | |
| - | self.browser = browser.name if respond_to?(:browser=) |
| + | agent = Ahoy.user_agent_parser.parse(user_agent) |
| - | # TODO add more |
| - | self.os = |
| - | if browser.android? |
| - | "Android" |
| - | elsif browser.ios? |
| - | "iOS" |
| - | elsif browser.windows_phone? |
| - | "Windows Phone" |
| - | elsif browser.blackberry? |
| - | "Blackberry" |
| - | elsif browser.chrome_os? |
| - | "Chrome OS" |
| - | elsif browser.mac? |
| - | "Mac" |
| - | elsif browser.windows? |
| - | "Windows" |
| - | elsif browser.linux? |
| - | "Linux" |
| - | end if respond_to?(:os=) |
| + | self.browser = agent.name if respond_to?(:browser=) |
| + | self.os = agent.os.name if respond_to?(:os=) |
| + | browser = Browser.new(ua: user_agent) |
| self.device_type = | |
| if browser.tv? | |
| "TV" | |
ahoy_matey.rb b/lib/ahoy_matey.rb
+6
-0
| @@ | @@ -2,6 +2,7 @@ require "addressable/uri" |
| require "browser" | |
| require "geocoder" | |
| require "referer-parser" | |
| + | require "user_agent_parser" |
| require "request_store" | |
| require "ahoy/version" | |
| require "ahoy/controller" | |
| @@ | @@ -24,6 +25,11 @@ module Ahoy |
| @referrer_parser ||= RefererParser::Referer.new("https://github.com/ankane/ahoy") | |
| end | |
| + | # performance |
| + | def self.user_agent_parser |
| + | @user_agent_parser ||= UserAgentParser::Parser.new |
| + | end |
| + | |
| def self.fetch_user(controller) | |
| if user_method.respond_to?(:call) | |
| user_method.call(controller) | |