Skip to content

Commit

Permalink
Merge branch '__rultor'
Browse files Browse the repository at this point in the history
  • Loading branch information
rultor committed Oct 19, 2022
2 parents f488b63 + 46755c2 commit 040c1f4
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 45 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ SOFTWARE.
<plugin>
<groupId>org.cqfn</groupId>
<artifactId>astranaut-maven-plugin</artifactId>
<version>0.1.5</version>
<version>0.1.7</version>
<configuration>
<dsl>${basedir}/src/main/dsl/rules.dsl</dsl>
<output>${basedir}/src/main/java</output>
Expand Down
71 changes: 27 additions & 44 deletions src/main/dsl/rules.dsl
Original file line number Diff line number Diff line change
Expand Up @@ -85,17 +85,19 @@ ModifierBlock <- {Modifier};
ExpressionList <- {Expression};
FunctionCall <- [owner@Name], name@Identifier, arguments@ExpressionList;
Parameter <- [modifiers@ModifierBlock], [datatype@TypeName], name@Identifier;
FunctionDeclaration <- [modifiers@ModifierBlock], [datatype@TypeName], name@Identifier, parameters@ParameterBlock, body@StatementBlock;
FunctionDeclaration <- [modifiers@ModifierBlock], [datatype@TypeName], name@Identifier, parameters@ParameterBlock, [throwsbl@ThrowsBlock], body@StatementBlock;
ParameterBlock <- {Parameter};
ClassDeclaration <- [modifiers@ModifierBlock], name@Identifier, [extendsbl@ExtendsBlock], [implementsbl@ImplementsBlock], body@ClassBody;
ExtendsBlock <- {ClassType};
ImplementsBlock <- {ClassType};
ThrowsBlock <- {Exception};
ClassBody <- {ClassItem};
ClassItem <- FunctionDeclaration | FieldDeclaration;
FieldDeclaration <- [modifiers@ModifierBlock], [datatype@TypeName], declarators@DeclaratorList;
VariableDeclaration <- [modifiers@ModifierBlock], [datatype@TypeName], declarators@DeclaratorList;
DeclaratorList <- {Declarator};
Declarator <- name@Identifier, [value@Expression];
Exception <- name@ClassType;

java:

