buildpack-support 1.0.0

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. data/LICENSE +202 -0
  2. data/NOTICE +2 -0
  3. data/docs/cache.md +77 -0
  4. data/docs/component.md +1 -0
  5. data/docs/configuration.md +27 -0
  6. data/docs/logging.md +54 -0
  7. data/docs/other.md +1 -0
  8. data/docs/rake.md +1 -0
  9. data/docs/repository.md +116 -0
  10. data/docs/test.md +1 -0
  11. data/lib/buildpack_support.rb +18 -0
  12. data/lib/buildpack_support/base_buildpack.rb +166 -0
  13. data/lib/buildpack_support/buildpack_version.rb +124 -0
  14. data/lib/buildpack_support/cache.rb +24 -0
  15. data/lib/buildpack_support/cache/application_cache.rb +41 -0
  16. data/lib/buildpack_support/cache/cached_file.rb +103 -0
  17. data/lib/buildpack_support/cache/download_cache.rb +280 -0
  18. data/lib/buildpack_support/cache/inferred_network_failure.rb +26 -0
  19. data/lib/buildpack_support/cache/internet_availability.rb +64 -0
  20. data/lib/buildpack_support/component.rb +24 -0
  21. data/lib/buildpack_support/component/application.rb +76 -0
  22. data/lib/buildpack_support/component/base_component.rb +78 -0
  23. data/lib/buildpack_support/component/base_droplet.rb +96 -0
  24. data/lib/buildpack_support/component/downloads.rb +88 -0
  25. data/lib/buildpack_support/component/services.rb +84 -0
  26. data/lib/buildpack_support/component/versioned_dependency_component.rb +71 -0
  27. data/lib/buildpack_support/component/versioned_downloads.rb +57 -0
  28. data/lib/buildpack_support/component/with_timing.rb +40 -0
  29. data/lib/buildpack_support/configuration_utils.rb +58 -0
  30. data/lib/buildpack_support/constantize.rb +46 -0
  31. data/lib/buildpack_support/dash_case.rb +29 -0
  32. data/lib/buildpack_support/directory_finder.rb +45 -0
  33. data/lib/buildpack_support/filtering_pathname.rb +227 -0
  34. data/lib/buildpack_support/format_duration.rb +57 -0
  35. data/lib/buildpack_support/logging.rb +22 -0
  36. data/lib/buildpack_support/logging/delegating_logger.rb +48 -0
  37. data/lib/buildpack_support/logging/logger_factory.rb +148 -0
  38. data/lib/buildpack_support/qualify_path.rb +36 -0
  39. data/lib/buildpack_support/rake.rb +22 -0
  40. data/lib/buildpack_support/rake/buildpack_stage_task.rb +86 -0
  41. data/lib/buildpack_support/rake/cached_artifact_finder.rb +99 -0
  42. data/lib/buildpack_support/rake/check_api_doc_task.rb +70 -0
  43. data/lib/buildpack_support/rake/dependency_cache_task.rb +87 -0
  44. data/lib/buildpack_support/rake/disable_remote_downloads_task.rb +80 -0
  45. data/lib/buildpack_support/rake/package_task.rb +133 -0
  46. data/lib/buildpack_support/rake/package_zip_task.rb +80 -0
  47. data/lib/buildpack_support/rake/repository_configuration_finder.rb +66 -0
  48. data/lib/buildpack_support/rake/write_version_file_task.rb +82 -0
  49. data/lib/buildpack_support/repository.rb +24 -0
  50. data/lib/buildpack_support/repository/configured_item.rb +81 -0
  51. data/lib/buildpack_support/repository/repository_index.rb +98 -0
  52. data/lib/buildpack_support/repository/wildcard_version_resolver.rb +75 -0
  53. data/lib/buildpack_support/shell.rb +41 -0
  54. data/lib/buildpack_support/snake_case.rb +30 -0
  55. data/lib/buildpack_support/space_case.rb +29 -0
  56. data/lib/buildpack_support/test/application_helper.rb +41 -0
  57. data/lib/buildpack_support/test/base_component_helper.rb +59 -0
  58. data/lib/buildpack_support/test/base_droplet_helper.rb +36 -0
  59. data/lib/buildpack_support/test/console_helper.rb +57 -0
  60. data/lib/buildpack_support/test/environment_helper.rb +32 -0
  61. data/lib/buildpack_support/test/internet_availability_helper.rb +29 -0
  62. data/lib/buildpack_support/test/logging_helper.rb +50 -0
  63. data/lib/buildpack_support/test/scratch_helper.rb +32 -0
  64. data/lib/buildpack_support/test/versioned_dependency_component_helper.rb +32 -0
  65. data/lib/buildpack_support/test/with_load_path_helper.rb +27 -0
  66. data/lib/buildpack_support/to_b.rb +38 -0
  67. data/lib/buildpack_support/tokenized_version.rb +157 -0
  68. data/lib/buildpack_support/version.rb +23 -0
  69. data/spec/buildpack_support/base_buildpack_spec.rb +112 -0
  70. data/spec/buildpack_support/buildpack_version_spec.rb +122 -0
  71. data/spec/buildpack_support/cache/application_cache_spec.rb +56 -0
  72. data/spec/buildpack_support/cache/cached_file_spec.rb +94 -0
  73. data/spec/buildpack_support/cache/download_cache_spec.rb +293 -0
  74. data/spec/buildpack_support/cache/internet_availability_spec.rb +57 -0
  75. data/spec/buildpack_support/cache/yield_file_with_content.rb +30 -0
  76. data/spec/buildpack_support/component/application_spec.rb +81 -0
  77. data/spec/buildpack_support/component/base_component_spec.rb +81 -0
  78. data/spec/buildpack_support/component/base_droplet_spec.rb +72 -0
  79. data/spec/buildpack_support/component/downloads_spec.rb +63 -0
  80. data/spec/buildpack_support/component/services_spec.rb +80 -0
  81. data/spec/buildpack_support/component/versioned_dependency_component_spec.rb +58 -0
  82. data/spec/buildpack_support/component/versioned_downloads_spec.rb +58 -0
  83. data/spec/buildpack_support/component/with_timing_spec.rb +30 -0
  84. data/spec/buildpack_support/configuration_utils_spec.rb +39 -0
  85. data/spec/buildpack_support/constantize_spec.rb +34 -0
  86. data/spec/buildpack_support/dash_case_spec.rb +41 -0
  87. data/spec/buildpack_support/directory_finder_spec.rb +41 -0
  88. data/spec/buildpack_support/filtering_pathname_spec.rb +443 -0
  89. data/spec/buildpack_support/format_duration_spec.rb +60 -0
  90. data/spec/buildpack_support/logging/delegating_logger_spec.rb +62 -0
  91. data/spec/buildpack_support/logging/logger_factory_spec.rb +262 -0
  92. data/spec/buildpack_support/qualify_path_spec.rb +42 -0
  93. data/spec/buildpack_support/rake/buildpack_stage_task_spec.rb +88 -0
  94. data/spec/buildpack_support/rake/cached_artifact_finder_spec.rb +73 -0
  95. data/spec/buildpack_support/rake/check_api_doc_task_spec.rb +69 -0
  96. data/spec/buildpack_support/rake/dependency_cache_task_spec.rb +133 -0
  97. data/spec/buildpack_support/rake/disable_remote_downloads_task_spec.rb +91 -0
  98. data/spec/buildpack_support/rake/package_task_spec.rb +335 -0
  99. data/spec/buildpack_support/rake/package_zip_task_spec.rb +91 -0
  100. data/spec/buildpack_support/rake/repository_configuration_finder_spec.rb +61 -0
  101. data/spec/buildpack_support/rake/write_version_file_task_spec.rb +96 -0
  102. data/spec/buildpack_support/repository/configured_item_spec.rb +78 -0
  103. data/spec/buildpack_support/repository/repository_index_spec.rb +118 -0
  104. data/spec/buildpack_support/repository/wildcard_version_resolver_spec.rb +73 -0
  105. data/spec/buildpack_support/shell_spec.rb +32 -0
  106. data/spec/buildpack_support/snake_case_spec.rb +45 -0
  107. data/spec/buildpack_support/space_case_spec.rb +41 -0
  108. data/spec/buildpack_support/to_b_spec.rb +41 -0
  109. data/spec/buildpack_support/tokenized_version_spec.rb +132 -0
  110. data/spec/fixtures/application/test-file +0 -0
  111. data/spec/fixtures/config/found-config.yml +2 -0
  112. data/spec/fixtures/droplet-resources/droplet-resource +0 -0
  113. data/spec/fixtures/stub-download-with-top-level.zip +0 -0
  114. data/spec/fixtures/stub-download.tar.gz +0 -0
  115. data/spec/fixtures/stub-download.zip +0 -0
  116. data/spec/fixtures/test-cache.yml +18 -0
  117. data/spec/fixtures/test-index.yml +2 -0
  118. data/spec/fixtures/test_component.rb +0 -0
  119. data/spec/fixtures/zip-contents/test-directory/test-deep-file +0 -0
  120. data/spec/fixtures/zip-contents/test-file +0 -0
  121. data/spec/spec_helper.rb +30 -0
  122. metadata +416 -0
