c638e3ada5
Change-Id: I21f74bca49f068b1fc9c4c0fbc340aa51cef2956 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/354057 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Isaac Moore <isaac.moore@instructure.com> Build-Review: Isaac Moore <isaac.moore@instructure.com> QA-Review: Cody Cutrer <cody@instructure.com> Product-Review: Cody Cutrer <cody@instructure.com> |
||
---|---|---|
.. | ||
lib | ||
spec | ||
Gemfile | ||
Gemfile.lock | ||
README.md | ||
request_context.gemspec | ||
test.sh |
README.md
RequestContext
Keeping the state for canvas requests.
Usage
RequestContext is a combination of middleware for rails and a kind of global "what is my current state" access from anywhere.
Generator
RequestContext::Generator, when added to the middleware stack for an application, makes sure that every request has a request_context_id on it:
# application.rb
initializer("extend_middleware_stack") do |app|
app.config.middleware.swap(ActionDispatch::RequestId, RequestContext::Generator)\
app.config.middleware.insert_after(config.session_store, RequestContext::Session)
end
Why replace the build in RequestId middleware? this one reads the incoming environment for potentially provided request IDs from other services in the 'HTTP_X_REQUEST_CONTEXT_ID' header. This class also provides an interface for accessing the current request id from pretty much anywhere in the app without having to know where it's stored (we use the thread context):
RequestContext::Generator.request_id
In order for this to work, you need the cookie jar to have the right data loaded into it, which you can find being written in the RequestContext::Session middleware. The reason is middleware ordering, the Generator runs after the cookie jar has already been written to on the way out.
You need to use both.
Running Tests
This gem is tested with rspec. You can use test.sh
to run it, or
do it yourself with bundle exec rspec spec
.