diff --git a/pom.xml b/pom.xml
index bdf4acb..d44fb69 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,6 +64,16 @@
joda-time
2.4
+
+ io.springfox
+ springfox-swagger2
+ 2.4.0
+
+
+ io.springfox
+ springfox-swagger-ui
+ 2.4.0
+
org.jadira.usertype
usertype.core
@@ -116,6 +126,15 @@
+
+
+ jcenter-snapshots
+ jcenter
+ https://jcenter.bintray.com/
+
+
+
+
UTF-8
pl.jug.torun.xenia.Application
diff --git a/src/main/groovy/pl/jug/torun/xenia/Application.groovy b/src/main/groovy/pl/jug/torun/xenia/Application.groovy
index 2fb4669..9c5a480 100644
--- a/src/main/groovy/pl/jug/torun/xenia/Application.groovy
+++ b/src/main/groovy/pl/jug/torun/xenia/Application.groovy
@@ -9,4 +9,6 @@ class Application {
static void main(String[] args) {
SpringApplication.run Application, args
}
+
+
}
diff --git a/src/main/groovy/pl/jug/torun/xenia/SwaggerConfig.groovy b/src/main/groovy/pl/jug/torun/xenia/SwaggerConfig.groovy
new file mode 100644
index 0000000..0165d58
--- /dev/null
+++ b/src/main/groovy/pl/jug/torun/xenia/SwaggerConfig.groovy
@@ -0,0 +1,42 @@
+package pl.jug.torun.xenia
+
+import com.google.common.base.Predicate
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.boot.actuate.autoconfigure.ManagementServerProperties
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication
+import org.springframework.context.annotation.Bean
+import org.springframework.context.annotation.Configuration
+import springfox.documentation.spi.DocumentationType
+import springfox.documentation.spring.web.plugins.Docket
+import springfox.documentation.swagger2.annotations.EnableSwagger2
+
+import static com.google.common.base.Predicates.not
+import static com.google.common.base.Predicates.or
+import static springfox.documentation.builders.PathSelectors.regex
+
+/**
+ * Created by krzysztof on 25.06.16.
+ */
+@ConditionalOnWebApplication
+@EnableSwagger2
+@Configuration
+public class SwaggerConfig {
+
+ @Autowired
+ ManagementServerProperties managementServerProperties;
+
+ @Bean
+ public Docket getDocket() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .select().paths(getPaths()).build()
+ .ignoredParameterTypes(MetaClass.class) // for groovy
+ }
+
+
+ private Predicate getPaths() { //ignore endpoints from actuator and standard error endpoint
+ return not(or(
+ regex(managementServerProperties.getContextPath() + ".*"),
+ regex("/error.*")
+ ))
+ }
+}
\ No newline at end of file
diff --git a/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupClient.groovy b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupClient.groovy
index f657e86..ad1e4c7 100644
--- a/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupClient.groovy
+++ b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupClient.groovy
@@ -18,33 +18,16 @@ class MeetupClient {
private static final String MEETUP_API_HOST = 'https://api.meetup.com'
- @Value('${meetup.key:""}')
- String key
- @Value('${meetup.code:""}')
- String code
-
- @Value('${meetup.mail.subject_template:""}')
- String subjectTemplate
-
- @Value('${meetup.mail.body_template:""}')
- String bodyTemplate
-
-
- @Value('${meetup.groupId:""}')
- String groupId
-
- @Value('${meetup.access_token:""}')
- String token
+ @Autowired
+ MeetupProperty meetupProperty
@Autowired
TokenRequester tokenRequester
- String groupUrlName
-
List findAllEvents() {
RESTClient request = new RESTClient(MEETUP_API_HOST)
- Map params = [key: key, group_urlname: groupUrlName, status: 'upcoming,past']
+ Map params = [key: meetupProperty.key, group_urlname: meetupProperty.groupUrlName, status: 'upcoming,past']
HttpResponseDecorator response = request.get(
path: '/2/events.json',
@@ -58,7 +41,7 @@ class MeetupClient {
List findAllAttendeesOfEvent(Long id) {
RESTClient request = new RESTClient(MEETUP_API_HOST)
- Map params = [key: key, group_urlname: groupUrlName, event_id: id, rsvp: 'yes']
+ Map params = [key: meetupProperty.key, group_urlname: meetupProperty.groupUrlName, event_id: id, rsvp: 'yes']
HttpResponseDecorator response = request.get(
path: '/2/rsvps.json',
@@ -74,7 +57,7 @@ class MeetupClient {
Map params = [
dryrun : true,
- member_id: member.id, group_id: groupId, access_token: token,
+ member_id: member.id, group_id: meetupProperty.groupId, access_token: meetupProperty.token,
subject : String.format(subjectTemplate, prize.name), message: String.format(bodyTemplate, prize.name)
]
diff --git a/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupMailProperty.groovy b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupMailProperty.groovy
new file mode 100644
index 0000000..5cd7d2d
--- /dev/null
+++ b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupMailProperty.groovy
@@ -0,0 +1,9 @@
+package pl.jug.torun.xenia.meetup
+
+/**
+ * Created by krzysztof on 26.06.16.
+ */
+class MeetupMailProperty {
+ String subjectTemplate
+ String bodyTemplate
+}
diff --git a/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupProperty.groovy b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupProperty.groovy
new file mode 100644
index 0000000..654d066
--- /dev/null
+++ b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupProperty.groovy
@@ -0,0 +1,19 @@
+package pl.jug.torun.xenia.meetup
+
+import org.springframework.boot.context.properties.ConfigurationProperties
+import org.springframework.stereotype.Component
+
+/**
+ * Created by krzysztof on 26.06.16.
+ */
+@Component
+@ConfigurationProperties(prefix = "meetup")
+class MeetupProperty {
+ String key= ''
+ String code= ''
+ String groupId
+ String token
+ String groupUrlName
+
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 6623daa..dfb3f3d 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -4,6 +4,8 @@ spring.datasource.password =
spring.datasource.driverClassName = org.h2.Driver
spring.jpa.hibernate.ddl-auto=update
+management.context-path=/xenia-api
+
meetup.key = xxx
meetup.groupUrlName = yyy
diff --git a/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerIntegrationTest.groovy b/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerIntegrationTest.groovy
index b4e94e7..54e4db4 100644
--- a/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerIntegrationTest.groovy
+++ b/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerIntegrationTest.groovy
@@ -3,6 +3,7 @@ package pl.jug.torun.xenia.rest
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.IntegrationTest
import org.springframework.boot.test.SpringApplicationContextLoader
+import org.springframework.boot.test.WebIntegrationTest
import org.springframework.dao.DataIntegrityViolationException
import org.springframework.test.context.ContextConfiguration
import pl.jug.torun.xenia.Application
diff --git a/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerSpec.groovy b/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerSpec.groovy
index fc2815b..66e451c 100644
--- a/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerSpec.groovy
+++ b/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerSpec.groovy
@@ -3,9 +3,9 @@ package pl.jug.torun.xenia.rest
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.IntegrationTest
import org.springframework.boot.test.SpringApplicationContextLoader
+import org.springframework.boot.test.WebIntegrationTest
import org.springframework.http.MediaType
import org.springframework.test.context.ContextConfiguration
-import org.springframework.test.context.web.WebAppConfiguration
import org.springframework.test.web.servlet.MockMvc
import org.springframework.test.web.servlet.setup.MockMvcBuilders
import org.springframework.web.context.WebApplicationContext
@@ -22,9 +22,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
@ContextConfiguration(loader = SpringApplicationContextLoader, classes = Application)
-@WebAppConfiguration
-@IntegrationTest
-class PrizeControllerSpec extends Specification {
+@WebIntegrationTest(randomPort = true)
+class PrizeControllerSpec extends Specification{
@Autowired
WebApplicationContext webApplicationContext