i've got mobile app makes api call. in api call, i'm sending version number of app because returned json bit different depending on api version.
so when have app version 2.4.1
, need check against current api version 2.4.4
, fine because i'm using
if user_version.gsub('.','').to_i < server_version.gsub('.','').to_i //the user version not current, ask them update end
the problem comes in down line when releases version 2.5. above code, user have 2.4.4
gets translated 244
larger server side 2.5
or 25
.
how check cover these instances?
you can parse version numbers using regex, detailed here: a regex version number parsing
this 1 do: ^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$
so:
version_regex = /^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/ user_version_array = user_version.match(version_regex)[1..3].compact.map(&:to_i) server_version_array = server_version.match(version_regex)[1..3].compact.map(&:to_i)
for sake of dryness, might want break out helper method:
def parse_version(str) version_regex = /^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/ str.match(version_regex)[1..3].compact.map(&:to_i) end
for example of user_version = '2.4.4'
, server_version = '2.5'
, gives arrays:
user_version_array = [2,4,2] server_version_array = [2,5]
you can iterate on these compare:
compliant_version = true (0..2).each |i| if (user_version_array[i] || 0) < (server_version_array[i] || 0) compliant_version = false end end
Comments
Post a Comment