File tree 4 files changed +57
-10
lines changed
4 files changed +57
-10
lines changed Original file line number Diff line number Diff line change 3
3
:url " http://example.com/FIXME"
4
4
:license {:name " Eclipse Public License"
5
5
:url " http://www.eclipse.org/legal/epl-v10.html" }
6
- :dependencies [[org.clojure/clojure " 1.8.0" ]])
6
+ :dependencies [[org.clojure/clojure " 1.8.0" ]]
7
+ :profiles {:dev {:dependencies [[cheshire " 5.7.0" ]
8
+ [compojure " 1.5.2" ]
9
+ [ring/ring-json " 0.4.0" ]]}})
10
+
Original file line number Diff line number Diff line change 4
4
(defn- generate-query-string [params]
5
5
(clojure.string/join " &" (map (fn [[k v]] (str (URLEncoder/encode (name k)) " =" (URLEncoder/encode v))) params)))
6
6
7
- (defn wrap-apigw-lambda-proxy [handler]
8
- (fn [apigw-request]
9
- (let [ring-request {:uri (:path apigw-request)
10
- :query-string (generate-query-string (:queryStringParameters apigw-request))
11
- :request-method :get }
12
- response (handler ring-request)]
13
- {:statusCode (:status response)
14
- :headers (:headers response)
15
- :body (:body response)})))
7
+ (defn wrap-apigw-lambda-proxy
8
+ ([handler] (wrap-apigw-lambda-proxy handler {}))
9
+ ([handler {:keys [scheduled-event-route]}]
10
+ (fn [apigw-request]
11
+ (let [scheduled-event? (= " Scheduled Event" (:detail-type apigw-request))
12
+ ring-request (if scheduled-event?
13
+ {:uri scheduled-event-route
14
+ :query-string " "
15
+ :request-method :get }
16
+ {:uri (:path apigw-request)
17
+ :query-string (generate-query-string (:queryStringParameters apigw-request))
18
+ :request-method :get })
19
+ response (handler ring-request)]
20
+ {:statusCode (:status response)
21
+ :headers (:headers response)
22
+ :body (:body response)}))))
Original file line number Diff line number Diff line change 1
1
(ns ring.middleware.apigw-test
2
2
(:require [clojure.test :refer :all ]
3
+ [clojure.java.io :as io]
4
+ [compojure.core :refer :all ]
5
+ [compojure.route :as route]
6
+ [cheshire.core :refer [parse-string]]
7
+ [ring.middleware.params :refer [wrap-params]]
8
+ [ring.middleware.keyword-params :refer [wrap-keyword-params]]
9
+ [ring.middleware.json :refer [wrap-json-response]]
3
10
[ring.middleware.apigw :refer [wrap-apigw-lambda-proxy]]))
4
11
12
+ (defroutes app-routes
13
+ (GET " /warmup" request {:status 200 :body " warmup" })
14
+ (route/not-found {:status 404 :body {:errors " Route not found" }}))
15
+
16
+ (def ring-routes
17
+ (-> app-routes
18
+ wrap-keyword-params
19
+ wrap-params
20
+ wrap-json-response))
21
+
5
22
(deftest query-string-is-url-encoded
6
23
(let [handler (fn [request] {:body request :status 200 :headers nil })
7
24
app (wrap-apigw-lambda-proxy handler)
10
27
(keyword " foo[]" ) " bar" }}
11
28
query-string (get-in (app request) [:body :query-string ])]
12
29
(is (= query-string " text=hello%2C+world%21&foo%5B%5D=bar" ))))
30
+
31
+ (deftest scheduled-event-is-handled
32
+ (let [app (wrap-apigw-lambda-proxy ring-routes {:scheduled-event-route " /warmup" })
33
+ result (app (-> (io/resource " scheduled-event.json" )
34
+ (slurp )
35
+ (parse-string true )))]
36
+ (is (= {:statusCode 200 :headers {} :body " warmup" } result))))
Original file line number Diff line number Diff line change
1
+ {
2
+ "account" : " 123456789012" ,
3
+ "region" : " us-east-1" ,
4
+ "detail" : {},
5
+ "detail-type" : " Scheduled Event" ,
6
+ "source" : " aws.events" ,
7
+ "time" : " 1970-01-01T00:00:00Z" ,
8
+ "id" : " cdc73f9d-aea9-11e3-9d5a-835b769c0d9c" ,
9
+ "resources" : [
10
+ " arn:aws:events:us-east-1:123456789012:rule/my-schedule"
11
+ ]
12
+ }
You can’t perform that action at this time.
0 commit comments