Skip to content

Commit

Permalink
Makes the DSL script context mirror the DSL plugin context (added a r…
Browse files Browse the repository at this point in the history
…eference to the parser).
  • Loading branch information
Simon Brown committed Feb 16, 2024
1 parent 4ff7f42 commit 15b6eae
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class ExternalScriptDslContext extends ScriptDslContext {

private final String filename;

ExternalScriptDslContext(DslContext parentContext, File dslFile, String filename) {
super(parentContext, dslFile);
ExternalScriptDslContext(DslContext parentContext, File dslFile, StructurizrDslParser dslParser, String filename) {
super(parentContext, dslFile, dslParser);

this.filename = filename;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ class InlineScriptDslContext extends ScriptDslContext {
SUPPORTED_LANGUAGES.put("ruby", "rb");
}

InlineScriptDslContext(DslContext parentContext, File dslFile, String language) {
super(parentContext, dslFile);
InlineScriptDslContext(DslContext parentContext, File dslFile, StructurizrDslParser dslParser, String language) {
super(parentContext, dslFile, dslParser);

this.language = language.toLowerCase();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@ abstract class ScriptDslContext extends DslContext {
private final DslContext parentContext;

protected final File dslFile;
private final StructurizrDslParser dslParser;

private final Map<String,String> parameters = new HashMap<>();

ScriptDslContext(DslContext parentContext, File dslFile) {
ScriptDslContext(DslContext parentContext, File dslFile, StructurizrDslParser dslParser) {
this.parentContext = parentContext;
this.dslFile = dslFile;
this.dslParser = dslParser;
}

void addParameter(String name, String value) {
Expand Down Expand Up @@ -60,7 +62,7 @@ void run(DslContext context, String extension, List<String> lines) throws Except
}

// bind a context object
StructurizrDslScriptContext scriptContext = new StructurizrDslScriptContext(dslFile, getWorkspace(), parameters);
StructurizrDslScriptContext scriptContext = new StructurizrDslScriptContext(dslParser, dslFile, getWorkspace(), parameters);
bindings.put(CONTEXT_VARIABLE_NAME, scriptContext);

// and any custom parameters
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,10 +271,10 @@ void parse(List<String> lines, File dslFile) throws StructurizrDslParserExceptio
ScriptParser scriptParser = new ScriptParser();
if (scriptParser.isInlineScript(tokens)) {
String language = scriptParser.parseInline(tokens.withoutContextStartToken());
startContext(new InlineScriptDslContext(getContext(), dslFile, language));
startContext(new InlineScriptDslContext(getContext(), dslFile, this, language));
} else {
String filename = scriptParser.parseExternal(tokens.withoutContextStartToken());
startContext(new ExternalScriptDslContext(getContext(), dslFile, filename));
startContext(new ExternalScriptDslContext(getContext(), dslFile, this, filename));

if (shouldStartContext(tokens)) {
// we'll wait for parameters before executing the script
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,35 @@
*/
public class StructurizrDslScriptContext {

private final StructurizrDslParser dslParser;
private final File dslFile;
private final Workspace workspace;
private final Map<String,String> parameters;

/**
* Creates a new instance.
*
* @param dslParser a reference to the DSL parser that loaded the script
* @param dslFile a reference to the DSL file that loaded the script
* @param workspace the workspace
* @param parameters a map of name/value pairs representing parameters
*/
public StructurizrDslScriptContext(File dslFile, Workspace workspace, Map<String,String> parameters) {
public StructurizrDslScriptContext(StructurizrDslParser dslParser, File dslFile, Workspace workspace, Map<String,String> parameters) {
this.dslParser = dslParser;
this.dslFile = dslFile;
this.workspace = workspace;
this.parameters = parameters;
}

/**
* Gets a reference to the DSL parser that initiated this script context.
*
* @return a StructurizrDslParser instance
*/
public StructurizrDslParser getDslParser() {
return dslParser;
}

/**
* Gets a reference to the DSL file that initiated this script context.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class ExternalScriptDslContextTests extends AbstractTests {

@Test
void test_parseExternal_RunsTheScript_WhenAValidScriptFilenameIsSpecified() {
ExternalScriptDslContext context = new ExternalScriptDslContext(new WorkspaceDslContext(), new File("src/test/resources/dsl/workspace.dsl"), "test.kts");
ExternalScriptDslContext context = new ExternalScriptDslContext(new WorkspaceDslContext(), new File("src/test/resources/dsl/workspace.dsl"), null, "test.kts");
context.setWorkspace(workspace);
context.end();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class InlineScriptDslContextTests extends AbstractTests {
@Test
void test_end_ThrowsAnException_WhenAnUnsupportedLanguageIsSpecified() {
try {
InlineScriptDslContext context = new InlineScriptDslContext(new WorkspaceDslContext(), new File("workspace.dsl"), "java");
InlineScriptDslContext context = new InlineScriptDslContext(new WorkspaceDslContext(), new File("workspace.dsl"), null, "java");
context.end();
fail();
} catch (Exception e) {
Expand Down

0 comments on commit 15b6eae

Please sign in to comment.