From 91c23e91b1fdbdb7b37233766f185f509d7fa98d Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Tue, 14 Jan 2020 17:37:19 +0100 Subject: [PATCH] fix(bundler): handle major range update --- lib/versioning/ruby/strategies/replace.ts | 12 ++++++++++++ test/versioning/ruby.spec.ts | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/lib/versioning/ruby/strategies/replace.ts b/lib/versioning/ruby/strategies/replace.ts index b223412b57..8db76c9671 100644 --- a/lib/versioning/ruby/strategies/replace.ts +++ b/lib/versioning/ruby/strategies/replace.ts @@ -6,6 +6,15 @@ function countInstancesOf(str: string, char: string): number { return str.split(char).length - 1; } +function isMajorRange(range: string): boolean { + const splitRange = range.split(',').map(part => part.trim()); + return ( + splitRange.length === 1 && + splitRange[0].startsWith('~>') && + countInstancesOf(splitRange[0], '.') === 0 + ); +} + function isCommonRubyMajorRange(range: string): boolean { const splitRange = range.split(',').map(part => part.trim()); return ( @@ -45,6 +54,9 @@ export default ({ to, range }: { range: string; to: string }): string => { } else if (isCommonRubyMinorRange(range)) { const firstPart = reduceOnePrecision(to) + '.0'; newRange = `~> ${firstPart}, >= ${to}`; + } else if (isMajorRange(range)) { + const majorPart = to.split('.')[0]; + newRange = '~>' + (range.includes(' ') ? ' ' : '') + majorPart; } else { const lastPart = range .split(',') diff --git a/test/versioning/ruby.spec.ts b/test/versioning/ruby.spec.ts index d725c6af18..1fd0771805 100644 --- a/test/versioning/ruby.spec.ts +++ b/test/versioning/ruby.spec.ts @@ -426,6 +426,11 @@ describe('semverRuby', () => { semverRuby.getNewValue('4.2.5.1', 'replace', '4.2.5.1', '4.3.0') ).toEqual('4.3.0'); }); + it('handles major ranges', () => { + expect( + semverRuby.getNewValue('~> 1', 'replace', '1.2.0', '2.0.3') + ).toEqual('~> 2'); + }); it('returns correct version for replace strategy', () => { [ -- GitLab