class Wixgem::Shortcut

Public Class Methods

new(file, hash) click to toggle source
# File lib/shortcut.rb, line 8
def initialize(file, hash)
  @file = file
        @hash = hash
end

Public Instance Methods

create(xml_doc) click to toggle source
# File lib/shortcut.rb, line 13
def create(xml_doc)
        raise "Shortcut #{@file} does not exist" unless(File.exist?(@file))
      
        file_elements = REXML::XPath.match(xml_doc, "//File[@Source='.\\#{@file.gsub(/\//,'\\')}']")
        raise "Shortcut #{@file} does not match a 'File' element with a 'Source' attribute in the wix generated wix file" if(file_elements.length == 0)
        create_shortcut_element(file_elements[0])
        create_directory(xml_doc, @hash[:directory]) if(@hash.has_key?(:directory))
      
        return xml_doc
end

Private Instance Methods

create_directory(xml_doc, directory) click to toggle source
# File lib/shortcut.rb, line 56
def create_directory(xml_doc, directory)
      raise 'Currently only supporting desktop shortcuts' unless(directory == :desktop)
      if(directory == :desktop)
        desktop_elements = REXML::XPath.match(xml_doc, "//DesktopFolder")
        if(desktop_elements.length == 0)
              wix_elements = REXML::XPath.match(xml_doc, "//Wix")
              fragment_element = wix_elements[0].add_element 'Fragment'
              target_dir = fragment_element.add_element 'DirectoryRef', { 'Id' => 'TARGETDIR' }
              target_dir.add_element 'Directory', { 'Id' => 'DesktopFolder', 'Name' => 'Desktop' }
        end
      end
end
create_icon_element(shortcut_element) click to toggle source
# File lib/shortcut.rb, line 49
def create_icon_element(shortcut_element)
  icon_element = shortcut_element.add_element 'Icon'  
        icon_element.attributes['Id'] = File.basename(@hash[:icon])
  icon_element.attributes['SourceFile'] = ".\\#{@hash[:icon].gsub(/\//, '\\')}"
        return icon_element
end
create_shortcut_element(file_element) click to toggle source
# File lib/shortcut.rb, line 25
def create_shortcut_element(file_element)
  shortcut_element = file_element.add_element 'Shortcut'
      
        shortcut_element.attributes['Id'] = "Shortcut_#{SecureRandom.uuid.gsub(/-/,'')}"
        shortcut_element.attributes['Arguments'] = @hash[:arguments] if(@hash.has_key?(:arguments))
      
        shortcut_name = File.basename(@file)
        if(@hash.has_key?(:name))
          shortcut_name = @hash[:name] 
        else
          @hash[:name] = shortcut_name
        end
        shortcut_element.attributes['Name'] = shortcut_name

        shortcut_element.attributes['Description'] = @hash[:description] if(@hash.has_key?(:description))
        shortcut_element.attributes['Directory'] = 'DesktopFolder'
      
        shortcut_element.attributes['Advertise']="yes"
        shortcut_element.attributes['Advertise'] = "no" if(@hash.has_key?(:advertise) && !@hash[:advertise])
        create_icon_element(shortcut_element) if(@hash.has_key?(:icon))
      
        return shortcut_element
end