class UptimeRobot::Client

Constants

DEFAULT_ADAPTERS
ENDPOINT
METHODS
OPTIONS
USER_AGENT

Public Class Methods

new(options) { |faraday| ... } click to toggle source
# File lib/uptimerobot/client.rb, line 28
def initialize(options)
  @options = {}

  OPTIONS.each do |key|
    @options[key] = options.delete(key)
  end

  raise ArgumentError, ':api_key is required' unless @options[:api_key]

  options[:url] ||= ENDPOINT

  @conn = Faraday.new(options) do |faraday|
    faraday.request  :url_encoded
    faraday.response :json, :content_type => /\bjson$/
    faraday.response :raise_error
    faraday.response :logger, ::Logger.new(STDOUT), bodies: true if @options[:debug]

    yield(faraday) if block_given?

    unless DEFAULT_ADAPTERS.any? {|i| faraday.builder.handlers.include?(i) }
      faraday.adapter Faraday.default_adapter
    end
  end

  @conn.headers[:user_agent] = USER_AGENT
end

Private Instance Methods

method_missing(method_name, *args, &block) click to toggle source
# File lib/uptimerobot/client.rb, line 57
def method_missing(method_name, *args, &block)
  unless METHODS.include?(method_name)
    raise NoMethodError, "undefined method: #{method_name}"
  end

  len = args.length
  params = args.first

  unless len.zero? or (len == 1 and params.kind_of?(Hash))
    raise ArgumentError, "invalid argument: #{args}"
  end

  request(method_name, params || {}, &block)
end
request(method_name, params = {}) { |req| ... } click to toggle source
# File lib/uptimerobot/client.rb, line 72
def request(method_name, params = {})
  params.update(
    :api_key => @options[:api_key],
    :format => 'json',
    :noJsonCallback => 1
  )

  response = @conn.post do |req|
    req.url "/#{UptimeRobot::API_VERSION}/#{method_name}"
    req.body = URI.encode_www_form(params)
    yield(req) if block_given?
  end

  json = response.body
  validate_response!(json)

  if method_name == :getMonitors and not @options[:skip_unescape_monitor]
    unescape_monitor!(json)
  end

  json
end
unescape_monitor!(json) click to toggle source
# File lib/uptimerobot/client.rb, line 112
def unescape_monitor!(json)
  json['monitors'].each do |monitor|
    %w(friendly_name keyword_value http_username http_password).each do |key|
      value = monitor[key] || ''
      next if value.empty?
      monitor[key] = CGI.unescapeHTML(value)
    end
  end
end
validate_response!(json) click to toggle source
# File lib/uptimerobot/client.rb, line 95
def validate_response!(json)
  if json['stat'] != 'ok'
    if json['id'] == '212'
      if @options[:raise_no_monitors_error]
        raise UptimeRobot::Error.new(json)
      else
        json.update(
          'total' => '0',
          'monitors' => []
        )
      end
    else
      raise UptimeRobot::Error.new(json)
    end
  end
end