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.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -2
  3. data/Gemfile +4 -0
  4. data/README.md +2 -2
  5. data/lib/rake/funnel/ambiguous_file_error.rb +31 -29
  6. data/lib/rake/funnel/execution_error.rb +28 -26
  7. data/lib/rake/funnel/extensions/case/camel_case.rb +24 -19
  8. data/lib/rake/funnel/extensions/case/pascal_case.rb +24 -19
  9. data/lib/rake/funnel/extensions/case.rb +3 -3
  10. data/lib/rake/funnel/extensions/common_path.rb +60 -52
  11. data/lib/rake/funnel/extensions/disable_colors.rb +33 -27
  12. data/lib/rake/funnel/extensions/rexml.rb +27 -23
  13. data/lib/rake/funnel/extensions/shell.rb +92 -56
  14. data/lib/rake/funnel/extensions/windows_path.rb +15 -11
  15. data/lib/rake/funnel/framework.rb +11 -16
  16. data/lib/rake/funnel/integration/progress_report.rb +72 -70
  17. data/lib/rake/funnel/integration/sync_output.rb +12 -8
  18. data/lib/rake/funnel/integration/teamcity/nunit_plugin.rb +61 -55
  19. data/lib/rake/funnel/integration/teamcity/progress_report.rb +39 -33
  20. data/lib/rake/funnel/integration/teamcity/service_messages.rb +46 -40
  21. data/lib/rake/funnel/integration/teamcity/teamcity.rb +19 -15
  22. data/lib/rake/funnel/integration/teamcity.rb +3 -5
  23. data/lib/rake/funnel/support/argument_mapper/key_value_pair.rb +16 -10
  24. data/lib/rake/funnel/support/argument_mapper/styles/default.rb +39 -31
  25. data/lib/rake/funnel/support/argument_mapper/styles/msbuild.rb +41 -33
  26. data/lib/rake/funnel/support/argument_mapper/styles/msdeploy.rb +55 -47
  27. data/lib/rake/funnel/support/argument_mapper/styles/nunit.rb +41 -33
  28. data/lib/rake/funnel/support/argument_mapper/styles.rb +3 -5
  29. data/lib/rake/funnel/support/argument_mapper/switch.rb +16 -10
  30. data/lib/rake/funnel/support/argument_mapper/value.rb +16 -10
  31. data/lib/rake/funnel/support/assembly_version/from_version_files.rb +39 -35
  32. data/lib/rake/funnel/support/assembly_version/languages/cs +5 -5
  33. data/lib/rake/funnel/support/assembly_version/languages/fs +12 -12
  34. data/lib/rake/funnel/support/assembly_version/languages/vb +5 -5
  35. data/lib/rake/funnel/support/assembly_version_writer.rb +56 -52
  36. data/lib/rake/funnel/support/binary_version_reader.rb +37 -32
  37. data/lib/rake/funnel/support/copier.rb +31 -27
  38. data/lib/rake/funnel/support/environments/loader.rb +46 -40
  39. data/lib/rake/funnel/support/environments.rb +3 -3
  40. data/lib/rake/funnel/support/internal/finder.rb +55 -51
  41. data/lib/rake/funnel/support/internal/instantiate_symbol.rb +38 -34
  42. data/lib/rake/funnel/support/mapper.rb +57 -53
  43. data/lib/rake/funnel/support/mono.rb +21 -17
  44. data/lib/rake/funnel/support/msbuild/build_tool.rb +30 -24
  45. data/lib/rake/funnel/support/msbuild.rb +3 -3
  46. data/lib/rake/funnel/support/msdeploy/registry_patch.rb +90 -84
  47. data/lib/rake/funnel/support/msdeploy.rb +3 -3
  48. data/lib/rake/funnel/support/patch.rb +41 -37
  49. data/lib/rake/funnel/support/specs_remover.rb +66 -62
  50. data/lib/rake/funnel/support/template_engine.rb +30 -26
  51. data/lib/rake/funnel/support/timing/report.rb +95 -89
  52. data/lib/rake/funnel/support/timing/statistics.rb +32 -26
  53. data/lib/rake/funnel/support/timing.rb +3 -3
  54. data/lib/rake/funnel/support/version_info.rb +103 -72
  55. data/lib/rake/funnel/support/which.rb +19 -15
  56. data/lib/rake/funnel/support/zipper.rb +53 -49
  57. data/lib/rake/funnel/tasks/assembly_version.rb +44 -40
  58. data/lib/rake/funnel/tasks/bin_path.rb +45 -41
  59. data/lib/rake/funnel/tasks/copy.rb +43 -39
  60. data/lib/rake/funnel/tasks/environments.rb +89 -89
  61. data/lib/rake/funnel/tasks/msbuild.rb +55 -51
  62. data/lib/rake/funnel/tasks/msdeploy.rb +54 -50
  63. data/lib/rake/funnel/tasks/nunit.rb +52 -48
  64. data/lib/rake/funnel/tasks/paket.rb +51 -47
  65. data/lib/rake/funnel/tasks/quick_template.rb +53 -49
  66. data/lib/rake/funnel/tasks/side_by_side_specs.rb +41 -37
  67. data/lib/rake/funnel/tasks/timing.rb +108 -104
  68. data/lib/rake/funnel/tasks/zip.rb +46 -42
  69. data/lib/rake/funnel/version.rb +1 -1
  70. data/lib/rake/funnel.rb +7 -7
  71. data/rake-funnel.gemspec +12 -3
  72. data/spec/rake/funnel/execution_error_spec.rb +67 -67
  73. data/spec/rake/funnel/extensions/case/camel_case_spec.rb +17 -17
  74. data/spec/rake/funnel/extensions/case/pascal_case_spec.rb +17 -17
  75. data/spec/rake/funnel/extensions/common_path_spec.rb +56 -56
  76. data/spec/rake/funnel/extensions/disable_colors_spec.rb +33 -33
  77. data/spec/rake/funnel/extensions/rexml_spec.rb +20 -20
  78. data/spec/rake/funnel/extensions/shell_spec.rb +237 -237
  79. data/spec/rake/funnel/extensions/windows_path_spec.rb +5 -5
  80. data/spec/rake/funnel/integration/progress_report_spec.rb +149 -149
  81. data/spec/rake/funnel/integration/sync_output_spec.rb +16 -16
  82. data/spec/rake/funnel/integration/teamcity/nunit_plugin_spec.rb +110 -110
  83. data/spec/rake/funnel/integration/teamcity/progress_report_spec.rb +174 -174
  84. data/spec/rake/funnel/integration/teamcity/service_messages_spec.rb +136 -136
  85. data/spec/rake/funnel/integration/teamcity/teamcity_spec.rb +34 -34
  86. data/spec/rake/funnel/support/argument_mapper/styles/msdeploy_spec.rb +222 -222
  87. data/spec/rake/funnel/support/argument_mapper/styles/nunit_spec.rb +25 -25
  88. data/spec/rake/funnel/support/argument_mapper/styles/styles_spec.rb +214 -214
  89. data/spec/rake/funnel/support/assembly_version/from_version_files_spec.rb +66 -61
  90. data/spec/rake/funnel/support/assembly_version_writer_spec.rb +140 -140
  91. data/spec/rake/funnel/support/binary_version_reader_spec.rb +29 -29
  92. data/spec/rake/funnel/support/copier_spec.rb +58 -58
  93. data/spec/rake/funnel/support/environments/loader_spec.rb +143 -143
  94. data/spec/rake/funnel/support/internal/finder_spec.rb +229 -229
  95. data/spec/rake/funnel/support/internal/instantiate_symbol_spec.rb +182 -183
  96. data/spec/rake/funnel/support/mapper_spec.rb +87 -87
  97. data/spec/rake/funnel/support/mono_spec.rb +57 -57
  98. data/spec/rake/funnel/support/msbuild/build_tool_spec.rb +21 -21
  99. data/spec/rake/funnel/support/msdeploy/registry_patch_spec.rb +139 -139
  100. data/spec/rake/funnel/support/patch_spec.rb +108 -108
  101. data/spec/rake/funnel/support/specs_remover/Sample.csproj +28 -28
  102. data/spec/rake/funnel/support/specs_remover_spec.rb +116 -116
  103. data/spec/rake/funnel/support/template_engine_spec.rb +65 -65
  104. data/spec/rake/funnel/support/timing/report_spec.rb +129 -129
  105. data/spec/rake/funnel/support/version_info_spec.rb +333 -228
  106. data/spec/rake/funnel/support/which_spec.rb +65 -65
  107. data/spec/rake/funnel/support/zipper_spec.rb +77 -77
  108. data/spec/rake/funnel/tasks/assembly_version_spec.rb +45 -45
  109. data/spec/rake/funnel/tasks/bin_path_spec.rb +52 -52
  110. data/spec/rake/funnel/tasks/copy_spec.rb +44 -44
  111. data/spec/rake/funnel/tasks/environments_spec.rb +249 -247
  112. data/spec/rake/funnel/tasks/msbuild_spec.rb +91 -91
  113. data/spec/rake/funnel/tasks/msdeploy_spec.rb +220 -220
  114. data/spec/rake/funnel/tasks/nunit_spec.rb +74 -74
  115. data/spec/rake/funnel/tasks/paket_spec.rb +140 -142
  116. data/spec/rake/funnel/tasks/quick_template_spec.rb +62 -62
  117. data/spec/rake/funnel/tasks/side_by_side_specs_spec.rb +58 -58
  118. data/spec/rake/funnel/tasks/timing_spec.rb +133 -133
  119. data/spec/rake/funnel/tasks/zip_spec.rb +50 -50
  120. data/spec/spec_helper.rb +43 -33
  121. metadata +2 -3
  122. data/lib/rake/funnel/support/side_by_side_specs.rb +0 -3
