Module: Woody::Compiler
- Defined in:
- lib/woody/compiler.rb
Overview
Handles functions related to compiling the Woody site
Constant Summary collapse
- @@touchedfiles =
[]
Class Method Summary collapse
-
.compile(options = []) ⇒ Object
Compiles the Woody site.
Class Method Details
.compile(options = []) ⇒ Object
Compiles the Woody site
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/woody/compiler.rb', line 7 def self.compile( = []) puts "Compiling..." = YAML.load_file("content/metadata.yml") # instantiate the metadata hash so shit doesn't explode in our faces # WEIRD SHIT: used .empty? here before but fails if used on hash seemingly if == false = Hash.new end episodes = Array.new filesfound = Array.new Dir.glob('content/*.mp3') do |file| filename = file[8..-1] unless == false or [filename].nil? # Episode metadata already stored episodes << Episode.(filename, [filename]) filesfound << filename else # No episode metadata stored for this yet unless .no_add == false # Seemingly backwards, I know... (, episodes, filesfound, filename) else puts "Warning: found media file #{filename} but no metadata. Will not be published." end end end episodes.sort! # Check for files in meta but not found unless .empty? .each do |file| next if filesfound.include? file[0] puts "Warning: found metadata for file #{file[0]}, but file itself is missing. Will not be published." end end # Make sure necessary directories exist FileUtils.mkdir_p('output/assets') unless File.directory?('output/assets') FileUtils.mkdir_p('output/assets/mp3') unless File.directory?('output/assets/mp3') FileUtils.mkdir_p('output/episode') unless File.directory?('output/episode') # Copy over (TODO: and process) MP3 files episodes.each do |episode| copy_file_to_output File.join("content", episode.filename), File.join("assets/mp3", episode.compiledname) end # Copy over assets copy_assets # Update index.html layout = File.read('templates/layout.html') layout = Erubis::Eruby.new(layout) index_compiled = layout.result(config: $config, episodes: episodes) do index = Erubis::Eruby.new(File.read('templates/index.html')) index.result(config: $config, episodes: episodes, test: "hello, world") do |episode| ep = Erubis::Eruby.new(File.read('templates/episode.html')) ep.result(config: $config, episodes: episodes, episode: episode) end end write_output_file('index.html') {|f| f.write(index_compiled) } # Update episode pages episodes.each do |episode| layout = File.read('templates/layout.html') layout = Erubis::Eruby.new(layout) episode_compiled = layout.result(config: $config, episodes: episodes) do ep = Erubis::Eruby.new(File.read('templates/episode.html')) ep.result(config: $config, episodes: episodes, episode: episode) end write_output_file(episode.path) {|f| f.write(episode_compiled) } end # Copy over iTunes.png begin copy_file_to_output "content/iTunes.png", "assets/iTunes.png" rescue Errno::ENOENT puts "Warning: content/iTunes.png missing!" end # Update (iTunes) RSS $config['itunes']['explicit'] = "no" if $config['itunes']['explicit'].nil? feedxml = File.read File.join($source_root, "feed.xml") # Use feed.xml template in gem, not in site's template folder. feed = Erubis::Eruby.new(feedxml) feed_compiled = feed.result(config: $config, episodes: episodes) write_output_file("feed.xml") {|f| f.write(feed_compiled) } # TODO: Update General RSS # Purge left over files purge_output # Remove all empty directories from the output Dir['output/**/*'].select { |d| File.directory? d }.select { |d| (Dir.entries(d) - %w[ . .. ]).empty? }.each { |d| Dir.rmdir d } end |