class ProbeDockProbe::Client

Public Class Methods

new(server, options = {}) click to toggle source
# File lib/probe_dock_ruby/client.rb, line 7
def initialize server, options = {}

  @server = server
  @publish, @local_mode, @workspace = options[:publish], options[:local_mode], options[:workspace]
  @print_payload, @save_payload = options[:print_payload], options[:save_payload]

  @uid = UID.new workspace: @workspace
end

Public Instance Methods

process(test_run) click to toggle source
# File lib/probe_dock_ruby/client.rb, line 16
def process test_run

  return fail "No server to publish results to" if !@server

  test_run.uid = @uid.load_uid

  payload_options = {}
  return false unless payload = build_payload(test_run, payload_options)

  published = if !@publish
    puts Paint["Probe Dock - Publishing disabled", :yellow]
    false
  elsif publish_payload payload
    true
  else
    false
  end

  save_payload payload if @save_payload
  print_payload payload if @print_payload

  puts

  published
end

Private Instance Methods

build_payload(test_run, options = {}) click to toggle source
# File lib/probe_dock_ruby/client.rb, line 44
def build_payload test_run, options = {}
  begin
    test_run.to_h options
  rescue PayloadError => e
    fail e.message
  end
end
fail(msg, type = :error) click to toggle source
# File lib/probe_dock_ruby/client.rb, line 52
def fail msg, type = :error
  styles = { warning: [ :yellow ], error: [ :bold, :red ] }
  warn Paint["Probe Dock - #{msg}", *styles[type]]
  false
end
payload_file() click to toggle source
# File lib/probe_dock_ruby/client.rb, line 76
def payload_file
  @payload_file ||= File.join(@workspace, 'rspec', 'servers', @server.name, 'payload.json')
end
print_payload(payload) click to toggle source
publish_payload(payload) click to toggle source
# File lib/probe_dock_ruby/client.rb, line 80
def publish_payload payload

  puts Paint["Probe Dock - Sending payload to #{@server.api_url}...", :magenta]

  begin
    if @local_mode
      puts Paint['Probe Dock - LOCAL MODE: not actually sending payload.', :yellow]
    else
      @server.upload payload
    end
    puts Paint["Probe Dock - Done!", :green]
    true
  rescue Server::Error => e
    warn Paint["Probe Dock - Upload failed!", :red, :bold]
    warn Paint["Probe Dock - #{e.message}", :red, :bold]
    if e.response
      warn Paint["Probe Dock - Dumping response body...", :red, :bold]
      warn e.response.body
    end
    false
  end
end
save_payload(payload) click to toggle source
# File lib/probe_dock_ruby/client.rb, line 67
def save_payload payload

  missing = { "workspace" => @workspace, "server" => @server }.inject([]){ |memo,(k,v)| !v ? memo << k : memo }
  return fail "Cannot save payload without a #{missing.join ' and '}" if missing.any?

  FileUtils.mkdir_p File.dirname(payload_file)
  File.open(payload_file, 'w'){ |f| f.write Oj.dump(payload, mode: :strict) }
end