Class: CopyTunerClient::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/copy_tuner_client/client.rb

Overview

Communicates with the CopyTuner server. This class is used to actually download and upload blurbs, as well as issuing deploys.

A client is usually instantiated when CopyTunerClient::Configuration#apply is called, and the application will not need to interact with it directly.

Constant Summary collapse

HTTP_ERRORS =

These errors will be rescued when connecting CopyTuner.

[Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
Net::ProtocolError, SocketError, OpenSSL::SSL::SSLError,
Errno::ECONNREFUSED]
USER_AGENT =
"copy_tuner_client #{CopyTunerClient::VERSION}"

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Client

Usually instantiated from CopyTunerClient::Configuration#apply. Copies options.

Parameters:

  • options (Hash)

Options Hash (options):

  • :api_key (String)

    API key of the project to connect to

  • :port (Fixnum)

    the port to connect to

  • :public (Boolean)

    whether to download draft or published content

  • :http_read_timeout (Fixnum)

    how long to wait before timing out when reading data from the socket

  • :http_open_timeout (Fixnum)

    how long to wait before timing out when opening the socket

  • :secure (Boolean)

    whether to use SSL

  • :logger (Logger)

    where to log transactions

  • :ca_file (String)

    path to root certificate file for ssl verification



31
32
33
34
35
36
# File 'lib/copy_tuner_client/client.rb', line 31

def initialize(options)
  [:api_key, :host, :port, :public, :http_read_timeout,
    :http_open_timeout, :secure, :logger, :ca_file, :s3_host].each do |option|
    instance_variable_set "@#{option}", options[option]
  end
end

Instance Method Details

#deployObject

Issues a deploy, marking all draft content as published for this project.

Raises:



85
86
87
88
89
90
91
# File 'lib/copy_tuner_client/client.rb', line 85

def deploy
  connect(host) do |http|
    response = http.post(uri('deploys'), '', 'User-Agent' => USER_AGENT)
    check response
    log 'Deployed'
  end
end

#download {|Hash| ... } ⇒ Object

Downloads all blurbs for the given api_key.

If the public option was set to true, this will use published blurbs. Otherwise, draft content is fetched.

The client tracks ETags between download requests, and will return without yielding anything if the server returns a not modified response.

Yields:

  • (Hash)

    downloaded blurbs

Raises:



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/copy_tuner_client/client.rb', line 48

def download
  connect(s3_host) do |http|
    request = Net::HTTP::Get.new(uri(download_resource))
    request['If-None-Match'] = @etag
    log 'Start downloading translations'
    t = Time.now
    response = http.request(request)
    t_ms = ((Time.now - t) * 1000).to_i
    if check response
      bytesize = response.body.bytesize
      kb = bytesize / 1024.0
      mb = kb / 1024.0
      t_s = t_ms / 1000.0
      kbs = kb / t_s
      log "Downloaded translations (#{t_ms}ms, #{mb.round(1)}MB, #{kbs.round(1)}KB/s)"
      yield JSON.parse(response.body)
    else
      log "No new translations (#{t_ms}ms)"
    end

    @etag = response['ETag']
  end
end

#upload(data) ⇒ Object

Uploads the given hash of blurbs as draft content.

Parameters:

  • data (Hash)

    the blurbs to upload

Raises:



75
76
77
78
79
80
81
# File 'lib/copy_tuner_client/client.rb', line 75

def upload(data)
  connect(host) do |http|
    response = http.post(uri('draft_blurbs'), data.to_json, 'Content-Type' => 'application/json', 'User-Agent' => USER_AGENT)
    check response
    log 'Uploaded missing translations'
  end
end