class Ethon::Easy::Form
This class represents a form and is used to send a payload in the request body via POST/PUT. It handles multipart forms, too.
@api private
Public Class Methods
new(easy, params, multipart = nil)
click to toggle source
Public Instance Methods
first()
click to toggle source
Return a pointer to the first form element in libcurl.
@example Return the first form element.
form.first
@return [ FFI::Pointer ] The first element.
# File lib/ethon/easy/form.rb, line 37 def first @first ||= FFI::MemoryPointer.new(:pointer) end
last()
click to toggle source
Return a pointer to the last form element in libcurl.
@example Return the last form element.
form.last
@return [ FFI::Pointer ] The last element.
# File lib/ethon/easy/form.rb, line 47 def last @last ||= FFI::MemoryPointer.new(:pointer) end
materialize()
click to toggle source
Add form elements to libcurl.
@example Add form to libcurl.
form.materialize
# File lib/ethon/easy/form.rb, line 67 def materialize query_pairs.each { |pair| form_add(pair.first.to_s, pair.last) } end
multipart?()
click to toggle source
Return if form is multipart. The form is multipart when it contains a file or multipart option is set on the form during creation.
@example Return if form is multipart.
form.multipart?
@return [ Boolean ] True if form is multipart, else false.
# File lib/ethon/easy/form.rb, line 58 def multipart? return true if @multipart query_pairs.any?{|pair| pair.respond_to?(:last) && pair.last.is_a?(Array)} end
Private Instance Methods
form_add(name, content)
click to toggle source
# File lib/ethon/easy/form.rb, line 73 def form_add(name, content) case content when Array Curl.formadd(first, last, :form_option, :copyname, :pointer, name, :form_option, :namelength, :long, name.bytesize, :form_option, :file, :string, content[2], :form_option, :filename, :string, content[0], :form_option, :contenttype, :string, content[1], :form_option, :end ) else Curl.formadd(first, last, :form_option, :copyname, :pointer, name, :form_option, :namelength, :long, name.bytesize, :form_option, :copycontents, :pointer, content.to_s, :form_option, :contentslength, :long, content ? content.to_s.bytesize : 0, :form_option, :end ) end setup_garbage_collection end
setup_garbage_collection()
click to toggle source
# File lib/ethon/easy/form.rb, line 97 def setup_garbage_collection # first is a pointer to a pointer. Since it's a MemoryPointer it will # auto clean itself up, but we need to clean up the object it points # to. So this results in (pseudo-c): # form_data_cleanup_handler = *first # curl_form_free(form_data_cleanup_handler) @form_data_cleanup_handler ||= FFI::AutoPointer.new(@first.get_pointer(0), Curl.method(:formfree)) end