wixgem 0.0.13 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 85ca0608a1c377cdb8475522b47ed8753b3194d3
4
+ data.tar.gz: ddb8f3e03e2fb7c7bc99e311ed4e633e581d79e6
5
+ SHA512:
6
+ metadata.gz: 72062f7807acd5a2e3fc23168196481279c8741e00cb1b7c89ff69bcee494161b22133e2a198a507031ed0242b75fd5005ab0d3c925f038f858e0f2c5119a1d0
7
+ data.tar.gz: c98837859540b2eb65136998fc650e63a31508274d6e27693d44091b544828195d65c22d71c89afc414ed10c377053973b70a87bf1aece9d963f61260c0775fd
data/lib/wixgem.rb CHANGED
@@ -3,15 +3,20 @@ require 'SecureRandom'
3
3
  require 'tmpdir.rb'
4
4
 
5
5
  class Wix
6
- def self.install_path=(value)
7
- raise "WIX path '#{value}' does not exist" unless(Dir.exists?(value))
8
- @install_path = value
6
+ def self.install_path=(path)
7
+ @install_path = path
9
8
  end
10
-
11
9
  def self.install_path
12
- return @install_path
10
+ return @install_path
13
11
  end
14
-
12
+
13
+ def self.debug=(bool)
14
+ @debug = bool
15
+ end
16
+ def self.debug
17
+ return @debug
18
+ end
19
+
15
20
  def self.make_mergemodule(output, input)
16
21
  gem_dir = File.dirname(__FILE__)
17
22
  apply_wix_template(output, input, "#{gem_dir}/templates/mergemodule.wxs")
@@ -22,7 +27,37 @@ class Wix
22
27
  apply_wix_template(output, input, "#{gem_dir}/templates/Install.wxs")
23
28
  end
24
29
 
25
- private
30
+ private
31
+ def self.manage_upgrade(wxs_text, input)
32
+ if(input.kind_of?(Hash) &&
33
+ input.has_key?(:remove_existing_products) &&
34
+ input[:remove_existing_products])
35
+
36
+ raise 'Hash must have a version key if the hash has a :remove_existing_products key' unless(input.has_key?(:version))
37
+ raise 'Hash must have an upgrade_code key if the hash has a :remove_existing_products key' unless(input.has_key?(:upgrade_code))
38
+
39
+ upgrade = "
40
+ <Upgrade Id=\"#{input[:upgrade_code]}\">
41
+ <UpgradeVersion Minimum=\"#{input[:version]}\"
42
+ OnlyDetect='yes'
43
+ Property='NEWPRODUCTFOUND' />
44
+ <UpgradeVersion Minimum='1.0.0'
45
+ IncludeMinimum='yes'
46
+ Maximum=\"#{input[:version]}\"
47
+ IncludeMaximum='no'
48
+ Property='UPGRADEFOUND' />
49
+ </Upgrade>
50
+ <CustomAction"
51
+ wxs_text = wxs_text.gsub(/<CustomAction/, upgrade)
52
+
53
+ remove_existing_products = " <RemoveExistingProducts After='InstallValidate' />
54
+ </InstallExecuteSequence>"
55
+ wxs_text = wxs_text.gsub(/<\/InstallExecuteSequence>/, remove_existing_products)
56
+ end
57
+
58
+ return wxs_text
59
+ end
60
+
26
61
  def self.manage_msm_files(wxs_text)
27
62
  indent_merge = ' '
28
63
  indent_directory = ' '
@@ -47,7 +82,7 @@ class Wix
47
82
  directory_element = "<Directory Id='TARGETDIR' Name='SourceDir'>\n#{merge_ids}#{indent_directory}</Directory>"
48
83
  wxs_text = wxs_text.gsub('<Directory Id="TARGETDIR" Name="SourceDir" />', directory_element)
49
84
 
50
- wxs_text = wxs_text.gsub(/\s+<\/Feature>/, "\n#{merge_refs}</Feature>")
85
+ wxs_text = wxs_text.gsub(/\s+<\/Feature>/, "\n#{merge_refs} </Feature>")
51
86
 
52
87
  return wxs_text
53
88
  end
@@ -58,22 +93,28 @@ class Wix
58
93
 
