Skip to content
This repository was archived by the owner on Dec 19, 2023. It is now read-only.

Commit 5b8662d

Browse files
feat(#212): Reworked Playground configuration
1 parent dc3f483 commit 5b8662d

File tree

10 files changed

+74
-57
lines changed

10 files changed

+74
-57
lines changed
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.oembedler.moon.playground.boot;
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
4-
import com.oembedler.moon.playground.boot.settings.PlaygroundSettingsProperties;
54
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
65
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
76
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
@@ -13,13 +12,13 @@
1312
@Configuration
1413
@ConditionalOnWebApplication
1514
@ConditionalOnClass(DispatcherServlet.class)
16-
@EnableConfigurationProperties(PlaygroundSettingsProperties.class)
15+
@EnableConfigurationProperties(PlaygroundPropertiesConfiguration.class)
1716
public class PlaygroundAutoConfiguration {
1817

1918
@Bean
20-
@ConditionalOnProperty(value = "playground.enabled", havingValue = "true", matchIfMissing = true)
21-
PlaygroundController playgroundController(final PlaygroundSettingsProperties playgroundSettingsProperties,
19+
@ConditionalOnProperty(value = "graphql.playground.enabled", havingValue = "true", matchIfMissing = true)
20+
PlaygroundController playgroundController(final PlaygroundPropertiesConfiguration playgroundPropertiesConfiguration,
2221
final ObjectMapper objectMapper) {
23-
return new PlaygroundController(playgroundSettingsProperties, objectMapper);
22+
return new PlaygroundController(playgroundPropertiesConfiguration, objectMapper);
2423
}
2524
}

playground-spring-boot-autoconfigure/src/main/java/com/oembedler/moon/playground/boot/PlaygroundController.java

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package com.oembedler.moon.playground.boot;
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
4-
import com.oembedler.moon.playground.boot.settings.PlaygroundSettingsProperties;
54
import lombok.RequiredArgsConstructor;
6-
import org.springframework.beans.factory.annotation.Value;
75
import org.springframework.stereotype.Controller;
86
import org.springframework.ui.Model;
97
import org.springframework.web.bind.annotation.GetMapping;
@@ -28,41 +26,24 @@ public class PlaygroundController {
2826
private static final String SCRIPT_URL_ATTRIBUTE_NAME = "scriptUrl";
2927
private static final String LOGO_URL_ATTRIBUTE_NAME = "logoUrl";
3028

31-
@Value("${playground.endpoint.graphql:/graphql}")
32-
private String graphqlEndpoint;
33-
34-
@Value("${playground.endpoint.subscriptions:/subscriptions}")
35-
private String subscriptionsEndpoint;
36-
37-
@Value("${playground.cdn.enabled:false}")
38-
private Boolean cdnEnabled;
39-
40-
@Value("${playground.cdn.version:latest}")
41-
private String cdnVersion;
42-
43-
@Value("${playground.pageTitle:Playground}")
44-
private String pageTitle;
45-
46-
private final PlaygroundSettingsProperties settingsProperties;
29+
private final PlaygroundPropertiesConfiguration propertiesConfiguration;
4730

4831
private final ObjectMapper objectMapper;
4932

50-
@GetMapping("${playground.mapping:/playground}")
33+
@GetMapping("${graphql.playground.mapping:/playground}")
5134
public String playground(final Model model) {
52-
if (cdnEnabled) {
35+
if (propertiesConfiguration.getPlayground().isCdnEnabled()) {
5336
setCdnUrls(model);
5437
} else {
5538
setLocalAssetUrls(model);
5639
}
57-
model.addAttribute("graphqlEndpoint", graphqlEndpoint);
58-
model.addAttribute("subscriptionsEndpoint", subscriptionsEndpoint);
59-
model.addAttribute("pageTitle", pageTitle);
60-
model.addAttribute("settings", objectMapper.valueToTree(settingsProperties));
40+
model.addAttribute("pageTitle", propertiesConfiguration.getPlayground().getPageTitle());
41+
model.addAttribute("properties", objectMapper.valueToTree(propertiesConfiguration.getPlayground()));
6142
return "playground";
6243
}
6344

6445
private String getCdnUrl(final String assetUrl) {
65-
return String.format("%s@%s/%s", CDN_ROOT, cdnVersion, assetUrl);
46+
return String.format("%s@%s/%s", CDN_ROOT, propertiesConfiguration.getPlayground().getCdnVersion(), assetUrl);
6647
}
6748

6849
private void setCdnUrls(final Model model) {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.oembedler.moon.playground.boot;
2+
3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
4+
import com.fasterxml.jackson.annotation.JsonInclude;
5+
import com.fasterxml.jackson.annotation.JsonProperty;
6+
import com.oembedler.moon.playground.boot.settings.PlaygroundSettings;
7+
import lombok.Data;
8+
9+
import javax.validation.constraints.NotEmpty;
10+
11+
@Data
12+
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE,
13+
isGetterVisibility = JsonAutoDetect.Visibility.NONE)
14+
@JsonInclude(JsonInclude.Include.NON_NULL)
15+
public class PlaygroundProperties {
16+
17+
@NotEmpty
18+
@JsonProperty
19+
private String endpoint = "/graphql";
20+
21+
@NotEmpty
22+
@JsonProperty
23+
private String subscriptionEndpoint = "/subscriptions";
24+
25+
private boolean cdnEnabled;
26+
27+
@NotEmpty
28+
private String cdnVersion = "latest";
29+
30+
private String pageTitle = "Playground";
31+
32+
@JsonProperty
33+
private PlaygroundSettings settings;
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.oembedler.moon.playground.boot;
2+
3+
import lombok.Data;
4+
import org.springframework.boot.context.properties.ConfigurationProperties;
5+
import org.springframework.validation.annotation.Validated;
6+
7+
@Data
8+
@ConfigurationProperties(prefix = "graphql")
9+
@Validated
10+
public class PlaygroundPropertiesConfiguration {
11+
12+
private PlaygroundProperties playground = new PlaygroundProperties();
13+
}

playground-spring-boot-autoconfigure/src/main/java/com/oembedler/moon/playground/boot/settings/PlaygroundPrettierSettings.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@
33
import com.fasterxml.jackson.annotation.JsonInclude;
44
import lombok.Data;
55

6+
import javax.validation.constraints.Min;
7+
68
@Data
79
@JsonInclude(JsonInclude.Include.NON_NULL)
810
public class PlaygroundPrettierSettings {
911

12+
@Min(1)
1013
private Integer printWidth;
14+
@Min(1)
1115
private Integer tabWidth;
1216
private Boolean useTabs;
1317
}

playground-spring-boot-autoconfigure/src/main/java/com/oembedler/moon/playground/boot/settings/PlaygroundSchemaPollingSettings.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import com.fasterxml.jackson.annotation.JsonInclude;
44
import lombok.Data;
55

6+
import javax.validation.constraints.Min;
7+
68
@Data
79
@JsonInclude(JsonInclude.Include.NON_NULL)
810
public class PlaygroundSchemaPollingSettings {
911

1012
private Boolean enable;
1113
private String endpointFilter;
14+
@Min(1)
1215
private Integer interval;
1316
}
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,25 @@
11
package com.oembedler.moon.playground.boot.settings;
22

3-
import com.fasterxml.jackson.annotation.JsonAutoDetect;
43
import com.fasterxml.jackson.annotation.JsonInclude;
5-
import com.fasterxml.jackson.annotation.JsonProperty;
64
import com.fasterxml.jackson.annotation.JsonUnwrapped;
75
import lombok.Data;
8-
import org.springframework.boot.context.properties.ConfigurationProperties;
9-
import org.springframework.context.annotation.Configuration;
106

11-
@Configuration
127
@Data
13-
@ConfigurationProperties(prefix = "playground.settings")
14-
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE)
158
@JsonInclude(JsonInclude.Include.NON_NULL)
16-
public class PlaygroundSettingsProperties {
9+
public class PlaygroundSettings {
1710

18-
@JsonProperty
1911
@JsonUnwrapped(prefix = "editor.")
2012
private PlaygroundEditorSettings editor;
2113

22-
@JsonProperty
2314
@JsonUnwrapped(prefix = "prettier.")
2415
private PlaygroundPrettierSettings prettier;
2516

26-
@JsonProperty
2717
@JsonUnwrapped(prefix = "request.")
2818
private PlaygroundRequestSettings request;
2919

30-
@JsonProperty
3120
@JsonUnwrapped(prefix = "schema.")
3221
private PlaygroundSchemaSettings schema;
3322

34-
@JsonProperty
3523
@JsonUnwrapped(prefix = "tracing.")
3624
private PlaygroundTracingSettings tracing;
3725
}

playground-spring-boot-autoconfigure/src/main/resources/templates/playground.html

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,12 @@
1919
</div>
2020

2121
<script th:inline="javascript">
22-
let graphqlEndpoint = /*[[${graphqlEndpoint}]]*/ "";
23-
let subscriptionsEndpoint = /*[[${subscriptionsEndpoint}]]*/ "";
24-
let settings = /*[[${settings}]]*/ null;
22+
let properties = /*[[${properties}]]*/ {};
23+
properties.setTitle = false;
24+
window.addEventListener('load', function (event) {
25+
GraphQLPlayground.init(document.getElementById('root'), properties)
26+
});
2527
</script>
26-
27-
<script>window.addEventListener('load', function (event) {
28-
GraphQLPlayground.init(document.getElementById('root'), {
29-
endpoint: graphqlEndpoint,
30-
subscriptionEndpoint: subscriptionsEndpoint,
31-
setTitle: false,
32-
settings: settings
33-
})
34-
})</script>
3528
</body>
3629

3730
</html>

playground-spring-boot-autoconfigure/src/test/java/com/oembedler/moon/playground/boot/PlaygroundDisabledTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.oembedler.moon.playground.boot;
22

3+
import com.fasterxml.jackson.databind.ObjectMapper;
34
import org.junit.Test;
45
import org.junit.runner.RunWith;
56
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
@@ -9,7 +10,8 @@
910
import org.springframework.test.context.junit4.SpringRunner;
1011

1112
@RunWith(SpringRunner.class)
12-
@SpringBootTest(classes = PlaygroundAutoConfiguration.class, properties = "playground.enabled=false")
13+
@SpringBootTest(classes = {PlaygroundAutoConfiguration.class, ObjectMapper.class},
14+
properties = "graphql.playground.enabled=false")
1315
public class PlaygroundDisabledTest {
1416

1517
@Autowired

playground-spring-boot-autoconfigure/src/test/java/com/oembedler/moon/playground/boot/PlaygroundEnabledTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
@RunWith(SpringRunner.class)
1414
@SpringBootTest(classes = {PlaygroundAutoConfiguration.class, ObjectMapper.class},
15-
properties = "playground.enabled=true")
15+
properties = "graphql.playground.enabled=true")
1616
public class PlaygroundEnabledTest {
1717

1818
@Autowired

0 commit comments

Comments
 (0)