module Exercise::RenderMethods
Public Instance Methods
render_exercise(template, digest_component: '')
click to toggle source
rubocop:disable Metrics/AbcSize rubocop:disable Metrics/MethodLength
# File lib/commands/exercise/render_methods.rb, line 64 def render_exercise(template, digest_component: '') say "Rendering: #{template}" template = full_path(template) current_dir = Dir.pwd content = render(template) File.open(filename(template), 'w') { |f| f.write("#{content}\n#{stamp(digest_component, template)}") } say ok "Finished: #{template}" true rescue StandardError => e say error "Failed to generate file from: #{template}" say "#{e.message}\n#{e.backtrace}" false ensure Dir.chdir(current_dir) end
render_file_path(template)
click to toggle source
rubocop:enable Metrics/AbcSize rubocop:enable Metrics/MethodLength
# File lib/commands/exercise/render_methods.rb, line 85 def render_file_path(template) template.gsub(%r{.templates/.*?erb}, File.basename(template)).gsub('.erb', '') end
templates_directory(template)
click to toggle source
# File lib/commands/exercise/render_methods.rb, line 89 def templates_directory(template) full_path(File.dirname(template)) end
Private Instance Methods
anonymise(string)
click to toggle source
# File lib/commands/exercise/render_methods.rb, line 95 def anonymise(string) substitutes.each do |key, value| string = string.gsub(key, value) end string end
filename(template)
click to toggle source
# File lib/commands/exercise/render_methods.rb, line 127 def filename(template) "#{File.expand_path("#{File.dirname(template)}/..")}/#{File.basename(template, '.erb')}" end
render(template)
click to toggle source
# File lib/commands/exercise/render_methods.rb, line 113 def render(template) reset template_content = File.read(File.expand_path(template)) erb_template = ERB.new(template_content) result = run_in_temp_dir?(template_content) ? render_in_temp_dir(erb_template) : erb_template.result(binding) anonymise(result) ensure after_rendering_commands.each { |command| test_command(command) } say '' if quiet? end
render_in_temp_dir(erb_template)
click to toggle source
# File lib/commands/exercise/render_methods.rb, line 131 def render_in_temp_dir(erb_template) output = nil Dir.mktmpdir do |path| original_dir = Dir.pwd Dir.chdir(path) output = erb_template.result(binding) Dir.chdir(original_dir) end output end
reset()
click to toggle source
# File lib/commands/exercise/render_methods.rb, line 108 def reset @result = nil @after_rendering_commands = [] end
run_in_temp_dir?(template_content)
click to toggle source
# File lib/commands/exercise/render_methods.rb, line 142 def run_in_temp_dir?(template_content) /<%#\s*instruction:run_in_temp_directory\s*%>/.match?(template_content) end
sanitise(string)
click to toggle source
# File lib/commands/exercise/render_methods.rb, line 146 def sanitise(string) string.chomp.strip end
stamp(digest_component, template)
click to toggle source
# File lib/commands/exercise/render_methods.rb, line 102 def stamp(digest_component, template) " \n\nRevision: #{digest(path: full_path("#{templates_directory(template)}/.."), digest_component: digest_component.to_s, excludes: excluded_files(template))}" end