59
94
  files.each do |file|
60
95
  if(File.file?(file))
61
- install_path = "#{directory}/#{file}"
96
+ install_path = file
97
+ if(input.kind_of?(Hash) && input.has_key?(:modify_install_path))
98
+ input[:modify_install_path].each { |regex, replacement_string| install_path = install_path.gsub(regex, replacement_string) }
99
+ end
100
+
101
+ install_path = "#{directory}/#{install_path}"
62
102
  FileUtils.mkpath(File.dirname(install_path)) unless(Dir.exists?(File.dirname(install_path)))
63
103
  FileUtils.cp(file, install_path)
64
- # else if(!Dir.exists?(file) && !File.exists?(file))
65
- # raise "File: '#{file}' does not exist!"
66
104
  end
67
105
  end
68
106
  end
69
107
 
70
108
  def self.create_wxs_file(wxs_file, input, ext)
109
+ @debug = input[:debug] if(input.kind_of?(Hash) && input.has_key?(:debug))
110
+
71
111
  template_option = "-template product"
72
112
  template_option = "-template module" unless(ext == ".msi")
73
113
 
74
114
  stdout = %x[\"#{install_path}/bin/heat.exe\" dir . #{template_option} -cg InstallionFiles -gg -nologo -srd -o \"#{wxs_file}\"]
75
115
  raise "#{stdout}\nFailed to generate .wxs file" unless(File.exists?(wxs_file))
76
116
 
117
+
77
118
  product_name = File.basename(wxs_file, '.wxs')
78
119
  product_name = input[:product_name] if(input.kind_of?(Hash) && input.has_key?(:product_name))
79
120
 
@@ -85,6 +126,9 @@ class Wix
85
126
 
86
127
  product_code = ''
87
128
  product_code = input[:product_code] if(input.kind_of?(Hash) && input.has_key?(:product_code))
129
+
130
+ upgrade_code = ''
131
+ upgrade_code = input[:upgrade_code] if(input.kind_of?(Hash) && input.has_key?(:upgrade_code))
88
132
 
89
133
  wxs_text = File.read(wxs_file)
90
134
 
@@ -96,6 +140,7 @@ class Wix
96
140
 
97
141
  wxs_text = wxs_text.gsub(/Version=\"1.0.0.0\"/) { |s| s = "Version=\"#{product_version}\"" } unless(product_version.empty?)
98
142
  wxs_text = wxs_text.gsub(/Product Id=\"[^\"]+\"/) { |s| s = "Product Id=\"#{product_code}\"" } unless(product_code.empty?)
143
+ wxs_text = wxs_text.gsub(/UpgradeCode=\"[^\"]+\"/) { |s| s = "UpgradeCode=\"#{upgrade_code}\"" } unless(upgrade_code.empty?)
99
144
 
100
145
  install_path = '[ProgramFilesFolder][ProductName]'
101
146
  install_path = "[ProgramFilesFolder][Manufacturer]\\[ProductName]" unless(manufacturer == 'Not Set')
@@ -115,6 +160,7 @@ class Wix
115
160
  </Product>"
116
161
  wxs_text = wxs_text.gsub(/<\/Product>/) { |s| s = custom_action }
117
162
 
163
+ wxs_text = manage_upgrade(wxs_text,input)
118
164
  wxs_text = manage_msm_files(wxs_text)
119
165
 
120
166
  File.open(wxs_file, 'w') { |f| f.puts(wxs_text) }
@@ -139,8 +185,6 @@ class Wix
139
185
 
140
186
  output_absolute_path = File.absolute_path(output)
141
187
 
142
- #dir = 'tmp_dir'
143
- #FileUtils.rm_rf(dir) if(Dir.exists?(dir))
144
188
  Dir.mktmpdir do |dir|
145
189
  copy_install_files(dir, input)
146
190
 
@@ -149,6 +193,7 @@ class Wix
149
193
  create_wxs_file(wxs_file, input, ext)
150
194
  create_output(wxs_file, output_absolute_path)
151
195
  end
196
+ FileUtils.cp(wxs_file, output_absolute_path.gsub(ext,'.wxs')) if(@debug)
152
197
  end
153
198
  pdb_file = output_absolute_path.gsub(ext,'.wixpdb')
154
199
  FileUtils.rm(pdb_file) if(File.exists?(pdb_file))
metadata CHANGED
@@ -1,83 +1,74 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wixgem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
5
- prerelease:
4
+ version: 0.0.14
6
5
  platform: ruby
7
6
  authors:
8
7
  - Kevin Marshall
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-01-09 00:00:00.000000000 Z
11
+ date: 2015-01-10 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ~>
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ~>
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ~>
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ~>
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ~>
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ~>
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: dev_tasks
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ~>
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ~>
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
- description: ! 'Simple Ruby interface to facilitate creating and compiling windows
79
- installation files with the Wix Toolset.\n\nNote: This gem currently does not handle
80
- registration of COM objects or registry entries.'
69
+ description: 'Simple Ruby interface to facilitate creating and compiling windows installation
70
+ files with the Wix Toolset.\n\nNote: This gem currently does not handle registration
71
+ of COM objects or registry entries.'
81
72
  email: KCCKSMarshall@gmail.com
82
73
  executables: []
83
74
  extensions: []
@@ -85,33 +76,30 @@ extra_rdoc_files: []
85
76
  files:
86
77
  - LICENSE
87
78
  - README.md
88
- - lib/templates/Install.wxs
89
- - lib/templates/mergemodule.wxs
90
79
  - lib/wixgem.rb
91
80
  homepage: http://rubygems.org/gems/wixgem
92
81
  licenses:
93
82
  - Apache 2.0
83
+ metadata: {}
94
84
  post_install_message:
95
85
  rdoc_options: []
96
86
  require_paths:
97
87
  - lib
98
88
  required_ruby_version: !ruby/object:Gem::Requirement
99
- none: false
100
89
  requirements:
101
- - - ! '>='
90
+ - - '>='
102
91
  - !ruby/object:Gem::Version
103
92
  version: 1.9.1
104
93
  required_rubygems_version: !ruby/object:Gem::Requirement
105
- none: false
106
94
  requirements:
107
- - - ! '>='
95
+ - - '>='
108
96
  - !ruby/object:Gem::Version
109
97
  version: '0'
110
98
  requirements: []
111
99
  rubyforge_project:
112
- rubygems_version: 1.8.28
100
+ rubygems_version: 2.2.0
113
101
  signing_key:
114
- specification_version: 3
102
+ specification_version: 4
115
103
  summary: Simple Ruby interface to facilitate working with Wix Toolset
116
104
  test_files: []
117
105
  has_rdoc:
@@ -1,26 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
3
- <Product Id="PRODUCT_CODE" Name="PRODUCT_NAME" Language="1033" Version="VERSION" Manufacturer="MANUFACTURER" UpgradeCode="UPGRADE_CODE">
4
- <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
5
-
6
- <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
7
- <Media Id="1" Cabinet="WixgemTest.cab" EmbedCab="yes" />
8
-
9
- <!-- Step 1: Define the directory structure -->
10
- <Directory Id="TARGETDIR" Name="SourceDir">
11
- <Directory Id="ProgramFilesFolder">
12
- INSTALL_DIR
13
- </Directory>
14
- </Directory>
15
-
16
- <!-- Step 2: Add files to installer package -->
17
- <DirectoryRef Id="INSTALLFOLDER">
18
- FILES
19
- </DirectoryRef>
20
-
21
- <!-- Step 3: Tell Wix to install the files-->
22
- <Feature Id="ProductFeature" Title="PRODUCT_NAME Installation" Level="1">
23
- COMPONENT_REFS
24
- </Feature>
25
- </Product>
26
- </Wix>
@@ -1,15 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
3
- <Module Id="MODULE_NAME" Language="1033" Version="VERSION">
4
- <Package Id="PRODUCT_CODE" InstallerVersion="200" Manufacturer="MANUFACTURER" />
5
- COMPONENT_REFS
6
- <Directory Id="TARGETDIR" Name="SourceDir">
7
- <Directory Id="MergeRedirectFolder" />
8
- </Directory>
9
- </Module>
10
- <Fragment>
11
- <DirectoryRef Id="MergeRedirectFolder">
12
- FILES
13
- </DirectoryRef>
14
- </Fragment>
15
- </Wix>