I'm thinking of making an app behave different when runned by rake.
Is it already enough to check caller
, if it is called from rake, or do you need also which task?
I hope, it is ok, when you can modify the rakefile. I have a version which introduce Rake.application.current_task
.
# Rakefile
require 'rake'
module Rake
class Application
attr_accessor :current_task
end
class Task
alias :old_execute :execute
def execute(args=nil)
Rake.application.current_task = @name
old_execute(args)
end
end #class Task
end #module Rake
task :start => :install do; end
task :install => :install2 do
MyApp.new.some_method()
end
task :install2 do; end
# myapp.rb
class MyApp
def some_method(opts={})
## current_task? -> Rake.application.current_task
puts "#{self.class}##{__method__} called from task #{Rake.application.current_task}"
end
end
Two remarks on it:
- you may add the rake-modifications in a file and require it in your rakefile.
- the tasks start and install are test tasks to test, if there are more then one task.
- I made only small tests on side effects. I could imagine there are problems in a real productive situation.