template/Rakefile in tonic-0.0.1 vs template/Rakefile in tonic-0.0.2
- old
+ new
@@ -1,9 +1,136 @@
+# Most of all of this code from @ai (Andrey Sitnik) one-page site engine
+# https://github.com/ai/easings.net
+
require 'rubygems'
+require 'pathname'
require 'rake'
require 'bundler'
-Bundler::GemHelper.install_tasks
+require 'uglifier'
+require 'sprockets'
+require 'haml'
+require 'compass'
+
+ROOT = Pathname(__FILE__).dirname
+COMPILED_PATHS = {
+ # TODO: Here we need configurable params
+ :img => ROOT.join('images/'),
+ :js => ROOT.join('javascripts/'),
+ :html => ROOT,
+ :css => ROOT.join('stylesheets/')
+ }
+
+ASSETS_ROOT = ROOT.join('assets/')
+TEMPLATE_PATHS = {
+ :coffee => ASSETS_ROOT.join('coffee/'),
+ :templates => ASSETS_ROOT.join('templates/'),
+ :layout => ASSETS_ROOT.join('templates/layout/'),
+ :sass => ASSETS_ROOT.join('sass/'),
+ :images => ASSETS_ROOT.join('images/')
+ }
+
+Compass.configuration.images_path = TEMPLATE_PATHS[:images].to_s
+
+class Pathname
+ def glob(pattern, &block)
+ Pathname.glob(self.join(pattern), &block)
+ end
+end
+
+class Helper
+
+ attr_accessor :path
+
+ def initialize(env)
+ @env = env
+ end
+
+ def assets
+ @sprockets ||= begin
+ Sprockets::Environment.new(ROOT) do |env|
+ TEMPLATE_PATHS.values.each { |it| env.append_path it }
+
+ compass = Gem.loaded_specs['compass'].full_gem_path
+ env.append_path("#{compass}/frameworks/compass/stylesheets")
+
+ if @env == :production
+ env.js_compressor = Uglifier.new(copyright: false)
+ end
+ end
+ end
+ end
+
+ def render(haml, &block)
+ options = { format: :html5 }
+ options[:ugly] = true if @env == :production
+ Haml::Engine.new(haml, options).render(self, &block)
+ end
+
+ def production?
+ @env == :production
+ end
+
+end
+
+environment = nil
+
+desc 'Build all assets'
+task :build do |t, args|
+ environment ||= :production
+
+ puts 'build'
+
+ layout = TEMPLATE_PATHS[:layout].join('layout.html.haml').read
+
+ helper = Helper.new environment
+
+ TEMPLATE_PATHS[:templates].glob('**/*.html.haml') do |template|
+ next if template.basename.to_s == 'layout.html.haml'
+
+ path = template.
+ relative_path_from(TEMPLATE_PATHS[:templates]).
+ sub_ext('').sub_ext('').to_s
+ file = ROOT.join(path + ".html")
+
+ helper.path = path
+
+ file.open('w') do |html|
+ html << helper.render(layout) { helper.render(template.read) }
+ end
+
+ `gzip --best -c #{file} > #{file}.gz` if helper.production?
+
+ print '.'
+ end
+
+ print "\n"
+end
+
+desc 'Rebuild files on every changes'
+task :watch do
+ environment ||= :development
+ Rake::Task['build'].execute
+
+ def rebuild
+ print 're'
+ Rake::Task['build'].execute
+ rescue Exception => e
+ puts
+ puts "ERROR: #{e.message}"
+ end
+
+ require 'fssm'
+ FSSM.monitor(ASSETS_ROOT, '**/*') do
+ update { rebuild }
+ delete { rebuild }
+ create { rebuild }
+ end
+end
+
+### Rake tasks ###
+
desc 'Run all tests by default'
task :default do
system("rspec spec")
end
+