Sha256: fed1ea277dc698bbc589365bafc1d847c4cb31c07102eea4a563a691b9d34fc4

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

require 'restclient'
require 'nokogiri'
require 'yaml'

module NexusCli
  class Factory
    class << self

      def create(overrides)
        @configuration = parse_configuration(overrides)
        running_nexus_pro? ? ProRemote.new(overrides) : OSSRemote.new(overrides)
      end

      def configuration
        return @configuration if @configuration
      end

      def nexus
        @nexus ||= RestClient::Resource.new configuration["url"], :user => configuration["username"], :password => configuration["password"]
      end

      def status
        doc = Nokogiri::XML(nexus['service/local/status'].get).xpath("/status/data")
        data = Hash.new
        data['app_name'] = doc.xpath("appName")[0].text
        data['version'] = doc.xpath("version")[0].text
        data['edition_long'] = doc.xpath("editionLong")[0].text
        data['state'] = doc.xpath("state")[0].text
        data['started_at'] = doc.xpath("startedAt")[0].text
        data['base_url'] = doc.xpath("baseUrl")[0].text
        return data
      end

      private
        def running_nexus_pro?
          return status['edition_long'] == "Professional" ? true : false
        end

        def parse_configuration(overrides)
          begin
            config = YAML::load_file(File.expand_path("~/.nexus_cli"))
          rescue
          end
          if config.nil? && (overrides.nil? || overrides.empty?)
            raise MissingSettingsFileException
          end
          overrides.each{|key, value| config[key] = value} unless overrides.nil? || overrides.empty?
          validate_config(config)
          config
        end
        
        def validate_config(configuration)
          ["url", "repository", "username","password"].each do |key|
            raise InvalidSettingsException.new(key) unless configuration.has_key?(key)
          end
        end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nexus_cli-0.3.0 lib/nexus_cli/nexus_remote_factory.rb