class Barge::Client

Public Class Methods

new(opts = {}) click to toggle source
# File lib/barge.rb, line 12
def initialize(opts = {})
  @api_key      = opts[:api_key] or raise ArgumentError, 'api_key is required'
  @endpoint     = opts[:endpoint] || 'https://www.bargeapp.com/api'
  @ssl          = opts.has_key?(:ssl) ? !!opts[:ssl] : true
  @verify_mode  = opts[:verify_mode] || OpenSSL::SSL::VERIFY_PEER
end

Public Instance Methods

create_webdriver_session(sync = true) click to toggle source
# File lib/barge.rb, line 19
def create_webdriver_session(sync = true)
  puts "IN create_webdriver_session"
  session = execute :post, 'webdriver_sessions'

  if !sync
    return session
  end

  loops = 0
  loop do
    session = describe_webdriver_sessions(session['id'])
    break unless session['status'] == 'pending'
    if ((loops += 1) > 10)
      raise WebdriverTimeout
    else
      sleep 3
    end
  end

  Capybara.default_driver = :selenium
  Capybara::Selenium::Remote.use(session['ip'], url: "http://#{session['ip']}:#{session['port']}/", desired_capabilities: { browser: 'chrome'})
  
  session
end
create_webdriver_test(opts = {}) click to toggle source
# File lib/barge.rb, line 48
def create_webdriver_test(opts = {})
  execute :post, "tests/create_webdriver", {
    webdriver_session_id: opts[:webdriver_session_id],
    users: opts[:users],
    minutes: opts[:minutes]
  }
end
describe_tests(id = nil) click to toggle source
# File lib/barge.rb, line 56
def describe_tests(id = nil)
  execute :get, "tests/#{id}"
end
describe_webdriver_sessions(id = nil) click to toggle source
# File lib/barge.rb, line 44
def describe_webdriver_sessions(id = nil)
  execute :get, "webdriver_sessions/#{id}"
end

Private Instance Methods

execute(verb, path, params = {}) click to toggle source
# File lib/barge.rb, line 61
def execute(verb, path, params = {})
  # Titleize verb name and initialize that class by name
  klass_name = verb.slice(0,1).capitalize + verb.slice(1..-1).downcase
  klass = Net::HTTP.const_get(klass_name)

  uri = URI("#{@endpoint}/#{path}")
  http = Net::HTTP.new(uri.host, uri.port)

  if @ssl
    http.use_ssl = true
    http.verify_mode = @verify_mode
  end

  req = klass.new(uri.request_uri, { 'Content-Type' =>'application/json', 'API-KEY' => @api_key })


  if params.keys.count > 0
    req.body = params.to_json
  end

  res = http.request(req)
  
  case res.code
  when '200', '201', '422'
    if res.body && res.body.length > 2
      JSON.parse(res.body)
    else
      {}
    end
  when '401'
    # unauthorized
    raise UnauthorizedException
  when '404'
    # not found
    raise NotFoundException
  when '422'
    # bad params
    JSON.parse(res.body)
  else
    raise BargeException, "#{res.code}: #{res.body}"
  end
end