Skip to content

Commit

Permalink
Better accessors, better from_friendly_version_str
Browse files Browse the repository at this point in the history
  • Loading branch information
caioalonso committed Sep 1, 2020
1 parent cc78e92 commit bad104a
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 11 deletions.
24 changes: 14 additions & 10 deletions lib/tellus/client_version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,42 +12,46 @@ class ClientVersion
web: 'X-Zilly-Web-Version'
}.freeze

attr_reader :version_string, :app
attr_reader :platform, :version

def initialize(platform, version = nil)
def initialize(platform = nil, version = nil)
@platform = platform.presence || self.class.get(:platform)
@version_string = version.presence || self.class.get(:version)
@version = version.presence || self.class.get(:version)
end

def self.from_friendly_version_str(version_str)
return new unless version_str.present?

version_str = version_str.split(' ')
return new unless version_str.length == 3

platform = version_str[1].downcase.to_sym
version = version_str[2]
new(platform, version)
end

def lt?(platform, version)
return false if blank? || version.blank? || platform.blank?
def lt?(plat, ver)
return false if blank? || ver.blank? || plat.blank?

platform == @platform && version_object < version_object_for(version)
plat == @platform && version_object < version_object_for(ver)
end

def matches?(version_requirement_string)
Gem::Requirement.new(version_requirement_string) =~ version_object
end

def friendly_str
"Zilly #{@platform.to_s.titleize} #{version_string}"
"Zilly #{platform.to_s.capitalize} #{version}"
end

delegate :blank?, :to_s, :present?, to: :version_string
delegate :blank?, :to_s, :present?, to: :version

def self.platform
current&.platform
end

def self.version
current&.version_string
current&.version
end

# returns ClientVersion instance with platform and app for the current request
Expand Down Expand Up @@ -101,7 +105,7 @@ def version_object_for(version)
end

def version_object
@version_object ||= version_object_for(version_string)
@version_object ||= version_object_for(version)
end
end
end
2 changes: 1 addition & 1 deletion lib/tellus/client_version/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module Tellus
class ClientVersion
VERSION = '1.1.2'
VERSION = '1.2.0'
end
end
29 changes: 29 additions & 0 deletions spec/tellus/client_version_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@
context 'when checked version a major version more' do
it { expect(subject.lt?(platform, '2.0.0')).to be true }
end

context 'when nil' do
subject { described_class.new }

it { expect(subject.lt?(platform, '2.0.0')).to be true }
end
end

describe '#present?' do
Expand Down Expand Up @@ -125,4 +131,27 @@
end
end
end

describe '.from_friendly_version_str' do
subject(:parsed) { described_class.from_friendly_version_str(version_string) }

let(:version_string) { 'Zilly Ios 1.2.3' }

it { expect(parsed.platform).to eq :ios }
it { expect(parsed.version).to eq '1.2.3' }

context 'with invalid string' do
let(:version_string) { 'foo' }

it { expect(parsed.platform).to eq nil }
it { expect(parsed.version).to eq nil }
end

context 'with nil' do
let(:version_string) { nil }

it { expect(parsed.platform).to eq nil }
it { expect(parsed.version).to eq nil }
end
end
end

0 comments on commit bad104a

Please sign in to comment.