class Attache::Tus

Constants

LENGTH_KEYS
METADATA_KEYS
OFFSET_KEYS

Attributes

config[RW]
env[RW]

Public Class Methods

new(env, config) click to toggle source
# File lib/attache/tus.rb, line 8
def initialize(env, config)
  @env = env
  @config = config
end

Public Instance Methods

header_value(keys) click to toggle source
# File lib/attache/tus.rb, line 13
def header_value(keys)
  value = nil
  keys.find {|k| value = env["HTTP_#{k.gsub('-', '_').upcase}"]}
  value
end
headers_with_cors(headers = {}, offset: nil) click to toggle source
# File lib/attache/tus.rb, line 38
def headers_with_cors(headers = {}, offset: nil)
  tus_headers = {
    "Access-Control-Allow-Methods" => "PATCH",
    "Access-Control-Allow-Headers" => "Tus-Resumable, #{LENGTH_KEYS.join(', ')}, #{METADATA_KEYS.join(', ')}, #{OFFSET_KEYS.join(', ')}",
    "Access-Control-Expose-Headers" => "Location, #{OFFSET_KEYS.join(', ')}",
  }
  OFFSET_KEYS.each do |k|
    tus_headers[k] = offset
  end if offset

  # append
  tus_headers.inject(config.headers_with_cors.merge(headers)) do |sum, (k, v)|
    sum.merge(k => [*sum[k], v].join(', '))
  end
end
resumable_version() click to toggle source
# File lib/attache/tus.rb, line 34
def resumable_version
  header_value ["Tus-Resumable"]
end
upload_length() click to toggle source
# File lib/attache/tus.rb, line 19
def upload_length
  header_value LENGTH_KEYS
end
upload_metadata() click to toggle source
# File lib/attache/tus.rb, line 27
def upload_metadata
  value = header_value METADATA_KEYS
  Hash[*value.split(/[, ]/)].inject({}) do |h, (k, v)|
    h.merge(k => Base64.decode64(v))
  end
end
upload_offset() click to toggle source
# File lib/attache/tus.rb, line 23
def upload_offset
  header_value OFFSET_KEYS
end