\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /opt/chef.upgrade/embedded/lib/ruby/gems/2.3.0/gems/rake-12.0.0/doc/

Viewing File: proto_rake.rdoc

= Original Prototype Rake

This is the original 100 line prototype rake program.

---
 #!/usr/bin/env ruby

 require 'ftools'

 class Task
   TASKS = Hash.new

   attr_reader :prerequisites

   def initialize(task_name)
     @name = task_name
     @prerequisites = []
     @actions = []
   end

   def enhance(deps=nil, &block)
     @prerequisites |= deps if deps
     @actions << block if block_given?
     self
   end

   def name
     @name.to_s
   end

   def invoke
     @prerequisites.each { |n| Task[n].invoke }
     execute if needed?
   end

   def execute
     return if @triggered
     @triggered = true
     @actions.collect { |act| result = act.call(self) }.last
   end

   def needed?
     true
   end

   def timestamp
     Time.now
   end

   class << self
     def [](task_name)
       TASKS[intern(task_name)] or fail "Don't know how to rake #{task_name}"
     end

     def define_task(args, &block)
       case args
       when Hash
 	fail "Too Many Target Names: #{args.keys.join(' ')}" if args.size > 1
 	fail "No Task Name Given" if args.size < 1
 	task_name = args.keys[0]
 	deps = args[task_name]
       else
 	task_name = args
 	deps = []
       end
       deps = deps.collect {|d| intern(d) }
       get(task_name).enhance(deps, &block)
     end

     def get(task_name)
       name = intern(task_name)
       TASKS[name] ||= self.new(name)
     end

     def intern(task_name)
       (Symbol === task_name) ? task_name : task_name.intern
     end
   end
 end

 class FileTask < Task
   def needed?
     return true unless File.exist?(name)
     latest_prereq = @prerequisites.collect{|n| Task[n].timestamp}.max
     return false if latest_prereq.nil?
     timestamp < latest_prereq
   end

   def timestamp
     File.new(name.to_s).mtime
   end
 end

 def task(args, &block)
   Task.define_task(args, &block)
 end

 def file(args, &block)
   FileTask.define_task(args, &block)
 end

 def sys(cmd)
   puts cmd
   system(cmd) or fail "Command Failed: [#{cmd}]"
 end

 def rake
   begin
     here = Dir.pwd
     while ! File.exist?("Rakefile")
       Dir.chdir("..")
       fail "No Rakefile found" if Dir.pwd == here
       here = Dir.pwd
     end
     puts "(in #{Dir.pwd})"
     load "./Rakefile"
     ARGV.push("default") if ARGV.size == 0
     ARGV.each { |task_name| Task[task_name].invoke }
   rescue Exception => ex
     puts "rake aborted ... #{ex.message}"
     puts ex.backtrace.find {|str| str =~ /Rakefile/ } || ""
   end
 end

 if __FILE__ == $0 then
   rake
 end