Class: Roger::Release
- Inherits:
-
Object
- Object
- Roger::Release
- Extended by:
- Helpers::GetCallable
- Includes:
- Helpers::Logging
- Defined in:
- lib/roger/release.rb,
lib/roger/release/scm.rb,
lib/roger/release/scm/git.rb,
lib/roger/release/scm/fixed.rb,
lib/roger/release/processors.rb
Overview
The release runner
Direct Known Subclasses
Defined Under Namespace
Modules: Finalizers, Processors, Scm Classes: Cleaner, Injector
Constant Summary
Constants included from Helpers::Logging
Helpers::Logging::GRAY, Helpers::Logging::RED
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#finalizers ⇒ Object
readonly
Returns the value of attribute finalizers.
-
#project ⇒ Object
readonly
Returns the value of attribute project.
-
#stack ⇒ Object
readonly
Returns the value of attribute stack.
Class Method Summary collapse
Instance Method Summary collapse
-
#banner(options = {}, &_block) ⇒ Object
Generates a banner if a block is given, or returns the currently set banner.
-
#build_path ⇒ Object
Accessor for build_path The build_path is a temporary directory where the release will be built.
-
#cleanup(pattern) ⇒ Object
Files to clean up in the build directory just before finalization happens.
-
#extract(options = {}) ⇒ Object
deprecated
Deprecated.
Don’t use the extractor anymore, use release.use(:mockup, options) processor
-
#finalize(finalizer, options = {}) ⇒ Object
Write out the whole release into a directory, zip file or anything you can imagine #finalize can be called multiple times, it just will run all of them.
- #get_files(globs, excludes = []) ⇒ Object
-
#initialize(project, config = {}) ⇒ Release
constructor
A new instance of Release.
-
#inject(variables, options) ⇒ Object
Inject variables into files with an optional filter.
-
#run! ⇒ Object
Actually perform the release.
-
#scm(force = false) ⇒ Object
Get the current SCM object.
-
#source_path ⇒ Object
Accessor for source_path The source path is the root of the mockup.
-
#target_path ⇒ Object
Accessor for target_path The target_path is the path where the finalizers will put the release.
-
#use(processor, options = {}) ⇒ Object
Use a certain pre-processor.
Methods included from Helpers::GetCallable
Methods included from Helpers::Logging
Constructor Details
#initialize(project, config = {}) ⇒ Release
Returns a new instance of Release.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/roger/release.rb', line 37 def initialize(project, config = {}) real_project_path = project.path.realpath defaults = { scm: :git, source_path: real_project_path + "html", target_path: real_project_path + "releases", build_path: real_project_path + "build", cp: ["cp", "-RL"], blank: false, cleanup_build: true } @config = {}.update(defaults).update(config) @project = project @stack = [] @finalizers = [] end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
12 13 14 |
# File 'lib/roger/release.rb', line 12 def config @config end |
#finalizers ⇒ Object (readonly)
Returns the value of attribute finalizers.
14 15 16 |
# File 'lib/roger/release.rb', line 14 def finalizers @finalizers end |
#project ⇒ Object (readonly)
Returns the value of attribute project.
12 13 14 |
# File 'lib/roger/release.rb', line 12 def project @project end |
#stack ⇒ Object (readonly)
Returns the value of attribute stack.
14 15 16 |
# File 'lib/roger/release.rb', line 14 def stack @stack end |
Class Method Details
.default_finalizers ⇒ Object
23 24 25 |
# File 'lib/roger/release.rb', line 23 def default_finalizers [[get_callable(:dir, Roger::Release::Finalizers.map), {}]] end |
.default_stack ⇒ Object
19 20 21 |
# File 'lib/roger/release.rb', line 19 def default_stack [] end |
Instance Method Details
#banner(options = {}, &_block) ⇒ Object
Generates a banner if a block is given, or returns the currently set banner. It automatically takes care of adding comment marks around the banner.
The default banner looks like this:
Version : v1.0.0 =
Date : 2012-06-20 =
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/roger/release.rb', line 149 def ( = {}, &_block) = { comment: :js }.update() if block_given? @_banner = yield.to_s elsif !@_banner @_banner = .join("\n") end if [:comment] comment(@_banner, style: [:comment]) else @_banner end end |
#build_path ⇒ Object
Accessor for build_path The build_path is a temporary directory where the release will be built
68 69 70 |
# File 'lib/roger/release.rb', line 68 def build_path Pathname.new(config[:build_path]) end |
#cleanup(pattern) ⇒ Object
Files to clean up in the build directory just before finalization happens
132 133 134 |
# File 'lib/roger/release.rb', line 132 def cleanup(pattern) @stack << Cleaner.new(pattern) end |
#extract(options = {}) ⇒ Object
Don’t use the extractor anymore, use release.use(:mockup, options) processor
Extract the mockup, this will happen anyway, and will always happen first This method gives you a way to pass options to the extractor.
173 174 175 176 177 |
# File 'lib/roger/release.rb', line 173 def extract( = {}) warn(self, "Don't use the extractor anymore, use release.use(:mockup, options) and release.use(:url_relativizer, options) processors") @extractor_options = end |
#finalize(finalizer, options = {}) ⇒ Object
Write out the whole release into a directory, zip file or anything you can imagine #finalize can be called multiple times, it just will run all of them.
The default finalizer is :dir
122 123 124 |
# File 'lib/roger/release.rb', line 122 def finalize(finalizer, = {}) @finalizers << [self.class.get_callable(finalizer, Roger::Release::Finalizers.map), ] end |
#get_files(globs, excludes = []) ⇒ Object
205 206 207 208 209 210 211 212 |
# File 'lib/roger/release.rb', line 205 def get_files(globs, excludes = []) files = globs.map { |g| Dir.glob(build_path + g) }.flatten if excludes.any? files.reject { |c| excludes.detect { |e| e.match(c) } } else files end end |
#inject(variables, options) ⇒ Object
Inject variables into files with an optional filter
101 102 103 |
# File 'lib/roger/release.rb', line 101 def inject(variables, ) @stack << Injector.new(variables, ) end |
#run! ⇒ Object
Actually perform the release
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/roger/release.rb', line 180 def run! project.mode = :release # Validate paths validate_paths! # Extract mockup copy_source_path_to_build_path! validate_stack! # Run stack run_stack! # Run finalizers run_finalizers! # Cleanup cleanup! if config[:cleanup_build] ensure project.mode = nil end |
#scm(force = false) ⇒ Object
Get the current SCM object
81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/roger/release.rb', line 81 def scm(force = false) return @_scm if @_scm && !force case config[:scm] when :git @_scm = Release::Scm::Git.new(path: source_path) when :fixed @_scm = Release::Scm::Fixed.new else fail "Unknown SCM #{[:scm].inspect}" end end |
#source_path ⇒ Object
Accessor for source_path The source path is the root of the mockup
76 77 78 |
# File 'lib/roger/release.rb', line 76 def source_path Pathname.new(config[:source_path]) end |
#target_path ⇒ Object
Accessor for target_path The target_path is the path where the finalizers will put the release
60 61 62 |
# File 'lib/roger/release.rb', line 60 def target_path Pathname.new(config[:target_path]) end |
#use(processor, options = {}) ⇒ Object
Use a certain pre-processor
109 110 111 |
# File 'lib/roger/release.rb', line 109 def use(processor, = {}) @stack << [self.class.get_callable(processor, Roger::Release::Processors.map), ] end |