buildpack-support 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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