diff --git a/CHANGELOG.md b/CHANGELOG.md index e390e97fdb334d86bf2c57a0286063e7ef0dcc69..2c4ab66be9a2970a7f95b62db1c8431e92442ce9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.3 + +* Make sort_by_alphanum sort shorter string first. + ## 0.4.2 * Make sort_by_alphanum stable for chunks that parse to the same int like 04 and 4. diff --git a/lib/roqua-support/version.rb b/lib/roqua-support/version.rb index fc7d84c3058ff9dd67de8a67e14e49f06806316e..31b036cf6a69788887625cb561f369432be78ed7 100644 --- a/lib/roqua-support/version.rb +++ b/lib/roqua-support/version.rb @@ -1,5 +1,5 @@ module Roqua module Support - VERSION = '0.4.2'.freeze + VERSION = '0.4.3'.freeze end end diff --git a/lib/roqua/core_ext/enumerable/sort_by_alphanum.rb b/lib/roqua/core_ext/enumerable/sort_by_alphanum.rb index e25a85f8c1f5293600accf6f6a9f89f80c1d29b6..0c47641ec1b73bbf30e557a9b5f698a95203507a 100644 --- a/lib/roqua/core_ext/enumerable/sort_by_alphanum.rb +++ b/lib/roqua/core_ext/enumerable/sort_by_alphanum.rb @@ -33,6 +33,8 @@ module Enumerable ret = \ if a_scanner.eos? -1 + elsif b_scanner.eos? + 1 elsif (a_chunk = a_scanner.scan(ALL_NUM)) if (b_chunk = b_scanner.scan(ALL_NUM)) if a_chunk.to_i != b_chunk.to_i diff --git a/spec/roqua/core_ext/enumerable/sort_by_alphanum_spec.rb b/spec/roqua/core_ext/enumerable/sort_by_alphanum_spec.rb index 8de7e5c0d247f60e7d8bbf28fe0cbeca01270cb0..c8b8c131fa8c2d6169f9ee924a0560225e071486 100644 --- a/spec/roqua/core_ext/enumerable/sort_by_alphanum_spec.rb +++ b/spec/roqua/core_ext/enumerable/sort_by_alphanum_spec.rb @@ -11,6 +11,11 @@ describe Enumerable do expect(input.sort_by_alphanum(&:reverse)).to eq ["004some10thing", "004some11thing", "3another"] end + it 'sorts shorter strings first' do + input = %w[a_2_ a_2 a a_1] # curlies are above alpha in utf-8, Ԙ is multi-byte + expect(input.sort_by_alphanum).to eq %w[a a_1 a_2 a_2_] + end + it 'treats non-alphanum as lower than alpha and num' do input = %w[b3a b{c bԘb] # curlies are above alpha in utf-8, Ԙ is multi-byte expect(input.sort_by_alphanum).to eq %w[b{c bԘb b3a]