class Gluey::Glues::Script

Constants

DIRECTIVES_REGEXP
PREFIXES

Public Instance Methods

pre_append(args) click to toggle source
# File lib/gluey/workshop/glues/script.rb, line 29
def pre_append(args)
  file = find_nested_file(args.first)
  cached_file, deps = get_nested_piece file
  @dependencies.concat deps
  @script = "#{@script}#{File.read cached_file}"
end
pre_depend_on(args) click to toggle source
# File lib/gluey/workshop/glues/script.rb, line 36
def pre_depend_on(args)
  file = find_nested_file(args[1])
  @dependencies << ::Gluey::Dependencies::SingleFile.new(file).actualize
end
pre_prepend(args) click to toggle source
# File lib/gluey/workshop/glues/script.rb, line 22
def pre_prepend(args)
  file = find_nested_file(args.first)
  cached_file, deps = get_nested_piece file
  @dependencies.concat deps
  @script = "#{File.read cached_file}#{@script}"
end
process(base_file, deps) click to toggle source
# File lib/gluey/workshop/glues/script.rb, line 9
def process(base_file, deps)
  @script, @directives = strip_directives read_base_file(base_file)
  return @script unless @directives
  @dependencies = deps
  @output = ''
  @base_file = base_file
  @marks = {append_self: ->{ @output += @script }}
  @directives.each{|args| directive args, :pre }
  @marks[:append_self].call if @marks[:append_self]
  @directives.each{|args| directive args, :post }
  @output
end

Private Instance Methods

directive(dir_array, run) click to toggle source
# File lib/gluey/workshop/glues/script.rb, line 55
def directive(dir_array, run)
  method = "#{run}_#{dir_array.first}"
  send method, dir_array[1..-1] if respond_to? method
end
find_nested_file(rel_path) click to toggle source
# File lib/gluey/workshop/glues/script.rb, line 60
def find_nested_file(rel_path)
  file = File.expand_path("../#{rel_path}", @base_file)
  File.exists?(file) || raise("cannot find '#{rel_path}' from script=#{@base_file}")
  file
end
get_nested_piece(file) click to toggle source
# File lib/gluey/workshop/glues/script.rb, line 66
def get_nested_piece(file)
  path = file[/(?:^#{@context.root}\/)?(.+)$/, 1]
  key = "script_piece:#{@material.name}:#{path}"
  cache_file, dependencies = @context.cache[key]
  return cache_file, dependencies if cache_file && File.exists?(cache_file) && !dependencies.any?{|dep| dep.changed?}

  glue = self.class.new @context, @material
  cache_dir = "#{@context.cache_path}/.script"
  Dir.mkdir cache_dir unless Dir.exists? cache_dir
  cache_file = "#{cache_dir}/#{path}.#{@material.name}"
  dependencies = [::Gluey::Dependencies::SingleFile.new(file).actualize]
  FileUtils.mkdir_p cache_file[0..(cache_file.rindex('/')-1)]
  File.write cache_file, glue.process(file, dependencies)
  @context.cache[key] = [cache_file, dependencies]
  return cache_file, dependencies
end
strip_directives(data) click to toggle source
# File lib/gluey/workshop/glues/script.rb, line 43
def strip_directives(data)
  script = data
  directives = data[DIRECTIVES_REGEXP]
  if directives
    script = $'
    directives = directives.split("\n").reject{|dir| dir.empty?}.map do |dir|
      dir.strip[/(?:#{PREFIXES.join '|'})>\s*(.+)/, 1].split (' ')
    end
  end
  return script, directives
end