class Gluey::Dependencies::Handlebars_bundle

Public Class Methods

new(dir, logical_path, context) click to toggle source
Calls superclass method
# File lib/gluey/workshop/dependencies/handlebars_bundle.rb, line 7
def initialize(dir, logical_path, context)
  tmp_dir = "#{context.cache_path}/.texts_bundle"
  Dir.mkdir tmp_dir unless Dir.exists? tmp_dir
  @cache_path = "#{tmp_dir}/#{logical_path.gsub '/', '-'}"
  Dir.mkdir @cache_path unless Dir.exists? @cache_path

  @dir_dep = ::Gluey::Dependencies::Directory.new(dir, '**/*.hb')
  @dependencies = []
  super "#{@cache_path}.hb_bundle"
end

Public Instance Methods

actualize() click to toggle source
# File lib/gluey/workshop/dependencies/handlebars_bundle.rb, line 26
def actualize
  # remove deleted files
  @dependencies.delete_if{|dep| !dep.exists? }
  # add new files
  new_files = (@dir_dep.files_list - @dependencies.map(&:file)).map do |f|
    template = f[/#{@dir_dep.file}\/(.+)\.hb$/, 1]
    ::Gluey::Dependencies::SingleFile.new f, template: template,
                                              hb_precompiled: "#{@cache_path}/#{template.gsub '/', '-'}"
  end
  @dependencies.concat new_files
  @dir_dep.actualize

  # re-precompile changed
  handlebars_context = ::Handlebars::Context.new
  @dependencies.each do |dep|
    next if !dep.changed? && File.exists?(dep.data[:hb_precompiled])
    dep.actualize
    precompile_output = handlebars_context.precompile File.read(dep.file)
    File.write dep.data[:hb_precompiled], precompile_output
  end

  write_bundle
  @mtime = File.mtime(@file).to_i
  self
end
changed?() click to toggle source
# File lib/gluey/workshop/dependencies/handlebars_bundle.rb, line 18
def changed?
  @dependencies.any?{|d| d.changed?} || @dir_dep.changed? || (File.mtime(@file).to_i != @mtime rescue true)
end
mark() click to toggle source
# File lib/gluey/workshop/dependencies/handlebars_bundle.rb, line 22
def mark
  @dependencies.map(&:mark).join
end

Private Instance Methods

write_bundle() click to toggle source
# File lib/gluey/workshop/dependencies/handlebars_bundle.rb, line 54
def write_bundle
  File.open @file, 'w' do |f|
    f.write '{'
    @dependencies.each_with_index do |dep, i|
      f.write "#{', ' if i!=0}\"#{dep.data[:template]}\": "
      f.write File.read(dep.data[:hb_precompiled])
    end
    f.write '}'
  end
end