@Override public List<String> getQueryParams(String param) { return original.getQueryParams(param); }
@Override public ImmutableMap<String, ImmutableList<String>> getQueryParams() { return original.getQueryParams(); }
@Override public ImmutableMap<String, ImmutableList<String>> getQueryParams() { return original.getQueryParams(); }
@Override public List<String> getQueryParams(String param) { return original.getQueryParams(param); }
@Override public List<String> extractQueryParamStringedValuesFor(EndpointParamDef parameter, RestxRequest request, RestxRequestMatch match) { return request.getQueryParams(parameter.getName()); } }, PATH {
@Override public List<String> extractQueryParamStringedValuesFor(EndpointParamDef parameter, RestxRequest request, RestxRequestMatch match) { return request.getQueryParams(parameter.getName()); } }, PATH {
protected Map<String, String> createRoleInterpolationMapFrom(RestxRequest request, RestxRequestMatch match) { Map<String, String> roleInterpolationMap = new HashMap<>(); if(request != null) { // When we have more than 1 query param value for a given key, subjectively keeping only the first one // I don't think these multi-values query params should be taken into consideration when interpolating roles // but I don't want to remove it from interpolation map either "if values.size()>1" roleInterpolationMap.putAll(Maps.transformValues(request.getQueryParams(), new Function<List<String>, String>(){ @Override public String apply(List<String> input) { return Iterables.getFirst(input, null); } })); } if(match != null) { roleInterpolationMap.putAll(match.getPathParams()); } return roleInterpolationMap; } }
protected Map<String, String> createRoleInterpolationMapFrom(RestxRequest request, RestxRequestMatch match) { Map<String, String> roleInterpolationMap = new HashMap<>(); if(request != null) { // When we have more than 1 query param value for a given key, subjectively keeping only the first one // I don't think these multi-values query params should be taken into consideration when interpolating roles // but I don't want to remove it from interpolation map either "if values.size()>1" roleInterpolationMap.putAll(Maps.transformValues(request.getQueryParams(), new Function<List<String>, String>(){ @Override public String apply(List<String> input) { return Iterables.getFirst(input, null); } })); } if(match != null) { roleInterpolationMap.putAll(match.getPathParams()); } return roleInterpolationMap; } }
Iterable<WhenHttpRequest> findWhensMatchingRequest(ImmutableMap<String, RestxSpec> allSpecs, RestxRequest restxRequest) { Collection<WhenHttpRequest> matchingRequestsSpecs = Lists.newArrayList(); for (Map.Entry<String, RestxSpec> spec : allSpecs.entrySet()) { for (When when : spec.getValue().getWhens()) { if (when instanceof WhenHttpRequest) { WhenHttpRequest request = (WhenHttpRequest) when; String requestPath = request.getPath(); if (!requestPath.startsWith("/")) { requestPath = "/" + requestPath; } StdRequest stdRequest = StdRequest.builder() .setBaseUri("http://restx.io") // baseUri is required but we won't use it .setHttpMethod(request.getMethod()).setFullPath(requestPath).build(); if (restxRequest.getHttpMethod().equals(stdRequest.getHttpMethod()) && restxRequest.getRestxPath().equals(stdRequest.getRestxPath())) { MapDifference<String, ImmutableList<String>> difference = Maps.difference(restxRequest.getQueryParams(), stdRequest.getQueryParams()); if (difference.entriesOnlyOnRight().isEmpty() && difference.entriesDiffering().isEmpty()) { matchingRequestsSpecs.add(request); break; } } } } } return matchingRequestsSpecs; } }
Iterable<WhenHttpRequest> findWhensMatchingRequest(ImmutableMap<String, RestxSpec> allSpecs, RestxRequest restxRequest) { Collection<WhenHttpRequest> matchingRequestsSpecs = Lists.newArrayList(); for (Map.Entry<String, RestxSpec> spec : allSpecs.entrySet()) { for (When when : spec.getValue().getWhens()) { if (when instanceof WhenHttpRequest) { WhenHttpRequest request = (WhenHttpRequest) when; String requestPath = request.getPath(); if (!requestPath.startsWith("/")) { requestPath = "/" + requestPath; } StdRequest stdRequest = StdRequest.builder() .setBaseUri("http://restx.io") // baseUri is required but we won't use it .setHttpMethod(request.getMethod()).setFullPath(requestPath).build(); if (restxRequest.getHttpMethod().equals(stdRequest.getHttpMethod()) && restxRequest.getRestxPath().equals(stdRequest.getRestxPath())) { MapDifference<String, ImmutableList<String>> difference = Maps.difference(restxRequest.getQueryParams(), stdRequest.getQueryParams()); if (difference.entriesOnlyOnRight().isEmpty() && difference.entriesDiffering().isEmpty()) { matchingRequestsSpecs.add(request); break; } } } } } return matchingRequestsSpecs; } }