com.github.tonivade.zeromock.HttpService Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of zeromock Show documentation
Show all versions of zeromock Show documentation
Mock Http Server (mostly) without dependencies
The newest version!
/*
* Copyright (c) 2018, Antonio Gabriel Muñoz Conejo
* Distributed under the terms of the MIT License
*/
package com.github.tonivade.zeromock;
import static com.github.tonivade.zeromock.Handlers.delegate;
import static com.github.tonivade.zeromock.Mappings.mapping;
import static com.github.tonivade.zeromock.Predicates.startsWith;
import static java.util.Objects.requireNonNull;
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Predicate;
import com.github.tonivade.zeromock.Mappings.Mapping;
public class HttpService {
private final String name;
private final List mappings;
public HttpService(String name) {
this(name, new LinkedList<>());
}
private HttpService(String name, List mappings) {
this.name = requireNonNull(name);
this.mappings = requireNonNull(mappings);
}
public String name() {
return name;
}
public HttpService mount(String path, HttpService service) {
return when(startsWith(path), delegate(service));
}
public HttpService when(Predicate matcher, Function handler) {
return when(mapping(matcher).then(handler));
}
public HttpService when(Mapping mapping) {
addMapping(mapping);
return this;
}
public Optional execute(HttpRequest request) {
return findMapping(request).map(mapping -> mapping.execute(request));
}
public HttpService combine(HttpService other) {
List merge = new LinkedList<>();
merge.addAll(this.mappings);
merge.addAll(other.mappings);
return new HttpService(this.name + "+" + other.name, merge);
}
@Override
public String toString() {
return "HttpService(" + name + ")";
}
protected void clear() {
mappings.clear();
}
private void addMapping(Mapping mapping) {
mappings.add(mapping);
}
private Optional findMapping(HttpRequest request) {
return mappings.stream()
.filter(mapping -> mapping.test(request))
.findFirst();
}
}