diff --git a/lib/roqua/core_ext/enumerable/sort_by_alphanum.rb b/lib/roqua/core_ext/enumerable/sort_by_alphanum.rb index 0ca75c6e5167a8f8d05ff29f755114ce1864efe3..2f1ee827b7d734abc91e21e4a4c680262e2129c5 100644 --- a/lib/roqua/core_ext/enumerable/sort_by_alphanum.rb +++ b/lib/roqua/core_ext/enumerable/sort_by_alphanum.rb @@ -26,7 +26,7 @@ module Enumerable a_chunk, a = extract_alpha_or_number_group(a) b_chunk, b = extract_alpha_or_number_group(b) - ret = if a_chunk =~ /\d/ and b_chunk =~ /\d/ + ret = if a_chunk =~ /\d/ && b_chunk =~ /\d/ && a_chunk.to_i != b_chunk.to_i a_chunk.to_i <=> b_chunk.to_i else a_chunk <=> b_chunk 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 9de0b2f0586d2ca889f9954ab50d01056d453a6f..db112e7517a0d80ecf16bbd387485e2581428dd2 100644 --- a/spec/roqua/core_ext/enumerable/sort_by_alphanum_spec.rb +++ b/spec/roqua/core_ext/enumerable/sort_by_alphanum_spec.rb @@ -14,5 +14,10 @@ describe Enumerable do it 'compares number chunks as integers' do expect(%w(004 3).sort_by_alphanum).to eq %w(3 004) end + + it 'sorts identical integers by asci' do + input = %w[b4e b0004e b04e b004e] + expect(input.sort_by_alphanum).to eq %w[b0004e b004e b04e b4e] + end end end