class Pakman::Templater

todo: rename to ErbTemplater (or RubyTemplater) - why? why not?

Public Instance Methods

merge_pak( manifestsrc, pakpath, binding, name ) click to toggle source
# File lib/pakman/erb/templater.rb, line 14
def merge_pak( manifestsrc, pakpath, binding, name )

  start = Time.now

  pakname = Pakman.pakname_from_file( manifestsrc )

  logger.info "Merging template pack '#{pakname}'"

  # todo: rename to load_file once depreated API got removed
  manifest = Manifest.load_file_v2( manifestsrc )

  manifest.each do |entry|
    dest   = entry[0]
    source = entry[1]

    if dest =~ /__file__/   # replace w/ name
      dest = dest.gsub( '__file__', name )
    end

    # get full (absolute) path and make sure path exists
    destfull = File.expand_path( dest, pakpath )
    destpath = File.dirname( destfull )
    FileUtils.makedirs( destpath ) unless File.directory?( destpath )

    logger.debug "destfull=>#{destfull}<"
    logger.debug "destpath=>#{destpath}<"

    if source =~ /\.erb\.|.erb$/
      logger.info "  Merging to #{dest}..."

      out = File.new( destfull, 'w+:utf-8' )   ## note: use utf8 (by default)
      out << ErbTemplate.from_file( source ).render( binding )
      out.flush
      out.close
    else
      logger.info "  Copying to #{dest} from #{source}..."

      FileUtils.copy( source, destfull )
    end
  end # each entry in manifest

  logger.info "Done (in #{Time.now-start} s)."
end