aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/tasks/gems.rake
diff options
context:
space:
mode:
authorYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-09-24 14:01:31 -0700
committerYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-09-24 16:11:41 -0700
commitf0dd77c6be6a86fe384bb0015151e0a497973d39 (patch)
treead81bb4c807c39edeaa37035882a16d9d95ebaa9 /railties/lib/rails/tasks/gems.rake
parent610b81beca461a6fa4f00c7023e0e4315eb2b8be (diff)
downloadrails-f0dd77c6be6a86fe384bb0015151e0a497973d39.tar.gz
rails-f0dd77c6be6a86fe384bb0015151e0a497973d39.tar.bz2
rails-f0dd77c6be6a86fe384bb0015151e0a497973d39.zip
Move railties/lib/* into railties/lib/*
Diffstat (limited to 'railties/lib/rails/tasks/gems.rake')
-rw-r--r--railties/lib/rails/tasks/gems.rake78
1 files changed, 78 insertions, 0 deletions
diff --git a/railties/lib/rails/tasks/gems.rake b/railties/lib/rails/tasks/gems.rake
new file mode 100644
index 0000000000..f1c34c7cca
--- /dev/null
+++ b/railties/lib/rails/tasks/gems.rake
@@ -0,0 +1,78 @@
+desc "List the gems that this rails application depends on"
+task :gems => 'gems:base' do
+ Rails.configuration.gems.each do |gem|
+ print_gem_status(gem)
+ end
+ puts
+ puts "I = Installed"
+ puts "F = Frozen"
+ puts "R = Framework (loaded before rails starts)"
+end
+
+namespace :gems do
+ task :base do
+ $gems_rake_task = true
+ require 'rubygems'
+ require 'rubygems/gem_runner'
+ Rake::Task[:environment].invoke
+ end
+
+ desc "Build any native extensions for unpacked gems"
+ task :build do
+ $gems_build_rake_task = true
+ frozen_gems.each { |gem| gem.build }
+ end
+
+ namespace :build do
+ desc "Force the build of all gems"
+ task :force do
+ $gems_build_rake_task = true
+ frozen_gems.each { |gem| gem.build(:force => true) }
+ end
+ end
+
+ desc "Installs all required gems."
+ task :install => :base do
+ current_gems.each { |gem| gem.install }
+ end
+
+ desc "Unpacks all required gems into vendor/gems."
+ task :unpack => :install do
+ current_gems.each { |gem| gem.unpack }
+ end
+
+ namespace :unpack do
+ desc "Unpacks all required gems and their dependencies into vendor/gems."
+ task :dependencies => :install do
+ current_gems.each { |gem| gem.unpack(:recursive => true) }
+ end
+ end
+
+ desc "Regenerate gem specifications in correct format."
+ task :refresh_specs do
+ frozen_gems(false).each { |gem| gem.refresh }
+ end
+end
+
+def current_gems
+ gems = Rails.configuration.gems
+ gems = gems.select { |gem| gem.name == ENV['GEM'] } unless ENV['GEM'].blank?
+ gems
+end
+
+def frozen_gems(load_specs=true)
+ Dir[File.join(RAILS_ROOT, 'vendor', 'gems', '*-*')].map do |gem_dir|
+ Rails::GemDependency.from_directory_name(gem_dir, load_specs)
+ end
+end
+
+def print_gem_status(gem, indent=1)
+ code = case
+ when gem.framework_gem? then 'R'
+ when gem.frozen? then 'F'
+ when gem.installed? then 'I'
+ else ' '
+ end
+ puts " "*(indent-1)+" - [#{code}] #{gem.name} #{gem.requirement.to_s}"
+ gem.dependencies.each { |g| print_gem_status(g, indent+1) }
+end