CartoDB/cartodb20

View on GitHub
services/data-repository/backend/detector.rb

Summary

Maintainability
A
0 mins
Test Coverage
require_relative './memory'
require_relative './redis'

module DataRepository
  module Backend
    class Detector
      def initialize(backend_or_connection=nil)
        @backend_or_connection = backend_or_connection
      end #initialize

      def detect
        # TYPE CHECKING OMG!! SEND THE CRAFTSMANSHIPTROOPERS!!
        return backend_or_connection                      if is_backend?
        return Backend::Redis.new(backend_or_connection)  if is_redis?
        return default_backend
      end #detect

      private

      attr_reader :backend_or_connection

      def default_backend
        Backend::Memory.new
      end #default_backend

      def is_backend?
        !!(backend_or_connection.class.name =~ /^DataRepository::Backend/)
      end #is_backend?

      def is_redis?
        backend_or_connection.respond_to? :zremrangebyscore
      end #is_redis?
    end # Detector
  end # Backend
end # DataRepository