esminc/adhoq

View on GitHub
lib/adhoq/storage/on_the_fly.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Adhoq
  module Storage
    class OnTheFly
      PREFIX = 'memory://adhoq-on-the-fly'

      attr_reader :identifier, :reports

      def initialize(id_base = Process.pid)
        @identifier = "#{PREFIX}-#{id_base}"
        @reports    = {}
      end

      def store(suffix = nil, seed = Time.now, &block)
        Adhoq::Storage.with_new_identifier(suffix, seed) do |identifier|
          @reports[identifier] = yield.tap(&:rewind)
        end
      end

      def direct_download?
        false
      end

      def get(identifier)
        if item = @reports.delete(identifier)
          item.read.tap { item.close }
        else
          nil
        end
      end
    end
  end
end