Class: HTTPX::Request::Body

Inherits:
Object
  • Object
show all
Defined in:
lib/httpx/request.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(headers, options) ⇒ Body

Returns a new instance of Body.



122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/httpx/request.rb', line 122

def initialize(headers, options)
  @headers = headers
  @body = if options.body
    Transcoder.registry("body").encode(options.body)
  elsif options.form
    Transcoder.registry("form").encode(options.form)
  elsif options.json
    Transcoder.registry("json").encode(options.json)
  end
  return if @body.nil?

  @headers["content-type"] ||= @body.content_type
  @headers["content-length"] = @body.bytesize unless unbounded_body?
end

Class Method Details

.new(options) ⇒ Object



115
116
117
118
119
# File 'lib/httpx/request.rb', line 115

def new(*, options)
  return options.body if options.body.is_a?(self)

  super
end

Instance Method Details

#bytesizeObject



158
159
160
161
162
163
164
165
166
167
168
# File 'lib/httpx/request.rb', line 158

def bytesize
  return 0 if @body.nil?

  if @body.respond_to?(:bytesize)
    @body.bytesize
  elsif @body.respond_to?(:size)
    @body.size
  else
    raise Error, "cannot determine size of body: #{@body.inspect}"
  end
end

#chunk!Object



184
185
186
# File 'lib/httpx/request.rb', line 184

def chunk!
  @headers.add("transfer-encoding", "chunked")
end

#chunked?Boolean

Returns:

  • (Boolean)


180
181
182
# File 'lib/httpx/request.rb', line 180

def chunked?
  @headers["transfer-encoding"] == "chunked"
end

#each(&block) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/httpx/request.rb', line 137

def each(&block)
  return enum_for(__method__) unless block_given?
  return if @body.nil?

  body = stream(@body)
  if body.respond_to?(:read)
    ::IO.copy_stream(body, ProcIO.new(block))
  elsif body.respond_to?(:each)
    body.each(&block)
  else
    block[body.to_s]
  end
end

#empty?Boolean

Returns:

  • (Boolean)


151
152
153
154
155
156
# File 'lib/httpx/request.rb', line 151

def empty?
  return true if @body.nil?
  return false if chunked?

  bytesize.zero?
end

#stream(body) ⇒ Object



170
171
172
173
174
# File 'lib/httpx/request.rb', line 170

def stream(body)
  encoded = body
  encoded = Transcoder.registry("chunker").encode(body) if chunked?
  encoded
end

#unbounded_body?Boolean

Returns:

  • (Boolean)


176
177
178
# File 'lib/httpx/request.rb', line 176

def unbounded_body?
  chunked? || @body.bytesize == Float::INFINITY
end