class Rreplay::OutputBuilder

Public Class Methods

new(style: :json) click to toggle source

@param style [Symbol] :json or :string

# File lib/rreplay/replay_runner.rb, line 64
def initialize(style: :json)
  @builder = case style
             when :json
               method(:build_json)
             else
               method(:build_string)
             end
end

Public Instance Methods

call(record, result) click to toggle source

@param record [Hash] @param result [Http::Result]

# File lib/rreplay/replay_runner.rb, line 75
def call(record, result)
  response_hash = {
    status: result.response.code,
    headers: record['response']['headers'].reduce({}) do |acc, (key, _)|
      acc.merge({key => result.response[key]})
    end,
    body: Array(result.response.body).join(''),
  }

  @builder.call(record, result.response_time, response_hash)
end

Private Instance Methods

build_json(record, response_time, actual_response) click to toggle source
# File lib/rreplay/replay_runner.rb, line 89
def build_json(record, response_time, actual_response)
  {
    uuid: record['uuid'],
    response: {
      actual: {
        response_time: response_time,
        response: actual_response,
      },
      recorded: {
        response_time: record['response_time'],
        record: record['response'],
      }
    }
  }
end
build_string(record, response_time, actual_response) click to toggle source
# File lib/rreplay/replay_runner.rb, line 105
        def build_string(record, response_time, actual_response)
          <<~EOF
            #{record['uuid']}:
            * request:
              #{record['request'].to_json}
            * response(actual):
              #{response_time} sec
              #{actual_response.to_json}
            * response(recorded):
              #{record['response_time']} sec
              #{record['response'].to_json}
          EOF
        end