class Rake::Funnel::Support::MSDeploy::RegistryPatch

Constants

FAKE_VERSION
KEYS
VERSION_VALUE

Public Class Methods

new() { |block| ... } click to toggle source
# File lib/rake/funnel/support/msdeploy/registry_patch.rb, line 13
def initialize(&block)
  patch.apply!
  yield block if block_given?
ensure
  patch.revert!
end

Private Instance Methods

create_patch() click to toggle source
# File lib/rake/funnel/support/msdeploy/registry_patch.rb, line 50
def create_patch # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
  begin
    require 'win32/registry'
  rescue LoadError
    return Rake::Funnel::Support::Patch.new(self)
  end

  Rake::Funnel::Support::Patch.new(self) do |p|
    resets = []

    p.setup do
      begin
        resets = KEYS.map do |key|
          root.create(key) do |r|
            begin
              r[VERSION_VALUE]

              delete_version = proc {}
            rescue ::Win32::Registry::Error
              r[VERSION_VALUE] = FAKE_VERSION

              delete_version = delete_value(r, VERSION_VALUE)
            end

            delete_key(r) || delete_version
          end
        end
      rescue ::Win32::Registry::Error => e
        $stderr.print "Could not patch registry to pretend MSDeploy is installed: #{e}\n"
      end
    end

    p.reset do
      resets.compact.each(&:call)
    end
  end
end
delete_key(key) click to toggle source
# File lib/rake/funnel/support/msdeploy/registry_patch.rb, line 30
def delete_key(key)
  return nil unless key.created?

  keyname = key.keyname
  proc do
    root.create(File.dirname(keyname)) do |r|
      r.delete_key(File.basename(keyname), true)
    end
  end
end
delete_value(key, value) click to toggle source
# File lib/rake/funnel/support/msdeploy/registry_patch.rb, line 41
def delete_value(key, value)
  keyname = key.keyname
  proc do
    root.create(keyname) do |r|
      r.delete_value(value)
    end
  end
end
patch() click to toggle source
# File lib/rake/funnel/support/msdeploy/registry_patch.rb, line 22
def patch
  @patch ||= create_patch
end
root() click to toggle source
# File lib/rake/funnel/support/msdeploy/registry_patch.rb, line 26
def root
  ::Win32::Registry::HKEY_LOCAL_MACHINE
end