Expand Down Expand Up @@ -238,13 +240,14 @@ Plus(#1) -> Positive(#1);
PrimitiveType<#1> -> PrimitiveType<#1>;

VariableDeclarationExpr(VariableDeclarator(#1, #2, #3)) -> VariableDeclaration(#1, DeclaratorList(Declarator(#2, #3)));
VariableDeclarationExpr(Modifier<#1>, VariableDeclarator(#2, #3, #4))
-> VariableDeclaration(ModifierBlock(Modifier<#1>), #2, DeclaratorList(Declarator(#3, #4)));
VariableDeclarationExpr(Modifier#1, VariableDeclarator(#2, #3, #4))
-> VariableDeclaration(ModifierBlock(#1), #2, DeclaratorList(Declarator(#3, #4)));

ExpressionStmt(#1) -> ExpressionStatement(#1);
ExpressionStmt(#1) -> #1;

ReturnStmt(#1) -> Return(#1);
ReturnStmt(#1) -> Return(Variable(#1));
BlockStmt(#1...) -> StatementBlock(#1);
SynchronizedStmt(#1, #2) -> Synchronized(#1, #2);
SynchronizedStmt(#1, #2) -> Synchronized(Variable(#1), #2);
Expand All @@ -258,67 +261,48 @@ StringLiteralExpr<#1> -> StringLiteral<#1>;
EnclosedExpr(Addition(#1, #2)) -> Addition(#1, #2);
BinaryExpr(#1, EnclosedExpr(#2))<"+"> -> Addition(#1, #2);
MethodCallExpr(#1, #2, Name(#3)) -> FunctionCall(#1, #2, ExpressionList(Variable(Name(#3))));
MethodCallExpr(#1, #2, #3) -> FunctionCall(#1, #2, ExpressionList(#3));
MethodCallExpr(#1, #2...) -> FunctionCall(#1, ExpressionList(#2));
MethodCallExpr(Name#1, Identifier#2, #3...) -> FunctionCall(#1, #2, ExpressionList(#3));
ClassType(#1) -> ClassType(Name(#1));
ClassOrInterfaceType(#1) -> ClassType(Name(#1));
ReturnType(#1) -> ClassType(Name(#1));
Exception(#1) -> Exception(ClassType(Name(#1)));
Exception(#1) -> Exception(ClassType(#1));
ArrayType(#1) -> ArrayType(#1, DimensionList(Dimension));
Parameter(#1, #2) -> Parameter(#1, #2);
Parameter(Modifier<#1>, #2, #3) -> Parameter(ModifierBlock(Modifier<#1>), #2, #3);
Parameter(Modifier#1, #2, #3) -> Parameter(ModifierBlock(#1), #2, #3);
VoidType -> VoidType;
Modifier<#1> -> Modifier<#1>;

CompilationUnit(#1) -> Program(#1);

// Class declaration ClassDeclaration <- [ModifierBlock], Identifier, [ExtendsBlock], [ImplementsBlock], ClassBody;

ClassOrInterfaceDeclaration(Modifier<#1>, #2, #3) ->
ClassDeclaration(ModifierBlock(Modifier<#1>), #2, ClassBody(#3));
ClassOrInterfaceDeclaration(Modifier#1, #2, InterfaceType(#3)) ->
ClassDeclaration(ModifierBlock(#1), #2, ImplementsBlock(ClassType(Name(#3))), ClassBody);

ClassOrInterfaceDeclaration(Modifier<#1>, #2, #3...) ->
ClassDeclaration(ModifierBlock(Modifier<#1>), #2, ClassBody(#3));
ClassOrInterfaceDeclaration(Modifier#1, #2, ClassType(#3)) ->
ClassDeclaration(ModifierBlock(#1), #2, ExtendsBlock(ClassType(#3)), ClassBody);

ClassOrInterfaceDeclaration(Modifier<#1>, #2) ->
ClassDeclaration(ModifierBlock(Modifier<#1>), #2, ClassBody);
ClassOrInterfaceDeclaration(Modifier#1, #2, #3...) ->
ClassDeclaration(ModifierBlock(#1), #2, ClassBody(#3));

ClassOrInterfaceDeclaration(#2) -> ClassDeclaration(#2, ClassBody);
ClassOrInterfaceDeclaration(#1, #2...) -> ClassDeclaration(#1, ClassBody(#2));

ClassOrInterfaceDeclaration(Modifier<#1>, #2, InterfaceType(#3)) ->
ClassDeclaration(ModifierBlock(Modifier<#1>), #2, ImplementsBlock(ClassType(Name(#3))), ClassBody);

ClassOrInterfaceDeclaration(Modifier<#1>, #2, ClassType(#3)) ->
ClassDeclaration(ModifierBlock(Modifier<#1>), #2, ExtendsBlock(ClassType(#3)), ClassBody);

FieldDeclaration(VariableDeclarator(#1, #2)) -> FieldDeclaration(#1, DeclaratorList(Declarator(#2)));
FieldDeclaration(VariableDeclarator(#1, #2, #3)) -> FieldDeclaration(#1, DeclaratorList(Declarator(#2, #3)));

FieldDeclaration(Modifier<#3>, VariableDeclarator(#1, #2)) -> FieldDeclaration(ModifierBlock(Modifier<#3>), #1, DeclaratorList(Declarator(#2)));
FieldDeclaration(#1, #2, VariableDeclarator(#3, #4)) -> FieldDeclaration(ModifierBlock(#1, #2), #3, DeclaratorList(Declarator(#4)));
FieldDeclaration(Modifier<#4>, VariableDeclarator(#1, #2, #3)) -> FieldDeclaration(ModifierBlock(Modifier<#4>), #1, DeclaratorList(Declarator(#2, #3)));
FieldDeclaration(Modifier#3, VariableDeclarator(#1, #2)) -> FieldDeclaration(ModifierBlock(#3), #1, DeclaratorList(Declarator(#2)));
FieldDeclaration(Modifier#4, VariableDeclarator(#1, #2, #3)) -> FieldDeclaration(ModifierBlock(#4), #1, DeclaratorList(Declarator(#2, #3)));

// Function declaration FunctionDeclaration <- [modifiers@ModifierBlock], [typename@TypeName], name@Identifier, parameters@ParameterBlock, body@StatementBlock;

MethodDeclaration(Modifier<#1>, Modifier<#2>, #3, #4, #5, #6) ->
FunctionDeclaration(ModifierBlock(Modifier<#1>, Modifier<#2>), #5, #3, ParameterBlock(#4), #6);

MethodDeclaration(Modifier<#1>, Modifier<#2>, #3, #4, #5, #6) ->
FunctionDeclaration(ModifierBlock(Modifier<#1>, Modifier<#2>), #5, #3, ParameterBlock(#4), #6);

MethodDeclaration(Modifier<#1>, #2, #3, #4) ->
FunctionDeclaration(ModifierBlock(Modifier<#1>), #3, #2, ParameterBlock, #4);
MethodDeclaration(Modifier#1, #2, Parameter#3, #4, #5) ->
FunctionDeclaration(ModifierBlock(#1), #4, #2, ParameterBlock(#3), #5);
MethodDeclaration(Modifier#1, #2, Parameter#3, Exception#6, #4, #5) ->
FunctionDeclaration(ModifierBlock(#1), #4, #2, ParameterBlock(#3), #5, ThrowsBlock(#6));

MethodDeclaration(Modifier<#1>, #2, #3, #4, #5) ->
FunctionDeclaration(ModifierBlock(Modifier<#1>), #4, #2, ParameterBlock(#3), #5);
MethodDeclaration(Modifier<#1>, #2, #3, #4, #5, #6) ->
FunctionDeclaration(ModifierBlock(Modifier<#1>), #5, #2, ParameterBlock(#3, #4), #6);
MethodDeclaration(Modifier<#1>, #2, #3, #4, #5, #6, #7) ->
FunctionDeclaration(ModifierBlock(Modifier<#1>), #6, #2, ParameterBlock(#3, #4, #5), #7);
MethodDeclaration(Modifier<#1>, #2, #3, #4, #5, #6, #7, #8) ->
FunctionDeclaration(ModifierBlock(Modifier<#1>), #7, #2, ParameterBlock(#3, #4, #5, #6), #8);

ConstructorDeclaration(#1, #2, #3, #4, #5) ->
FunctionDeclaration(ModifierBlock(#1), #2, ParameterBlock(#3, #4), #5);
ConstructorDeclaration(Modifier#1, #2, Parameter#3, #4) ->
FunctionDeclaration(ModifierBlock(#1), #2, ParameterBlock(#3), #4);

js:

Expand Down Expand Up @@ -355,7 +339,7 @@ singleExpression(#1, literal<"/">, singleExpression(#2)) -> Division(#1, Variabl
singleExpression(#1, literal<"%">, #2) -> Modulus(#1, #2);
singleExpression(singleExpression(#1), literal<"%">, singleExpression(#2)) -> Modulus(Variable(Name(#1)), Variable(Name(#2)));
singleExpression(singleExpression(#1), literal<"%">, #2) -> Modulus(Variable(Name(#1)), #2);
singleExpression(#1, literal<"%">, singleExpression(#2)) -> Modulusfor(#1, Variable(Name(#2)));
singleExpression(#1, literal<"%">, singleExpression(#2)) -> Modulus(#1, Variable(Name(#2)));

singleExpression(#1, literal<"==">, #2) -> IsEqualTo(#1, #2);
singleExpression(singleExpression(#1), literal<"==">, singleExpression(#2)) -> IsEqualTo(Variable(Name(#1)), Variable(Name(#2)));
Expand Down Expand Up @@ -501,7 +485,6 @@ returnStatement(literal<"return">, expressionSequence(#1)) -> Return(#1);

// Class declaration ClassDeclaration <- [ModifierBlock], Identifier, [ExtendsBlock], [ImplementsBlock], ClassBody;

classDeclaration(literal<"class">, #1, classTail) -> ClassDeclaration(#1, ClassBody);
classDeclaration(literal<"class">, #1, classTail(literal<"extends">, Variable(#2)))
-> ClassDeclaration(#1, ExtendsBlock(ClassType(#2)), ClassBody);
classDeclaration(literal<"class">, #1, classTail(#2, classElement(emptyStatement_)))
Expand All @@ -513,11 +496,11 @@ classElement(#1) -> #1;

// Function declaration FunctionDeclaration <- [modifiers@ModifierBlock], [typename@TypeName], name@Identifier, parameters@ParameterBlock, body@StatementBlock;

functionBody(sourceElements(#1...)) -> StatementBlock(#1);
functionBody(sourceElements(sourceElement(statement(expressionStatement(expressionSequence(#1)))))) ->
StatementBlock(#1);
functionBody(sourceElements(sourceElement(statement(#1)))) ->
StatementBlock(#1);
functionBody(sourceElements(#1...)) -> StatementBlock(#1);

functionDeclaration(literal<"function">, #1, #2) ->
FunctionDeclaration(#1, ParameterBlock, #2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

import com.github.javaparser.ast.Modifier;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.expr.AssignExpr;
import com.github.javaparser.ast.expr.BinaryExpr;
import com.github.javaparser.ast.expr.LiteralStringValueExpr;
Expand Down Expand Up @@ -96,6 +97,12 @@ private static void processClassOrInterfaceType(
} else {
ctor.setName("InterfaceType");
}
} else if (parent.isPresent() && parent.get() instanceof MethodDeclaration) {
if (((MethodDeclaration) parent.get()).getThrownExceptions().contains(node)) {
ctor.setName("Exception");
} else {
ctor.setName("ReturnType");
}
} else {
ctor.setName(node.getClass().getSimpleName());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class Program {
public String convert(final String source) throws IOException {
final InputStream stream = IOUtils.toInputStream(source);
final String result = IOUtils.toString(stream);
stream.close();
return result;
}
}

1 comment on commit 040c1f4

@0pdd
Copy link

@0pdd 0pdd commented on 040c1f4 Oct 19, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't able to retrieve PDD puzzles from the code base and submit them to github. If you think that it's a bug on our side, please submit it to yegor256/0pdd:

set -x && set -e && set -o pipefail && cd /tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA && pdd -v -f /tmp/20221019-7776-i5krk5 [1]: + set -e + set -o pipefail + cd /tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA + pdd -v -f /tmp/20221019-7776-i5krk5 My...

Please, copy and paste this stack trace to GitHub:

UserError
set -x && set -e && set -o pipefail && cd /tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA && pdd -v -f /tmp/20221019-7776-i5krk5 [1]:
+ set -e
+ set -o pipefail
+ cd /tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA
+ pdd -v -f /tmp/20221019-7776-i5krk5

My version is 0.22.0
Ruby version is 2.7.5 at x86_64-linux
Reading from root dir /tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA
/tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/project_structure.png is a binary file (28774 bytes)
/tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_js_raw.png is a binary file (67906 bytes)
/tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_js_unified.png is a binary file (30973 bytes)
/tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_java_unified.png is a binary file (46534 bytes)
/tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_py_unified.png is a binary file (30973 bytes)
/tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_java_raw.png is a binary file (36349 bytes)
/tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/comparison.png is a binary file (115513 bytes)
/tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/synchronized_java.png is a binary file (14938 bytes)
/tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_py_raw.png is a binary file (47973 bytes)
/tmp/0pdd20221019-13-7ex5eu/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/test/resources/algorithms/ClassWithProperty_js.json is a binary file (709 bytes)
Reading .gitignore ...
Reading README.md ...
Reading .rultor.yml ...
Reading pom.xml ...
Reading LICENSE.txt ...
Reading .github/workflows/build_and_test.yml ...
Reading codecov.yml ...
Reading src/main/antlr/PythonParser.g4 ...
ERROR: ERROR: src/main/antlr/PythonParser.g4; PDD::Error at src/main/antlr/PythonParser.g4:128: TODO found, but puzzle can't be parsed, most probably because TODO is not followed by a puzzle marker, as this page explains: https://github.com/cqfn/pdd#how-to-format
If you can't understand the cause of this issue or you don't know how to fix it, please submit a GitHub issue, we will try to help you: https://github.com/cqfn/pdd/issues. This tool is still in its beta version and we will appreciate your feedback. Here is where you can find more documentation: https://github.com/cqfn/pdd/blob/master/README.md.
Exit code is 1

/app/objects/git_repo.rb:73:in `rescue in block in xml'
/app/objects/git_repo.rb:70:in `block in xml'
/app/vendor/ruby-2.7.5/lib/ruby/2.7.0/tempfile.rb:291:in `open'
/app/objects/git_repo.rb:69:in `xml'
/app/objects/puzzles.rb:41:in `deploy'
/app/objects/jobs/job.rb:38:in `proceed'
/app/objects/jobs/job_starred.rb:32:in `proceed'
/app/objects/jobs/job_recorded.rb:31:in `proceed'
/app/objects/jobs/job_emailed.rb:33:in `proceed'
/app/objects/jobs/job_commiterrors.rb:33:in `proceed'
/app/objects/jobs/job_detached.rb:48:in `exclusive'
/app/objects/jobs/job_detached.rb:36:in `block in proceed'
/app/objects/jobs/job_detached.rb:36:in `fork'
/app/objects/jobs/job_detached.rb:36:in `proceed'
/app/0pdd.rb:530:in `process_request'
/app/0pdd.rb:367:in `block in <top (required)>'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1686:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1686:in `block in compile!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1023:in `block (3 levels) in route!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1042:in `route_eval'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1023:in `block (2 levels) in route!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1071:in `block in process_route'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1069:in `catch'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1069:in `process_route'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1021:in `block in route!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1018:in `each'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1018:in `route!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1140:in `block in dispatch!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `block in invoke'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `catch'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `invoke'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1135:in `dispatch!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:949:in `block in call!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `block in invoke'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `catch'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `invoke'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:949:in `call!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:938:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/deflater.rb:44:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/xss_header.rb:18:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/path_traversal.rb:16:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/json_csrf.rb:26:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/base.rb:50:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/base.rb:50:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/frame_options.rb:31:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/logger.rb:17:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/common_logger.rb:38:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:255:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:248:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/head.rb:12:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/method_override.rb:24:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:218:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1993:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1553:in `block in call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1769:in `synchronize'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1553:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/handler/webrick.rb:95:in `service'
/app/vendor/ruby-2.7.5/lib/ruby/2.7.0/webrick/httpserver.rb:140:in `service'
/app/vendor/ruby-2.7.5/lib/ruby/2.7.0/webrick/httpserver.rb:96:in `run'
/app/vendor/ruby-2.7.5/lib/ruby/2.7.0/webrick/server.rb:307:in `block in start_thread'

Please sign in to comment.