Created
March 10, 2016 17:04
-
-
Save philcrissman/cb30642c566e64fe5dce to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'minitest/autorun' | |
require 'minitest/emoji' | |
class Version | |
def self.next_version version | |
next_version_3 version | |
end | |
def self.next_version_1 version | |
number_as_string = version.split(".").join('') | |
string_length = number_as_string.length | |
next_version_string = (number_as_string.to_i+1).to_s | |
if next_version_string.length==string_length | |
next_version_string.split('').join(".") | |
else | |
next_version_string[0..1] + "." + next_version_string[2..-1].split('').join(".") | |
end | |
end | |
def self.next_version_2 version | |
number_as_string = version.split(".").join('') | |
starts_with_zero = number_as_string[0].to_i == 0 | |
string_length = number_as_string.length | |
next_version_string = (number_as_string.to_i+1).to_s | |
if next_version_string.length > string_length | |
next_version_string[0..1] + "." + next_version_string[2..-1].split('').join(".") | |
else | |
next_version_string = "0" + next_version_string if starts_with_zero && next_version_string.length < string_length | |
next_version_string.split('').join(".") | |
end | |
end | |
def self.next_version_3 version | |
version_array = version.split(".").reverse.map(&:to_i) | |
version_array[0] = version_array.first + 1 | |
version_array = version_array.each_with_index.map do |n,index| | |
if index == version_array.size - 1 | |
n | |
else | |
if n > 9 | |
version_array[index+1]=version_array[index+1]+1 | |
0 | |
else | |
n | |
end | |
end | |
end | |
version_array.reverse.join(".") | |
end | |
end | |
# tests | |
class VersionTest < Minitest::Test | |
def test_1_2_3 | |
assert_equal "1.2.4", Version.next_version("1.2.3") | |
end | |
def test_0_9_9 | |
assert_equal "1.0.0", Version.next_version("0.9.9") | |
end | |
def test_1 | |
assert_equal "2", Version.next_version("1") | |
end | |
def test_1_2_3_4_5_6_7_8 | |
assert_equal "1.2.3.4.5.6.7.9", Version.next_version("1.2.3.4.5.6.7.8") | |
end | |
def test_9_9 | |
assert_equal "10.0", Version.next_version("9.9") | |
end | |
def test_0_8_7_9 | |
assert_equal "0.8.8.0", Version.next_version("0.8.7.9") | |
end | |
def test_13_9_9_9_9_9 | |
assert_equal "14.0.0.0.0.0", Version.next_version("13.9.9.9.9.9") | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment