From 4402a36c2e63e6ce78c2d80dfe7355ede72c3918 Mon Sep 17 00:00:00 2001 From: Sven Fuchs Date: Mon, 1 Oct 2012 13:11:26 +0200 Subject: [PATCH] generate a real version hash --- AssetFile | 2 + lib/rake-pipeline/travis.rb | 67 ++--------------------------- lib/rake-pipeline/travis/filters.rb | 65 ++++++++++++++++++++++++++++ lib/rake-pipeline/travis/version.rb | 54 +++++++++++++++++++++++ public/version | 2 +- 5 files changed, 126 insertions(+), 64 deletions(-) create mode 100644 lib/rake-pipeline/travis/filters.rb create mode 100644 lib/rake-pipeline/travis/version.rb diff --git a/AssetFile b/AssetFile index 34f8fd3b..85294d28 100644 --- a/AssetFile +++ b/AssetFile @@ -7,6 +7,8 @@ require 'compass' Compass.configuration.images_path = 'assets/images' Compass.configuration.add_import_path File.expand_path('../assets/stylesheets', __FILE__) +Travis::Version.update + output 'public/javascripts' input 'assets/javascripts' do match 'app/templates/**/*.hbs' do diff --git a/lib/rake-pipeline/travis.rb b/lib/rake-pipeline/travis.rb index 12152197..fccfacbb 100644 --- a/lib/rake-pipeline/travis.rb +++ b/lib/rake-pipeline/travis.rb @@ -1,65 +1,6 @@ -require 'rake-pipeline' -require 'execjs' -require 'uglifier' - module Travis - class HandlebarsFilter < Rake::Pipeline::Filter - class << self - def source - [ - File.read('lib/rake-pipeline/ember-headless.js'), - File.read('assets/javascripts/vendor/handlebars.js'), - File.read('assets/javascripts/vendor/ember.js') - ].join("\n") - end - - def context - @@context ||= ExecJS.compile(source) - end - - def compile(source) - context.call('compileHandlebarsTemplate', source + "\n") - end - end - - def generate_output(inputs, output) - inputs.each do |input| - source = self.class.compile(input.read) - source = wrap(name(input.path), source) - output.write source - end - end - - def wrap(name, source) - "\nEmber.TEMPLATES['#{name}'] = Ember.Handlebars.template(#{source});\n" - end - - def name(path) - path.sub(%r(^app/templates/), '').sub(/\.hbs$/, '') - end - end - - class SafeConcatFilter < Rake::Pipeline::Filter - def generate_output(inputs, output) - inputs.each do |input| - source = File.read(input.fullpath) + ";" - output.write source - end - end - end - - class ProductionFilter < Rake::Pipeline::Filter - def generate_output(inputs, output) - inputs.each do |input| - source = File.read(input.fullpath) - source = strip_debug(source) - source = Uglifier.compile(source) - output.write source - end - end - - def strip_debug(source) - source.gsub(%r{^(\s)*Ember\.(assert|deprecate|warn)\((.*)\).*$}, "") - end - end + autoload :HandlebarsFilter, 'rake-pipeline/travis/filters' + autoload :SafeConcatFilter, 'rake-pipeline/travis/filters' + autoload :ProductionFilter, 'rake-pipeline/travis/filters' + autoload :Version, 'rake-pipeline/travis/version' end diff --git a/lib/rake-pipeline/travis/filters.rb b/lib/rake-pipeline/travis/filters.rb new file mode 100644 index 00000000..12152197 --- /dev/null +++ b/lib/rake-pipeline/travis/filters.rb @@ -0,0 +1,65 @@ +require 'rake-pipeline' +require 'execjs' +require 'uglifier' + +module Travis + class HandlebarsFilter < Rake::Pipeline::Filter + class << self + def source + [ + File.read('lib/rake-pipeline/ember-headless.js'), + File.read('assets/javascripts/vendor/handlebars.js'), + File.read('assets/javascripts/vendor/ember.js') + ].join("\n") + end + + def context + @@context ||= ExecJS.compile(source) + end + + def compile(source) + context.call('compileHandlebarsTemplate', source + "\n") + end + end + + def generate_output(inputs, output) + inputs.each do |input| + source = self.class.compile(input.read) + source = wrap(name(input.path), source) + output.write source + end + end + + def wrap(name, source) + "\nEmber.TEMPLATES['#{name}'] = Ember.Handlebars.template(#{source});\n" + end + + def name(path) + path.sub(%r(^app/templates/), '').sub(/\.hbs$/, '') + end + end + + class SafeConcatFilter < Rake::Pipeline::Filter + def generate_output(inputs, output) + inputs.each do |input| + source = File.read(input.fullpath) + ";" + output.write source + end + end + end + + class ProductionFilter < Rake::Pipeline::Filter + def generate_output(inputs, output) + inputs.each do |input| + source = File.read(input.fullpath) + source = strip_debug(source) + source = Uglifier.compile(source) + output.write source + end + end + + def strip_debug(source) + source.gsub(%r{^(\s)*Ember\.(assert|deprecate|warn)\((.*)\).*$}, "") + end + end +end diff --git a/lib/rake-pipeline/travis/version.rb b/lib/rake-pipeline/travis/version.rb new file mode 100644 index 00000000..907741ef --- /dev/null +++ b/lib/rake-pipeline/travis/version.rb @@ -0,0 +1,54 @@ +require 'pathname' +require 'digest/md5' + +module Travis + class Version + FILE_NAME = 'public/version' + SOURCES = %w(AssetFile Gemfile.lock assets) + + def self.update + new.update + end + + attr_reader :root + + def initialize(root = nil) + @root = Pathname.new(root || File.expand_path('.')) + end + + def read + file.read + end + + def update + @hash = nil + write(hash) + hash + end + + protected + + def file + root.join(FILE_NAME) + end + + def write(version) + file.open('w+') { |f| f.write(version) } + end + + def hash + @hash ||= digest.to_s[0..7] + end + + def digest + Digest::MD5.new << `ls -lAR #{sources.join(' ')} | awk '{print $5, $6, $7, $9}'` + end + + def sources + SOURCES.map do |source| + source = root.join(source) + source.to_s if source.exist? + end.compact + end + end +end diff --git a/public/version b/public/version index d00491fd..76bdb475 100644 --- a/public/version +++ b/public/version @@ -1 +1 @@ -1 +bcf31bce \ No newline at end of file