You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.0 KiB
65 lines
2.0 KiB
namespace :gems do
|
|
desc "Freeze a RubyGem into this Rails application; init.rb will be loaded on startup."
|
|
task :freeze do
|
|
unless gem_name = ENV['GEM']
|
|
puts <<-eos
|
|
Parameters:
|
|
GEM Name of gem (required)
|
|
VERSION Version of gem to freeze (optional)
|
|
ONLY RAILS_ENVs for which the GEM will be active (optional)
|
|
|
|
eos
|
|
break
|
|
end
|
|
|
|
# ONLY=development[,test] etc
|
|
only_list = (ENV['ONLY'] || "").split(',')
|
|
only_if_begin = only_list.size == 0 ? "" : <<-EOS
|
|
ENV['RAILS_ENV'] ||= 'development'
|
|
if %w[#{only_list.join(' ')}].include?(ENV['RAILS_ENV'])
|
|
EOS
|
|
only_if_end = only_list.size == 0 ? "" : "end"
|
|
|
|
require 'rubygems'
|
|
Gem.manage_gems
|
|
Gem::CommandManager.new
|
|
|
|
gem = (version = ENV['VERSION']) ?
|
|
Gem.cache.search(gem_name, "= #{version}").first :
|
|
Gem.cache.search(gem_name).sort_by { |g| g.version }.last
|
|
|
|
version ||= gem.version.version rescue nil
|
|
|
|
unpack_command_class = Gem::UnpackCommand rescue nil || Gem::Commands::UnpackCommand
|
|
unless gem && path = unpack_command_class.new.get_path(gem_name, version)
|
|
raise "No gem #{gem_name} #{version} is installed. Do 'gem list #{gem_name}' to see what you have available."
|
|
end
|
|
|
|
gems_dir = File.join(RAILS_ROOT, 'vendor', 'gems')
|
|
mkdir_p gems_dir, :verbose => false if !File.exists?(gems_dir)
|
|
|
|
target_dir = ENV['TO'] || File.basename(path).sub(/\.gem$/, '')
|
|
mkdir_p "vendor/gems/#{target_dir}", :verbose => false
|
|
|
|
chdir gems_dir, :verbose => false do
|
|
mkdir_p target_dir, :verbose => false
|
|
abs_target_dir = File.join(Dir.pwd, target_dir)
|
|
|
|
(gem = Gem::Installer.new(path)).unpack(abs_target_dir)
|
|
chdir target_dir, :verbose => false do
|
|
if !File.exists?('init.rb')
|
|
File.open('init.rb', 'w') do |file|
|
|
file << <<-eos
|
|
#{only_if_begin}
|
|
require File.join(File.dirname(__FILE__), 'lib', '#{gem_name}')
|
|
#{only_if_end}
|
|
eos
|
|
end
|
|
end
|
|
end
|
|
puts "Unpacked #{gem_name} #{version} to '#{target_dir}'"
|
|
end
|
|
end
|
|
|
|
end
|