Module: Ethon::Easy::Callbacks Private
- Included in:
- Ethon::Easy
- Defined in:
- lib/ethon/easy/callbacks.rb
Overview
This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.
This module contains all the logic around the callbacks, which are needed to interact with libcurl.
Class Method Summary collapse
-
.included(base) ⇒ Object
private
:nodoc:.
Instance Method Summary collapse
-
#body_write_callback ⇒ Proc
private
Returns the body write callback.
-
#debug_callback ⇒ Proc
private
Returns the debug callback.
-
#header_write_callback ⇒ Proc
private
Returns the header write callback.
-
#read_callback ⇒ Proc
private
Returns the body read callback.
-
#set_callbacks ⇒ Object
private
Set writefunction and headerfunction callback.
-
#set_read_callback(body) ⇒ Object
private
Set the read callback.
Class Method Details
.included(base) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
:nodoc:
11 12 13 |
# File 'lib/ethon/easy/callbacks.rb', line 11 def self.included(base) base.send(:attr_accessor, *[:response_body, :response_headers, :debug_info]) end |
Instance Method Details
#body_write_callback ⇒ Proc
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the body write callback.
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/ethon/easy/callbacks.rb', line 37 def body_write_callback @body_write_callback ||= proc {|stream, size, num, object| unless @headers_called @headers_called = true headers end if :unyielded == body(chunk = stream.read_string(size * num)) @response_body << chunk end size * num } end |
#debug_callback ⇒ Proc
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the debug callback. This callback is currently used write the raw http request headers.
70 71 72 73 74 75 76 77 |
# File 'lib/ethon/easy/callbacks.rb', line 70 def debug_callback @debug_callback ||= proc {|handle, type, data, size, udata| = data.read_string(size) @debug_info.add type, print unless [:data_in, :data_out].include?(type) 0 } end |
#header_write_callback ⇒ Proc
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the header write callback.
56 57 58 59 60 61 |
# File 'lib/ethon/easy/callbacks.rb', line 56 def header_write_callback @header_write_callback ||= proc {|stream, size, num, object| @response_headers << stream.read_string(size * num) size * num } end |
#read_callback ⇒ Proc
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the body read callback.
125 126 127 |
# File 'lib/ethon/easy/callbacks.rb', line 125 def read_callback @read_callback end |
#set_callbacks ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Set writefunction and headerfunction callback. They are called by libcurl in order to provide the header and the body from the request.
21 22 23 24 25 26 27 28 29 |
# File 'lib/ethon/easy/callbacks.rb', line 21 def set_callbacks Curl.set_option(:writefunction, body_write_callback, handle) Curl.set_option(:headerfunction, header_write_callback, handle) Curl.set_option(:debugfunction, debug_callback, handle) @response_body = "" @response_headers = "" @headers_called = false @debug_info = Ethon::Easy::DebugInfo.new end |
#set_read_callback(body) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Set the read callback. This callback is used by libcurl to read data when performing a PUT request.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/ethon/easy/callbacks.rb', line 86 def set_read_callback(body) @request_body_read = 0 readfunction do |stream, size, num, object| size = size * num body_size = if body.respond_to?(:bytesize) body.bytesize elsif body.respond_to?(:size) body.size elsif body.is_a?(File) File.size(body.path) end left = body_size - @request_body_read size = left if size > left if size > 0 chunk = if body.respond_to?(:byteslice) body.byteslice(@request_body_read, size) elsif body.respond_to?(:read) body.read(size) else body[@request_body_read, size] end stream.write_string( chunk, size ) @request_body_read += size end size end end |