class Rake::Distribute::Item::FileItem

Public Class Methods

new(&block) click to toggle source
Calls superclass method Rake::Distribute::Item::Base::new
# File lib/rake/distribute/item/file.rb, line 17
def initialize(&block)
  @diff_proc = Proc.new { |dest,src| puts "#{dest} differs from #{src}"}
  @build_dir = File.join('build', 'distribute')
  super
end

Public Instance Methods

build(options = {}, &block) click to toggle source
# File lib/rake/distribute/item/file.rb, line 28
def build(options = {}, &block)
  @build_options = options
  @build_proc = block if block_given?
end
build_dir(folder) click to toggle source
# File lib/rake/distribute/item/file.rb, line 33
def build_dir(folder)
  @build_dir = folder
end
define_build_task(from) click to toggle source
# File lib/rake/distribute/item/file.rb, line 149
def define_build_task(from)

  build_dest = get_build_dest

  build_dir = File.dirname(build_dest)
  directory build_dir
  file build_dest => [from, build_dir] do
    @build_proc.call(from, build_dest)
  end

  desc "distribute: build"
  task :build => build_dest

  desc "distribute: clean"
  task :clean do
    safe_unlink build_dest if File.exist?(build_dest)
  end

  desc "distribute: clobber"
  task :clobber => [:clean] do
    rmdir @build_dir if File.exist?(@build_dir)
  end

  build_dest
end
define_diff_task(from) click to toggle source
# File lib/rake/distribute/item/file.rb, line 135
def define_diff_task(from)
  return unless defined? @dest

  desc "distribute: diff"
  task :diff do
    diffy = Diffy::Diff.new(
    @dest, from, :source => 'files', :allow_empty_diff => true
    ).to_s(:text)

    @diff_proc.call(@dest, @src) unless diffy.empty?
  end
end
define_tasks(options={}) click to toggle source
# File lib/rake/distribute/item/file.rb, line 46
def define_tasks(options={})
  if defined? @build_proc
    build_dest = define_build_task(@src)
  else
    build_dest = nil
  end

  if defined? @dest

    if build_dest

      if File.directory?(@dest)
        dest = File.join(@dest, File.basename(build_dest))
      else
        dest = @dest
      end

      dest_folder = File.dirname(dest)
      directory dest_folder

      file dest => [build_dest, dest_folder] do
        if File.directory?(build_dest)
          cp_r build_dest, @dest, @dest_options
        else
          install build_dest, @dest, @dest_options
        end
      end


      desc "distribute: install"
      task :install => dest


      define_diff_task(build_dest)

    else # without build ( install @src -> @dest )

      if File.directory?(@dest)
        dest_folder = @dest
      else
        dest_folder = @dest.pathmap("%d")
      end

      directory dest_folder

      file @dest => [@src, dest_folder] do
        if File.directory?(@dest)
          cp_r @src, @dest, @dest_options
        else
          install @src, @dest, @dest_options
        end
      end


      desc "distribute: install"
      task :install => @dest

      define_diff_task(@src)
    end

    desc "distribute: uninstall"
    task :uninstall do
      if File.directory?(@dest)
        uninstall_hint
      else
        safe_unlink @dest if File.exist?(@dest)
      end

      if defined? @uninstall_entries
        if @uninstall_entries.is_a?(String)
          if File.exist?(@uninstall_entries)
            puts "remove_entry_secure #{@uninstall_entries}"
            remove_entry_secure @uninstall_entries
          end
        elsif @uninstall_entries.is_a?(Array)
          @uninstall_entries.each { |e|
            if File.exist?(e)
              puts "remove_entry_secure #{e}"
              remove_entry_secure e
            end
          }
        end
      end
    end

  end
end
diff(&block) click to toggle source
# File lib/rake/distribute/item/file.rb, line 41
def diff(&block)
  @diff_proc = block if block_given?
end
sanity?() click to toggle source
Calls superclass method Rake::Distribute::Item::Base#sanity?
# File lib/rake/distribute/item/file.rb, line 23
def sanity?
  super
  raise ArgumentError, "#{@src} does not exist!" unless File.exists?(@src)
end
uninstall(entries) click to toggle source
# File lib/rake/distribute/item/file.rb, line 37
def uninstall(entries)
  @uninstall_entries = entries
end

Private Instance Methods

get_build_dest() click to toggle source
# File lib/rake/distribute/item/file.rb, line 193
def get_build_dest
  if @build_options && @build_options.has_key?(:to)
    @build_options[:to]
  else
    File.join(@build_dir, "#{Item.sn.to_s}-#{@src.pathmap('%n')}")
  end
end
uninstall_hint() click to toggle source
# File lib/rake/distribute/item/file.rb, line 178
def uninstall_hint
  if File.directory?(@dest) && !defined? @uninstall_entries
    puts %Q{
      rake/distribute: Uninstall directory is confusion!
      Specify it using `uninstall`:

      distribute :FileItem do
        uninstall '/path/to/foder/to/uninstall'
      end

    }.strip_heredoc

  end
end