rake-funnel 0.3.2.pre → 0.4.0.pre
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 +4 -4
- data/.rspec +2 -2
- data/Gemfile +4 -0
- data/README.md +2 -2
- data/lib/rake/funnel/ambiguous_file_error.rb +31 -29
- data/lib/rake/funnel/execution_error.rb +28 -26
- data/lib/rake/funnel/extensions/case/camel_case.rb +24 -19
- data/lib/rake/funnel/extensions/case/pascal_case.rb +24 -19
- data/lib/rake/funnel/extensions/case.rb +3 -3
- data/lib/rake/funnel/extensions/common_path.rb +60 -52
- data/lib/rake/funnel/extensions/disable_colors.rb +33 -27
- data/lib/rake/funnel/extensions/rexml.rb +27 -23
- data/lib/rake/funnel/extensions/shell.rb +92 -56
- data/lib/rake/funnel/extensions/windows_path.rb +15 -11
- data/lib/rake/funnel/framework.rb +11 -16
- data/lib/rake/funnel/integration/progress_report.rb +72 -70
- data/lib/rake/funnel/integration/sync_output.rb +12 -8
- data/lib/rake/funnel/integration/teamcity/nunit_plugin.rb +61 -55
- data/lib/rake/funnel/integration/teamcity/progress_report.rb +39 -33
- data/lib/rake/funnel/integration/teamcity/service_messages.rb +46 -40
- data/lib/rake/funnel/integration/teamcity/teamcity.rb +19 -15
- data/lib/rake/funnel/integration/teamcity.rb +3 -5
- data/lib/rake/funnel/support/argument_mapper/key_value_pair.rb +16 -10
- data/lib/rake/funnel/support/argument_mapper/styles/default.rb +39 -31
- data/lib/rake/funnel/support/argument_mapper/styles/msbuild.rb +41 -33
- data/lib/rake/funnel/support/argument_mapper/styles/msdeploy.rb +55 -47
- data/lib/rake/funnel/support/argument_mapper/styles/nunit.rb +41 -33
- data/lib/rake/funnel/support/argument_mapper/styles.rb +3 -5
- data/lib/rake/funnel/support/argument_mapper/switch.rb +16 -10
- data/lib/rake/funnel/support/argument_mapper/value.rb +16 -10
- data/lib/rake/funnel/support/assembly_version/from_version_files.rb +39 -35
- data/lib/rake/funnel/support/assembly_version/languages/cs +5 -5
- data/lib/rake/funnel/support/assembly_version/languages/fs +12 -12
- data/lib/rake/funnel/support/assembly_version/languages/vb +5 -5
- data/lib/rake/funnel/support/assembly_version_writer.rb +56 -52
- data/lib/rake/funnel/support/binary_version_reader.rb +37 -32
- data/lib/rake/funnel/support/copier.rb +31 -27
- data/lib/rake/funnel/support/environments/loader.rb +46 -40
- data/lib/rake/funnel/support/environments.rb +3 -3
- data/lib/rake/funnel/support/internal/finder.rb +55 -51
- data/lib/rake/funnel/support/internal/instantiate_symbol.rb +38 -34
- data/lib/rake/funnel/support/mapper.rb +57 -53
- data/lib/rake/funnel/support/mono.rb +21 -17
- data/lib/rake/funnel/support/msbuild/build_tool.rb +30 -24
- data/lib/rake/funnel/support/msbuild.rb +3 -3
- data/lib/rake/funnel/support/msdeploy/registry_patch.rb +90 -84
- data/lib/rake/funnel/support/msdeploy.rb +3 -3
- data/lib/rake/funnel/support/patch.rb +41 -37
- data/lib/rake/funnel/support/specs_remover.rb +66 -62
- data/lib/rake/funnel/support/template_engine.rb +30 -26
- data/lib/rake/funnel/support/timing/report.rb +95 -89
- data/lib/rake/funnel/support/timing/statistics.rb +32 -26
- data/lib/rake/funnel/support/timing.rb +3 -3
- data/lib/rake/funnel/support/version_info.rb +103 -72
- data/lib/rake/funnel/support/which.rb +19 -15
- data/lib/rake/funnel/support/zipper.rb +53 -49
- data/lib/rake/funnel/tasks/assembly_version.rb +44 -40
- data/lib/rake/funnel/tasks/bin_path.rb +45 -41
- data/lib/rake/funnel/tasks/copy.rb +43 -39
- data/lib/rake/funnel/tasks/environments.rb +89 -89
- data/lib/rake/funnel/tasks/msbuild.rb +55 -51
- data/lib/rake/funnel/tasks/msdeploy.rb +54 -50
- data/lib/rake/funnel/tasks/nunit.rb +52 -48
- data/lib/rake/funnel/tasks/paket.rb +51 -47
- data/lib/rake/funnel/tasks/quick_template.rb +53 -49
- data/lib/rake/funnel/tasks/side_by_side_specs.rb +41 -37
- data/lib/rake/funnel/tasks/timing.rb +108 -104
- data/lib/rake/funnel/tasks/zip.rb +46 -42
- data/lib/rake/funnel/version.rb +1 -1
- data/lib/rake/funnel.rb +7 -7
- data/rake-funnel.gemspec +12 -3
- data/spec/rake/funnel/execution_error_spec.rb +67 -67
- data/spec/rake/funnel/extensions/case/camel_case_spec.rb +17 -17
- data/spec/rake/funnel/extensions/case/pascal_case_spec.rb +17 -17
- data/spec/rake/funnel/extensions/common_path_spec.rb +56 -56
- data/spec/rake/funnel/extensions/disable_colors_spec.rb +33 -33
- data/spec/rake/funnel/extensions/rexml_spec.rb +20 -20
- data/spec/rake/funnel/extensions/shell_spec.rb +237 -237
- data/spec/rake/funnel/extensions/windows_path_spec.rb +5 -5
- data/spec/rake/funnel/integration/progress_report_spec.rb +149 -149
- data/spec/rake/funnel/integration/sync_output_spec.rb +16 -16
- data/spec/rake/funnel/integration/teamcity/nunit_plugin_spec.rb +110 -110
- data/spec/rake/funnel/integration/teamcity/progress_report_spec.rb +174 -174
- data/spec/rake/funnel/integration/teamcity/service_messages_spec.rb +136 -136
- data/spec/rake/funnel/integration/teamcity/teamcity_spec.rb +34 -34
- data/spec/rake/funnel/support/argument_mapper/styles/msdeploy_spec.rb +222 -222
- data/spec/rake/funnel/support/argument_mapper/styles/nunit_spec.rb +25 -25
- data/spec/rake/funnel/support/argument_mapper/styles/styles_spec.rb +214 -214
- data/spec/rake/funnel/support/assembly_version/from_version_files_spec.rb +66 -61
- data/spec/rake/funnel/support/assembly_version_writer_spec.rb +140 -140
- data/spec/rake/funnel/support/binary_version_reader_spec.rb +29 -29
- data/spec/rake/funnel/support/copier_spec.rb +58 -58
- data/spec/rake/funnel/support/environments/loader_spec.rb +143 -143
- data/spec/rake/funnel/support/internal/finder_spec.rb +229 -229
- data/spec/rake/funnel/support/internal/instantiate_symbol_spec.rb +182 -183
- data/spec/rake/funnel/support/mapper_spec.rb +87 -87
- data/spec/rake/funnel/support/mono_spec.rb +57 -57
- data/spec/rake/funnel/support/msbuild/build_tool_spec.rb +21 -21
- data/spec/rake/funnel/support/msdeploy/registry_patch_spec.rb +139 -139
- data/spec/rake/funnel/support/patch_spec.rb +108 -108
- data/spec/rake/funnel/support/specs_remover/Sample.csproj +28 -28
- data/spec/rake/funnel/support/specs_remover_spec.rb +116 -116
- data/spec/rake/funnel/support/template_engine_spec.rb +65 -65
- data/spec/rake/funnel/support/timing/report_spec.rb +129 -129
- data/spec/rake/funnel/support/version_info_spec.rb +333 -228
- data/spec/rake/funnel/support/which_spec.rb +65 -65
- data/spec/rake/funnel/support/zipper_spec.rb +77 -77
- data/spec/rake/funnel/tasks/assembly_version_spec.rb +45 -45
- data/spec/rake/funnel/tasks/bin_path_spec.rb +52 -52
- data/spec/rake/funnel/tasks/copy_spec.rb +44 -44
- data/spec/rake/funnel/tasks/environments_spec.rb +249 -247
- data/spec/rake/funnel/tasks/msbuild_spec.rb +91 -91
- data/spec/rake/funnel/tasks/msdeploy_spec.rb +220 -220
- data/spec/rake/funnel/tasks/nunit_spec.rb +74 -74
- data/spec/rake/funnel/tasks/paket_spec.rb +140 -142
- data/spec/rake/funnel/tasks/quick_template_spec.rb +62 -62
- data/spec/rake/funnel/tasks/side_by_side_specs_spec.rb +58 -58
- data/spec/rake/funnel/tasks/timing_spec.rb +133 -133
- data/spec/rake/funnel/tasks/zip_spec.rb +50 -50
- data/spec/spec_helper.rb +43 -33
- metadata +2 -3
- data/lib/rake/funnel/support/side_by_side_specs.rb +0 -3
@@ -1,33 +1,41 @@
|
|
1
|
-
module Rake
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
1
|
+
module Rake
|
2
|
+
module Funnel
|
3
|
+
module Support
|
4
|
+
module ArgumentMapper
|
5
|
+
module Styles
|
6
|
+
class MSBuild
|
7
|
+
attr_reader :prefix, :separator, :value_separator
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@prefix = '/'
|
11
|
+
@separator = ':'
|
12
|
+
@value_separator = '='
|
13
|
+
end
|
14
|
+
|
15
|
+
def generate_from(model)
|
16
|
+
model.map { |switch|
|
17
|
+
switch.values.flatten.map { |value|
|
18
|
+
top_level(switch) + nested(value)
|
19
|
+
}
|
20
|
+
}.flatten(1)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def top_level(switch)
|
25
|
+
[prefix, switch.switch]
|
26
|
+
end
|
27
|
+
|
28
|
+
def nested(value)
|
29
|
+
res = []
|
30
|
+
res << separator unless value.key.nil? && value.value.nil?
|
31
|
+
res << value.key
|
32
|
+
res << value_separator unless value.key.nil? || value.value.nil?
|
33
|
+
res << value.value
|
34
|
+
res.compact
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,47 +1,55 @@
|
|
1
|
-
module Rake
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
1
|
+
module Rake
|
2
|
+
module Funnel
|
3
|
+
module Support
|
4
|
+
module ArgumentMapper
|
5
|
+
module Styles
|
6
|
+
class MSDeploy
|
7
|
+
attr_reader :prefix, :separator, :value_separator, :value_list_separator
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@prefix = '-'
|
11
|
+
@separator = ':'
|
12
|
+
@value_separator = '='
|
13
|
+
@value_list_separator = ','
|
14
|
+
end
|
15
|
+
|
16
|
+
def generate_from(model)
|
17
|
+
model.map { |switch|
|
18
|
+
switch.values.map { |item|
|
19
|
+
if item.is_a?(Enumerable)
|
20
|
+
values = item.map.with_index { |nested, index| nested(nested, index) }
|
21
|
+
else
|
22
|
+
values = nested(item)
|
23
|
+
end
|
24
|
+
|
25
|
+
(top_level(switch) + values).flatten
|
26
|
+
}
|
27
|
+
}.flatten(1)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def top_level(switch)
|
32
|
+
[prefix, quote(switch.switch)]
|
33
|
+
end
|
34
|
+
|
35
|
+
def nested(value, index = 0)
|
36
|
+
res = []
|
37
|
+
res << value_list_separator unless index == 0
|
38
|
+
res << separator unless value.key.nil? && value.value.nil? || index != 0
|
39
|
+
res << quote(value.key)
|
40
|
+
res << value_separator unless value.key.nil? || value.value.nil?
|
41
|
+
res << quote(value.value)
|
42
|
+
res.compact
|
43
|
+
end
|
44
|
+
|
45
|
+
def quote(value)
|
46
|
+
value = value.gsub(/"/, '""') if value.is_a?(String)
|
47
|
+
return %{"#{value}"} if value =~ /\s/
|
48
|
+
value
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -1,33 +1,41 @@
|
|
1
|
-
module Rake
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
1
|
+
module Rake
|
2
|
+
module Funnel
|
3
|
+
module Support
|
4
|
+
module ArgumentMapper
|
5
|
+
module Styles
|
6
|
+
class NUnit
|
7
|
+
attr_reader :prefix, :separator, :value_separator
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@prefix = Rake::Win32.windows? ? '/' : '-'
|
11
|
+
@separator = '='
|
12
|
+
@value_separator = ':'
|
13
|
+
end
|
14
|
+
|
15
|
+
def generate_from(model)
|
16
|
+
model.map { |switch|
|
17
|
+
switch.values.flatten.map { |value|
|
18
|
+
top_level(switch) + nested(value)
|
19
|
+
}
|
20
|
+
}.flatten(1)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def top_level(switch)
|
25
|
+
[prefix, switch.switch]
|
26
|
+
end
|
27
|
+
|
28
|
+
def nested(value)
|
29
|
+
res = []
|
30
|
+
res << separator unless value.key.nil? && value.value.nil?
|
31
|
+
res << value.key
|
32
|
+
res << value_separator unless value.key.nil? || value.value.nil?
|
33
|
+
res << value.value
|
34
|
+
res.compact
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
require path
|
5
|
-
end
|
1
|
+
Dir[File.join(File.dirname(__FILE__), File.basename(__FILE__, '.rb'), '*.rb')].each do |path|
|
2
|
+
require path
|
3
|
+
end
|
@@ -1,10 +1,16 @@
|
|
1
|
-
module Rake
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
1
|
+
module Rake
|
2
|
+
module Funnel
|
3
|
+
module Support
|
4
|
+
module ArgumentMapper
|
5
|
+
class Switch
|
6
|
+
attr_reader :switch, :values
|
7
|
+
|
8
|
+
def initialize(switch, values)
|
9
|
+
@values = values
|
10
|
+
@switch = switch
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,10 +1,16 @@
|
|
1
|
-
module Rake
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
1
|
+
module Rake
|
2
|
+
module Funnel
|
3
|
+
module Support
|
4
|
+
module ArgumentMapper
|
5
|
+
class Value
|
6
|
+
attr_reader :key, :value
|
7
|
+
|
8
|
+
def initialize(value)
|
9
|
+
@key = nil
|
10
|
+
@value = value
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,35 +1,39 @@
|
|
1
|
-
module Rake
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
1
|
+
module Rake
|
2
|
+
module Funnel
|
3
|
+
module Support
|
4
|
+
module AssemblyVersion
|
5
|
+
class FromVersionFiles
|
6
|
+
include Rake::Funnel::Support
|
7
|
+
include Enumerable
|
8
|
+
|
9
|
+
attr_reader :search_pattern, :metadata
|
10
|
+
|
11
|
+
def initialize(args = {})
|
12
|
+
@search_pattern = args[:search_pattern] || %w(**/VERSION)
|
13
|
+
@metadata = args[:metadata]
|
14
|
+
end
|
15
|
+
|
16
|
+
def each
|
17
|
+
block_given? or return enum_for(__method__)
|
18
|
+
|
19
|
+
files.each do |file|
|
20
|
+
Rake.rake_output_message("Reading #{file}")
|
21
|
+
|
22
|
+
version_info = VersionInfo.parse(
|
23
|
+
version: VersionInfo.read_version_from(file),
|
24
|
+
metadata: metadata
|
25
|
+
)
|
26
|
+
|
27
|
+
yield({ source: file, version_info: version_info })
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def files
|
33
|
+
Finder.new(search_pattern, self, 'No version files found.').all_or_default
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
using System.Reflection;
|
2
|
-
|
3
|
-
<% version_info.each do |key, value| %>
|
4
|
-
[assembly: <%= key.pascalize %>("<%= value %>")]
|
5
|
-
<% end %>
|
1
|
+
using System.Reflection;
|
2
|
+
|
3
|
+
<% version_info.each do |key, value| %>
|
4
|
+
[assembly: <%= key.pascalize %>("<%= value %>")]
|
5
|
+
<% end %>
|
@@ -1,12 +1,12 @@
|
|
1
|
-
namespace System
|
2
|
-
open System.Reflection
|
3
|
-
|
4
|
-
<% version_info.each do |key, value| %>
|
5
|
-
[<assembly: <%= key.pascalize %>("<%= value %>")>]
|
6
|
-
<% end %>
|
7
|
-
do ()
|
8
|
-
|
9
|
-
<% if version_info.assembly_file_version %>
|
10
|
-
module internal AssemblyVersionInformation =
|
11
|
-
let [<Literal>] Version = "<%= version_info.assembly_file_version %>"
|
12
|
-
<% end %>
|
1
|
+
namespace System
|
2
|
+
open System.Reflection
|
3
|
+
|
4
|
+
<% version_info.each do |key, value| %>
|
5
|
+
[<assembly: <%= key.pascalize %>("<%= value %>")>]
|
6
|
+
<% end %>
|
7
|
+
do ()
|
8
|
+
|
9
|
+
<% if version_info.assembly_file_version %>
|
10
|
+
module internal AssemblyVersionInformation =
|
11
|
+
let [<Literal>] Version = "<%= version_info.assembly_file_version %>"
|
12
|
+
<% end %>
|
@@ -1,5 +1,5 @@
|
|
1
|
-
Imports System.Reflection
|
2
|
-
|
3
|
-
<% version_info.each do |key, value| %>
|
4
|
-
<Assembly: <%= key.pascalize %>("<%= value %>")>
|
5
|
-
<% end %>
|
1
|
+
Imports System.Reflection
|
2
|
+
|
3
|
+
<% version_info.each do |key, value| %>
|
4
|
+
<Assembly: <%= key.pascalize %>("<%= value %>")>
|
5
|
+
<% end %>
|
@@ -1,52 +1,56 @@
|
|
1
|
-
require 'erb'
|
2
|
-
|
3
|
-
Dir[File.join(File.dirname(__FILE__), 'assembly_version', '*.rb')].each do |path|
|
4
|
-
require path
|
5
|
-
end
|
6
|
-
|
7
|
-
module Rake
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
Dir[File.join(File.dirname(__FILE__), 'assembly_version', '*.rb')].each do |path|
|
4
|
+
require path
|
5
|
+
end
|
6
|
+
|
7
|
+
module Rake
|
8
|
+
module Funnel
|
9
|
+
module Support
|
10
|
+
class AssemblyVersionWriter
|
11
|
+
include InstantiateSymbol
|
12
|
+
instantiate AssemblyVersion
|
13
|
+
|
14
|
+
def initialize(type = :FromVersionFiles, args = {})
|
15
|
+
@type = create(type, args)
|
16
|
+
end
|
17
|
+
|
18
|
+
def write(target_path, languages = [])
|
19
|
+
@type.each do |info|
|
20
|
+
source = info[:source]
|
21
|
+
version_info = info[:version_info]
|
22
|
+
|
23
|
+
[languages].flatten.each do |language|
|
24
|
+
target = target_path.call(language, version_info, source)
|
25
|
+
|
26
|
+
contents = evaluate_erb(language, version_info, target)
|
27
|
+
|
28
|
+
Rake.rake_output_message("Writing #{target}")
|
29
|
+
File.write(target, contents)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def evaluate_erb(language, version_info, target)
|
36
|
+
template = template_for(language)
|
37
|
+
|
38
|
+
render = ERB.new(template, nil, '%<>')
|
39
|
+
render.filename = target
|
40
|
+
render.result(get_binding(version_info))
|
41
|
+
end
|
42
|
+
|
43
|
+
def template_for(language)
|
44
|
+
template = File.join(File.dirname(__FILE__), 'assembly_version', 'languages', language.to_s)
|
45
|
+
raise "Language is not supported: #{language}" unless File.readable?(template)
|
46
|
+
|
47
|
+
File.read(template)
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_binding(version_info)
|
51
|
+
binding
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -1,32 +1,37 @@
|
|
1
|
-
module Rake
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
1
|
+
module Rake
|
2
|
+
module Funnel
|
3
|
+
module Support
|
4
|
+
class BinaryVersionReader
|
5
|
+
class << self
|
6
|
+
KNOWN_ATTRIBUTES = [:company_name, :file_description, :file_version, :legal_copyright, :product_name, :product_version, :assembly_version]
|
7
|
+
SEPARATOR = "\0"
|
8
|
+
TERMINATOR = "\0" * 3
|
9
|
+
|
10
|
+
def read_from(assembly)
|
11
|
+
binary = File.binread(assembly)
|
12
|
+
|
13
|
+
attributes = KNOWN_ATTRIBUTES.map { |attr|
|
14
|
+
read_attribute(binary, attr)
|
15
|
+
}
|
16
|
+
|
17
|
+
hash = attributes.inject({}) { |memo, attr|
|
18
|
+
memo.merge(attr)
|
19
|
+
}
|
20
|
+
|
21
|
+
VersionInfo.new(hash)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def read_attribute(binary, attr)
|
26
|
+
binary_attr = attr.pascalize.gsub(/(.)/) { |match| match + SEPARATOR }
|
27
|
+
|
28
|
+
data = binary.match(/#{binary_attr}#{SEPARATOR}+(.*?)#{TERMINATOR}/)
|
29
|
+
return {} if data.nil?
|
30
|
+
|
31
|
+
{ "#{attr}" => data[1].gsub(/#{SEPARATOR}/, '') }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|