Sha256: a06541f120664388e6d81ff9e841ea7bbd18e58a3d10dd10ad6d776e84a19f5c

Contents?: true

Size: 1.14 KB

Versions: 3

Compression:

Stored size: 1.14 KB

Contents

require 'delegate'
require_relative 'traversable.rb'
require_relative 'requests/local.rb'
require_relative 'requests/http.rb'

module Zypper
  module Upgraderepo

    class Request

      def self.build(repo, timeout)
        @@registry ||= self.load_requests

        raise InvalidProtocol, repo unless @@registry.include? repo.protocol

        Object.const_get(self.find_class(repo)).new(repo, timeout)
      end

      def self.protocols
        self.load_requests.keys
      end

      private

      def self.load_requests
        res = {}
        Requests.constants.each do |klass|
          obj = Object.const_get("Zypper::Upgraderepo::Requests::#{klass}")
          obj.register_protocol.each do |protocol|
            res[protocol] ||= {}
            res[protocol][obj.domain] = "Zypper::Upgraderepo::Requests::#{klass}"
          end
        end

        res
      end

      def self.find_class(repo)
        domain = URI(repo.url).hostname

        if @@registry[repo.protocol].has_key? domain
          return @@registry[repo.protocol][domain]
        else
          return @@registry[repo.protocol]['default']
        end
      end
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
zypper-upgraderepo-1.8.1 lib/zypper/upgraderepo/request.rb
zypper-upgraderepo-1.8.0 lib/zypper/upgraderepo/request.rb
zypper-upgraderepo-1.7.1 lib/zypper/upgraderepo/request.rb