This question follows the "Make rake task from gem available everywhere?" for which I'm not fully satisfied with the Railties approach since it induces a dependency on Rails3 which seems to me overkilling compared to what I want. Also, I dislike the idea to create an extra binary as suggested in this question
So, assuming I have the below layout:
. ├── CHANGELOG.md ├── Gemfile ├── Gemfile.lock ├── LICENCE.md ├── README.md ├── Rakefile ├── my_gem.gemspec ├── lib │ ├── my_gem │ │ ├── common.rb │ │ ├── loader.rb │ │ ├── tasks │ │ │ └── sometasks.rake │ │ └── version.rb │ └── my_gem.rb
where lib/my_gem/tasks/sometasks.rake has some nested rake tasks definition:
#.....................
namespace :n1 do
#.....................
namespace :n2 do
desc "Tasks n1:n2:t1"
task :t1 do |t|
puts "Task 1"
end
desc "Tasks n1:n2:t2"
task :t2 do |t|
puts "Task 2"
end
end # namespace n1:n2
end # namespace n1
How can I easily share these tasks in another external Rakefile with a simple syntax such as require "my_gem/sometasks" once the gem is installed?
I tested the following configuration in a separate directory with success yet I still think it's a complicated syntax. Any help to simplify the load / include/ require would be welcome:
add a
GemFilecontaininggem 'my_gem', :path => '~/path/to/my_gem'add a
Rakefilewith the following content:require "my_gem" load "my_gem/tasks/sometasks.rake" desk "Test my_gem" task :toto do |t| puts "task toto" end
In the above configuration, it works:
$> bundle exec rake -T rake n1:n2:t1 # Task n1:n2:t1 rake n1:n2:t1 # Task n1:n2:t2 rake toto # Test my_gem
Yet if I get rid of .rake extension in the Rakefile, I have a load error
rake aborted! LoadError: cannot load such file -- my_gem/tasks/sometasks
Any hint?