Sha256: e4b76abff2582742f831aaceafcf1b024d1f1d3da69801a26ed75b61ccbf5e57

Contents?: true

Size: 1.2 KB

Versions: 10

Compression:

Stored size: 1.2 KB

Contents

module ActiveFedora::File::Streaming
  # @param range [String] the Range HTTP header
  # @return [Stream] an object that responds to each
  def stream(range = nil)
    uri = URI.parse(self.uri)
    FileBody.new(uri, headers(range, authorization_key))
  end

  # @param range [String] from #stream
  # @param key [String] from #authorization_key
  # @return [Hash]
  def headers(range, key, result = Hash.new)
    result["Range"] = range if range
    result["Authorization"] = key if key
    result
  end

  class FileBody
    attr_reader :uri, :headers
    def initialize(uri, headers)
      @uri = uri
      @headers = headers
    end

    def each
      Net::HTTP.start(uri.host, uri.port) do |http|
        request = Net::HTTP::Get.new uri, headers
        http.request request do |response|

          raise "Couldn't get data from Fedora (#{uri}). Response: #{response.code}" unless response.is_a?(Net::HTTPSuccess)
          response.read_body do |chunk|
            yield chunk
          end
        end
      end
    end
  end

  private

    # @return [String] current authorization token from Ldp::Client
    def authorization_key
      self.ldp_source.client.http.headers.fetch("Authorization", nil)
    end

end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
active-fedora-9.5.0 lib/active_fedora/file/streaming.rb
active-fedora-9.4.3 lib/active_fedora/file/streaming.rb
active-fedora-9.4.2 lib/active_fedora/file/streaming.rb
active-fedora-9.4.1 lib/active_fedora/file/streaming.rb
active-fedora-9.4.0 lib/active_fedora/file/streaming.rb
active-fedora-9.3.0 lib/active_fedora/file/streaming.rb
active-fedora-9.2.1 lib/active_fedora/file/streaming.rb
active-fedora-9.2.0 lib/active_fedora/file/streaming.rb
active-fedora-9.2.0.rc2 lib/active_fedora/file/streaming.rb
active-fedora-9.2.0.rc1 lib/active_fedora/file/streaming.rb