lib/smallvictories/compiler.rb in smallvictories-0.0.9 vs lib/smallvictories/compiler.rb in smallvictories-0.0.10

- old
+ new

@@ -1,8 +1,9 @@ require 'sprockets' require 'autoprefixer-rails' require 'liquid' +require 'premailer' module SmallVictories class Compiler attr_accessor :config @@ -20,10 +21,14 @@ def compile_html liquid end + def inline_html + premail + end + def liquid begin Liquid::Template.file_system = Liquid::LocalFileSystem.new(config.full_includes_path) layout_path = config.full_layout_path if File.exists?(layout_path) @@ -93,11 +98,11 @@ environment.css_compressor = :yui end sprockets.append_path(config.full_destination_path) if assets = sprockets.find_asset(config.stylesheets.last) assets.write_to File.join(config.full_destination_path, config.stylesheets.last) - SmallVictories.logger.info "prefixed #{config.destination}/#{config.stylesheets.last}" + SmallVictories.logger.info "prefixed #{File.join(config.destination,config.stylesheets.last)}" end rescue => e SmallVictories.logger.error "#{path}\n#{e}\n#{e.backtrace.first}" end end @@ -107,8 +112,32 @@ prefix_css end def minify_js package [config.javascripts], { js_compressor: :closure } + end + + def premail + Dir.glob([File.join(config.full_destination_path, '*.html')]) do |path| + begin + premailer = Premailer.new(path, warn_level: Premailer::Warnings::SAFE) + File.open(path, 'w') { |file| file.write(premailer.to_inline_css) } + + # Output any CSS warnings + premailer.warnings.each do |w| + SmallVictories.logger.warn "#{w[:message]} (#{w[:level]}) may not render properly in #{w[:clients]}" + end + file_name = Pathname.new(path).basename + SmallVictories.logger.info "inlined #{File.join(config.destination, file_name)}" + size = File.size(path) + if size > 102000 + SmallVictories.logger.warn "size is greater than 120kb (#{size})" + else + SmallVictories.logger.info "size is less than 120kb (#{size})" + end + rescue => e + SmallVictories.logger.error "Inline Error\n#{e}" + end + end end end end