lib/atd/routes.rb in atd-0.3.2 vs lib/atd/routes.rb in atd-0.4.0

- old
+ new

@@ -14,60 +14,56 @@ # A module designed to hold all the compilation methods module Compiler extend self - # Lists all file extenstions which have defined compiler methods + # Lists all file extentions which have defined compiler methods def filetypes instance_methods(true) - [:filetypes] end end - # This method is responsible for live compilation. + # This method is responsible for live compilation. It takes an ATD::Route as input, and returns either + # the filename if Route.output is a file or the Route.output string if Route.output is a string. + # It will also take the file and call the corresponding compilation method on it. def self.compile(name, contents) - return contents if name.nil? && !contents.is_a?(File) - name = File.basename(contents) if contents.is_a?(File) - name = name.split(".") - extensions = name - [name.first] - extensions.each do |extension| - contents = Compiler.send(extension, contents) if Compiler.filetypes.include? extension.to_sym - end - contents + return contents if name.nil? + contents = File.read(contents) if contents.is_a? File + parse(Compiler, name, contents) end - # This method is responsible for precompilation - def self.pre_parse(route) - output = route.output - name = output - return nil if output.nil? - if output.include?(".") || output.is_a?(File) - name = (output.is_a?(File) ? File.basename(output) : output) - file = read_file(output) - return name if file.nil? - file = precompile(name, file) - route.output = file + # This method is responsible for precompilation. It takes an ATD::Route as input, and returns either + # the filename if Route.output is a file or the Route.output string if Route.output is a string. + # It will also take the file and call the corresponding precompilation method on it. + # route.output is either a full, expanded file path, a file, or a string + def self.precompile(route, *opts) + return nil if route.output.nil? + if route.output.is_a?(File) + name = route.output.is_a?(File) ? File.basename(route.output) : route.output.dup + file = route.output.is_a?(File) ? route.output.dup : File.new(route.output) + route.output = parse(Precompiler, name, File.read(file)) if opts[0].nil? || opts[0] + return name end - name + route.output end class << self private - def read_file(output) - return File.read(File.join("assets/#{output}")) if output.is_a?(String) && File.exist?("assets/#{output}") - return File.read(output) if output.is_a? File - end - - def precompile(name, contents) + def parse(type, name, contents) name = name.split(".") extensions = name - [name.first] extensions.each do |extension| - if Precompiler.filetypes.include? extension.to_sym - contents = Precompiler.send(extension, contents) + if type.filetypes.include? extension.to_sym + contents = type.send(extension, contents) extensions -= [extension] end end contents end end end +end + +class Object + include ATD::Compilation::Compiler end