diff --git a/Gemfile b/Gemfile index 14a167b41b0..2ae1fac3c20 100644 --- a/Gemfile +++ b/Gemfile @@ -68,7 +68,6 @@ gem 'stringex', require: false gem 'strong_migrations', '>= 0.4.2' gem 'subprocess', require: false gem 'uglifier', '~> 4.2' -gem 'user_agent_parser' gem 'valid_email', '>= 0.1.3' gem 'view_component', '~> 2.40.0', require: 'view_component/engine' gem 'webauthn', '~> 2.1' diff --git a/Gemfile.lock b/Gemfile.lock index 05f39e04522..b4e9497c8d7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -632,7 +632,6 @@ GEM execjs (>= 0.3.0, < 3) unicode-display_width (2.0.0) uniform_notifier (1.14.2) - user_agent_parser (2.7.0) uuid (2.3.9) macaddr (~> 1.0) valid_email (0.1.3) @@ -792,7 +791,6 @@ DEPENDENCIES strong_migrations (>= 0.4.2) subprocess uglifier (~> 4.2) - user_agent_parser valid_email (>= 0.1.3) view_component (~> 2.40.0) webauthn (~> 2.1) diff --git a/app/models/device.rb b/app/models/device.rb index 6ab102061b7..c3a07ea342c 100644 --- a/app/models/device.rb +++ b/app/models/device.rb @@ -14,6 +14,6 @@ def decorate end def device_name - DeviceTracking::DeviceName.call(UserAgentParser::Parser.new, self) + DeviceTracking::DeviceName.call(self) end end diff --git a/app/services/device_tracking/device_name.rb b/app/services/device_tracking/device_name.rb index 5a53649bcca..4e23d2ee108 100644 --- a/app/services/device_tracking/device_name.rb +++ b/app/services/device_tracking/device_name.rb @@ -1,26 +1,12 @@ module DeviceTracking class DeviceName - def self.call(parser, device) - device_user_agent = device.user_agent - user_agent = parser.parse(device_user_agent) + def self.call(device) + browser = BrowserCache.parse(device.user_agent) I18n.t( 'account.index.device', - browser: browser(user_agent), - os: os(user_agent), + browser: "#{browser.name} #{browser.version}", + os: "#{browser.platform.name} #{browser.platform.version.split('.').first}", ) end - - def self.browser(user_agent) - version = user_agent.version - "#{user_agent.family} #{version ? version.major : ''}" - end - private_class_method :browser - - def self.os(user_agent) - user_agent_os = user_agent.os - version = user_agent_os.version - "#{user_agent_os.family} #{version ? version.major : ''}" - end - private_class_method :os end end diff --git a/app/services/device_tracking/list_devices.rb b/app/services/device_tracking/list_devices.rb index 0b03a669d48..6df970c3c4f 100644 --- a/app/services/device_tracking/list_devices.rb +++ b/app/services/device_tracking/list_devices.rb @@ -3,9 +3,7 @@ class ListDevices def self.call(user_id, offset, limit) devices = Device.where(user_id: user_id).order(last_used_at: :desc).offset(offset). limit(limit) - # heavy cost to load; instantiate once and parse in bulk - parser = UserAgentParser::Parser.new - devices.each { |device| device.nice_name = DeviceName.call(parser, device) } + devices.each { |device| device.nice_name = DeviceName.call(device) } end end end diff --git a/spec/features/account/device_spec.rb b/spec/features/account/device_spec.rb index 4d699b2991e..ecba13fcf6b 100644 --- a/spec/features/account/device_spec.rb +++ b/spec/features/account/device_spec.rb @@ -18,6 +18,6 @@ end scenario 'viewing devices' do - expect(page).to have_content('Chrome 71 on Mac OS X 10') + expect(page).to have_content('Chrome 71 on macOS 10') end end diff --git a/spec/services/device_tracking/device_name_spec.rb b/spec/services/device_tracking/device_name_spec.rb index 4dc87ad070b..050e21f4d6e 100644 --- a/spec/services/device_tracking/device_name_spec.rb +++ b/spec/services/device_tracking/device_name_spec.rb @@ -2,11 +2,10 @@ describe DeviceTracking::DeviceName do subject { described_class } - let(:parser) { UserAgentParser::Parser } let(:device) { create(:device) } it 'gives a shortened os and browser name' do - result = subject.call(parser.new, device) + result = subject.call(device) expect(result).to eq('Chrome 58 on Windows 10') end