erails 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +3 -0
- data/MIT-LICENSE +20 -0
- data/README +309 -0
- data/Rakefile +339 -0
- data/bin/about +4 -0
- data/bin/console +3 -0
- data/bin/dbconsole +3 -0
- data/bin/destroy +3 -0
- data/bin/erails +19 -0
- data/bin/generate +3 -0
- data/bin/performance/benchmarker +3 -0
- data/bin/performance/profiler +3 -0
- data/bin/performance/request +3 -0
- data/bin/plugin +3 -0
- data/bin/process/inspector +3 -0
- data/bin/process/reaper +3 -0
- data/bin/process/spawner +3 -0
- data/bin/runner +3 -0
- data/bin/server +3 -0
- data/builtin/rails_info/rails/info.rb +125 -0
- data/builtin/rails_info/rails/info_controller.rb +9 -0
- data/builtin/rails_info/rails/info_helper.rb +2 -0
- data/builtin/rails_info/rails_info_controller.rb +2 -0
- data/configs/apache.conf +40 -0
- data/configs/databases/frontbase.yml +28 -0
- data/configs/databases/mysql.yml +54 -0
- data/configs/databases/oracle.yml +39 -0
- data/configs/databases/postgresql.yml +48 -0
- data/configs/databases/sqlite2.yml +16 -0
- data/configs/databases/sqlite3.yml +19 -0
- data/configs/empty.log +0 -0
- data/configs/initializers/inflections.rb +10 -0
- data/configs/initializers/mime_types.rb +5 -0
- data/configs/initializers/new_rails_defaults.rb +17 -0
- data/configs/lighttpd.conf +54 -0
- data/configs/routes.rb +43 -0
- data/dispatches/dispatch.fcgi +24 -0
- data/dispatches/dispatch.rb +10 -0
- data/dispatches/gateway.cgi +97 -0
- data/doc/README_FOR_APP +2 -0
- data/environments/boot.rb +109 -0
- data/environments/development.rb +16 -0
- data/environments/environment.rb +71 -0
- data/environments/production.rb +22 -0
- data/environments/test.rb +22 -0
- data/fresh_rakefile +10 -0
- data/helpers/application.rb +15 -0
- data/helpers/application_helper.rb +3 -0
- data/helpers/test_helper.rb +38 -0
- data/html/404.html +30 -0
- data/html/422.html +30 -0
- data/html/500.html +30 -0
- data/html/favicon.ico +0 -0
- data/html/images/rails.png +0 -0
- data/html/index.html +274 -0
- data/html/javascripts/application.js +2 -0
- data/html/robots.txt +5 -0
- data/lib/code_statistics.rb +107 -0
- data/lib/commands/about.rb +3 -0
- data/lib/commands/console.rb +32 -0
- data/lib/commands/dbconsole.rb +67 -0
- data/lib/commands/destroy.rb +6 -0
- data/lib/commands/generate.rb +6 -0
- data/lib/commands/ncgi/listener +86 -0
- data/lib/commands/ncgi/tracker +69 -0
- data/lib/commands/performance/benchmarker.rb +24 -0
- data/lib/commands/performance/profiler.rb +50 -0
- data/lib/commands/performance/request.rb +6 -0
- data/lib/commands/plugin.rb +950 -0
- data/lib/commands/process/inspector.rb +68 -0
- data/lib/commands/process/reaper.rb +149 -0
- data/lib/commands/process/spawner.rb +219 -0
- data/lib/commands/process/spinner.rb +57 -0
- data/lib/commands/runner.rb +48 -0
- data/lib/commands/server.rb +39 -0
- data/lib/commands/servers/base.rb +31 -0
- data/lib/commands/servers/lighttpd.rb +94 -0
- data/lib/commands/servers/mongrel.rb +69 -0
- data/lib/commands/servers/new_mongrel.rb +16 -0
- data/lib/commands/servers/webrick.rb +66 -0
- data/lib/commands/update.rb +4 -0
- data/lib/commands.rb +17 -0
- data/lib/console_app.rb +30 -0
- data/lib/console_sandbox.rb +6 -0
- data/lib/console_with_helpers.rb +26 -0
- data/lib/dispatcher.rb +24 -0
- data/lib/fcgi_handler.rb +239 -0
- data/lib/initializer.rb +926 -0
- data/lib/rails/gem_builder.rb +21 -0
- data/lib/rails/gem_dependency.rb +129 -0
- data/lib/rails/mongrel_server/commands.rb +342 -0
- data/lib/rails/mongrel_server/handler.rb +55 -0
- data/lib/rails/plugin/loader.rb +152 -0
- data/lib/rails/plugin/locator.rb +100 -0
- data/lib/rails/plugin.rb +116 -0
- data/lib/rails/version.rb +9 -0
- data/lib/rails_generator/base.rb +263 -0
- data/lib/rails_generator/commands.rb +622 -0
- data/lib/rails_generator/generated_attribute.rb +42 -0
- data/lib/rails_generator/generators/applications/app/USAGE +9 -0
- data/lib/rails_generator/generators/applications/app/app_generator.rb +174 -0
- data/lib/rails_generator/generators/components/controller/USAGE +29 -0
- data/lib/rails_generator/generators/components/controller/controller_generator.rb +37 -0
- data/lib/rails_generator/generators/components/controller/templates/controller.rb +7 -0
- data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +8 -0
- data/lib/rails_generator/generators/components/controller/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/controller/templates/view.html.erb +2 -0
- data/lib/rails_generator/generators/components/integration_test/USAGE +8 -0
- data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +16 -0
- data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +10 -0
- data/lib/rails_generator/generators/components/mailer/USAGE +16 -0
- data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +30 -0
- data/lib/rails_generator/generators/components/mailer/templates/fixture.erb +3 -0
- data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +0 -0
- data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +15 -0
- data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +21 -0
- data/lib/rails_generator/generators/components/mailer/templates/view.erb +3 -0
- data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +0 -0
- data/lib/rails_generator/generators/components/migration/USAGE +29 -0
- data/lib/rails_generator/generators/components/migration/migration_generator.rb +20 -0
- data/lib/rails_generator/generators/components/migration/templates/migration.rb +11 -0
- data/lib/rails_generator/generators/components/model/USAGE +27 -0
- data/lib/rails_generator/generators/components/model/model_generator.rb +45 -0
- data/lib/rails_generator/generators/components/model/templates/fixtures.yml +19 -0
- data/lib/rails_generator/generators/components/model/templates/migration.rb +16 -0
- data/lib/rails_generator/generators/components/model/templates/model.rb +2 -0
- data/lib/rails_generator/generators/components/model/templates/unit_test.rb +8 -0
- data/lib/rails_generator/generators/components/observer/USAGE +13 -0
- data/lib/rails_generator/generators/components/observer/observer_generator.rb +16 -0
- data/lib/rails_generator/generators/components/observer/templates/observer.rb +2 -0
- data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +8 -0
- data/lib/rails_generator/generators/components/plugin/USAGE +25 -0
- data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +39 -0
- data/lib/rails_generator/generators/components/plugin/templates/MIT-LICENSE +20 -0
- data/lib/rails_generator/generators/components/plugin/templates/README +13 -0
- data/lib/rails_generator/generators/components/plugin/templates/Rakefile +22 -0
- data/lib/rails_generator/generators/components/plugin/templates/USAGE +8 -0
- data/lib/rails_generator/generators/components/plugin/templates/generator.rb +8 -0
- data/lib/rails_generator/generators/components/plugin/templates/init.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/install.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +4 -0
- data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +8 -0
- data/lib/rails_generator/generators/components/resource/USAGE +23 -0
- data/lib/rails_generator/generators/components/resource/resource_generator.rb +74 -0
- data/lib/rails_generator/generators/components/resource/templates/controller.rb +2 -0
- data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +8 -0
- data/lib/rails_generator/generators/components/resource/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/scaffold/USAGE +25 -0
- data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +93 -0
- data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +85 -0
- data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +45 -0
- data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb +17 -0
- data/lib/rails_generator/generators/components/scaffold/templates/style.css +54 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +18 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb +24 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb +17 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb +10 -0
- data/lib/rails_generator/generators/components/session_migration/USAGE +10 -0
- data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +18 -0
- data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +16 -0
- data/lib/rails_generator/lookup.rb +249 -0
- data/lib/rails_generator/manifest.rb +53 -0
- data/lib/rails_generator/options.rb +150 -0
- data/lib/rails_generator/scripts/destroy.rb +30 -0
- data/lib/rails_generator/scripts/generate.rb +7 -0
- data/lib/rails_generator/scripts/update.rb +12 -0
- data/lib/rails_generator/scripts.rb +89 -0
- data/lib/rails_generator/secret_key_generator.rb +164 -0
- data/lib/rails_generator/simple_logger.rb +46 -0
- data/lib/rails_generator/spec.rb +44 -0
- data/lib/rails_generator.rb +43 -0
- data/lib/railties_path.rb +1 -0
- data/lib/ruby_version_check.rb +17 -0
- data/lib/rubyprof_ext.rb +35 -0
- data/lib/source_annotation_extractor.rb +102 -0
- data/lib/tasks/annotations.rake +23 -0
- data/lib/tasks/databases.rake +389 -0
- data/lib/tasks/documentation.rake +80 -0
- data/lib/tasks/framework.rake +105 -0
- data/lib/tasks/gems.rake +64 -0
- data/lib/tasks/log.rake +9 -0
- data/lib/tasks/misc.rake +57 -0
- data/lib/tasks/rails.rb +8 -0
- data/lib/tasks/routes.rake +17 -0
- data/lib/tasks/statistics.rake +18 -0
- data/lib/tasks/testing.rake +118 -0
- data/lib/tasks/tmp.rake +37 -0
- data/lib/test_help.rb +28 -0
- data/lib/webrick_server.rb +165 -0
- metadata +356 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
namespace :db do
|
|
2
|
+
namespace :create do
|
|
3
|
+
desc 'Create all the local databases defined in config/database.yml'
|
|
4
|
+
task :all => :environment do
|
|
5
|
+
ActiveRecord::Base.configurations.each_value do |config|
|
|
6
|
+
# Skip entries that don't have a database key, such as the first entry here:
|
|
7
|
+
#
|
|
8
|
+
# defaults: &defaults
|
|
9
|
+
# adapter: mysql
|
|
10
|
+
# username: root
|
|
11
|
+
# password:
|
|
12
|
+
# host: localhost
|
|
13
|
+
#
|
|
14
|
+
# development:
|
|
15
|
+
# database: blog_development
|
|
16
|
+
# <<: *defaults
|
|
17
|
+
next unless config['database']
|
|
18
|
+
# Only connect to local databases
|
|
19
|
+
local_database?(config) { create_database(config) }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
desc 'Create the database defined in config/database.yml for the current RAILS_ENV'
|
|
25
|
+
task :create => :environment do
|
|
26
|
+
create_database(ActiveRecord::Base.configurations[RAILS_ENV])
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def create_database(config)
|
|
30
|
+
begin
|
|
31
|
+
ActiveRecord::Base.establish_connection(config)
|
|
32
|
+
ActiveRecord::Base.connection
|
|
33
|
+
rescue
|
|
34
|
+
case config['adapter']
|
|
35
|
+
when 'mysql'
|
|
36
|
+
@charset = ENV['CHARSET'] || 'utf8'
|
|
37
|
+
@collation = ENV['COLLATION'] || 'utf8_general_ci'
|
|
38
|
+
begin
|
|
39
|
+
ActiveRecord::Base.establish_connection(config.merge('database' => nil))
|
|
40
|
+
ActiveRecord::Base.connection.create_database(config['database'], :charset => (config['charset'] || @charset), :collation => (config['collation'] || @collation))
|
|
41
|
+
ActiveRecord::Base.establish_connection(config)
|
|
42
|
+
rescue
|
|
43
|
+
$stderr.puts "Couldn't create database for #{config.inspect}, charset: #{config['charset'] || @charset}, collation: #{config['collation'] || @collation} (if you set the charset manually, make sure you have a matching collation)"
|
|
44
|
+
end
|
|
45
|
+
when 'postgresql'
|
|
46
|
+
@encoding = config[:encoding] || ENV['CHARSET'] || 'utf8'
|
|
47
|
+
begin
|
|
48
|
+
ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
|
|
49
|
+
ActiveRecord::Base.connection.create_database(config['database'], config.merge('encoding' => @encoding))
|
|
50
|
+
ActiveRecord::Base.establish_connection(config)
|
|
51
|
+
rescue
|
|
52
|
+
$stderr.puts $!, *($!.backtrace)
|
|
53
|
+
$stderr.puts "Couldn't create database for #{config.inspect}"
|
|
54
|
+
end
|
|
55
|
+
when 'sqlite'
|
|
56
|
+
`sqlite "#{config['database']}"`
|
|
57
|
+
when 'sqlite3'
|
|
58
|
+
`sqlite3 "#{config['database']}"`
|
|
59
|
+
end
|
|
60
|
+
else
|
|
61
|
+
$stderr.puts "#{config['database']} already exists"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
namespace :drop do
|
|
66
|
+
desc 'Drops all the local databases defined in config/database.yml'
|
|
67
|
+
task :all => :environment do
|
|
68
|
+
ActiveRecord::Base.configurations.each_value do |config|
|
|
69
|
+
# Skip entries that don't have a database key
|
|
70
|
+
next unless config['database']
|
|
71
|
+
# Only connect to local databases
|
|
72
|
+
local_database?(config) { drop_database(config) }
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
desc 'Drops the database for the current RAILS_ENV'
|
|
78
|
+
task :drop => :environment do
|
|
79
|
+
config = ActiveRecord::Base.configurations[RAILS_ENV || 'development']
|
|
80
|
+
begin
|
|
81
|
+
drop_database(config)
|
|
82
|
+
rescue Exception => e
|
|
83
|
+
puts "Couldn't drop #{config['database']} : #{e.inspect}"
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def local_database?(config, &block)
|
|
88
|
+
if %w( 127.0.0.1 localhost ).include?(config['host']) || config['host'].blank?
|
|
89
|
+
yield
|
|
90
|
+
else
|
|
91
|
+
puts "This task only modifies local databases. #{config['database']} is on a remote host."
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x. Turn off output with VERBOSE=false."
|
|
97
|
+
task :migrate => :environment do
|
|
98
|
+
ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
|
|
99
|
+
ActiveRecord::Migrator.migrate("db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
|
|
100
|
+
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
namespace :migrate do
|
|
104
|
+
desc 'Rollbacks the database one migration and re migrate up. If you want to rollback more than one step, define STEP=x'
|
|
105
|
+
task :redo => [ 'db:rollback', 'db:migrate' ]
|
|
106
|
+
|
|
107
|
+
desc 'Resets your database using your migrations for the current environment'
|
|
108
|
+
task :reset => ["db:drop", "db:create", "db:migrate"]
|
|
109
|
+
|
|
110
|
+
desc 'Runs the "up" for a given migration VERSION.'
|
|
111
|
+
task :up => :environment do
|
|
112
|
+
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
|
113
|
+
raise "VERSION is required" unless version
|
|
114
|
+
ActiveRecord::Migrator.run(:up, "db/migrate/", version)
|
|
115
|
+
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
desc 'Runs the "down" for a given migration VERSION.'
|
|
119
|
+
task :down => :environment do
|
|
120
|
+
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
|
121
|
+
raise "VERSION is required" unless version
|
|
122
|
+
ActiveRecord::Migrator.run(:down, "db/migrate/", version)
|
|
123
|
+
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
desc 'Rolls the schema back to the previous version. Specify the number of steps with STEP=n'
|
|
128
|
+
task :rollback => :environment do
|
|
129
|
+
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
|
130
|
+
ActiveRecord::Migrator.rollback('db/migrate/', step)
|
|
131
|
+
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
desc 'Drops and recreates the database from db/schema.rb for the current environment.'
|
|
135
|
+
task :reset => ['db:drop', 'db:create', 'db:schema:load']
|
|
136
|
+
|
|
137
|
+
desc "Retrieves the charset for the current environment's database"
|
|
138
|
+
task :charset => :environment do
|
|
139
|
+
config = ActiveRecord::Base.configurations[RAILS_ENV || 'development']
|
|
140
|
+
case config['adapter']
|
|
141
|
+
when 'mysql'
|
|
142
|
+
ActiveRecord::Base.establish_connection(config)
|
|
143
|
+
puts ActiveRecord::Base.connection.charset
|
|
144
|
+
else
|
|
145
|
+
puts 'sorry, your database adapter is not supported yet, feel free to submit a patch'
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
desc "Retrieves the collation for the current environment's database"
|
|
150
|
+
task :collation => :environment do
|
|
151
|
+
config = ActiveRecord::Base.configurations[RAILS_ENV || 'development']
|
|
152
|
+
case config['adapter']
|
|
153
|
+
when 'mysql'
|
|
154
|
+
ActiveRecord::Base.establish_connection(config)
|
|
155
|
+
puts ActiveRecord::Base.connection.collation
|
|
156
|
+
else
|
|
157
|
+
puts 'sorry, your database adapter is not supported yet, feel free to submit a patch'
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
desc "Retrieves the current schema version number"
|
|
162
|
+
task :version => :environment do
|
|
163
|
+
puts "Current version: #{ActiveRecord::Migrator.current_version}"
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
desc "Raises an error if there are pending migrations"
|
|
167
|
+
task :abort_if_pending_migrations => :environment do
|
|
168
|
+
if defined? ActiveRecord
|
|
169
|
+
pending_migrations = ActiveRecord::Migrator.new(:up, 'db/migrate').pending_migrations
|
|
170
|
+
|
|
171
|
+
if pending_migrations.any?
|
|
172
|
+
puts "You have #{pending_migrations.size} pending migrations:"
|
|
173
|
+
pending_migrations.each do |pending_migration|
|
|
174
|
+
puts ' %4d %s' % [pending_migration.version, pending_migration.name]
|
|
175
|
+
end
|
|
176
|
+
abort %{Run "rake db:migrate" to update your database then try again.}
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
namespace :fixtures do
|
|
182
|
+
desc "Load fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y"
|
|
183
|
+
task :load => :environment do
|
|
184
|
+
require 'active_record/fixtures'
|
|
185
|
+
ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
|
|
186
|
+
(ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'test', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
|
|
187
|
+
Fixtures.create_fixtures('test/fixtures', File.basename(fixture_file, '.*'))
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
desc "Search for a fixture given a LABEL or ID."
|
|
192
|
+
task :identify => :environment do
|
|
193
|
+
require "active_record/fixtures"
|
|
194
|
+
|
|
195
|
+
label, id = ENV["LABEL"], ENV["ID"]
|
|
196
|
+
raise "LABEL or ID required" if label.blank? && id.blank?
|
|
197
|
+
|
|
198
|
+
puts %Q(The fixture ID for "#{label}" is #{Fixtures.identify(label)}.) if label
|
|
199
|
+
|
|
200
|
+
Dir["#{RAILS_ROOT}/test/fixtures/**/*.yml"].each do |file|
|
|
201
|
+
if data = YAML::load(ERB.new(IO.read(file)).result)
|
|
202
|
+
data.keys.each do |key|
|
|
203
|
+
key_id = Fixtures.identify(key)
|
|
204
|
+
|
|
205
|
+
if key == label || key_id == id.to_i
|
|
206
|
+
puts "#{file}: #{key} (#{key_id})"
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
namespace :schema do
|
|
215
|
+
desc "Create a db/schema.rb file that can be portably used against any DB supported by AR"
|
|
216
|
+
task :dump => :environment do
|
|
217
|
+
require 'active_record/schema_dumper'
|
|
218
|
+
File.open(ENV['SCHEMA'] || "#{RAILS_ROOT}/db/schema.rb", "w") do |file|
|
|
219
|
+
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
desc "Load a schema.rb file into the database"
|
|
224
|
+
task :load => :environment do
|
|
225
|
+
file = ENV['SCHEMA'] || "#{RAILS_ROOT}/db/schema.rb"
|
|
226
|
+
load(file)
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
namespace :structure do
|
|
231
|
+
desc "Dump the database structure to a SQL file"
|
|
232
|
+
task :dump => :environment do
|
|
233
|
+
abcs = ActiveRecord::Base.configurations
|
|
234
|
+
case abcs[RAILS_ENV]["adapter"]
|
|
235
|
+
when "mysql", "oci", "oracle"
|
|
236
|
+
ActiveRecord::Base.establish_connection(abcs[RAILS_ENV])
|
|
237
|
+
File.open("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql", "w+") { |f| f << ActiveRecord::Base.connection.structure_dump }
|
|
238
|
+
when "postgresql"
|
|
239
|
+
ENV['PGHOST'] = abcs[RAILS_ENV]["host"] if abcs[RAILS_ENV]["host"]
|
|
240
|
+
ENV['PGPORT'] = abcs[RAILS_ENV]["port"].to_s if abcs[RAILS_ENV]["port"]
|
|
241
|
+
ENV['PGPASSWORD'] = abcs[RAILS_ENV]["password"].to_s if abcs[RAILS_ENV]["password"]
|
|
242
|
+
search_path = abcs[RAILS_ENV]["schema_search_path"]
|
|
243
|
+
search_path = "--schema=#{search_path}" if search_path
|
|
244
|
+
`pg_dump -i -U "#{abcs[RAILS_ENV]["username"]}" -s -x -O -f db/#{RAILS_ENV}_structure.sql #{search_path} #{abcs[RAILS_ENV]["database"]}`
|
|
245
|
+
raise "Error dumping database" if $?.exitstatus == 1
|
|
246
|
+
when "sqlite", "sqlite3"
|
|
247
|
+
dbfile = abcs[RAILS_ENV]["database"] || abcs[RAILS_ENV]["dbfile"]
|
|
248
|
+
`#{abcs[RAILS_ENV]["adapter"]} #{dbfile} .schema > db/#{RAILS_ENV}_structure.sql`
|
|
249
|
+
when "sqlserver"
|
|
250
|
+
`scptxfr /s #{abcs[RAILS_ENV]["host"]} /d #{abcs[RAILS_ENV]["database"]} /I /f db\\#{RAILS_ENV}_structure.sql /q /A /r`
|
|
251
|
+
`scptxfr /s #{abcs[RAILS_ENV]["host"]} /d #{abcs[RAILS_ENV]["database"]} /I /F db\ /q /A /r`
|
|
252
|
+
when "firebird"
|
|
253
|
+
set_firebird_env(abcs[RAILS_ENV])
|
|
254
|
+
db_string = firebird_db_string(abcs[RAILS_ENV])
|
|
255
|
+
sh "isql -a #{db_string} > #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql"
|
|
256
|
+
else
|
|
257
|
+
raise "Task not supported by '#{abcs["test"]["adapter"]}'"
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
if ActiveRecord::Base.connection.supports_migrations?
|
|
261
|
+
File.open("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql", "a") { |f| f << ActiveRecord::Base.connection.dump_schema_information }
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
namespace :test do
|
|
267
|
+
desc "Recreate the test database from the current schema.rb"
|
|
268
|
+
task :load => 'db:test:purge' do
|
|
269
|
+
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test'])
|
|
270
|
+
ActiveRecord::Schema.verbose = false
|
|
271
|
+
Rake::Task["db:schema:load"].invoke
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
desc "Recreate the test database from the current environment's database schema"
|
|
275
|
+
task :clone => %w(db:schema:dump db:test:load)
|
|
276
|
+
|
|
277
|
+
desc "Recreate the test databases from the development structure"
|
|
278
|
+
task :clone_structure => [ "db:structure:dump", "db:test:purge" ] do
|
|
279
|
+
abcs = ActiveRecord::Base.configurations
|
|
280
|
+
case abcs["test"]["adapter"]
|
|
281
|
+
when "mysql"
|
|
282
|
+
ActiveRecord::Base.establish_connection(:test)
|
|
283
|
+
ActiveRecord::Base.connection.execute('SET foreign_key_checks = 0')
|
|
284
|
+
IO.readlines("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql").join.split("\n\n").each do |table|
|
|
285
|
+
ActiveRecord::Base.connection.execute(table)
|
|
286
|
+
end
|
|
287
|
+
when "postgresql"
|
|
288
|
+
ENV['PGHOST'] = abcs["test"]["host"] if abcs["test"]["host"]
|
|
289
|
+
ENV['PGPORT'] = abcs["test"]["port"].to_s if abcs["test"]["port"]
|
|
290
|
+
ENV['PGPASSWORD'] = abcs["test"]["password"].to_s if abcs["test"]["password"]
|
|
291
|
+
`psql -U "#{abcs["test"]["username"]}" -f #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql #{abcs["test"]["database"]}`
|
|
292
|
+
when "sqlite", "sqlite3"
|
|
293
|
+
dbfile = abcs["test"]["database"] || abcs["test"]["dbfile"]
|
|
294
|
+
`#{abcs["test"]["adapter"]} #{dbfile} < #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql`
|
|
295
|
+
when "sqlserver"
|
|
296
|
+
`osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{RAILS_ENV}_structure.sql`
|
|
297
|
+
when "oci", "oracle"
|
|
298
|
+
ActiveRecord::Base.establish_connection(:test)
|
|
299
|
+
IO.readlines("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql").join.split(";\n\n").each do |ddl|
|
|
300
|
+
ActiveRecord::Base.connection.execute(ddl)
|
|
301
|
+
end
|
|
302
|
+
when "firebird"
|
|
303
|
+
set_firebird_env(abcs["test"])
|
|
304
|
+
db_string = firebird_db_string(abcs["test"])
|
|
305
|
+
sh "isql -i #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql #{db_string}"
|
|
306
|
+
else
|
|
307
|
+
raise "Task not supported by '#{abcs["test"]["adapter"]}'"
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
desc "Empty the test database"
|
|
312
|
+
task :purge => :environment do
|
|
313
|
+
abcs = ActiveRecord::Base.configurations
|
|
314
|
+
case abcs["test"]["adapter"]
|
|
315
|
+
when "mysql"
|
|
316
|
+
ActiveRecord::Base.establish_connection(:test)
|
|
317
|
+
ActiveRecord::Base.connection.recreate_database(abcs["test"]["database"])
|
|
318
|
+
when "postgresql"
|
|
319
|
+
ActiveRecord::Base.clear_active_connections!
|
|
320
|
+
drop_database(abcs['test'])
|
|
321
|
+
create_database(abcs['test'])
|
|
322
|
+
when "sqlite","sqlite3"
|
|
323
|
+
dbfile = abcs["test"]["database"] || abcs["test"]["dbfile"]
|
|
324
|
+
File.delete(dbfile) if File.exist?(dbfile)
|
|
325
|
+
when "sqlserver"
|
|
326
|
+
dropfkscript = "#{abcs["test"]["host"]}.#{abcs["test"]["database"]}.DP1".gsub(/\\/,'-')
|
|
327
|
+
`osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{dropfkscript}`
|
|
328
|
+
`osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{RAILS_ENV}_structure.sql`
|
|
329
|
+
when "oci", "oracle"
|
|
330
|
+
ActiveRecord::Base.establish_connection(:test)
|
|
331
|
+
ActiveRecord::Base.connection.structure_drop.split(";\n\n").each do |ddl|
|
|
332
|
+
ActiveRecord::Base.connection.execute(ddl)
|
|
333
|
+
end
|
|
334
|
+
when "firebird"
|
|
335
|
+
ActiveRecord::Base.establish_connection(:test)
|
|
336
|
+
ActiveRecord::Base.connection.recreate_database!
|
|
337
|
+
else
|
|
338
|
+
raise "Task not supported by '#{abcs["test"]["adapter"]}'"
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
desc 'Check for pending migrations and load the test schema'
|
|
343
|
+
task :prepare => 'db:abort_if_pending_migrations' do
|
|
344
|
+
if defined?(ActiveRecord) && !ActiveRecord::Base.configurations.blank?
|
|
345
|
+
Rake::Task[{ :sql => "db:test:clone_structure", :ruby => "db:test:load" }[ActiveRecord::Base.schema_format]].invoke
|
|
346
|
+
end
|
|
347
|
+
end
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
namespace :sessions do
|
|
351
|
+
desc "Creates a sessions migration for use with CGI::Session::ActiveRecordStore"
|
|
352
|
+
task :create => :environment do
|
|
353
|
+
raise "Task unavailable to this database (no migration support)" unless ActiveRecord::Base.connection.supports_migrations?
|
|
354
|
+
require 'rails_generator'
|
|
355
|
+
require 'rails_generator/scripts/generate'
|
|
356
|
+
Rails::Generator::Scripts::Generate.new.run(["session_migration", ENV["MIGRATION"] || "CreateSessions"])
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
desc "Clear the sessions table"
|
|
360
|
+
task :clear => :environment do
|
|
361
|
+
ActiveRecord::Base.connection.execute "DELETE FROM #{session_table_name}"
|
|
362
|
+
end
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
def drop_database(config)
|
|
367
|
+
case config['adapter']
|
|
368
|
+
when 'mysql'
|
|
369
|
+
ActiveRecord::Base.connection.drop_database config['database']
|
|
370
|
+
when /^sqlite/
|
|
371
|
+
FileUtils.rm(File.join(RAILS_ROOT, config['database']))
|
|
372
|
+
when 'postgresql'
|
|
373
|
+
ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
|
|
374
|
+
ActiveRecord::Base.connection.drop_database config['database']
|
|
375
|
+
end
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
def session_table_name
|
|
379
|
+
ActiveRecord::Base.pluralize_table_names ? :sessions : :session
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def set_firebird_env(config)
|
|
383
|
+
ENV["ISC_USER"] = config["username"].to_s if config["username"]
|
|
384
|
+
ENV["ISC_PASSWORD"] = config["password"].to_s if config["password"]
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
def firebird_db_string(config)
|
|
388
|
+
FireRuby::Database.db_string_for(config.symbolize_keys)
|
|
389
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
namespace :doc do
|
|
2
|
+
desc "Generate documentation for the application. Set custom template with TEMPLATE=/path/to/rdoc/template.rb or title with TITLE=\"Custom Title\""
|
|
3
|
+
Rake::RDocTask.new("app") { |rdoc|
|
|
4
|
+
rdoc.rdoc_dir = 'doc/app'
|
|
5
|
+
rdoc.template = ENV['template'] if ENV['template']
|
|
6
|
+
rdoc.title = ENV['title'] || "Enhanced Rails Application Documentation"
|
|
7
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
|
8
|
+
rdoc.options << '--charset' << 'utf-8'
|
|
9
|
+
rdoc.rdoc_files.include('doc/README_FOR_APP')
|
|
10
|
+
rdoc.rdoc_files.include('app/**/*.rb')
|
|
11
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
desc "Generate documentation for the Enhanced Rails framework"
|
|
15
|
+
Rake::RDocTask.new("rails") { |rdoc|
|
|
16
|
+
rdoc.rdoc_dir = 'doc/api'
|
|
17
|
+
rdoc.template = "#{ENV['template']}.rb" if ENV['template']
|
|
18
|
+
rdoc.title = "Enhanced Rails Framework Documentation"
|
|
19
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
|
20
|
+
rdoc.rdoc_files.include('README')
|
|
21
|
+
rdoc.rdoc_files.include('vendor/erails/erailties/CHANGELOG')
|
|
22
|
+
rdoc.rdoc_files.include('vendor/erails/erailties/MIT-LICENSE')
|
|
23
|
+
rdoc.rdoc_files.include('vendor/erails/erailties/README')
|
|
24
|
+
rdoc.rdoc_files.include('vendor/erails/erailties/lib/{*.rb,commands/*.rb,rails_generator/*.rb}')
|
|
25
|
+
rdoc.rdoc_files.include('vendor/erails/activerecord/README')
|
|
26
|
+
rdoc.rdoc_files.include('vendor/erails/activerecord/CHANGELOG')
|
|
27
|
+
rdoc.rdoc_files.include('vendor/erails/activerecord/lib/active_record/**/*.rb')
|
|
28
|
+
rdoc.rdoc_files.exclude('vendor/erails/activerecord/lib/active_record/vendor/*')
|
|
29
|
+
rdoc.rdoc_files.include('vendor/erails/activeresource/README')
|
|
30
|
+
rdoc.rdoc_files.include('vendor/erails/activeresource/CHANGELOG')
|
|
31
|
+
rdoc.rdoc_files.include('vendor/erails/activeresource/lib/active_resource.rb')
|
|
32
|
+
rdoc.rdoc_files.include('vendor/erails/activeresource/lib/active_resource/*')
|
|
33
|
+
rdoc.rdoc_files.include('vendor/erails/eactionpack/README')
|
|
34
|
+
rdoc.rdoc_files.include('vendor/erails/eactionpack/CHANGELOG')
|
|
35
|
+
rdoc.rdoc_files.include('vendor/erails/eactionpack/lib/action_controller/**/*.rb')
|
|
36
|
+
rdoc.rdoc_files.include('vendor/erails/eactionpack/lib/action_view/**/*.rb')
|
|
37
|
+
rdoc.rdoc_files.include('vendor/erails/actionmailer/README')
|
|
38
|
+
rdoc.rdoc_files.include('vendor/erails/actionmailer/CHANGELOG')
|
|
39
|
+
rdoc.rdoc_files.include('vendor/erails/actionmailer/lib/action_mailer/base.rb')
|
|
40
|
+
rdoc.rdoc_files.include('vendor/erails/activesupport/README')
|
|
41
|
+
rdoc.rdoc_files.include('vendor/erails/activesupport/CHANGELOG')
|
|
42
|
+
rdoc.rdoc_files.include('vendor/erails/activesupport/lib/active_support/**/*.rb')
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
|
|
46
|
+
|
|
47
|
+
desc "Generate documentation for all installed plugins"
|
|
48
|
+
task :plugins => plugins.collect { |plugin| "doc:plugins:#{plugin}" }
|
|
49
|
+
|
|
50
|
+
desc "Remove plugin documentation"
|
|
51
|
+
task :clobber_plugins do
|
|
52
|
+
rm_rf 'doc/plugins' rescue nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
namespace :plugins do
|
|
56
|
+
# Define doc tasks for each plugin
|
|
57
|
+
plugins.each do |plugin|
|
|
58
|
+
task(plugin => :environment) do
|
|
59
|
+
plugin_base = "vendor/plugins/#{plugin}"
|
|
60
|
+
options = []
|
|
61
|
+
files = Rake::FileList.new
|
|
62
|
+
options << "-o doc/plugins/#{plugin}"
|
|
63
|
+
options << "--title '#{plugin.titlecase} Plugin Documentation'"
|
|
64
|
+
options << '--line-numbers' << '--inline-source'
|
|
65
|
+
options << '-T html'
|
|
66
|
+
|
|
67
|
+
files.include("#{plugin_base}/lib/**/*.rb")
|
|
68
|
+
if File.exist?("#{plugin_base}/README")
|
|
69
|
+
files.include("#{plugin_base}/README")
|
|
70
|
+
options << "--main '#{plugin_base}/README'"
|
|
71
|
+
end
|
|
72
|
+
files.include("#{plugin_base}/CHANGELOG") if File.exist?("#{plugin_base}/CHANGELOG")
|
|
73
|
+
|
|
74
|
+
options << files.to_s
|
|
75
|
+
|
|
76
|
+
sh %(rdoc #{options * ' '})
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
namespace :rails do
|
|
2
|
+
namespace :freeze do
|
|
3
|
+
desc "Lock this application to the current gems (by unpacking them into vendor/erails)"
|
|
4
|
+
task :gems do
|
|
5
|
+
deps = %w(eactionpack activerecord actionmailer activesupport activeresource)
|
|
6
|
+
require 'rubygems'
|
|
7
|
+
require 'rubygems/gem_runner'
|
|
8
|
+
Gem.manage_gems
|
|
9
|
+
|
|
10
|
+
rails = (version = ENV['VERSION']) ?
|
|
11
|
+
Gem.cache.find_name('erails', "= #{version}").first :
|
|
12
|
+
Gem.cache.find_name('erails').sort_by { |g| g.version }.last
|
|
13
|
+
|
|
14
|
+
version ||= rails.version
|
|
15
|
+
|
|
16
|
+
unless rails
|
|
17
|
+
puts "No enhanced rails gem #{version} is installed. Do 'gem list erails' to see what you have available."
|
|
18
|
+
exit
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
puts "Freezing to the gems for Enhanced Rails #{rails.version}"
|
|
22
|
+
rm_rf "vendor/erails"
|
|
23
|
+
mkdir_p "vendor/erails"
|
|
24
|
+
|
|
25
|
+
begin
|
|
26
|
+
chdir("vendor/erails") do
|
|
27
|
+
rails.dependencies.select { |g| deps.include? g.name }.each do |g|
|
|
28
|
+
Gem::GemRunner.new.run(["unpack", g.name, "--version", g.version_requirements.to_s])
|
|
29
|
+
mv(Dir.glob("#{g.name}*").first, g.name)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
Gem::GemRunner.new.run(["unpack", "erails", "--version", "=#{version}"])
|
|
33
|
+
FileUtils.mv(Dir.glob("erails*").first, "erailties")
|
|
34
|
+
end
|
|
35
|
+
rescue Exception
|
|
36
|
+
rm_rf "vendor/erails"
|
|
37
|
+
raise
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
desc 'Lock to latest Edge Enhanced Rails, for a specific release use RELEASE=1.2.0'
|
|
42
|
+
task :edge do
|
|
43
|
+
require 'open-uri'
|
|
44
|
+
version = ENV["RELEASE"] || "edge"
|
|
45
|
+
target = "erails_#{version}.zip"
|
|
46
|
+
url = "http://erails.lipsiahosting.com/archives/#{target}"
|
|
47
|
+
|
|
48
|
+
chdir 'vendor' do
|
|
49
|
+
puts "Downloading Enhanced Rails from #{url}"
|
|
50
|
+
File.open('erails.zip', 'wb') do |dst|
|
|
51
|
+
open url do |src|
|
|
52
|
+
while chunk = src.read(4096)
|
|
53
|
+
dst << chunk
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
puts 'Unpacking Enhanced Rails'
|
|
59
|
+
rm_rf 'erails'
|
|
60
|
+
`unzip erails.zip`
|
|
61
|
+
%w(erails.zip erails/Rakefile erails/cleanlogs.sh erails/pushgems.rb erails/release.rb).each do |goner|
|
|
62
|
+
rm_f goner
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
puts 'Updating current scripts, and configuration settings'
|
|
67
|
+
Rake::Task['rails:update'].invoke
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
desc "Unlock this application from freeze of gems or edge and return to a fluid use of system gems"
|
|
72
|
+
task :unfreeze do
|
|
73
|
+
rm_rf "vendor/erails"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
desc "Update both configs, scripts and from Enhanced Rails"
|
|
77
|
+
task :update => [ "update:scripts", "update:configs" ]
|
|
78
|
+
|
|
79
|
+
namespace :update do
|
|
80
|
+
desc "Add new scripts to the application script/ directory"
|
|
81
|
+
task :scripts do
|
|
82
|
+
local_base = "script"
|
|
83
|
+
edge_base = "#{File.dirname(__FILE__)}/../../bin"
|
|
84
|
+
|
|
85
|
+
local = Dir["#{local_base}/**/*"].reject { |path| File.directory?(path) }
|
|
86
|
+
edge = Dir["#{edge_base}/**/*"].reject { |path| File.directory?(path) }
|
|
87
|
+
|
|
88
|
+
edge.each do |script|
|
|
89
|
+
base_name = script[(edge_base.length+1)..-1]
|
|
90
|
+
next if base_name == "erails"
|
|
91
|
+
next if local.detect { |path| base_name == path[(local_base.length+1)..-1] }
|
|
92
|
+
if !File.directory?("#{local_base}/#{File.dirname(base_name)}")
|
|
93
|
+
mkdir_p "#{local_base}/#{File.dirname(base_name)}"
|
|
94
|
+
end
|
|
95
|
+
install script, "#{local_base}/#{base_name}", :mode => 0755
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
desc "Update config/boot.rb from your current enhanced rails install"
|
|
100
|
+
task :configs do
|
|
101
|
+
require 'railties_path'
|
|
102
|
+
FileUtils.cp(RAILTIES_PATH + '/environments/boot.rb', RAILS_ROOT + '/config/boot.rb')
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
data/lib/tasks/gems.rake
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
desc "List the gems that this rails application depends on"
|
|
2
|
+
task :gems => 'gems:base' do
|
|
3
|
+
Rails.configuration.gems.each do |gem|
|
|
4
|
+
code = gem.loaded? ? (gem.frozen? ? "F" : "I") : " "
|
|
5
|
+
puts "[#{code}] #{gem.name} #{gem.requirement.to_s}"
|
|
6
|
+
end
|
|
7
|
+
puts
|
|
8
|
+
puts "I = Installed"
|
|
9
|
+
puts "F = Frozen"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
namespace :gems do
|
|
13
|
+
task :base do
|
|
14
|
+
$rails_gem_installer = true
|
|
15
|
+
Rake::Task[:environment].invoke
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
desc "Build any native extensions for unpacked gems"
|
|
19
|
+
task :build do
|
|
20
|
+
$rails_gem_installer = true
|
|
21
|
+
require 'rails/gem_builder'
|
|
22
|
+
Dir[File.join(RAILS_ROOT, 'vendor', 'gems', '*')].each do |gem_dir|
|
|
23
|
+
spec_file = File.join(gem_dir, '.specification')
|
|
24
|
+
next unless File.exists?(spec_file)
|
|
25
|
+
specification = YAML::load_file(spec_file)
|
|
26
|
+
next unless ENV['GEM'].blank? || ENV['GEM'] == specification.name
|
|
27
|
+
Rails::GemBuilder.new(specification, gem_dir).build_extensions
|
|
28
|
+
puts "Built gem: '#{gem_dir}'"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
desc "Installs all required gems for this application."
|
|
33
|
+
task :install => :base do
|
|
34
|
+
require 'rubygems'
|
|
35
|
+
require 'rubygems/gem_runner'
|
|
36
|
+
Rails.configuration.gems.each { |gem| gem.install unless gem.loaded? }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
desc "Unpacks the specified gem into vendor/gems."
|
|
40
|
+
task :unpack => :base do
|
|
41
|
+
require 'rubygems'
|
|
42
|
+
require 'rubygems/gem_runner'
|
|
43
|
+
Rails.configuration.gems.each do |gem|
|
|
44
|
+
next unless !gem.frozen? && (ENV['GEM'].blank? || ENV['GEM'] == gem.name)
|
|
45
|
+
gem.unpack_to(File.join(RAILS_ROOT, 'vendor', 'gems')) if gem.loaded?
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
namespace :unpack do
|
|
50
|
+
desc "Unpacks the specified gems and its dependencies into vendor/gems"
|
|
51
|
+
task :dependencies => :unpack do
|
|
52
|
+
require 'rubygems'
|
|
53
|
+
require 'rubygems/gem_runner'
|
|
54
|
+
Rails.configuration.gems.each do |gem|
|
|
55
|
+
next unless ENV['GEM'].blank? || ENV['GEM'] == gem.name
|
|
56
|
+
gem.dependencies.each do |dependency|
|
|
57
|
+
dependency.add_load_paths # double check that we have not already unpacked
|
|
58
|
+
next if dependency.frozen?
|
|
59
|
+
dependency.unpack_to(File.join(RAILS_ROOT, 'vendor', 'gems'))
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|