esminc/adhoq

View on GitHub
lib/adhoq/global_variable.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'monitor'

module Adhoq
  module GlobalVariable
    def self.extended(base)
      base.extend MonitorMixin
    end

    def current_storage
      synchronize {
        @current_storage ||= setup_storage(*Adhoq.config.storage)
      }
    end

    def configure(&block)
      yield config
    end

    def config
      @config ||= Adhoq::Configuration.new
    end

    private

    def setup_storage(type, *args)
      klass =
        case type
        when :local_file then Adhoq::Storage::LocalFile
        when :s3         then Adhoq::Storage::S3
        when :on_the_fly then Adhoq::Storage::OnTheFly
        when :cache      then Adhoq::Storage::Cache
        else
          raise NotImplementedError
        end

      klass.new(*args)
    end
  end
end