Sha256: da42f27be6dc87de779a4d847e69d10f2ec34fcaa9b157993c2f6fd499420849
Contents?: true
Size: 996 Bytes
Versions: 2
Compression:
Stored size: 996 Bytes
Contents
module RestCore class FollowRedirect def self.members; [:max_redirects]; end include Middleware def call env, &k if env[DRY] app.call(env, &k) else app.call(env){ |res| process(res, k) } end end def process res, k return k.call(res) if max_redirects(res) <= 0 status = res[RESPONSE_STATUS] return k.call(res) if ![301,302,303,307].include?(status) return k.call(res) if [301,302 ,307].include?(status) && ![:get, :head ].include?(res[REQUEST_METHOD]) location = [res[RESPONSE_HEADERS]['LOCATION']].flatten.first meth = if status == 303 :get else res[REQUEST_METHOD] end give_promise(call(res.merge( REQUEST_METHOD => meth , REQUEST_PATH => location, REQUEST_QUERY => {} , 'max_redirects' => max_redirects(res) - 1), &k)) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rest-core-4.0.1 | lib/rest-core/middleware/follow_redirect.rb |
rest-core-4.0.0 | lib/rest-core/middleware/follow_redirect.rb |