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