Class: HTTPX::Transcoder::Multipart::Encoder

Inherits:
Object
  • Object
show all
Defined in:
lib/httpx/transcoder/multipart/encoder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(form) ⇒ Encoder

Returns a new instance of Encoder.



8
9
10
11
12
13
14
15
# File 'lib/httpx/transcoder/multipart/encoder.rb', line 8

def initialize(form)
  @boundary = ("-" * 21) << SecureRandom.hex(21)
  @part_index = 0
  @buffer = "".b

  @form = form
  @parts = to_parts(form)
end

Instance Attribute Details

#bytesizeObject (readonly)

Returns the value of attribute bytesize.



6
7
8
# File 'lib/httpx/transcoder/multipart/encoder.rb', line 6

def bytesize
  @bytesize
end

Instance Method Details

#content_typeObject



17
18
19
# File 'lib/httpx/transcoder/multipart/encoder.rb', line 17

def content_type
  "multipart/form-data; boundary=#{@boundary}"
end

#read(length = nil, outbuf = nil) ⇒ Object



27
28
29
30
31
32
33
34
# File 'lib/httpx/transcoder/multipart/encoder.rb', line 27

def read(length = nil, outbuf = nil)
  data   = String(outbuf).clear.force_encoding(Encoding::BINARY) if outbuf
  data ||= "".b

  read_chunks(data, length)

  data unless length && data.empty?
end

#rewindObject



36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/httpx/transcoder/multipart/encoder.rb', line 36

def rewind
  form = @form.each_with_object([]) do |(key, val), aux|
    if val.respond_to?(:path) && val.respond_to?(:reopen) && val.respond_to?(:closed?) && val.closed?
      val = val.reopen(val.path, File::RDONLY)
    end
    val.rewind if val.respond_to?(:rewind)
    aux << [key, val]
  end
  @form = form
  @parts = to_parts(form)
  @part_index = 0
end

#to_sObject



21
22
23
24
25
# File 'lib/httpx/transcoder/multipart/encoder.rb', line 21

def to_s
  read
ensure
  rewind
end