Class: Roger::Release::Injector
- Inherits:
-
Object
- Object
- Roger::Release::Injector
- Defined in:
- lib/roger/release/injector.rb
Overview
The Injector can inject variables and files into other files based on regexps.
Inject VERSION / DATE (i.e. in TOC) r.inject(=> release.version, “DATE” => release.date, :into => %w_doc/toc_doc/toc.html)
Inject CHANGELOG r.inject(=> {file: “”, filter: BlueCloth}, :into => %w_doc/changelog_doc/changelog.html)
Instance Method Summary collapse
- #call(release, options = {}) ⇒ Object
- #get_complex_injection(injection, release) ⇒ Object
- #get_content(injection, release) ⇒ Object
-
#initialize(variables, options) ⇒ Injector
constructor
Processors are based on Tilt (github.com/rtomayko/tilt).
- #injection_content(injection, release) ⇒ Object
Constructor Details
#initialize(variables, options) ⇒ Injector
Processors are based on Tilt (github.com/rtomayko/tilt). Currently supported/tested processors are:
-
‘md’ for Markdown (bluecloth)
Injection files are relative to the :source_path
42 43 44 45 |
# File 'lib/roger/release/injector.rb', line 42 def initialize(variables, ) @variables = variables @options = end |
Instance Method Details
#call(release, options = {}) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/roger/release/injector.rb', line 47 def call(release, = {}) @options.update() files = release.get_files(@options[:into]) files.each do |f| c = File.read(f) injected_vars = [] @variables.each do |variable, injection| if c.gsub!(variable, get_content(injection, release)) injected_vars << variable end end if injected_vars.size > 0 release.log(self, "Injected variables #{injected_vars.inspect} into #{f}") end File.open(f, "w") { |fh| fh.write c } end end |
#get_complex_injection(injection, release) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/roger/release/injector.rb', line 81 def get_complex_injection(injection, release) content = injection_content(injection, release) fail ArgumentError, "No :content or :file specified" unless content if injection[:processor] if tmpl = Tilt[injection[:processor]] (tmpl.new { content }).render else fail ArgumentError, "Unknown processor #{injection[:processor]}" end else content end end |
#get_content(injection, release) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/roger/release/injector.rb', line 66 def get_content(injection, release) case injection when String injection when Hash get_complex_injection(injection, release) else if injection.respond_to?(:to_s) injection.to_s else fail ArgumentError, "Woah, what's this? #{injection.inspect}" end end end |
#injection_content(injection, release) ⇒ Object
97 98 99 100 101 102 103 |
# File 'lib/roger/release/injector.rb', line 97 def injection_content(injection, release) if injection[:file] File.read(release.source_path + injection[:file]) else injection[:content] end end |