lib/rake_ext/project.rb in ruby_ext-0.4.11 vs lib/rake_ext/project.rb in ruby_ext-0.4.12
- old
+ new
@@ -1,88 +1,103 @@
#
# parse_dependencies_for
#
def parse_project_gemfile
- required_gems = []
+ required_gems, required_fake_gems = [], []
gem_file = "#{project_dir}/lib/#{project[:name]}/gems.rb"
+
if File.exist? gem_file
# puts "Parsing gemfile #{gem_file}"
code = File.open(gem_file){|f| f.read}
stub_class = Class.new
stub_class.send(:define_method, :gem){|*args| required_gems << args}
- stub = stub_class.new
+ stub_class.send(:define_method, :fake_gem){|*args| required_fake_gems << args}
+ stub = stub_class.new
stub.instance_eval code, __FILE__, __LINE__
end
- required_gems
+
+ return required_gems, required_fake_gems
end
#
# Install gems
#
namespace :gem do
desc "Install gem required by project"
task :install do
- gems = parse_project_gemfile
+ gems, fake_gems = parse_project_gemfile
gems.each do |name, version|
puts "Installing gem #{name} #{version}"
+ %x(gem install #{name}#{" -v #{version}" if version} --ignore-dependencies)
+ end
+ end
+
+ desc "List all gems required by project"
+ task :list do
+ puts "Gems required for #{project[:official_name]}:"
+ gems, fake_gems = parse_project_gemfile
+ puts(gems + fake_gems)
+ end
+
+ desc "Install all gem required by project (including fake gems)"
+ task :install_all do
+ gems, fake_gems = parse_project_gemfile
+ (gems + fake_gems).each do |name, version|
+ puts "Installing gem #{name} #{version}"
%x(gem install #{name} #{"-v #{version}" if version})
end
end
end
-
#
# Gem Spec, for sample look at Rakefile
#
require 'rake/clean'
require 'rake/gempackagetask'
require 'tmpdir'
namespace :gem do
spec = Gem::Specification.new do |s|
- gems = parse_project_gemfile
+ gems, fake_gems = parse_project_gemfile
+ gems = gems + fake_gems
+
gems.each{|name_version| s.add_dependency *name_version}
options = project.clone
options.delete(:name)
- s.name = options.delete(:gem_name)
+ s.name = options.delete(:official_name)
s.platform = options.delete(:platform) || Gem::Platform::RUBY
s.has_rdoc = options.delete(:has_rdoc) == nil ? false : true
s.require_path = options.delete(:lib) || "lib"
s.files = options.delete(:files) || (%w{Rakefile readme.md} + Dir.glob("{lib,spec}/**/*"))
+ s.bindir = options.delete(:bin) if options.include? :bin
# s.name = options[:name)
# s.author = options[:author)
# s.homepage = options[:homepage)
options.each{|k, v| s.send "#{k}=", v}
end
- package_dir = Dir.tmpdir + "/#{project[:gem_name]}_tmp"
+ package_dir = Dir.tmpdir + "/#{project[:official_name]}_tmp"
Rake::GemPackageTask.new(spec) do |p|
p.need_tar = true if RUBY_PLATFORM !~ /mswin/
p.need_zip = true
p.package_dir = package_dir
end
task :push do
- gem_file = Dir.glob("#{package_dir}/#{project[:gem_name]}*.gem").first
+ gem_file = Dir.glob("#{package_dir}/#{project[:official_name]}*.gem").first
system "gem push #{gem_file}"
end
task :clean do
system "rm -r #{package_dir}"
end
- desc "List all gems required by project"
- task :list do
- puts "Gems required for #{project[:gem_name]}:"
- puts parse_project_gemfile
- end
-
desc "Build and publish project as gem"
- task :release => [:gem, :push, :clean]
+ task release: [:gem, :push, :clean]
end
\ No newline at end of file