Class: RailsHttpLab::Execution::Runner

Inherits:
Object
  • Object
show all
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

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

#runObject



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.message}", request: sent_request)
rescue Net::OpenTimeout, Net::ReadTimeout => e
  Response.new(error: "Timeout: #{e.message}", request: sent_request)
rescue StandardError => e
  Response.new(error: "#{e.class}: #{e.message}", request: sent_request)
end