rails 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rails might be problematic. Click here for more details.
- data/CHANGELOG +1020 -10
- data/MIT-LICENSE +1 -1
- data/README +110 -60
- data/Rakefile +74 -139
- data/bin/about +1 -1
- data/bin/console +1 -1
- data/bin/destroy +1 -1
- data/bin/generate +1 -1
- data/bin/performance/request +3 -0
- data/bin/plugin +1 -1
- data/bin/process/{spinner → inspector} +1 -1
- data/bin/rails +10 -12
- data/bin/runner +1 -1
- data/bin/server +1 -1
- data/{lib/rails_info.rb → builtin/rails_info/rails/info.rb} +33 -14
- 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 +1 -1
- 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/initializers/inflections.rb +10 -0
- data/configs/initializers/mime_types.rb +5 -0
- data/configs/lighttpd.conf +29 -15
- data/configs/routes.rb +27 -11
- data/doc/README_FOR_APP +1 -1
- data/environments/boot.rb +103 -14
- data/environments/development.rb +5 -6
- data/environments/environment.rb +36 -30
- data/environments/production.rb +2 -3
- data/environments/test.rb +5 -2
- data/fresh_rakefile +2 -2
- data/helpers/application.rb +8 -2
- data/helpers/test_helper.rb +10 -0
- data/html/404.html +27 -5
- data/html/422.html +30 -0
- data/html/500.html +27 -5
- data/html/index.html +6 -6
- data/html/javascripts/application.js +2 -0
- data/html/javascripts/controls.js +532 -319
- data/html/javascripts/dragdrop.js +521 -133
- data/html/javascripts/effects.js +708 -442
- data/html/javascripts/prototype.js +3393 -953
- data/html/robots.txt +5 -1
- data/lib/code_statistics.rb +2 -2
- data/lib/commands/console.rb +18 -9
- data/lib/commands/performance/profiler.rb +25 -9
- data/lib/commands/performance/request.rb +6 -0
- data/lib/commands/plugin.rb +196 -96
- data/lib/commands/process/inspector.rb +68 -0
- data/lib/commands/process/reaper.rb +90 -71
- data/lib/commands/process/spawner.rb +188 -21
- data/lib/commands/process/spinner.rb +3 -3
- data/lib/commands/runner.rb +28 -7
- data/lib/commands/server.rb +20 -9
- data/lib/commands/servers/base.rb +31 -0
- data/lib/commands/servers/lighttpd.rb +60 -26
- data/lib/commands/servers/mongrel.rb +69 -0
- data/lib/commands/servers/webrick.rb +18 -11
- data/lib/console_app.rb +30 -0
- data/lib/console_sandbox.rb +2 -2
- data/lib/console_with_helpers.rb +26 -0
- data/lib/dispatcher.rb +3 -78
- data/lib/fcgi_handler.rb +98 -64
- data/lib/initializer.rb +323 -194
- data/lib/rails/plugin/loader.rb +150 -0
- data/lib/rails/plugin/locator.rb +78 -0
- data/lib/rails/plugin.rb +84 -0
- data/lib/{rails_version.rb → rails/version.rb} +1 -1
- data/lib/rails_generator/base.rb +85 -25
- data/lib/rails_generator/commands.rb +122 -40
- data/lib/rails_generator/generated_attribute.rb +42 -0
- data/lib/rails_generator/generators/applications/app/USAGE +0 -7
- data/lib/rails_generator/generators/applications/app/app_generator.rb +67 -28
- data/lib/rails_generator/generators/components/controller/USAGE +11 -12
- data/lib/rails_generator/generators/components/controller/controller_generator.rb +2 -3
- data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +1 -11
- data/lib/rails_generator/generators/components/controller/templates/{view.rhtml → view.html.erb} +0 -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 +9 -11
- data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +10 -8
- data/lib/rails_generator/generators/components/mailer/templates/fixture.erb +3 -0
- data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +0 -3
- data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +9 -25
- data/lib/rails_generator/generators/components/mailer/templates/view.erb +3 -0
- data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +0 -3
- data/lib/rails_generator/generators/components/migration/USAGE +23 -8
- data/lib/rails_generator/generators/components/migration/migration_generator.rb +15 -2
- data/lib/rails_generator/generators/components/migration/templates/migration.rb +7 -3
- data/lib/rails_generator/generators/components/model/USAGE +21 -11
- data/lib/rails_generator/generators/components/model/model_generator.rb +28 -1
- data/lib/rails_generator/generators/components/model/templates/fixtures.yml +18 -4
- data/lib/rails_generator/generators/components/model/templates/migration.rb +16 -0
- data/lib/rails_generator/generators/components/model/templates/unit_test.rb +2 -4
- 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 +10 -18
- data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +6 -0
- data/lib/rails_generator/generators/components/plugin/templates/MIT-LICENSE +20 -0
- data/lib/rails_generator/generators/components/plugin/templates/README +10 -1
- data/lib/rails_generator/generators/components/plugin/templates/Rakefile +1 -1
- data/lib/rails_generator/generators/components/plugin/templates/USAGE +1 -1
- data/lib/rails_generator/generators/components/plugin/templates/init.rb +1 -1
- data/lib/rails_generator/generators/components/plugin/templates/install.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +1 -1
- data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +1 -1
- data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +1 -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 +24 -31
- data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +45 -137
- data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +65 -34
- data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +23 -76
- data/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb +17 -0
- data/lib/rails_generator/generators/components/scaffold/templates/style.css +5 -5
- data/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +19 -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 +18 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb +10 -0
- data/lib/rails_generator/generators/components/session_migration/USAGE +6 -11
- data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +7 -1
- data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +8 -7
- data/lib/rails_generator/lookup.rb +46 -12
- data/lib/rails_generator/options.rb +11 -8
- data/lib/rails_generator/scripts/destroy.rb +23 -0
- data/lib/rails_generator/scripts.rb +7 -4
- data/lib/rails_generator/secret_key_generator.rb +160 -0
- data/lib/rails_generator/spec.rb +1 -1
- data/lib/rails_generator.rb +1 -1
- data/lib/railties_path.rb +1 -1
- data/lib/ruby_version_check.rb +17 -0
- data/lib/source_annotation_extractor.rb +62 -0
- data/lib/tasks/annotations.rake +23 -0
- data/lib/tasks/databases.rake +328 -133
- data/lib/tasks/documentation.rake +72 -68
- data/lib/tasks/framework.rake +99 -58
- data/lib/tasks/log.rake +9 -0
- data/lib/tasks/misc.rake +2 -17
- data/lib/tasks/rails.rb +2 -2
- data/lib/tasks/routes.rake +17 -0
- data/lib/tasks/statistics.rake +10 -8
- data/lib/tasks/testing.rake +99 -31
- data/lib/tasks/tmp.rake +37 -0
- data/lib/test_help.rb +8 -5
- data/lib/webrick_server.rb +11 -16
- metadata +312 -272
- data/bin/breakpointer +0 -3
- data/builtin/controllers/rails_info_controller.rb +0 -11
- data/configs/database.yml +0 -85
- data/lib/binding_of_caller.rb +0 -85
- data/lib/breakpoint.rb +0 -523
- data/lib/breakpoint_client.rb +0 -196
- data/lib/commands/breakpointer.rb +0 -1
- data/lib/rails_generator/generators/components/scaffold/templates/form.rhtml +0 -3
- data/lib/rails_generator/generators/components/scaffold/templates/form_scaffolding.rhtml +0 -1
- data/lib/rails_generator/generators/components/scaffold/templates/layout.rhtml +0 -13
- data/lib/rails_generator/generators/components/scaffold/templates/view_edit.rhtml +0 -9
- data/lib/rails_generator/generators/components/scaffold/templates/view_list.rhtml +0 -27
- data/lib/rails_generator/generators/components/scaffold/templates/view_new.rhtml +0 -8
- data/lib/rails_generator/generators/components/scaffold/templates/view_show.rhtml +0 -8
- data/lib/rails_generator/generators/components/web_service/USAGE +0 -28
- data/lib/rails_generator/generators/components/web_service/templates/api_definition.rb +0 -5
- data/lib/rails_generator/generators/components/web_service/templates/controller.rb +0 -8
- data/lib/rails_generator/generators/components/web_service/templates/functional_test.rb +0 -19
- data/lib/rails_generator/generators/components/web_service/web_service_generator.rb +0 -29
- data/lib/tasks/javascripts.rake +0 -6
data/lib/tasks/framework.rake
CHANGED
@@ -1,71 +1,112 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
else
|
9
|
-
Gem.cache.search('rails').sort_by { |g| g.version }.last
|
10
|
-
end
|
11
|
-
version ||= rails.version
|
12
|
-
|
13
|
-
unless rails
|
14
|
-
puts "No rails gem #{version} is installed. Do 'gem list rails' to see what you have available."
|
15
|
-
exit
|
16
|
-
end
|
1
|
+
namespace :rails do
|
2
|
+
namespace :freeze do
|
3
|
+
desc "Lock this application to the current gems (by unpacking them into vendor/rails)"
|
4
|
+
task :gems do
|
5
|
+
deps = %w(actionpack activerecord actionmailer activesupport activeresource)
|
6
|
+
require 'rubygems'
|
7
|
+
Gem.manage_gems
|
17
8
|
|
18
|
-
|
19
|
-
|
20
|
-
|
9
|
+
rails = (version = ENV['VERSION']) ?
|
10
|
+
Gem.cache.find_name('rails', "= #{version}").first :
|
11
|
+
Gem.cache.find_name('rails').sort_by { |g| g.version }.last
|
21
12
|
|
22
|
-
|
23
|
-
system "cd vendor/rails; gem unpack -v '#{g.version_requirements}' #{g.name}; mv #{g.name}* #{g.name}"
|
24
|
-
end
|
25
|
-
system "cd vendor/rails; gem unpack -v '=#{version}' rails"
|
26
|
-
|
27
|
-
FileUtils.mv(Dir.glob("vendor/rails/rails*").first, "vendor/rails/railties")
|
28
|
-
end
|
13
|
+
version ||= rails.version
|
29
14
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
15
|
+
unless rails
|
16
|
+
puts "No rails gem #{version} is installed. Do 'gem list rails' to see what you have available."
|
17
|
+
exit
|
18
|
+
end
|
19
|
+
|
20
|
+
puts "Freezing to the gems for Rails #{rails.version}"
|
21
|
+
rm_rf "vendor/rails"
|
22
|
+
mkdir_p "vendor/rails"
|
23
|
+
|
24
|
+
chdir("vendor/rails") do
|
25
|
+
rails.dependencies.select { |g| deps.include? g.name }.each do |g|
|
26
|
+
Gem::GemRunner.new.run(["unpack", "-v", "#{g.version_requirements}", "#{g.name}"])
|
27
|
+
mv(Dir.glob("#{g.name}*").first, g.name)
|
28
|
+
end
|
29
|
+
|
30
|
+
Gem::GemRunner.new.run(["unpack", "-v", "=#{version}", "rails"])
|
31
|
+
FileUtils.mv(Dir.glob("rails*").first, "railties")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Lock to latest Edge Rails or a specific revision with REVISION=X (ex: REVISION=4021) or a tag with TAG=Y (ex: TAG=rel_1-1-0)"
|
36
|
+
task :edge do
|
37
|
+
$verbose = false
|
38
|
+
`svn --version` rescue nil
|
39
|
+
unless !$?.nil? && $?.success?
|
40
|
+
$stderr.puts "ERROR: Must have subversion (svn) available in the PATH to lock this application to Edge Rails"
|
41
|
+
exit 1
|
42
|
+
end
|
43
|
+
|
44
|
+
rm_rf "vendor/rails"
|
45
|
+
mkdir_p "vendor/rails"
|
46
|
+
|
47
|
+
svn_root = "http://dev.rubyonrails.org/svn/rails/"
|
48
|
+
|
49
|
+
if ENV['TAG']
|
50
|
+
rails_svn = "#{svn_root}/tags/#{ENV['TAG']}"
|
51
|
+
touch "vendor/rails/TAG_#{ENV['TAG']}"
|
52
|
+
else
|
53
|
+
rails_svn = "#{svn_root}/trunk"
|
38
54
|
|
39
|
-
|
40
|
-
|
55
|
+
if ENV['REVISION'].nil?
|
56
|
+
ENV['REVISION'] = /^r(\d+)/.match(%x{svn -qr HEAD log #{svn_root}})[1]
|
57
|
+
puts "REVISION not set. Using HEAD, which is revision #{ENV['REVISION']}."
|
58
|
+
end
|
41
59
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
60
|
+
touch "vendor/rails/REVISION_#{ENV['REVISION']}"
|
61
|
+
end
|
62
|
+
|
63
|
+
for framework in %w(railties actionpack activerecord actionmailer activesupport activeresource)
|
64
|
+
system "svn export #{rails_svn}/#{framework} vendor/rails/#{framework}" + (ENV['REVISION'] ? " -r #{ENV['REVISION']}" : "")
|
65
|
+
end
|
66
|
+
end
|
46
67
|
end
|
47
|
-
end
|
48
68
|
|
49
|
-
desc "Unlock this application from freeze of gems or edge and return to a fluid use of system gems"
|
50
|
-
task :
|
51
|
-
|
52
|
-
end
|
69
|
+
desc "Unlock this application from freeze of gems or edge and return to a fluid use of system gems"
|
70
|
+
task :unfreeze do
|
71
|
+
rm_rf "vendor/rails"
|
72
|
+
end
|
53
73
|
|
54
|
-
desc "
|
55
|
-
task :
|
56
|
-
local_base = "script"
|
57
|
-
edge_base = "#{File.dirname(__FILE__)}/../../bin"
|
74
|
+
desc "Update both configs, scripts and public/javascripts from Rails"
|
75
|
+
task :update => [ "update:scripts", "update:javascripts", "update:configs" ]
|
58
76
|
|
59
|
-
|
60
|
-
|
77
|
+
namespace :update do
|
78
|
+
desc "Add new scripts to the application script/ directory"
|
79
|
+
task :scripts do
|
80
|
+
local_base = "script"
|
81
|
+
edge_base = "#{File.dirname(__FILE__)}/../../bin"
|
82
|
+
|
83
|
+
local = Dir["#{local_base}/**/*"].reject { |path| File.directory?(path) }
|
84
|
+
edge = Dir["#{edge_base}/**/*"].reject { |path| File.directory?(path) }
|
61
85
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
86
|
+
edge.each do |script|
|
87
|
+
base_name = script[(edge_base.length+1)..-1]
|
88
|
+
next if base_name == "rails"
|
89
|
+
next if local.detect { |path| base_name == path[(local_base.length+1)..-1] }
|
90
|
+
if !File.directory?("#{local_base}/#{File.dirname(base_name)}")
|
91
|
+
mkdir_p "#{local_base}/#{File.dirname(base_name)}"
|
92
|
+
end
|
93
|
+
install script, "#{local_base}/#{base_name}", :mode => 0755
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
desc "Update your javascripts from your current rails install"
|
98
|
+
task :javascripts do
|
99
|
+
require 'railties_path'
|
100
|
+
project_dir = RAILS_ROOT + '/public/javascripts/'
|
101
|
+
scripts = Dir[RAILTIES_PATH + '/html/javascripts/*.js']
|
102
|
+
scripts.reject!{|s| File.basename(s) == 'application.js'} if File.exists?(project_dir + 'application.js')
|
103
|
+
FileUtils.cp(scripts, project_dir)
|
104
|
+
end
|
105
|
+
|
106
|
+
desc "Update config/boot.rb from your current rails install"
|
107
|
+
task :configs do
|
108
|
+
require 'railties_path'
|
109
|
+
FileUtils.cp(RAILTIES_PATH + '/environments/boot.rb', RAILS_ROOT + '/config/boot.rb')
|
68
110
|
end
|
69
|
-
install script, "#{local_base}/#{base_name}", :mode => 0755
|
70
111
|
end
|
71
112
|
end
|
data/lib/tasks/log.rake
ADDED
data/lib/tasks/misc.rake
CHANGED
@@ -1,19 +1,4 @@
|
|
1
|
-
|
2
|
-
task :default do
|
3
|
-
Rake::Task[:test_units].invoke rescue got_error = true
|
4
|
-
Rake::Task[:test_functional].invoke rescue got_error = true
|
5
|
-
raise "Test failures" if got_error
|
6
|
-
end
|
7
|
-
|
1
|
+
task :default => :test
|
8
2
|
task :environment do
|
9
3
|
require(File.join(RAILS_ROOT, 'config', 'environment'))
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
desc "Clears all *.log files in log/"
|
14
|
-
task :clear_logs do
|
15
|
-
FileList["log/*.log"].each do |log_file|
|
16
|
-
f = File.open(log_file, "w")
|
17
|
-
f.close
|
18
|
-
end
|
19
|
-
end
|
4
|
+
end
|
data/lib/tasks/rails.rb
CHANGED
@@ -4,5 +4,5 @@ $VERBOSE = nil
|
|
4
4
|
Dir["#{File.dirname(__FILE__)}/*.rake"].each { |ext| load ext }
|
5
5
|
|
6
6
|
# Load any custom rakefile extensions
|
7
|
-
Dir["
|
8
|
-
Dir["
|
7
|
+
Dir["#{RAILS_ROOT}/lib/tasks/**/*.rake"].sort.each { |ext| load ext }
|
8
|
+
Dir["#{RAILS_ROOT}/vendor/plugins/*/**/tasks/**/*.rake"].sort.each { |ext| load ext }
|
@@ -0,0 +1,17 @@
|
|
1
|
+
desc 'Print out all defined routes in match order, with names.'
|
2
|
+
task :routes => :environment do
|
3
|
+
routes = ActionController::Routing::Routes.routes.collect do |route|
|
4
|
+
name = ActionController::Routing::Routes.named_routes.routes.index(route).to_s
|
5
|
+
verb = route.conditions[:method].to_s.upcase
|
6
|
+
segs = route.segments.inject("") { |str,s| str << s.to_s }
|
7
|
+
segs.chop! if segs.length > 1
|
8
|
+
reqs = route.requirements.empty? ? "" : route.requirements.inspect
|
9
|
+
{:name => name, :verb => verb, :segs => segs, :reqs => reqs}
|
10
|
+
end
|
11
|
+
name_width = routes.collect {|r| r[:name]}.collect {|n| n.length}.max
|
12
|
+
verb_width = routes.collect {|r| r[:verb]}.collect {|v| v.length}.max
|
13
|
+
segs_width = routes.collect {|r| r[:segs]}.collect {|s| s.length}.max
|
14
|
+
routes.each do |r|
|
15
|
+
puts "#{r[:name].rjust(name_width)} #{r[:verb].ljust(verb_width)} #{r[:segs].ljust(segs_width)} #{r[:reqs]}"
|
16
|
+
end
|
17
|
+
end
|
data/lib/tasks/statistics.rake
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
STATS_DIRECTORIES = [
|
2
|
-
%w(
|
3
|
-
%w(
|
4
|
-
%w(
|
5
|
-
%w(
|
6
|
-
%w(
|
7
|
-
%w(
|
8
|
-
%w(
|
9
|
-
%w(
|
2
|
+
%w(Controllers app/controllers),
|
3
|
+
%w(Helpers app/helpers),
|
4
|
+
%w(Models app/models),
|
5
|
+
%w(Libraries lib/),
|
6
|
+
%w(APIs app/apis),
|
7
|
+
%w(Components components),
|
8
|
+
%w(Integration\ tests test/integration),
|
9
|
+
%w(Functional\ tests test/functional),
|
10
|
+
%w(Unit\ tests test/unit)
|
11
|
+
|
10
12
|
].collect { |name, dir| [ name, "#{RAILS_ROOT}/#{dir}" ] }.select { |name, dir| File.directory?(dir) }
|
11
13
|
|
12
14
|
desc "Report code statistics (KLOCs, etc) from the application"
|
data/lib/tasks/testing.rake
CHANGED
@@ -4,47 +4,115 @@ TEST_CHANGES_SINCE = Time.now - 600
|
|
4
4
|
def recent_tests(source_pattern, test_path, touched_since = 10.minutes.ago)
|
5
5
|
FileList[source_pattern].map do |path|
|
6
6
|
if File.mtime(path) > touched_since
|
7
|
-
|
8
|
-
|
7
|
+
tests = []
|
8
|
+
source_dir = File.dirname(path).split("/")
|
9
|
+
source_file = File.basename(path, '.rb')
|
10
|
+
|
11
|
+
# Support subdirs in app/models and app/controllers
|
12
|
+
modified_test_path = source_dir.length > 2 ? "#{test_path}/" << source_dir[1..source_dir.length].join('/') : test_path
|
13
|
+
|
14
|
+
# For modified files in app/ run the tests for it. ex. /test/functional/account_controller.rb
|
15
|
+
test = "#{modified_test_path}/#{source_file}_test.rb"
|
16
|
+
tests.push test if File.exists?(test)
|
17
|
+
|
18
|
+
# For modified files in app, run tests in subdirs too. ex. /test/functional/account/*_test.rb
|
19
|
+
test = "#{modified_test_path}/#{File.basename(path, '.rb').sub("_controller","")}"
|
20
|
+
FileList["#{test}/*_test.rb"].each { |f| tests.push f } if File.exists?(test)
|
21
|
+
|
22
|
+
return tests
|
23
|
+
|
9
24
|
end
|
10
|
-
end.compact
|
25
|
+
end.flatten.compact
|
11
26
|
end
|
12
27
|
|
13
|
-
desc 'Test recent changes'
|
14
|
-
Rake::TestTask.new(:recent => [ :prepare_test_database ]) do |t|
|
15
|
-
since = TEST_CHANGES_SINCE
|
16
|
-
touched = FileList['test/**/*_test.rb'].select { |path| File.mtime(path) > since } +
|
17
|
-
recent_tests('app/models/*.rb', 'test/unit', since) +
|
18
|
-
recent_tests('app/controllers/*.rb', 'test/functional', since)
|
19
28
|
|
20
|
-
|
21
|
-
|
22
|
-
|
29
|
+
# Recreated here from ActiveSupport because :uncommitted needs it before Rails is available
|
30
|
+
module Kernel
|
31
|
+
def silence_stderr
|
32
|
+
old_stderr = STDERR.dup
|
33
|
+
STDERR.reopen(RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'NUL:' : '/dev/null')
|
34
|
+
STDERR.sync = true
|
35
|
+
yield
|
36
|
+
ensure
|
37
|
+
STDERR.reopen(old_stderr)
|
38
|
+
end
|
23
39
|
end
|
24
40
|
|
25
|
-
desc
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
41
|
+
desc 'Test all units and functionals'
|
42
|
+
task :test do
|
43
|
+
errors = %w(test:units test:functionals test:integration).collect do |task|
|
44
|
+
begin
|
45
|
+
Rake::Task[task].invoke
|
46
|
+
nil
|
47
|
+
rescue => e
|
48
|
+
task
|
49
|
+
end
|
50
|
+
end.compact
|
51
|
+
abort "Errors running #{errors.to_sentence}!" if errors.any?
|
30
52
|
end
|
31
53
|
|
32
|
-
|
33
|
-
Rake::TestTask.new(:
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
54
|
+
namespace :test do
|
55
|
+
Rake::TestTask.new(:recent => "db:test:prepare") do |t|
|
56
|
+
since = TEST_CHANGES_SINCE
|
57
|
+
touched = FileList['test/**/*_test.rb'].select { |path| File.mtime(path) > since } +
|
58
|
+
recent_tests('app/models/**/*.rb', 'test/unit', since) +
|
59
|
+
recent_tests('app/controllers/**/*.rb', 'test/functional', since)
|
38
60
|
|
39
|
-
|
40
|
-
|
41
|
-
|
61
|
+
t.libs << 'test'
|
62
|
+
t.verbose = true
|
63
|
+
t.test_files = touched.uniq
|
64
|
+
end
|
65
|
+
Rake::Task['test:recent'].comment = "Test recent changes"
|
42
66
|
|
43
|
-
|
44
|
-
t.
|
45
|
-
|
46
|
-
|
67
|
+
Rake::TestTask.new(:uncommitted => "db:test:prepare") do |t|
|
68
|
+
def t.file_list
|
69
|
+
changed_since_checkin = silence_stderr { `svn status` }.map { |path| path.chomp[7 .. -1] }
|
70
|
+
|
71
|
+
models = changed_since_checkin.select { |path| path =~ /app[\\\/]models[\\\/].*\.rb/ }
|
72
|
+
controllers = changed_since_checkin.select { |path| path =~ /app[\\\/]controllers[\\\/].*\.rb/ }
|
73
|
+
|
74
|
+
unit_tests = models.map { |model| "test/unit/#{File.basename(model, '.rb')}_test.rb" }
|
75
|
+
functional_tests = controllers.map { |controller| "test/functional/#{File.basename(controller, '.rb')}_test.rb" }
|
76
|
+
|
77
|
+
unit_tests.uniq + functional_tests.uniq
|
78
|
+
end
|
79
|
+
|
80
|
+
t.libs << 'test'
|
81
|
+
t.verbose = true
|
82
|
+
end
|
83
|
+
Rake::Task['test:uncommitted'].comment = "Test changes since last checkin (only Subversion)"
|
84
|
+
|
85
|
+
Rake::TestTask.new(:units => "db:test:prepare") do |t|
|
86
|
+
t.libs << "test"
|
87
|
+
t.pattern = 'test/unit/**/*_test.rb'
|
88
|
+
t.verbose = true
|
47
89
|
end
|
90
|
+
Rake::Task['test:units'].comment = "Run the unit tests in test/unit"
|
48
91
|
|
49
|
-
|
92
|
+
Rake::TestTask.new(:functionals => "db:test:prepare") do |t|
|
93
|
+
t.libs << "test"
|
94
|
+
t.pattern = 'test/functional/**/*_test.rb'
|
95
|
+
t.verbose = true
|
96
|
+
end
|
97
|
+
Rake::Task['test:functionals'].comment = "Run the functional tests in test/functional"
|
98
|
+
|
99
|
+
Rake::TestTask.new(:integration => "db:test:prepare") do |t|
|
100
|
+
t.libs << "test"
|
101
|
+
t.pattern = 'test/integration/**/*_test.rb'
|
102
|
+
t.verbose = true
|
103
|
+
end
|
104
|
+
Rake::Task['test:integration'].comment = "Run the integration tests in test/integration"
|
105
|
+
|
106
|
+
Rake::TestTask.new(:plugins => :environment) do |t|
|
107
|
+
t.libs << "test"
|
108
|
+
|
109
|
+
if ENV['PLUGIN']
|
110
|
+
t.pattern = "vendor/plugins/#{ENV['PLUGIN']}/test/**/*_test.rb"
|
111
|
+
else
|
112
|
+
t.pattern = 'vendor/plugins/*/**/test/**/*_test.rb'
|
113
|
+
end
|
114
|
+
|
115
|
+
t.verbose = true
|
116
|
+
end
|
117
|
+
Rake::Task['test:plugins'].comment = "Run the plugin tests in vendor/plugins/*/**/test (or specify with PLUGIN=name)"
|
50
118
|
end
|
data/lib/tasks/tmp.rake
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
namespace :tmp do
|
2
|
+
desc "Clear session, cache, and socket files from tmp/"
|
3
|
+
task :clear => [ "tmp:sessions:clear", "tmp:cache:clear", "tmp:sockets:clear"]
|
4
|
+
|
5
|
+
desc "Creates tmp directories for sessions, cache, and sockets"
|
6
|
+
task :create do
|
7
|
+
FileUtils.mkdir_p(%w( tmp/sessions tmp/cache tmp/sockets tmp/pids ))
|
8
|
+
end
|
9
|
+
|
10
|
+
namespace :sessions do
|
11
|
+
desc "Clears all files in tmp/sessions"
|
12
|
+
task :clear do
|
13
|
+
FileUtils.rm(Dir['tmp/sessions/[^.]*'])
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
namespace :cache do
|
18
|
+
desc "Clears all files and directories in tmp/cache"
|
19
|
+
task :clear do
|
20
|
+
FileUtils.rm_rf(Dir['tmp/cache/[^.]*'])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
namespace :sockets do
|
25
|
+
desc "Clears all files in tmp/sockets"
|
26
|
+
task :clear do
|
27
|
+
FileUtils.rm(Dir['tmp/sockets/[^.]*'])
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
namespace :pids do
|
32
|
+
desc "Clears all files in tmp/pids"
|
33
|
+
task :clear do
|
34
|
+
FileUtils.rm(Dir['tmp/pids/[^.]*'])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/test_help.rb
CHANGED
@@ -1,17 +1,20 @@
|
|
1
|
-
|
1
|
+
require_dependency 'application'
|
2
2
|
|
3
|
-
# Make double-sure the RAILS_ENV is set to test,
|
3
|
+
# Make double-sure the RAILS_ENV is set to test,
|
4
4
|
# so fixtures are loaded to the right database
|
5
5
|
silence_warnings { RAILS_ENV = "test" }
|
6
6
|
|
7
7
|
require 'test/unit'
|
8
|
+
require 'active_support/test_case'
|
8
9
|
require 'active_record/fixtures'
|
10
|
+
require 'action_controller/test_case'
|
9
11
|
require 'action_controller/test_process'
|
10
|
-
require '
|
11
|
-
require '
|
12
|
+
require 'action_controller/integration'
|
13
|
+
require 'action_mailer/test_case' if defined?(ActionMailer)
|
12
14
|
|
13
15
|
Test::Unit::TestCase.fixture_path = RAILS_ROOT + "/test/fixtures/"
|
16
|
+
ActionController::IntegrationTest.fixture_path = Test::Unit::TestCase.fixture_path
|
14
17
|
|
15
18
|
def create_fixtures(*table_names)
|
16
|
-
Fixtures.create_fixtures(
|
19
|
+
Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names)
|
17
20
|
end
|
data/lib/webrick_server.rb
CHANGED
@@ -3,13 +3,10 @@
|
|
3
3
|
require 'webrick'
|
4
4
|
require 'cgi'
|
5
5
|
require 'stringio'
|
6
|
+
require 'dispatcher'
|
6
7
|
|
7
8
|
include WEBrick
|
8
9
|
|
9
|
-
ABSOLUTE_RAILS_ROOT = File.expand_path(RAILS_ROOT)
|
10
|
-
|
11
|
-
ActiveRecord::Base.threaded_connections = false
|
12
|
-
|
13
10
|
class CGI #:nodoc:
|
14
11
|
def stdinput
|
15
12
|
@stdin || $stdin
|
@@ -62,31 +59,29 @@ class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
|
|
62
59
|
server.mount('/', DispatchServlet, options)
|
63
60
|
|
64
61
|
trap("INT") { server.shutdown }
|
65
|
-
|
66
|
-
require File.join(@server_options[:server_root], "..", "config", "environment") unless defined?(RAILS_ROOT)
|
67
|
-
require "dispatcher"
|
68
|
-
|
69
62
|
server.start
|
70
63
|
end
|
71
64
|
|
72
65
|
def initialize(server, options) #:nodoc:
|
73
66
|
@server_options = options
|
74
67
|
@file_handler = WEBrick::HTTPServlet::FileHandler.new(server, options[:server_root])
|
75
|
-
Dir
|
68
|
+
# Change to the RAILS_ROOT, since Webrick::Daemon.start does a Dir::cwd("/")
|
69
|
+
# OPTIONS['working_directory'] is an absolute path of the RAILS_ROOT, set in railties/lib/commands/servers/webrick.rb
|
70
|
+
Dir.chdir(OPTIONS['working_directory']) if defined?(OPTIONS) && File.directory?(OPTIONS['working_directory'])
|
76
71
|
super
|
77
72
|
end
|
78
73
|
|
79
74
|
def service(req, res) #:nodoc:
|
80
|
-
|
81
|
-
|
75
|
+
unless handle_file(req, res)
|
76
|
+
begin
|
82
77
|
REQUEST_MUTEX.lock unless ActionController::Base.allow_concurrency
|
83
78
|
unless handle_dispatch(req, res)
|
84
79
|
raise WEBrick::HTTPStatus::NotFound, "`#{req.path}' not found."
|
85
80
|
end
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
81
|
+
ensure
|
82
|
+
unless ActionController::Base.allow_concurrency
|
83
|
+
REQUEST_MUTEX.unlock if REQUEST_MUTEX.locked?
|
84
|
+
end
|
90
85
|
end
|
91
86
|
end
|
92
87
|
end
|
@@ -147,7 +142,7 @@ class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
|
|
147
142
|
data.rewind
|
148
143
|
data = data.read
|
149
144
|
|
150
|
-
raw_header, body = *data.split(/^[\xd\xa]
|
145
|
+
raw_header, body = *data.split(/^[\xd\xa]{2}/on, 2)
|
151
146
|
header = WEBrick::HTTPUtils::parse_header(raw_header)
|
152
147
|
|
153
148
|
return header, body
|