module Webmachine::Decision::Helpers
Methods that assist the Decision
{Flow}.
Public Instance Methods
accept_helper()
click to toggle source
Assists in receiving request bodies
# File lib/webmachine/decision/helpers.rb, line 61 def accept_helper content_type = MediaType.parse(request.content_type || 'application/octet-stream') acceptable = resource.content_types_accepted.find { |ct, _| content_type.match?(ct) } if acceptable resource.send(acceptable.last) else 415 end end
add_caching_headers()
click to toggle source
Adds caching-related headers to the response.
# File lib/webmachine/decision/helpers.rb, line 82 def add_caching_headers if etag = resource.generate_etag response.headers['ETag'] = ETag.new(etag).to_s end if expires = resource.expires response.headers['Expires'] = expires.httpdate end if modified = resource.last_modified response.headers['Last-Modified'] = modified.httpdate end end
body_is_fixed_length?()
click to toggle source
Determines whether the response is of a fixed lenghth, i.e. it is a String or IO with known size.
# File lib/webmachine/decision/helpers.rb, line 96 def body_is_fixed_length? response.body.respond_to?(:bytesize) && Integer === response.body.bytesize end
encode_body()
click to toggle source
Encodes the body in the selected charset and encoding.
# File lib/webmachine/decision/helpers.rb, line 30 def encode_body body = response.body chosen_charset = metadata[CHARSET] chosen_encoding = metadata[CONTENT_ENCODING] charsetter = resource.charsets_provided&.find { |c, _| c == chosen_charset }&.last || :charset_nop encoder = resource.encodings_provided[chosen_encoding] response.body = case body when String # 1.8 treats Strings as Enumerable resource.send(encoder, resource.send(charsetter, body)) when IO, StringIO IOEncoder.new(resource, encoder, charsetter, body) when Fiber FiberEncoder.new(resource, encoder, charsetter, body) when Enumerable EnumerableEncoder.new(resource, encoder, charsetter, body) else if body.respond_to?(:call) CallableEncoder.new(resource, encoder, charsetter, body) else resource.send(encoder, resource.send(charsetter, body)) end end if body_is_fixed_length? ensure_content_length(response) else response.headers.delete CONTENT_LENGTH response.headers[TRANSFER_ENCODING] = 'chunked' end end
encode_body_if_set()
click to toggle source
If the response body exists, encode it. @see encode_body
# File lib/webmachine/decision/helpers.rb, line 25 def encode_body_if_set encode_body if has_response_body? end
has_response_body?()
click to toggle source
Determines if the response has a body/entity set.
# File lib/webmachine/decision/helpers.rb, line 19 def has_response_body? !response.body.nil? && !response.body.empty? end
variances()
click to toggle source
Computes the entries for the ‘Vary’ response header
# File lib/webmachine/decision/helpers.rb, line 72 def variances resource.variances.tap do |v| v.unshift 'Accept-Language' if resource.languages_provided.size > 1 v.unshift 'Accept-Charset' if resource.charsets_provided && resource.charsets_provided.size > 1 v.unshift 'Accept-Encoding' if resource.encodings_provided.size > 1 v.unshift 'Accept' if resource.content_types_provided.size > 1 end end