Class: Ferto::Client

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Client

Returns a new instance of Client.

Parameters:

  • (Hash{Symbol => String, Fixnum})
  • opts (Hash) (defaults to: {})

    a customizable set of options

Options Hash (opts):

  • :scheme (String)
  • :host (String)
  • :path (String)
  • :port (Fixnum)
  • :connect_timeout (Fixnum)
  • :timeout (Fixnum)
  • :aggr_limit (Fixnum)


37
38
39
40
41
42
43
44
45
46
# File 'lib/ferto/client.rb', line 37

def initialize(opts = {})
  opts = DEFAULT_CONFIG.merge(opts)
  @scheme = opts[:scheme]
  @host = opts[:host]
  @path = opts[:path]
  @port = opts[:port]
  @connect_timeout = opts[:connect_timeout]
  @timeout = opts[:timeout]
  @aggr_limit = opts[:aggr_limit]
end

Instance Attribute Details

#aggr_limitFixnum (readonly)

Returns The maximum concurrent download requests that you allow the service to make.

Returns:

  • (Fixnum)

    The maximum concurrent download requests that you allow the service to make.



27
28
29
# File 'lib/ferto/client.rb', line 27

def aggr_limit
  @aggr_limit
end

#connect_timeoutFixnum (readonly)

Returns:

  • (Fixnum)


19
20
21
# File 'lib/ferto/client.rb', line 19

def connect_timeout
  @connect_timeout
end

#hostString (readonly)

Returns:

  • (String)


10
11
12
# File 'lib/ferto/client.rb', line 10

def host
  @host
end

#pathString (readonly)

Returns The Downloader service path for enqueueing new downloads.

Returns:

  • (String)

    The Downloader service path for enqueueing new downloads.



13
14
15
# File 'lib/ferto/client.rb', line 13

def path
  @path
end

#portString (readonly)

Returns:

  • (String)


16
17
18
# File 'lib/ferto/client.rb', line 16

def port
  @port
end

#schemeString (readonly)

Returns:

  • (String)


7
8
9
# File 'lib/ferto/client.rb', line 7

def scheme
  @scheme
end

#timeoutFixnum (readonly)

Returns The maximum time in seconds that you allow the libcurl transfer operation to take.

Returns:

  • (Fixnum)

    The maximum time in seconds that you allow the libcurl transfer operation to take.



23
24
25
# File 'lib/ferto/client.rb', line 23

def timeout
  @timeout
end

Instance Method Details

#download(aggr_id:, aggr_limit: @aggr_limit, url:, callback_url: "", callback_dst: "", callback_type: "", mime_type: "", extra: {}) ⇒ Ferto::Response

Sends a request to Downloader and returns its reply.

Examples:

downloader = Ferto::Client.new
dl_resp = downloader.download(
  aggr_id: 'msystems',
  aggr_limit: 3,
  url: 'http://foo.bar/a.jpg',
  callback_type: 'http',
  callback_dst: 'http://example.com/downloads/myfile',
  extra: { groupno: 'foobar' }
)

Returns:

Raises:



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/ferto/client.rb', line 65

def download(aggr_id:, aggr_limit: @aggr_limit, url:,
             callback_url: "", callback_dst: "",
             callback_type: "", mime_type: "", extra: {})
  uri = URI::HTTP.build(
    scheme: scheme, host: host, port: port, path: path
  )
  body = build_body(
    aggr_id, aggr_limit, url, callback_url, callback_type, callback_dst,
    mime_type, extra
  )
  # Curl.post reuses the same handler
  begin
    res = Curl.post(uri.to_s, body.to_json) do |handle|
      handle.headers = build_header(aggr_id)
      handle.connect_timeout = connect_timeout
      handle.timeout = timeout
    end
  rescue Curl::Err::ConnectionFailedError => e
    raise Ferto::ConnectionError.new(e)
  end

  Ferto::Response.new res
end