class ET::API

Attributes

host[R]
token[R]
username[R]

Public Class Methods

new(options) click to toggle source
# File lib/et/api.rb, line 11
def initialize(options)
  @host = options[:host]
  @username = options[:username]
  @token = options[:token]
end

Public Instance Methods

download_file(url) click to toggle source
# File lib/et/api.rb, line 33
def download_file(url)
  response = nil
  dest = random_filename

  download_client(url).open do |client|
    response = client.get(URI(url).path)
  end
  if response.status == 200
    open(dest, 'wb') do |file|
      file.write(response.body)
    end
    dest
  else
    nil
  end
end
get_lesson(slug) click to toggle source
# File lib/et/api.rb, line 25
def get_lesson(slug)
  resp = nil
  api_client.open do |client|
    resp = client.get(lesson_url(slug), :submittable => 1)
  end
  resp.body['lesson']
end
list_lessons() click to toggle source
# File lib/et/api.rb, line 17
def list_lessons
  response = nil
  api_client.open do |client|
    response = client.get('/lessons.json', :submittable => 1)
  end
  response.body['lessons']
end
submit_lesson(lesson) click to toggle source
# File lib/et/api.rb, line 50
def submit_lesson(lesson)
  submission_file = lesson.archive!
  io = Faraday::UploadIO.new(submission_file, "application/x-tar")
  resp = nil
  api_client.open do |client|
    resp = client.post(submission_url(lesson.slug),
      "submission" => { "archive" => io})
  end
  resp
end

Private Instance Methods

api_client() click to toggle source
# File lib/et/api.rb, line 74
def api_client
  @api_client ||= ET::FallbackConnection.new(:url => @host) do |client|
    client.request :multipart

    client.request :url_encoded
    client.request :basic_auth, username, token

    client.response :json, :content_type => /\bjson$/

    client.adapter  Faraday.default_adapter
  end
end
download_client(url) click to toggle source
# File lib/et/api.rb, line 87
def download_client(url)
  uri = URI(url)
  scheme_and_host = [uri.scheme, uri.host].join('://')
  ET::FallbackConnection.new(:url => scheme_and_host) do |client|
    client.adapter  Faraday.default_adapter
  end
end
lesson_url(slug) click to toggle source
# File lib/et/api.rb, line 62
def lesson_url(slug)
  "/lessons/#{slug}.json"
end
random_filename() click to toggle source
# File lib/et/api.rb, line 70
def random_filename
  File.join(Dir.mktmpdir, SecureRandom.hex)
end
submission_url(slug) click to toggle source
# File lib/et/api.rb, line 66
def submission_url(slug)
  "/lessons/#{slug}/submissions.json"
end