Sha256: 0c25b3e2f2295e01c6718709a6f388b8e7782827f3a904be6f9dc623bb0a8aeb

Contents?: true

Size: 1.18 KB

Versions: 2

Compression:

Stored size: 1.18 KB

Contents

require 'tempfile'

module Dandelion
  module Backend
    class MissingFileError < StandardError; end
    class UnsupportedSchemeError < StandardError; end
    
    class MissingDependencyError < StandardError
      attr_reader :gems
      
      def initialize(gems)
        @gems = gems
      end
    end

    class Backend
      class << self
        @@backends = {}
        
        def create(config)
          Dir.glob(File.join(File.dirname(__FILE__), 'backend', '*.rb')) { |file| require file }
          raise UnsupportedSchemeError unless @@backends.include?(config['scheme'])
          begin
            @@backends[config['scheme']].new(config)
          rescue LoadError
            raise MissingDependencyError.new(@@backends[config['scheme']].gem_list)
          end
        end
        
        def scheme(scheme)
          @@backends[scheme] = self
        end
        
        def gems(*gems)
          @gems = gems
        end
        
        def gem_list
          @gems
        end
      end

      protected

      def temp(file, data)
        tmp = Tempfile.new(file.gsub('/', '.'))
        tmp << data
        tmp.flush
        yield(tmp.path)
        tmp.close
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dandelion-0.2.3 lib/dandelion/backend.rb
dandelion-0.2.2 lib/dandelion/backend.rb