From bbc037524346d26d01e77368add0d8e371f48b0e Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Sun, 20 Jan 2013 15:02:38 +0100 Subject: [PATCH] init: engine + first engine (kramdown) --- .gitignore | 6 ++++ AUTHORS | 1 + README.md | 1 + Rakefile | 57 ++++++++++++++++++++++++++++++ VERSION | 1 + lib/templates.rb | 39 +++++++++++++++++++++ lib/templates/engine.rb | 58 +++++++++++++++++++++++++++++++ lib/templates/engines/kramdown.rb | 27 ++++++++++++++ 8 files changed, 190 insertions(+) create mode 100644 .gitignore create mode 100644 AUTHORS create mode 100644 README.md create mode 100644 Rakefile create mode 100644 VERSION create mode 100644 lib/templates.rb create mode 100644 lib/templates/engine.rb create mode 100644 lib/templates/engines/kramdown.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dae2957 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*.swp +log +*.gem +*.gemspec +tmp +pkg diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..24dea9a --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Denis Knauf diff --git a/README.md b/README.md new file mode 100644 index 0000000..7c84a82 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Ups, war bisher zu faul. :/ diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..7e5aaea --- /dev/null +++ b/Rakefile @@ -0,0 +1,57 @@ +require 'rubygems' +require 'rake' + +begin + require 'jeweler' + Jeweler::Tasks.new do |gem| + gem.name = "Ute" + gem.summary = %Q{Universal Template Engines Collection} + gem.description = %Q{Many template engines in one collection with one universal API} + gem.email = "Denis.Knauf@gmail.com" + gem.homepage = "http://github.com/DenisKnauf/Ute" + gem.authors = ["Denis Knauf"] + gem.files = %w[AUTHORS README.md VERSION lib/**/*.rb test/**/*.rb] + gem.require_paths = %w[lib] + end + Jeweler::GemcutterTasks.new +rescue LoadError + puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler" +end + +require 'rake/testtask' +Rake::TestTask.new(:test) do |test| + test.libs << 'lib' << 'test' << 'ext' + test.pattern = 'test/**/*_test.rb' + test.verbose = true +end + +begin + require 'rcov/rcovtask' + Rcov::RcovTask.new do |test| + test.libs << 'test' + test.pattern = 'test/**/*_test.rb' + test.verbose = true + end +rescue LoadError + task :rcov do + abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov" + end +end + +#task :test => :check_dependencies + +#task :default => :test + +require 'rdoc/task' +Rake::RDocTask.new do |rdoc| + if File.exist?('VERSION') + version = File.read('VERSION') + else + version = "" + end + + rdoc.rdoc_dir = 'rdoc' + rdoc.title = "Ute #{version}" + rdoc.rdoc_files.include('README*') + rdoc.rdoc_files.include('lib/**/*.rb') +end diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..8acdd82 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.0.1 diff --git a/lib/templates.rb b/lib/templates.rb new file mode 100644 index 0000000..e7a590d --- /dev/null +++ b/lib/templates.rb @@ -0,0 +1,39 @@ +module Templates + class ImplementationExpected < Exception + end + + @templates = Hash.new {|h,k| h[k] = [] } + @preferred = {} + class < =~ filename + ext = normalize $1 + @preferred[ext] || @templates[ext][0] + end + + def new filename, options = nil + options[:filename] = filename + engine = self[filename] + engine && engine.new( options) + end + + def register klass, *exts + exts.each do |ext| + @templates[normalize ext].unshift( klass).uniq! + end + end + + def prefer klass, *exts + if exts.empty? + @templates.each {|ext, klasses| @preferred[ext] = klass if klasses.include? klass } + else + register klass, *exts + exts.each {|ext| @preferred[normalize ext] = klass } + end + end + end +end diff --git a/lib/templates/engine.rb b/lib/templates/engine.rb new file mode 100644 index 0000000..c36b6c8 --- /dev/null +++ b/lib/templates/engine.rb @@ -0,0 +1,58 @@ +class Templates::Engine + class <