Class: RailsHttpLab::Execution::Runner
- Inherits:
-
Object
- Object
- RailsHttpLab::Execution::Runner
- Defined in:
- lib/rails_http_lab/execution/runner.rb
Overview
Executes a Bruno::Document as an HTTP request, returning Response.
Pipeline:
1. Resolve {{vars}} in url, headers, query, body, auth fields.
2. Build query string from params:query (merge with URL query).
3. Build Net::HTTP::<Verb>.
4. Apply auth (bearer/basic/apikey).
5. Set body per body:<type>.
6. Dispatch with timeout, capture timings + size.
Constant Summary collapse
- VERBS =
{ "get" => Net::HTTP::Get, "post" => Net::HTTP::Post, "put" => Net::HTTP::Put, "patch" => Net::HTTP::Patch, "delete" => Net::HTTP::Delete, "head" => Net::HTTP::Head, "options" => Net::HTTP::Options }.freeze
Instance Method Summary collapse
-
#initialize(document, resolver: VariableResolver.new, timeout: nil, max_body: nil) ⇒ Runner
constructor
A new instance of Runner.
- #run ⇒ Object
Constructor Details
#initialize(document, resolver: VariableResolver.new, timeout: nil, max_body: nil) ⇒ Runner
Returns a new instance of Runner.
29 30 31 32 33 34 |
# File 'lib/rails_http_lab/execution/runner.rb', line 29 def initialize(document, resolver: VariableResolver.new, timeout: nil, max_body: nil) @doc = document @resolver = resolver @timeout = timeout || RailsHttpLab.config.executor_timeout @max_body = max_body || RailsHttpLab.config.executor_max_body end |
Instance Method Details
#run ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/rails_http_lab/execution/runner.rb', line 36 def run verb_block = @doc.verb_block raise Error, "no HTTP verb block in document" unless verb_block sent_request = nil url = @resolver.resolve(verb_block["url"].to_s) body_kind = verb_block["body"].to_s auth_kind = verb_block["auth"].to_s uri = URI.parse(url) merge_query!(uri) klass = VERBS.fetch(verb_block.name) request = klass.new(uri.request_uri) apply_headers!(request) apply_auth!(request, auth_kind) apply_body!(request, body_kind) sent_request = summarize_request(request, uri) dispatch(uri, request, sent_request) rescue URI::InvalidURIError => e Response.new(error: "Invalid URL: #{e.}", request: sent_request) rescue Net::OpenTimeout, Net::ReadTimeout => e Response.new(error: "Timeout: #{e.}", request: sent_request) rescue StandardError => e Response.new(error: "#{e.class}: #{e.}", request: sent_request) end |