@@ -0,0 +1,70 @@
1
+ # Encoding: utf-8
2
+ # # Copyright 2013-2014 the original author or authors.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'buildpack_support/rake'
17
+ require 'rake'
18
+ require 'rake/tasklib'
19
+
20
+ module BuildpackSupport
21
+ module Rake
22
+
23
+ # A task generator for the +check_api_doc+ task
24
+ class CheckAPIDocTask < ::Rake::TaskLib
25
+
26
+ # @!attribute [rw] name
27
+ # @return [String] the name of the task. Defaults to +:check_api_doc+.
28
+ attr_accessor :name
29
+
30
+ # @!attribute [rw] verbose
31
+ # @return [Boolean] the verbosity of the task. Defaults to +true+.
32
+ attr_accessor :verbose
33
+
34
+ # Creates a new instance of the +check_api_doc+ task
35
+ def initialize(*args, &task_block)
36
+ setup_ivars args
37
+
38
+ desc 'Check that all APIs have been documented' unless ::Rake.application.last_comment
39
+ task(name, *args) do |_, task_args|
40
+ task_block.call(*[self, task_args].slice(0, task_block.arity)) if task_block
41
+ run_task verbose
42
+ end
43
+ end
44
+
45
+ # Run the main task functionality
46
+ #
47
+ # @param [Boolean] verbose whether to print the detailed output of the failure
48
+ # @return [void]
49
+ def run_task(verbose)
50
+ output = `yard stats --list-undoc`
51
+ abort message(output, verbose) if output !~ /100.00% documented/
52
+ end
53
+
54
+ private
55
+
56
+ def message(output, verbose)
57
+ message = "\nFailed due to undocumented public API"
58
+ message += ":\n\n#{output}" if verbose
59
+ message
60
+ end
61
+
62
+ def setup_ivars(args)
63
+ @name = args.shift || :check_api_doc
64
+ @verbose = true
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+ end
@@ -0,0 +1,87 @@
1
+ # Encoding: utf-8
2
+ # # Copyright 2013-2014 the original author or authors.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'buildpack_support/cache/download_cache'
17
+ require 'buildpack_support/logging/logger_factory'
18
+ require 'buildpack_support/rake'
19
+ require 'buildpack_support/rake/cached_artifact_finder'
20
+ require 'buildpack_support/rake/repository_configuration_finder'
21
+ require 'rake'
22
+ require 'rake/tasklib'
23
+ require 'pathname'
24
+ # require 'yaml'
25
+
26
+ module BuildpackSupport
27
+ module Rake
28
+
29
+ # A task generator for tasks that download and cache buildpack dependencies
30
+ class DependencyCacheTask < ::Rake::TaskLib
31
+
32
+ # @!attribute [rw] build_dir
33
+ # @return [String] the directory to caching log file into
34
+ attr_accessor :build_dir
35
+
36
+ # @!attribute [rw] package_name
37
+ # @return [String] the name of the package
38
+ attr_accessor :package_name
39
+
40
+ # @!attribute [rw] staging_dir
41
+ # @return [String] the directory to zip the contents of
42
+ attr_accessor :staging_dir
43
+
44
+ # @!attribute [rw] verbose
45
+ # @return [Boolean] the verbosity of the task. Defaults to +false+.
46
+ attr_accessor :verbose
47
+
48
+ def initialize(&task_block)
49
+ @verbose = true
50
+
51
+ task_block.call(*[self].slice(0, task_block.arity)) if task_block
52
+ abort 'build_dir must be configured' unless build_dir
53
+ abort 'package_name must be configured' unless package_name
54
+ abort 'staging_dir must be configured' unless staging_dir
55
+
56
+ BuildpackSupport::Logging::LoggerFactory.instance.setup "#{build_dir}/"
57
+ @cache = BuildpackSupport::Cache::DownloadCache.new(Pathname.new("#{staging_dir}/resources/cache"))
58
+
59
+ create_cache_tasks package_name, verbose
60
+ end
61
+
62
+ # Runs the task
63
+ #
64
+ # @param [String] target the URI to cache
65
+ # @param [Boolean] verbose whether to print messages to the console
66
+ # @return [void]
67
+ def run_task(target, verbose)
68
+ rake_output_message "Caching #{target}" if verbose
69
+ @cache.get(target) {}
70
+ end
71
+
72
+ private
73
+
74
+ def create_cache_tasks(package_name, verbose)
75
+ configurations = RepositoryConfigurationFinder.new.find
76
+ uris = CachedArtifactFinder.new.find configurations
77
+
78
+ uris.each do |target|
79
+ task package_name => target
80
+ task(target) { |t| run_task t.name, verbose }
81
+ end
82
+ end
83
+
84
+ end
85
+
86
+ end
87
+ end
@@ -0,0 +1,80 @@
1
+ # Encoding: utf-8
2
+ # # Copyright 2013-2014 the original author or authors.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'buildpack_support/rake'
17
+ require 'rake'
18
+ require 'rake/tasklib'
19
+
20
+ module BuildpackSupport
21
+ module Rake
22
+
23
+ # A task generator for the task that disables remote downloads
24
+ class DisableRemoteDownloadsTask < ::Rake::TaskLib
25
+
26
+ # @!attribute [rw] package_name
27
+ # @return [String] the name of the package
28
+ attr_accessor :package_name
29
+
30
+ # @!attribute [rw] staging_dir
31
+ # @return [String] the directory to zip the contents of
32
+ attr_accessor :staging_dir
33
+
34
+ # @!attribute [rw] verbose
35
+ # @return [Boolean] the verbosity of the task. Defaults to +true+.
36
+ attr_accessor :verbose
37
+
38
+ def initialize(&task_block)
39
+ @verbose = false
40
+
41
+ task_block.call(*[self].slice(0, task_block.arity)) if task_block
42
+ abort 'package_name must be configured' unless package_name
43
+ abort 'staging_dir must be configured' unless staging_dir
44
+
45
+ create_task package_name, staging_dir, verbose
46
+ end
47
+
48
+ # Runs the task
49
+ #
50
+ # @param [String] source the name of the file to read from
51
+ # @param [String] target the name of the file to write to
52
+ # @param [Boolean] verbose whether to print messages to the console
53
+ # @return [void]
54
+ def run_task(source, target, verbose)
55
+ RakeFileUtils.verbose(verbose) do
56
+ mkdir_p File.dirname target
57
+
58
+ content = File.open(source, 'r') { |f| f.read.gsub(/enabled/, 'disabled') }
59
+ File.open(target, 'w') { |f| f.write content }
60
+ rake_output_message "Disabled remote downloads in #{target}" if verbose
61
+ end
62
+ end
63
+
64
+ private
65
+
66
+ def create_task(package_name, staging_dir, verbose)
67
+ target = target(staging_dir)
68
+
69
+ task package_name => target
70
+ file(target) { |t| run_task t.source, t.name, verbose }
71
+ end
72
+
73
+ def target(staging_dir)
74
+ "#{staging_dir}/config/cache.yml"
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,133 @@
1
+ # Encoding: utf-8
2
+ # # Copyright 2013-2014 the original author or authors.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'buildpack_support/buildpack_version'
17
+ require 'buildpack_support/rake'
18
+ require 'buildpack_support/rake/buildpack_stage_task'
19
+ require 'buildpack_support/rake/dependency_cache_task'
20
+ require 'buildpack_support/rake/disable_remote_downloads_task'
21
+ require 'buildpack_support/rake/package_zip_task'
22
+ require 'buildpack_support/rake/write_version_file_task'
23
+ require 'rake'
24
+ require 'rake/clean'
25
+ require 'rake/tasklib'
26
+
27
+ module BuildpackSupport
28
+ module Rake
29
+
30
+ # A task generator for the +package+ task. Responsible for creating the +package+ task and all of the sub-tasks
31
+ # that are required to do the work of creating the package
32
+ class PackageTask < ::Rake::TaskLib
33
+
34
+ # @!attribute [rw] build_dir
35
+ # @return [String] the directory to place the created package in. Defaults to +build+.
36
+ attr_accessor :build_dir
37
+
38
+ # @!attribute [rw] files
39
+ # @return [Array<String>] the files to copy to the +staging_dir+
40
+ attr_accessor :files
41
+
42
+ # @!attribute [rw] name
43
+ # @return [String] the name of the task. Defaults to +:package+.
44
+ attr_accessor :name
45
+
46
+ # @!attribute [rw] prefix
47
+ # @return [String] the prefix of the package that is created
48
+ attr_accessor :prefix
49
+
50
+ # @!attribute [rw] staging_dir
51
+ # @return [String] the directory to zip the contents of. Defaults to +build/staging+.
52
+ attr_accessor :staging_dir
53
+
54
+ # @!attribute [rw] verbose
55
+ # @return [Boolean] the verbosity of the task
56
+ attr_accessor :verbose
57
+
58
+ def initialize(*args, &task_block)
59
+ setup_ivars args
60
+
61
+ task_block.call(*[self].slice(0, task_block.arity)) if task_block
62
+ abort 'package prefix must be configured' unless prefix
63
+
64
+ CLEAN.include build_dir, staging_dir
65
+
66
+ desc 'Create packaged buildpack' unless ::Rake.application.last_comment
67
+ task(name, *args)
68
+ task name => package_name
69
+
70
+ add_universal_tasks
71
+ add_offline_tasks if @buildpack_version.offline
72
+ end
73
+
74
+ private
75
+
76
+ def add_offline_tasks
77
+ DependencyCacheTask.new do |t|
78
+ t.build_dir = build_dir
79
+ t.package_name = package_name
80
+ t.staging_dir = staging_dir
81
+ t.verbose = verbose unless verbose.nil?
82
+ end
83
+
84
+ DisableRemoteDownloadsTask.new do |t|
85
+ t.package_name = package_name
86
+ t.staging_dir = staging_dir
87
+ t.verbose = verbose unless verbose.nil?
88
+ end
89
+ end
90
+
91
+ def add_universal_tasks
92
+ PackageZipTask.new do |t|
93
+ t.package_name = package_name
94
+ t.staging_dir = staging_dir
95
+ t.verbose = verbose unless verbose.nil?
96
+ end
97
+
98
+ BuildpackStageTask.new do |t|
99
+ t.files = files
100
+ t.package_name = package_name
101
+ t.staging_dir = staging_dir
102
+ t.verbose = verbose unless verbose.nil?
103
+ end
104
+
105
+ WriteVersionFileTask.new do |t|
106
+ t.buildpack_version = @buildpack_version
107
+ t.package_name = package_name
108
+ t.staging_dir = staging_dir
109
+ t.verbose = verbose unless verbose.nil?
110
+ end
111
+ end
112
+
113
+ def package_name
114
+ package_name = "#{build_dir}/#{prefix}"
115
+ package_name += '-offline' if @buildpack_version.offline
116
+ package_name + "-#{version}.zip"
117
+ end
118
+
119
+ def setup_ivars(args)
120
+ @name = args.shift || :package
121
+ @build_dir = 'build'
122
+ @buildpack_version = BuildpackSupport::BuildpackVersion.new(false)
123
+ @staging_dir = 'build/staging'
124
+ end
125
+
126
+ def version
127
+ @buildpack_version.version || 'unknown'
128
+ end
129
+
130
+ end
131
+
132
+ end
133
+ end
@@ -0,0 +1,80 @@
1
+ # Encoding: utf-8
2
+ # # Copyright 2013-2014 the original author or authors.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'buildpack_support/rake'
17
+ require 'rake'
18
+ require 'rake/tasklib'
19
+ require 'zip'
20
+
21
+ module BuildpackSupport
22
+ module Rake
23
+
24
+ # A task generator for the task that creates the package zip file.
25
+ class PackageZipTask < ::Rake::TaskLib
26
+
27
+ # @!attribute [rw] package_name
28
+ # @return [String] the name of the package
29
+ attr_accessor :package_name
30
+
31
+ # @!attribute [rw] staging_dir
32
+ # @return [String] the directory to zip the contents of
33
+ attr_accessor :staging_dir
34
+
35
+ # @!attribute [rw] verbose
36
+ # @return [Boolean] the verbosity of the task. Defaults to +true+.
37
+ attr_accessor :verbose
38
+
39
+ def initialize(&task_block)
40
+ @verbose = false
41
+
42
+ task_block.call(*[self].slice(0, task_block.arity)) if task_block
43
+ abort 'package_name must be configured' unless package_name
44
+ abort 'staging_dir must be configured' unless staging_dir
45
+
46
+ task(package_name) { |t| run_task t.name, staging_dir, verbose }
47
+ end
48
+
49
+ # Runs the task
50
+ #
51
+ # @param [String] name the name of the ZIP file to create
52
+ # @param [String] staging_dir the directory to ZIP up
53
+ # @param [Boolean] verbose whether to print messages to the console
54
+ # @return [void]
55
+ def run_task(name, staging_dir, verbose)
56
+ RakeFileUtils.verbose(verbose) do
57
+ mkdir_p File.dirname(name)
58
+
59
+ Zip::File.open(name, Zip::File::CREATE) do |zipfile|
60
+ Dir[File.join(staging_dir, '**', '**')].each do |file|
61
+ relative_path = relative_path(file, staging_dir)
62
+ rake_output_message "a #{relative_path}" if verbose
63
+ zipfile.add(relative_path, file)
64
+ end
65
+ end
66
+ end
67
+
68
+ rake_output_message "Created package #{name}"
69
+ end
70
+
71
+ private
72
+
73
+ def relative_path(file, staging_dir)
74
+ file.sub("#{staging_dir}/", '')
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+ end