0

API呼び出しを行うモバイルアプリがあります。api 呼び出しでは、返される json が api のバージョンによって少し異なる可能性があるため、アプリのバージョン番号を送信しています。

したがって、アプリのバージョン2.4.1があり、現在の api バージョンと照合する必要がある場合、2.4.4使用しているのですべて問題ありません

if user_version.gsub('.','').to_i < server_version.gsub('.','').to_i
 // ユーザーのバージョンが最新ではありません。更新するよう依頼してください
終わり

この問題は、誰かがバージョン 2.5 をリリースしたときに発生します。2.4.4上記のコードでは、ユーザーは244、サーバー側2.5または25.

これらのインスタンスをカバーするには、これをどのように確認しますか?

4

2 に答える 2

0

ここで詳しく説明されているように、正規表現を使用してバージョン番号を解析できます: A regex for version number parsing

これは次のことを行います:^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$

そう:

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)

DRYness のために、これをヘルパー メソッドに分割することをお勧めします。

def parse_version(str)
  version_regex = /^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/
  str.match(version_regex)[1..3].compact.map(&:to_i)
end

user_version = '2.4.4'との例ではserver_version = '2.5'、配列が得られます。

user_version_array = [2,4,2]
server_version_array = [2,5]

次に、これらを簡単に反復して比較できます。

compliant_version = true
(0..2).each do |i|
  if (user_version_array[i] || 0) < (server_version_array[i] || 0)
    compliant_version = false
  end
end
于 2013-05-06T17:38:58.167 に答える
0

これはRailsのクラスとして含まれていることがわかりました http://rubygems.rubyforge.org/rubygems-update/Gem/Version.html

自分で書くよりずっと簡単です。:)

于 2013-05-08T01:46:32.113 に答える