diff --git a/lib/versioning/ruby/index.spec.ts b/lib/versioning/ruby/index.spec.ts index 3e2c9af76f2fda82f01a94cad7ea39156dd3b021..40829c1026ebb5191da49c387974bd7f651fc347 100644 --- a/lib/versioning/ruby/index.spec.ts +++ b/lib/versioning/ruby/index.spec.ts @@ -174,12 +174,12 @@ describe('versioning/ruby/index', () => { ${'2.0.0'} | ${'>= 1.1.5, < 2.0'} | ${false} ${'1.2.0-beta'} | ${'1.2.0-alpha'} | ${false} ${'2.0.0'} | ${'> 1.2.2, ~> 2.0.0'} | ${false} - ${'asdf'} | ${'> 1.2.2, ~> 2.0.0'} | ${null} - ${null} | ${'> 1.2.2, ~> 2.0.0'} | ${null} + ${'asdf'} | ${'> 1.2.2, ~> 2.0.0'} | ${false} + ${null} | ${'> 1.2.2, ~> 2.0.0'} | ${false} `( 'isLessThanRange("$version", "$range") === "$expected"', ({ version, range, expected }) => { - expect(semverRuby.isLessThanRange(version, range)).toBe(expected); + expect(semverRuby.isLessThanRange?.(version, range)).toBe(expected); } ); diff --git a/lib/versioning/ruby/index.ts b/lib/versioning/ruby/index.ts index e0566af075273e209b0076a375a3ae9449d3c834..b2218b687381fa73e66f0065bc903618b04c9faa 100644 --- a/lib/versioning/ruby/index.ts +++ b/lib/versioning/ruby/index.ts @@ -45,7 +45,7 @@ export const isVersion = (version: string): boolean => !!valid(vtrim(version)); const isGreaterThan = (left: string, right: string): boolean => gt(vtrim(left), vtrim(right)); const isLessThanRange = (version: string, range: string): boolean => - ltr(vtrim(version), vtrim(range)); + !!ltr(vtrim(version), vtrim(range)); const isSingleVersion = (range: string): boolean => { const { version, operator } = parseRange(vtrim(range)); @@ -74,17 +74,25 @@ export const isValid = (input: string): boolean => export const matches = (version: string, range: string): boolean => satisfies(vtrim(version), vtrim(range)); -const getSatisfyingVersion = (versions: string[], range: string): string => - maxSatisfying(versions.map(vtrim), vtrim(range)); -const minSatisfyingVersion = (versions: string[], range: string): string => - minSatisfying(versions.map(vtrim), vtrim(range)); +function getSatisfyingVersion( + versions: string[], + range: string +): string | null { + return maxSatisfying(versions.map(vtrim), vtrim(range)); +} +function minSatisfyingVersion( + versions: string[], + range: string +): string | null { + return minSatisfying(versions.map(vtrim), vtrim(range)); +} const getNewValue = ({ currentValue, rangeStrategy, currentVersion, newVersion, -}: NewValueConfig): string => { +}: NewValueConfig): string | null => { let newValue = null; if (isVersion(currentValue)) { newValue = currentValue.startsWith('v') ? 'v' + newVersion : newVersion; @@ -123,7 +131,7 @@ const getNewValue = ({ logger.warn(`Unsupported strategy ${rangeStrategy}`); } } - if (regEx(/^('|")/).exec(currentValue)) { + if (newValue && regEx(/^('|")/).exec(currentValue)) { const delimiter = currentValue[0]; return newValue .split(',') diff --git a/lib/versioning/ruby/range.ts b/lib/versioning/ruby/range.ts index c6e8b0d72c0bd13c19b80122c6b3fe9c2ef31d6b..8230d1d7fed1c66680c2aeb71eb3460822636f2d 100644 --- a/lib/versioning/ruby/range.ts +++ b/lib/versioning/ruby/range.ts @@ -18,14 +18,14 @@ const parse = (range: string): Range => { const value = (range || '').trim(); const match = regExp.exec(value); - if (match) { - const { version = null, operator = null, delimiter = ' ' } = match.groups; + if (match?.groups) { + const { version = '', operator = '', delimiter = ' ' } = match.groups; return { version, operator, delimiter }; } return { - version: null, - operator: null, + version: '', + operator: '', delimiter: ' ', }; }; diff --git a/lib/versioning/ruby/strategies/replace.ts b/lib/versioning/ruby/strategies/replace.ts index 848fba0f37862d51bed6b489712b7488dcb72246..6b37aa27efdfc7981f02610dd17fd519408a7fbf 100644 --- a/lib/versioning/ruby/strategies/replace.ts +++ b/lib/versioning/ruby/strategies/replace.ts @@ -71,7 +71,8 @@ export default ({ to, range }: { range: string; to: string }): string => { const lastPart = range .split(',') .map((part) => part.trim()) - .pop(); + .slice(-1) + .join(); const lastPartPrecision = lastPart.split('.').length; const toPrecision = to.split('.').length; let massagedTo: string = to; diff --git a/lib/versioning/types.ts b/lib/versioning/types.ts index 0e046086ff54f7ca350c5d758540ddd1ffadbc6c..cb2091c9f72444e40734ea105382529e00a3ce96 100644 --- a/lib/versioning/types.ts +++ b/lib/versioning/types.ts @@ -26,7 +26,7 @@ export interface VersioningApi { isLessThanRange?(version: string, range: string): boolean; getSatisfyingVersion(versions: string[], range: string): string | null; minSatisfyingVersion(versions: string[], range: string): string | null; - getNewValue(newValueConfig: NewValueConfig): string; + getNewValue(newValueConfig: NewValueConfig): string | null; sortVersions(version: string, other: string): number; matches(version: string, range: string | Range): boolean; diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 1cda9093b7a1699a44015d0e73add6c3a42cbf5e..2008407999681b3dedc50d3e9b26efe1566f96fc 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -60,8 +60,7 @@ "lib/util/split.ts", "lib/util/url.ts", "lib/versioning/maven/**/*.ts", - "lib/versioning/ruby/operator.ts", - "lib/versioning/ruby/version.ts", + "lib/versioning/ruby/**/*.ts", "lib/versioning/semver-coerced/**/*.ts", "lib/versioning/semver/**/*.ts", "lib/versioning/swift/**/*.ts",