Skip to content
Snippets Groups Projects
Unverified Commit 0398256e authored by Rhys Arkins's avatar Rhys Arkins Committed by GitHub
Browse files

fix(bundler): handled mixed quotation types (#4103)

parent 0f2e064e
No related branches found
No related tags found
No related merge requests found
......@@ -10,31 +10,41 @@ async function extractPackageFile(content, fileName) {
registryUrls: [],
deps: [],
};
const delimeter =
content.split('"').length > content.split("'").length ? '"' : "'";
if (fileName) {
logger.debug(
{ fileName },
'Using delimeter ' + delimeter + ' to parse ' + fileName
);
}
const lines = content.split('\n');
const delimiters = ['"', "'"];
for (let lineNumber = 0; lineNumber < lines.length; lineNumber += 1) {
const line = lines[lineNumber];
const sourceMatch = line.match(
new RegExp(`^source ${delimeter}([^${delimeter}]+)${delimeter}\\s*$`)
let sourceMatch;
for (const delimiter of delimiters) {
sourceMatch =
sourceMatch ||
line.match(
new RegExp(`^source ${delimiter}([^${delimiter}]+)${delimiter}\\s*$`)
);
}
if (sourceMatch) {
res.registryUrls.push(sourceMatch[1]);
}
const rubyMatch = line.match(
new RegExp(`^ruby ${delimeter}([^${delimeter}]+)${delimeter}`)
let rubyMatch;
for (const delimiter of delimiters) {
rubyMatch =
rubyMatch ||
line.match(
new RegExp(`^ruby ${delimiter}([^${delimiter}]+)${delimiter}`)
);
}
if (rubyMatch) {
res.compatibility = { ruby: rubyMatch[1] };
}
const gemMatchRegex = `^gem ${delimeter}([^${delimeter}]+)${delimeter}(,\\s+${delimeter}([^${delimeter}]+)${delimeter}){0,2}`;
const gemMatch = line.match(new RegExp(gemMatchRegex));
let gemMatch;
let gemDelimiter;
for (const delimiter of delimiters) {
const gemMatchRegex = `^gem ${delimiter}([^${delimiter}]+)${delimiter}(,\\s+${delimiter}([^${delimiter}]+)${delimiter}){0,2}`;
if (line.match(new RegExp(gemMatchRegex))) {
gemDelimiter = delimiter;
gemMatch = gemMatch || line.match(new RegExp(gemMatchRegex));
}
}
if (gemMatch) {
const dep = {
depName: gemMatch[1],
......@@ -42,8 +52,8 @@ async function extractPackageFile(content, fileName) {
};
if (gemMatch[3]) {
dep.currentValue = gemMatch[0]
.substring(`gem ${delimeter}${dep.depName}${delimeter},`.length)
.replace(new RegExp(delimeter, 'g'), '')
.substring(`gem ${gemDelimiter}${dep.depName}${gemDelimiter},`.length)
.replace(new RegExp(gemDelimiter, 'g'), '')
.trim();
if (!isValid(dep.currentValue)) {
dep.skipReason = 'invalid-value';
......@@ -83,8 +93,9 @@ async function extractPackageFile(content, fileName) {
);
}
}
for (const delimiter of delimiters) {
const sourceBlockMatch = line.match(
new RegExp(`^source\\s+${delimeter}(.*?)${delimeter}\\s+do`)
new RegExp(`^source\\s+${delimiter}(.*?)${delimiter}\\s+do`)
);
if (sourceBlockMatch) {
const repositoryUrl = sourceBlockMatch[1];
......@@ -109,6 +120,7 @@ async function extractPackageFile(content, fileName) {
);
}
}
}
const platformsMatch = line.match(/^platforms\s+(.*?)\s+do/);
if (platformsMatch) {
const platformsLineNumber = lineNumber;
......
source "https://rubygems.org"
ruby "~> 1.5.3"
ruby '~> 1.5.3'
source "https://gems.example.com" do
source 'https://gems.example.com' do
gem "some_internal_gem"
gem "another_internal_gem"
gem 'another_internal_gem'
end
platforms :ruby do
......@@ -12,6 +12,6 @@ platforms :ruby do
end
group :development, :optional => true do
gem "wirble"
gem 'wirble'
gem "faker"
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment