class FloodCli

Public Class Methods

new(endpoint: nil, proxy: nil, config: nil, verbose: nil) click to toggle source
# File lib/flood-cli/flood-cli.rb, line 2
def initialize(endpoint: nil, proxy: nil, config: nil, verbose: nil)
  @endpoint = endpoint
  @verbose = verbose
  load_configuration(config: config)
  configure_rest_client(proxy: proxy)
end

Public Instance Methods

floods_index() click to toggle source
# File lib/flood-cli/flood-cli.rb, line 27
def floods_index
  get 'floods'
end
login(email:, password:) click to toggle source
# File lib/flood-cli/flood-cli.rb, line 9
def login(email:, password:)
  response = post '/api/auth',
    {
      email: email,
      password: password
    }

  if response && response.code == 200
    logger.info 'Logged in to Flood IO.'
    config = {
      endpoint: endpoint,
      proxy: @proxy,
      token: JSON.parse(response)['token']
    }
    File.open(@config_file, 'w') { |file| file.write(config.to_yaml) }
  end
end

Private Instance Methods

configure_rest_client(proxy:) click to toggle source
# File lib/flood-cli/flood-cli.rb, line 41
def configure_rest_client(proxy:)
  @proxy = proxy if proxy
  RestClient.proxy = @proxy if @proxy
  RestClient.log = STDOUT if @verbose
end
endpoint() click to toggle source
# File lib/flood-cli/flood-cli.rb, line 90
def endpoint
  @endpoint ||= (@config && @config[:endpoint]) || 'https://api.flood.io'
  @endpoint
end
error(response) click to toggle source
# File lib/flood-cli/flood-cli.rb, line 65
def error(response)
  "HTTP #{response.code.to_s} #{JSON.parse(response)['error']}"
  rescue JSON::ParserError
    "HTTP #{response.code.to_s} #{response}"
end
get(url) click to toggle source
# File lib/flood-cli/flood-cli.rb, line 47
def get(url)
  response = RestClient.get [endpoint, url].join('/'), headers_with_token
  parse(response)
  response
  rescue => e
    logger.fatal error(e.response)
    response
end
headers() click to toggle source
# File lib/flood-cli/flood-cli.rb, line 99
def headers
  if version == 1
    {
      content_type: :json
    }
  else
    {
      content_type: :json,
      accept: 'application/vnd.flood.v2'
    }
  end
end
headers_with_token() click to toggle source
# File lib/flood-cli/flood-cli.rb, line 112
def headers_with_token
  headers.merge(authorization: token)
end
load_configuration(config:) click to toggle source
# File lib/flood-cli/flood-cli.rb, line 33
def load_configuration(config:)
  config ||= "#{Dir.home}/.fio"
  if File.file?(config)
    @config_file = config
    @config = YAML::load_file(config)
  end
end
logger() click to toggle source
# File lib/flood-cli/flood-cli.rb, line 116
def logger
  @log ||= Logger.new(STDOUT)
  @log.level = @verbose ? Logger::DEBUG : Logger::INFO
  @log.formatter = proc do |severity, datetime, progname, msg|
    "#{datetime}: #{msg}\n"
  end
  @log
end
parse(response) click to toggle source
# File lib/flood-cli/flood-cli.rb, line 71
def parse(response)
  if response.code == 200
    if @verbose
      logger.ap JSON.parse(response)
    else
      puts JSON.pretty_unparse(JSON.parse(response))
    end
  end
end
post(url, params={}) click to toggle source
# File lib/flood-cli/flood-cli.rb, line 56
def post(url, params={})
  response = RestClient.post [endpoint, url].join('/'), params, headers
  parse(response)
  response
  rescue => e
    logger.fatal error(e.response)
    response
end
token() click to toggle source
# File lib/flood-cli/flood-cli.rb, line 81
def token
  raw_token = @config && @config[:token]
  if version == 1
    'Basic ' + Base64.encode64("#{raw_token}:").chomp
  else
    raw_token
  end
end
version() click to toggle source
# File lib/flood-cli/flood-cli.rb, line 95
def version
  (@config && @config[:version].to_i) || 2
end