@@ -1,26 +1,32 @@
1
- module Rake::Funnel::Support::Timing
2
- class Statistics
3
- include Enumerable
4
-
5
- attr_reader :started_at
6
-
7
- def initialize
8
- @stats = []
9
- @started_at = Time.now
10
- end
11
-
12
- def each(&block)
13
- @stats.each(&block)
14
- end
15
-
16
- def benchmark(task)
17
- t0 = Time.now
18
- begin
19
- yield if block_given?
20
- ensure
21
- t1 = Time.now
22
- @stats << { task: task, time: t1 - t0 }
23
- end
24
- end
25
- end
26
- end
1
+ module Rake
2
+ module Funnel
3
+ module Support
4
+ module Timing
5
+ class Statistics
6
+ include Enumerable
7
+
8
+ attr_reader :started_at
9
+
10
+ def initialize
11
+ @stats = []
12
+ @started_at = Time.now
13
+ end
14
+
15
+ def each(&block)
16
+ @stats.each(&block)
17
+ end
18
+
19
+ def benchmark(task)
20
+ t0 = Time.now
21
+ begin
22
+ yield if block_given?
23
+ ensure
24
+ t1 = Time.now
25
+ @stats << { task: task, time: t1 - t0 }
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,3 @@
1
- Dir[File.join(File.dirname(__FILE__), File.basename(__FILE__, '.rb'), '*.rb')].each do |path|
2
- require path
3
- end
1
+ Dir[File.join(File.dirname(__FILE__), File.basename(__FILE__, '.rb'), '*.rb')].each do |path|
2
+ require path
3
+ end
@@ -1,72 +1,103 @@
1
- require 'ostruct'
2
-
3
- module Rake::Funnel::Support
4
- class VersionInfo < OpenStruct
5
- include Enumerable
6
-
7
- def initialize(hash = nil)
8
- super(hash)
9
- freeze
10
- end
11
-
12
- def each(&block)
13
- each_pair(&block)
14
- end
15
-
16
- class << self
17
- def parse(context)
18
- VersionInfo.new({
19
- assembly_version: assembly_version(context),
20
- assembly_file_version: assembly_file_version(context),
21
- assembly_informational_version: assembly_informational_version(context)
22
- })
23
- end
24
-
25
- def read_version_from(file)
26
- File.open(file, &:readline).strip
27
- end
28
-
29
- private
30
- def default_version(context)
31
- context[:version] || '0'
32
- end
33
-
34
- def assembly_version(context)
35
- strip_trailing_non_numeric(default_version(context))
36
- end
37
-
38
- def assembly_file_version(context)
39
- numeric_build_number = strip_leading_non_numeric(context[:build_number])
40
-
41
- [
42
- assembly_version(context),
43
- numeric_build_number
44
- ].compact.join('.')
45
- end
46
-
47
- def assembly_informational_version(context)
48
- build_number = context[:build_number]
49
- join_using = '.'
50
- join_using = '' if build_number =~ /^\D/
51
-
52
- prefix = [default_version(context), build_number].compact.join(join_using)
53
- sha = context[:sha]
54
-
55
- [prefix, sha].compact.join('-')
56
- end
57
-
58
- def strip_trailing_non_numeric(str)
59
- return nil if str.nil?
60
- str.to_s.gsub(/[^\d\.].*/, '')
61
- end
62
-
63
- def strip_leading_non_numeric(str)
64
- return nil if str.nil?
65
- str = str.to_s.gsub(/[^\d\.]/, '')
66
-
67
- return nil if str.empty?
68
- str
69
- end
70
- end
71
- end
72
- end
1
+ require 'ostruct'
2
+
3
+ module Rake
4
+ module Funnel
5
+ module Support
6
+ class VersionInfo < OpenStruct
7
+ include Enumerable
8
+
9
+ def initialize(hash = nil)
10
+ super(hash)
11
+ freeze
12
+ end
13
+
14
+ def each(&block)
15
+ each_pair(&block)
16
+ end
17
+
18
+ class << self
19
+ def parse(context)
20
+ VersionInfo.new({
21
+ assembly_version: assembly_version(context),
22
+ assembly_file_version: assembly_file_version(context),
23
+ assembly_informational_version: assembly_informational_version(context)
24
+ })
25
+ end
26
+
27
+ def read_version_from(file)
28
+ File.open(file, &:readline).strip
29
+ end
30
+
31
+ private
32
+ def default_version(context)
33
+ context[:version].to_s || '0'
34
+ end
35
+
36
+ def pad(version, parts)
37
+ numerics = version.split('.').take(parts).map { |part| part.to_i }
38
+
39
+ template = Array.new(parts) { 0 }.map.with_index do |part, index|
40
+ numerics[index] || part
41
+ end
42
+ template.join('.')
43
+ end
44
+
45
+ def assembly_version(context)
46
+ version = default_version(context)
47
+ pad(version, 4)
48
+ end
49
+
50
+ def assembly_file_version(context)
51
+ version = assembly_version(context)
52
+ build_number = numeric(context.fetch(:metadata, {})[:build])
53
+ return version.sub(/\.0$/, ".#{build_number}") if build_number
54
+ version
55
+ end
56
+
57
+ def numeric(str)
58
+ return str if str.to_s =~ /^\d+$/
59
+ nil
60
+ end
61
+
62
+ def assembly_informational_version(context)
63
+ version = default_version(context)
64
+ numeric_version = pad(version, 3)
65
+ alpha_version = version.sub(/^[\d\.]*/, '')
66
+
67
+ semver = [
68
+ numeric_version,
69
+ alpha_version,
70
+ pre(context),
71
+ ].join
72
+
73
+ [
74
+ semver,
75
+ metadata(context)
76
+ ].compact.join('+')
77
+ end
78
+
79
+ def pre(context)
80
+ pre = context.fetch(:metadata, {})[:pre]
81
+
82
+ if pre && pre.to_s !~ /^-/
83
+ pre = "-#{pre}"
84
+ end
85
+
86
+ pre
87
+ end
88
+
89
+ def metadata(context)
90
+ metadata = context.fetch(:metadata, {}).reject { |k, _| k == :pre }
91
+
92
+ metadata = metadata.map { |key, value|
93
+ [key.to_s, value.to_s] if value
94
+ }.compact
95
+
96
+ return nil if metadata.empty?
97
+ metadata.join('.')
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -1,15 +1,19 @@
1
- module Rake::Funnel::Support
2
- class Which
3
- class << self
4
- def which(executable)
5
- return executable if File.file?(executable)
6
-
7
- ENV['PATH']
8
- .split(File::PATH_SEPARATOR)
9
- .map { |path| File.join(path, executable) }
10
- .select { |path| File.file?(path) }
11
- .first
12
- end
13
- end
14
- end
15
- end
1
+ module Rake
2
+ module Funnel
3
+ module Support
4
+ class Which
5
+ class << self
6
+ def which(executable)
7
+ return executable if File.file?(executable)
8
+
9
+ ENV['PATH']
10
+ .split(File::PATH_SEPARATOR)
11
+ .map { |path| File.join(path, executable) }
12
+ .select { |path| File.file?(path) }
13
+ .first
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,49 +1,53 @@
1
- require 'pathname'
2
- require 'zip'
3
-
4
- module Rake::Funnel::Support
5
- class Zipper
6
- class << self
7
- def zip(files, target, zip_root = nil)
8
- raise 'Target not defined' unless target
9
-
10
- target_dir = File.dirname(target)
11
- RakeFileUtils.mkdir_p(target_dir) unless File.directory?(target_dir)
12
-
13
- configure_zip
14
- create_zip(files || [], target, zip_root)
15
- end
16
-
17
- private
18
- def configure_zip
19
- ::Zip.unicode_names = true
20
- ::Zip.default_compression = Zlib::BEST_COMPRESSION
21
- end
22
-
23
- def create_zip(files, target, zip_root)
24
- ::Zip::File.open(target, ::Zip::File::CREATE) do |zip|
25
- common_path = files.common_path
26
-
27
- files.each do |file|
28
- zipped_file = get_zipped_path(common_path, file, zip_root)
29
-
30
- entry = zip.add(zipped_file, file)
31
- set_mtime(entry, file)
32
- end
33
- end
34
- end
35
-
36
- def get_zipped_path(common_path, file, zip_root)
37
- file = Pathname.new(file).relative_path_from(Pathname.new(common_path)).to_s unless common_path.nil?
38
- file = File.join(zip_root, file) unless zip_root.nil? || zip_root.empty?
39
- file
40
- end
41
-
42
- # To work around this bug: https://github.com/rubyzip/rubyzip/issues/176
43
- def set_mtime(entry, file)
44
- entry.time = ::Zip::DOSTime.at(File.mtime(file))
45
- entry.extra.delete('UniversalTime')
46
- end
47
- end
48
- end
49
- end
1
+ require 'pathname'
2
+ require 'zip'
3
+
4
+ module Rake
5
+ module Funnel
6
+ module Support
7
+ class Zipper
8
+ class << self
9
+ def zip(files, target, zip_root = nil)
10
+ raise 'Target not defined' unless target
11
+
12
+ target_dir = File.dirname(target)
13
+ RakeFileUtils.mkdir_p(target_dir) unless File.directory?(target_dir)
14
+
15
+ configure_zip
16
+ create_zip(files || [], target, zip_root)
17
+ end
18
+
19
+ private
20
+ def configure_zip
21
+ ::Zip.unicode_names = true
22
+ ::Zip.default_compression = Zlib::BEST_COMPRESSION
23
+ end
24
+
25
+ def create_zip(files, target, zip_root)
26
+ ::Zip::File.open(target, ::Zip::File::CREATE) do |zip|
27
+ common_path = files.common_path
28
+
29
+ files.each do |file|
30
+ zipped_file = get_zipped_path(common_path, file, zip_root)
31
+
32
+ entry = zip.add(zipped_file, file)
33
+ set_mtime(entry, file)
34
+ end
35
+ end
36
+ end
37
+
38
+ def get_zipped_path(common_path, file, zip_root)
39
+ file = Pathname.new(file).relative_path_from(Pathname.new(common_path)).to_s unless common_path.nil?
40
+ file = File.join(zip_root, file) unless zip_root.nil? || zip_root.empty?
41
+ file
42
+ end
43
+
44
+ # To work around this bug: https://github.com/rubyzip/rubyzip/issues/176
45
+ def set_mtime(entry, file)
46
+ entry.time = ::Zip::DOSTime.at(File.mtime(file))
47
+ entry.extra.delete('UniversalTime')
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,40 +1,44 @@
1
- require 'rake/tasklib'
2
-
3
- module Rake::Funnel::Tasks
4
- class AssemblyVersion < Rake::TaskLib
5
- include Rake::Funnel::Support
6
-
7
- attr_accessor :name, :language, :source, :source_args, :target_path
8
-
9
- def initialize(*args, &task_block)
10
- setup_ivars(args)
11
-
12
- define(args, &task_block)
13
- end
14
-
15
- private
16
- def setup_ivars(args)
17
- @name = args.shift || :version
18
-
19
- @language = :cs
20
- @source = :FromVersionFiles
21
- @source_args = {}
22
- @target_path = next_to_version_file
23
- end
24
-
25
- def define(args, &task_block)
26
- desc 'Generate version info' unless Rake.application.last_description
27
-
28
- task(name, *args) do |_, task_args|
29
- task_block.call(*[self, task_args].slice(0, task_block.arity)) if task_block
30
-
31
- writer = AssemblyVersionWriter.new(source, source_args)
32
- writer.write(target_path, language)
33
- end
34
- end
35
-
36
- def next_to_version_file
37
- Proc.new { |language, _version_info, source| File.join(File.dirname(source), "VersionInfo.#{language}") }
38
- end
39
- end
40
- end
1
+ require 'rake/tasklib'
2
+
3
+ module Rake
4
+ module Funnel
5
+ module Tasks
6
+ class AssemblyVersion < Rake::TaskLib
7
+ include Rake::Funnel::Support
8
+
9
+ attr_accessor :name, :language, :source, :source_args, :target_path
10
+
11
+ def initialize(*args, &task_block)
12
+ setup_ivars(args)
13
+
14
+ define(args, &task_block)
15
+ end
16
+
17
+ private
18
+ def setup_ivars(args)
19
+ @name = args.shift || :version
20
+
21
+ @language = :cs
22
+ @source = :FromVersionFiles
23
+ @source_args = {}
24
+ @target_path = next_to_version_file
25
+ end
26
+
27
+ def define(args, &task_block)
28
+ desc 'Generate version info' unless Rake.application.last_description
29
+
30
+ task(name, *args) do |_, task_args|
31
+ task_block.call(*[self, task_args].slice(0, task_block.arity)) if task_block
32
+
33
+ writer = AssemblyVersionWriter.new(source, source_args)
34
+ writer.write(target_path, language)
35
+ end
36
+ end
37
+
38
+ def next_to_version_file
39
+ proc { |language, _version_info, source| File.join(File.dirname(source), "VersionInfo.#{language}") }
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,41 +1,45 @@
1
- require 'rake/tasklib'
2
-
3
- module Rake::Funnel::Tasks
4
- class BinPath < Rake::TaskLib
5
- attr_accessor :name, :search_pattern
6
-
7
- def initialize(*args, &task_block)
8
- setup_ivars(args)
9
-
10
- define(args, &task_block)
11
- end
12
-
13
- private
14
- def setup_ivars(args)
15
- @name = args.shift || :bin_path
16
- @search_pattern = %w(tools/* tools/*/bin packages/**/tools)
17
- end
18
-
19
- def define(args, &task_block)
20
- desc 'Add local binaries to PATH environment variable' unless Rake.application.last_description
21
-
22
- task(name, *args) do |_, task_args|
23
- task_block.call(*[self, task_args].slice(0, task_block.arity)) if task_block
24
-
25
- Rake.rake_output_message 'Added the following paths to the PATH environment variable:'
26
- add_pattern_to_path_environment.each do |p|
27
- Rake.rake_output_message " - #{p}"
28
- end
29
- end
30
-
31
- self
32
- end
33
-
34
- def add_pattern_to_path_environment
35
- paths = Dir[*search_pattern].map { |path| File.expand_path(path) }.sort
36
-
37
- ENV['PATH'] = ([] << paths << ENV['PATH']).flatten.join(File::PATH_SEPARATOR)
38
- paths
39
- end
40
- end
41
- end
1
+ require 'rake/tasklib'
2
+
3
+ module Rake
4
+ module Funnel
5
+ module Tasks
6
+ class BinPath < Rake::TaskLib
7
+ attr_accessor :name, :search_pattern
8
+
9
+ def initialize(*args, &task_block)
10
+ setup_ivars(args)
11
+
12
+ define(args, &task_block)
13
+ end
14
+
15
+ private
16
+ def setup_ivars(args)
17
+ @name = args.shift || :bin_path
18
+ @search_pattern = %w(tools/* tools/*/bin packages/**/tools)
19
+ end
20
+
21
+ def define(args, &task_block)
22
+ desc 'Add local binaries to PATH environment variable' unless Rake.application.last_description
23
+
24
+ task(name, *args) do |_, task_args|
25
+ task_block.call(*[self, task_args].slice(0, task_block.arity)) if task_block
26
+
27
+ Rake.rake_output_message 'Added the following paths to the PATH environment variable:'
28
+ add_pattern_to_path_environment.each do |p|
29
+ Rake.rake_output_message " - #{p}"
30
+ end
31
+ end
32
+
33
+ self
34
+ end
35
+
36
+ def add_pattern_to_path_environment
37
+ paths = Dir[*search_pattern].map { |path| File.expand_path(path) }.sort
38
+
39
+ ENV['PATH'] = ([] << paths << ENV['PATH']).flatten.join(File::PATH_SEPARATOR)
40
+ paths
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,39 +1,43 @@
1
- require 'rake/tasklib'
2
-
3
- module Rake::Funnel::Tasks
4
- class Copy < Rake::TaskLib
5
- include Rake::Funnel::Support
6
-
7
- attr_accessor :name, :source, :target
8
-
9
- def initialize(*args, &task_block)
10
- setup_ivars(args)
11
-
12
- define(args, &task_block)
13
- end
14
-
15
- private
16
- def setup_ivars(args)
17
- @name = args.shift || :copy
18
-
19
- @source = []
20
- @target = nil
21
- end
22
-
23
- def define(args, &task_block)
24
- desc 'Copy files' unless Rake.application.last_description
25
-
26
- task(name, *args) do |_, task_args|
27
- task_block.call(*[self, task_args].slice(0, task_block.arity)) if task_block
28
-
29
- Copier.copy(files, target)
30
- end
31
-
32
- self
33
- end
34
-
35
- def files
36
- Finder.new(source, self, 'No files found.').all_or_default
37
- end
38
- end
39
- end
1
+ require 'rake/tasklib'
2
+
3
+ module Rake
4
+ module Funnel
5
+ module Tasks
6
+ class Copy < Rake::TaskLib
7
+ include Rake::Funnel::Support
8
+
9
+ attr_accessor :name, :source, :target
10
+
11
+ def initialize(*args, &task_block)
12
+ setup_ivars(args)
13
+
14
+ define(args, &task_block)
15
+ end
16
+
17
+ private
18
+ def setup_ivars(args)
19
+ @name = args.shift || :copy
20
+
21
+ @source = []
22
+ @target = nil
23
+ end
24
+
25
+ def define(args, &task_block)
26
+ desc 'Copy files' unless Rake.application.last_description
27
+
28
+ task(name, *args) do |_, task_args|
29
+ task_block.call(*[self, task_args].slice(0, task_block.arity)) if task_block
30
+
31
+ Copier.copy(files, target)
32
+ end
33
+
34
+ self
35
+ end
36
+
37
+ def files
38
+ Finder.new(source, self, 'No files found.').all_or_default
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end