class Musicality::Tasks::FileRaker

Attributes

file_ext[R]
files[R]
subdirs[R]
task_name[R]

Public Class Methods

new(parent_filelist, task_name, file_ext, &rule_block) click to toggle source
# File lib/musicality/project/file_raker.rb, line 7
def initialize parent_filelist, task_name, file_ext, &rule_block
  raise ArgumentError, "parent filelist is empty" if parent_filelist.empty?
  raise ArgumentError, "no rule block given" unless block_given?

  parent_exts = parent_filelist.map {|str| File.extname(str) }.uniq
  raise ArgumentError, "multiple file extensions in parent filelist: #{parent_filelist}" unless parent_exts.one?

  @task_name, @file_ext = task_name, file_ext
  @subdirs = parent_filelist.pathmap("#{Project::OUT_DIR}/%n")
  @files = parent_filelist.pathmap("#{Project::OUT_DIR}/%n/%n#{file_ext}")

  directory Project::OUT_DIR
  @subdirs.each { |subdir| directory subdir }
  task task_name => [Project::OUT_DIR] + @subdirs + @files

  find_parent_file = lambda do |f|
    parent_filelist.detect do |f2|
      File.basename(f2.ext("")) == File.basename(f.ext(""))
    end
  end

  rule file_ext => find_parent_file do |t|
    rule_block.call(t)
  end
end