Class: Rake::Distribute::Item::ErbFile

Inherits:
FileItem show all
Defined in:
lib/rake/distribute/item/erbfile.rb

Direct Known Subclasses

TiltFile

Instance Method Summary collapse

Methods inherited from FileItem

#build, #build_dir, #define_diff_task, #define_tasks, #diff, #sanity?, #uninstall

Methods inherited from Base

#define_tasks, #diff, #from, #sanity?, #to

Constructor Details

#initialize(&block) ⇒ ErbFile

Returns a new instance of ErbFile.



17
18
19
20
21
22
23
24
25
# File 'lib/rake/distribute/item/erbfile.rb', line 17

def initialize(&block)
  @context   = {}
  super
  # if the user do not define build task
  @build_proc ||= Proc.new do |from, to|
    # unnecessary dup to make the workflow clear
    copy_entry from, to
  end
end

Instance Method Details

#define_build_task(src) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/rake/distribute/item/erbfile.rb', line 40

def define_build_task(src)
  directory @build_dir
  render_dest = File.join(@build_dir,
                          "#{Item.sn.to_s}-#{@src.pathmap('%n')}")
  file render_dest => [@src, @build_dir] do
    render(@src, render_dest)
  end

  desc 'distribute: clean'
  task :clean do
    safe_unlink render_dest
  end
  super_define_build_task(render_dest)
end

#render(from, to) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/rake/distribute/item/erbfile.rb', line 31

def render(from, to)
  File.open(to, 'w') do |f|
    erb = ERB.new(File.read(from))
    f.write(erb.result(ContextStruct.new(@context).get_binding))
    f.flush
  end
end

#super_define_build_taskObject



39
# File 'lib/rake/distribute/item/erbfile.rb', line 39

alias_method :super_define_build_task, :define_build_task

#with_context(context) ⇒ Object



27
28
29
# File 'lib/rake/distribute/item/erbfile.rb', line 27

def with_context(context)
  @context = context
end