Sha256: ddae3d18d0bf272cdc99280b54d91e8f313a6d4a53f2ad0aac13f4c42176104a

Contents?: true

Size: 1.88 KB

Versions: 4

Compression:

Stored size: 1.88 KB

Contents

# encoding: utf-8
require 'rake/common/logger'

module Rake
  module Delphi
    class EnvVariables < ::Hash
        def self.delphi_version
            ENV['DELPHI_VERSION']
        end

        def initialize(regpath, delphidir)
            readreg(regpath)
            _dir = delphidir.gsub(/\/$/, '')
            add('DELPHI', _dir)
            add('BDS', _dir)
            add('BDSLIB', _dir + '/Lib')
            expand_vars
            Logger.trace(Logger::TRACE, self)
        end

        def expand(value)
            value = expand_value(value, self)
            value = expand_value(value, ENV)
        end

    private
        def readreg(regpath)
            return unless regpath
            begin
                require 'win32/registry'
                Logger.trace(Logger::DEBUG, "Reading environment variables from '#{regpath}'")
                begin
                    ::Win32::Registry::HKEY_CURRENT_USER.open(regpath) do |reg|
                        reg.each do |name|
                            reg_type, value = reg.read(name)
                            value.gsub!('\\', '/')
                            add(name, value)
                        end
                    end
                rescue ::Win32::Registry::Error
                    Logger.trace(Logger::DEBUG, "No reg key '%s'?!" % regpath)
                end
            rescue LoadError
                Logger.trace(Logger::DEBUG, 'No `win32/registry` gem?!')
            end
        end

        def add(var, value)
            self[var] = value
        end

        def expand_value(value, values)
            value.gsub(/\$\((?'env_name'\w+)\)/) do |match|
                name = Regexp.last_match[:env_name].upcase
                values[name] || match
            end
        end

        def expand_vars
            self.each do |name, value|
                self[name] = expand(value)
            end
        end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rake-delphi-0.0.14 lib/rake/delphi/envvariables.rb
rake-delphi-0.0.13 lib/rake/delphi/envvariables.rb
rake-delphi-0.0.12 lib/rake/delphi/envvariables.rb
rake-delphi-0.0.11 lib/rake/delphi/envvariables.rb