From 635a607afa77aeb023bdfe139f66d6792b5ef93b Mon Sep 17 00:00:00 2001 From: Marcin Kulik Date: Sun, 3 Jul 2016 08:58:39 +0000 Subject: [PATCH] Improve OS detection --- app/decorators/asciicast_decorator.rb | 10 ++++++---- spec/decorators/asciicast_decorator_spec.rb | 10 ++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/decorators/asciicast_decorator.rb b/app/decorators/asciicast_decorator.rb index 00af523..1a23188 100644 --- a/app/decorators/asciicast_decorator.rb +++ b/app/decorators/asciicast_decorator.rb @@ -77,10 +77,12 @@ class AsciicastDecorator < ApplicationDecorator private def os_from_user_agent - os_part = user_agent.split(' ')[2] - os = os_part.split('/').first - - guess_os(os) + if user_agent =~ %r{^asciinema/\d(\.\d+)+ [^/\s]+/[^/\s]+ (.+)$} + os = $2.sub('-', '/').split('/').first.sub(/[dD]arwin/, 'OS X') + os[0].upcase + os[1..-1] + else + 'unknown' + end end def os_from_uname diff --git a/spec/decorators/asciicast_decorator_spec.rb b/spec/decorators/asciicast_decorator_spec.rb index 3593d6c..9f3af5b 100644 --- a/spec/decorators/asciicast_decorator_spec.rb +++ b/spec/decorators/asciicast_decorator_spec.rb @@ -22,6 +22,16 @@ describe AsciicastDecorator do it { should == 'Linux' } end + context 'and the OS is *BSD (pre-0.9.9 client)' do + before do + asciicast.user_agent = + "asciinema/0.9.8 CPython/2.7.5 " \ + "FreeBSD/10.0-RELEASE-p7-amd64-64bit-ELF" + end + + it { should == 'FreeBSD' } + end + context 'and the OS is Linux (0.9.9+ client)' do before do asciicast.user_agent =