FuzzyVersionMatcher
The Fuzzy Version Matcher gem takes a list of candidate version numbers (strings in the form of numbers/letters separated by non-numbers/letters) eg:
5.1.45-10-percona 5.1.45-10.2-percona 5.1.66-14.2-percona 5.1.67-14.3-percona 5.5.23-25.3-percona 5.5.27-29.0-percona 5.5.28-29.2-percona 5.5.29-29.4-percona
and a subject version number, eg:
5.1.45-10.3-maria
The gem will provide the "best match" version from the candidate list according to some simple rules:
An exact match returns the same version string, eg:
5.1.45-10-percona => 5.1.45-10-percona
A partial match returns the highest version available from the partial match, eg:
5.5 => 5.5.29-29.4-percona
An inexact match matches as many of the most significant version segments as possible before matching the remaining version segments at the highest level, eg:
5.1.66-15.5-percona => 5.1.66-14.2-percona
Installation
Add this line to your application's Gemfile:
gem 'fuzzy_version_matcher'
And then execute:
$ bundle
Or install it yourself as:
$ gem install fuzzy_version_matcher
I've tested the gem on 2.0.0, it probably works on 1.9.3. 1.8.7 YMMV.
Usage
n = Node.new
DATA.readlines.each do |ln|
# add all available versions
n.add_node(ln.chomp)
end
puts n.search("5.5.27-29.0-percona") # 5.5.27-29.0-percona
puts n.search("5.1.45-10-percona") # 5.1.45-10-percona
puts n.search("5.1.45-10.2-percona") # 5.1.45-10.2-percona
puts n.search("5.1.45-10.2-maria") # 5.1.45-10.2-percona
puts n.search("5.1.45-10.400-percona") # 5.1.45-10.2-percona
puts n.search("5.5") # 5.5.29-30.0-percona
__END__
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Make sure the tests run
- Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request