rails 1.0.0 → 1.1.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.

Files changed (76) hide show
  1. data/CHANGELOG +152 -10
  2. data/README +30 -5
  3. data/Rakefile +18 -13
  4. data/bin/rails +1 -11
  5. data/{lib/rails_info.rb → builtin/rails_info/rails/info.rb} +25 -8
  6. data/builtin/{controllers/rails_info_controller.rb → rails_info/rails/info_controller.rb} +2 -2
  7. data/configs/databases/mysql.yml +47 -0
  8. data/configs/databases/oracle.yml +30 -0
  9. data/configs/databases/postgresql.yml +44 -0
  10. data/configs/databases/sqlite2.yml +16 -0
  11. data/configs/databases/sqlite3.yml +16 -0
  12. data/configs/lighttpd.conf +11 -5
  13. data/configs/routes.rb +5 -2
  14. data/environments/development.rb +3 -2
  15. data/environments/environment.rb +5 -8
  16. data/environments/production.rb +1 -2
  17. data/environments/test.rb +1 -1
  18. data/fresh_rakefile +2 -2
  19. data/html/500.html +1 -1
  20. data/html/index.html +3 -3
  21. data/html/javascripts/application.js +2 -0
  22. data/html/javascripts/controls.js +95 -30
  23. data/html/javascripts/dragdrop.js +161 -21
  24. data/html/javascripts/effects.js +310 -211
  25. data/html/javascripts/prototype.js +228 -28
  26. data/lib/code_statistics.rb +1 -1
  27. data/lib/commands/console.rb +3 -1
  28. data/lib/commands/plugin.rb +113 -70
  29. data/lib/commands/process/reaper.rb +1 -1
  30. data/lib/commands/process/spawner.rb +33 -4
  31. data/lib/commands/runner.rb +1 -1
  32. data/lib/commands/server.rb +3 -1
  33. data/lib/commands/servers/lighttpd.rb +41 -9
  34. data/lib/console_app.rb +27 -0
  35. data/lib/console_with_helpers.rb +23 -0
  36. data/lib/dispatcher.rb +8 -8
  37. data/lib/fcgi_handler.rb +22 -4
  38. data/lib/initializer.rb +107 -38
  39. data/lib/rails_generator/commands.rb +17 -7
  40. data/lib/rails_generator/generators/applications/app/app_generator.rb +30 -18
  41. data/lib/rails_generator/generators/components/integration_test/USAGE +14 -0
  42. data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +16 -0
  43. data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +10 -0
  44. data/lib/rails_generator/generators/components/mailer/USAGE +1 -1
  45. data/lib/rails_generator/generators/components/migration/USAGE +1 -1
  46. data/lib/rails_generator/generators/components/model/USAGE +3 -1
  47. data/lib/rails_generator/generators/components/model/model_generator.rb +16 -0
  48. data/lib/rails_generator/generators/components/model/templates/migration.rb +11 -0
  49. data/lib/rails_generator/generators/components/model/templates/unit_test.rb +1 -1
  50. data/lib/rails_generator/generators/components/plugin/USAGE +3 -1
  51. data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +1 -0
  52. data/lib/rails_generator/generators/components/plugin/templates/Rakefile +1 -1
  53. data/lib/rails_generator/generators/components/plugin/templates/install.rb +1 -0
  54. data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +1 -1
  55. data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +4 -0
  56. data/lib/rails_generator/generators/components/scaffold/templates/style.css +4 -4
  57. data/lib/rails_generator/generators/components/scaffold/templates/view_list.rhtml +1 -1
  58. data/lib/rails_generator/generators/components/session_migration/USAGE +1 -1
  59. data/lib/rails_generator/options.rb +2 -2
  60. data/lib/rails_version.rb +1 -1
  61. data/lib/ruby_version_check.rb +17 -0
  62. data/lib/tasks/databases.rake +141 -139
  63. data/lib/tasks/documentation.rake +73 -68
  64. data/lib/tasks/framework.rake +86 -58
  65. data/lib/tasks/log.rake +9 -0
  66. data/lib/tasks/misc.rake +2 -17
  67. data/lib/tasks/pre_namespace_aliases.rake +46 -0
  68. data/lib/tasks/statistics.rake +9 -8
  69. data/lib/tasks/testing.rake +81 -29
  70. data/lib/tasks/tmp.rake +30 -0
  71. data/lib/test_help.rb +1 -0
  72. data/lib/webrick_server.rb +6 -8
  73. metadata +284 -271
  74. data/bin/process/spinner +0 -3
  75. data/configs/database.yml +0 -85
  76. data/lib/tasks/javascripts.rake +0 -6
@@ -1,76 +1,81 @@
1
- desc "Generate documentation for the application"
2
- Rake::RDocTask.new("appdoc") { |rdoc|
3
- rdoc.rdoc_dir = 'doc/app'
4
- rdoc.title = "Rails Application Documentation"
5
- rdoc.options << '--line-numbers --inline-source'
6
- rdoc.rdoc_files.include('doc/README_FOR_APP')
7
- rdoc.rdoc_files.include('app/**/*.rb')
8
- }
1
+ namespace :doc do
2
+ desc "Generate documentation for the application"
3
+ Rake::RDocTask.new("app") { |rdoc|
4
+ rdoc.rdoc_dir = 'doc/app'
5
+ rdoc.title = "Rails Application Documentation"
6
+ rdoc.options << '--line-numbers' << '--inline-source'
7
+ rdoc.rdoc_files.include('doc/README_FOR_APP')
8
+ rdoc.rdoc_files.include('app/**/*.rb')
9
+ }
9
10
 
10
- plugins = FileList['vendor/plugins/**'].map {|plugin| File.basename(plugin)}
11
- # Define doc tasks for each plugin
12
- plugins.each do |plugin|
13
- task :"#{plugin}_plugindoc" => :environment do
14
- plugin_base = "vendor/plugins/#{plugin}"
15
- options = []
16
- files = Rake::FileList.new
17
- options << "-o doc/plugins/#{plugin}"
18
- options << "--title '#{plugin.titlecase} Plugin Documentation'"
19
- options << '--line-numbers --inline-source'
20
- options << '-T html'
11
+ desc "Generate documentation for the Rails framework"
12
+ Rake::RDocTask.new("rails") { |rdoc|
13
+ rdoc.rdoc_dir = 'doc/api'
14
+ rdoc.template = "#{ENV['template']}.rb" if ENV['template']
15
+ rdoc.title = "Rails Framework Documentation"
16
+ rdoc.options << '--line-numbers' << '--inline-source'
17
+ rdoc.rdoc_files.include('README')
18
+ rdoc.rdoc_files.include('vendor/rails/railties/CHANGELOG')
19
+ rdoc.rdoc_files.include('vendor/rails/railties/MIT-LICENSE')
20
+ rdoc.rdoc_files.include('vendor/rails/activerecord/README')
21
+ rdoc.rdoc_files.include('vendor/rails/activerecord/CHANGELOG')
22
+ rdoc.rdoc_files.include('vendor/rails/activerecord/lib/active_record/**/*.rb')
23
+ rdoc.rdoc_files.exclude('vendor/rails/activerecord/lib/active_record/vendor/*')
24
+ rdoc.rdoc_files.include('vendor/rails/actionpack/README')
25
+ rdoc.rdoc_files.include('vendor/rails/actionpack/CHANGELOG')
26
+ rdoc.rdoc_files.include('vendor/rails/actionpack/lib/action_controller/**/*.rb')
27
+ rdoc.rdoc_files.include('vendor/rails/actionpack/lib/action_view/**/*.rb')
28
+ rdoc.rdoc_files.include('vendor/rails/actionmailer/README')
29
+ rdoc.rdoc_files.include('vendor/rails/actionmailer/CHANGELOG')
30
+ rdoc.rdoc_files.include('vendor/rails/actionmailer/lib/action_mailer/base.rb')
31
+ rdoc.rdoc_files.include('vendor/rails/actionwebservice/README')
32
+ rdoc.rdoc_files.include('vendor/rails/actionwebservice/CHANGELOG')
33
+ rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service.rb')
34
+ rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/*.rb')
35
+ rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/api/*.rb')
36
+ rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/client/*.rb')
37
+ rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/container/*.rb')
38
+ rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/dispatcher/*.rb')
39
+ rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/protocol/*.rb')
40
+ rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/support/*.rb')
41
+ rdoc.rdoc_files.include('vendor/rails/activesupport/README')
42
+ rdoc.rdoc_files.include('vendor/rails/activesupport/CHANGELOG')
43
+ rdoc.rdoc_files.include('vendor/rails/activesupport/lib/active_support/**/*.rb')
44
+ }
21
45
 
22
- files.include("#{plugin_base}/lib/**/*.rb")
23
- if File.exists?("#{plugin_base}/README")
24
- files.include("#{plugin_base}/README")
25
- options << "--main '#{plugin_base}/README'"
26
- end
27
- files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG")
46
+ plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
28
47
 
29
- options << files.to_s
48
+ desc "Generate documation for all installed plugins"
49
+ task :plugins => plugins.collect { |plugin| "doc:plugins:#{plugin}" }
30
50
 
31
- sh %(rdoc #{options * ' '})
51
+ desc "Remove plugin documentation"
52
+ task :clobber_plugins do
53
+ rm_rf 'doc/plugins' rescue nil
32
54
  end
33
- end
34
55
 
35
- desc "Generate documation for all installed plugins"
36
- task :plugindoc => plugins.map {|plugin| :"#{plugin}_plugindoc"}
56
+ namespace :plugins do
57
+ # Define doc tasks for each plugin
58
+ plugins.each do |plugin|
59
+ task(plugin => :environment) do
60
+ plugin_base = "vendor/plugins/#{plugin}"
61
+ options = []
62
+ files = Rake::FileList.new
63
+ options << "-o doc/plugins/#{plugin}"
64
+ options << "--title '#{plugin.titlecase} Plugin Documentation'"
65
+ options << '--line-numbers' << '--inline-source'
66
+ options << '-T html'
67
+
68
+ files.include("#{plugin_base}/lib/**/*.rb")
69
+ if File.exists?("#{plugin_base}/README")
70
+ files.include("#{plugin_base}/README")
71
+ options << "--main '#{plugin_base}/README'"
72
+ end
73
+ files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG")
37
74
 
38
- desc "Remove plugin documentation"
39
- task :clobber_plugindoc do
40
- rm_rf 'doc/plugins' rescue nil
41
- end
75
+ options << files.to_s
42
76
 
43
- desc "Generate documentation for the Rails framework"
44
- Rake::RDocTask.new("apidoc") { |rdoc|
45
- rdoc.rdoc_dir = 'doc/api'
46
- rdoc.template = "#{ENV['template']}.rb" if ENV['template']
47
- rdoc.title = "Rails Framework Documentation"
48
- rdoc.options << '--line-numbers --inline-source'
49
- rdoc.rdoc_files.include('README')
50
- rdoc.rdoc_files.include('vendor/rails/railties/CHANGELOG')
51
- rdoc.rdoc_files.include('vendor/rails/railties/MIT-LICENSE')
52
- rdoc.rdoc_files.include('vendor/rails/activerecord/README')
53
- rdoc.rdoc_files.include('vendor/rails/activerecord/CHANGELOG')
54
- rdoc.rdoc_files.include('vendor/rails/activerecord/lib/active_record/**/*.rb')
55
- rdoc.rdoc_files.exclude('vendor/rails/activerecord/lib/active_record/vendor/*')
56
- rdoc.rdoc_files.include('vendor/rails/actionpack/README')
57
- rdoc.rdoc_files.include('vendor/rails/actionpack/CHANGELOG')
58
- rdoc.rdoc_files.include('vendor/rails/actionpack/lib/action_controller/**/*.rb')
59
- rdoc.rdoc_files.include('vendor/rails/actionpack/lib/action_view/**/*.rb')
60
- rdoc.rdoc_files.include('vendor/rails/actionmailer/README')
61
- rdoc.rdoc_files.include('vendor/rails/actionmailer/CHANGELOG')
62
- rdoc.rdoc_files.include('vendor/rails/actionmailer/lib/action_mailer/base.rb')
63
- rdoc.rdoc_files.include('vendor/rails/actionwebservice/README')
64
- rdoc.rdoc_files.include('vendor/rails/actionwebservice/CHANGELOG')
65
- rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service.rb')
66
- rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/*.rb')
67
- rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/api/*.rb')
68
- rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/client/*.rb')
69
- rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/container/*.rb')
70
- rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/dispatcher/*.rb')
71
- rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/protocol/*.rb')
72
- rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/support/*.rb')
73
- rdoc.rdoc_files.include('vendor/rails/activesupport/README')
74
- rdoc.rdoc_files.include('vendor/rails/activesupport/CHANGELOG')
75
- rdoc.rdoc_files.include('vendor/rails/activesupport/lib/active_support/**/*.rb')
76
- }
77
+ sh %(rdoc #{options * ' '})
78
+ end
79
+ end
80
+ end
81
+ end
@@ -1,71 +1,99 @@
1
- desc "Lock this application to the current gems (by unpacking them into vendor/rails)"
2
- task :freeze_gems do
3
- deps = %w(actionpack activerecord actionmailer activesupport actionwebservice)
4
- require 'rubygems'
5
-
6
- rails = if version = ENV['VERSION']
7
- Gem.cache.search('rails', "= #{version}").first
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 actionwebservice)
6
+ require 'rubygems'
7
+ Gem.manage_gems
17
8
 
18
- puts "Freezing to the gems for Rails #{rails.version}"
19
- rm_rf "vendor/rails"
20
- mkdir_p "vendor/rails"
9
+ rails = version = ENV['VERSION'] ?
10
+ Gem.cache.search('rails', "= #{version}").first :
11
+ Gem.cache.search('rails').sort_by { |g| g.version }.last
21
12
 
22
- rails.dependencies.select { |g| deps.include? g.name }.each do |g|
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
- desc "Lock this application to the Edge Rails (by exporting from Subversion). Defaults to svn HEAD; do 'rake freeze_edge REVISION=1234' to lock to a specific revision."
31
- task :freeze_edge do
32
- $verbose = false
33
- `svn --version` rescue nil
34
- unless !$?.nil? && $?.success?
35
- $stderr.puts "ERROR: Must have subversion (svn) available in the PATH to lock this application to Edge Rails"
36
- exit 1
37
- end
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 this application to latest Edge Rails. Lock a specific revision with REVISION=X"
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
38
43
 
39
- rm_rf "vendor/rails"
40
- mkdir_p "vendor/rails"
44
+ rails_svn = 'http://dev.rubyonrails.org/svn/rails/trunk'
41
45
 
42
- revision_switch = ENV['REVISION'] ? " -r #{ENV['REVISION']}" : ''
43
- for framework in %w( railties actionpack activerecord actionmailer activesupport actionwebservice )
44
- mkdir_p "vendor/rails/#{framework}"
45
- system "svn export http://dev.rubyonrails.org/svn/rails/trunk/#{framework}/lib vendor/rails/#{framework}/lib #{revision_switch}"
46
+ if ENV['REVISION'].nil?
47
+ ENV['REVISION'] = /^r(\d+)/.match(%x{svn log -q --limit 1 #{rails_svn}})[1]
48
+ puts "REVISION not set. Using HEAD, which is revision #{ENV['REVISION']}."
49
+ end
50
+
51
+ rm_rf "vendor/rails"
52
+ mkdir_p "vendor/rails"
53
+
54
+ touch "vendor/rails/REVISION_#{ENV['REVISION']}"
55
+
56
+ for framework in %w( railties actionpack activerecord actionmailer activesupport actionwebservice )
57
+ system "svn export #{rails_svn}/#{framework} vendor/rails/#{framework} -r #{ENV['REVISION']}"
58
+ end
59
+ end
46
60
  end
47
- end
48
61
 
49
- desc "Unlock this application from freeze of gems or edge and return to a fluid use of system gems"
50
- task :unfreeze_rails do
51
- rm_rf "vendor/rails"
52
- end
62
+ desc "Unlock this application from freeze of gems or edge and return to a fluid use of system gems"
63
+ task :unfreeze do
64
+ rm_rf "vendor/rails"
65
+ end
66
+
67
+ desc "Update both scripts and public/javascripts from Rails"
68
+ task :update => [ "update:scripts", "update:javascripts" ]
53
69
 
54
- desc "Add new scripts to the application script/ directory"
55
- task :add_new_scripts do
56
- local_base = "script"
57
- edge_base = "#{File.dirname(__FILE__)}/../../bin"
70
+ namespace :update do
71
+ desc "Add new scripts to the application script/ directory"
72
+ task :scripts do
73
+ local_base = "script"
74
+ edge_base = "#{File.dirname(__FILE__)}/../../bin"
58
75
 
59
- local = Dir["#{local_base}/**/*"].reject { |path| File.directory?(path) }
60
- edge = Dir["#{edge_base}/**/*"].reject { |path| File.directory?(path) }
76
+ local = Dir["#{local_base}/**/*"].reject { |path| File.directory?(path) }
77
+ edge = Dir["#{edge_base}/**/*"].reject { |path| File.directory?(path) }
61
78
 
62
- edge.each do |script|
63
- base_name = script[(edge_base.length+1)..-1]
64
- next if base_name == "rails"
65
- next if local.detect { |path| base_name == path[(local_base.length+1)..-1] }
66
- if !File.directory?("#{local_base}/#{File.dirname(base_name)}")
67
- mkdir_p "#{local_base}/#{File.dirname(base_name)}"
79
+ edge.each do |script|
80
+ base_name = script[(edge_base.length+1)..-1]
81
+ next if base_name == "rails"
82
+ next if local.detect { |path| base_name == path[(local_base.length+1)..-1] }
83
+ if !File.directory?("#{local_base}/#{File.dirname(base_name)}")
84
+ mkdir_p "#{local_base}/#{File.dirname(base_name)}"
85
+ end
86
+ install script, "#{local_base}/#{base_name}", :mode => 0755
87
+ end
88
+ end
89
+
90
+ desc "Update your javascripts from your current rails install"
91
+ task :javascripts do
92
+ require 'railties_path'
93
+ project_dir = RAILS_ROOT + '/public/javascripts/'
94
+ scripts = Dir[RAILTIES_PATH + '/html/javascripts/*.js']
95
+ scripts.reject!{|s| File.basename(s) == 'application.js'} if File.exists?(project_dir + 'application.js')
96
+ FileUtils.cp(scripts, project_dir)
68
97
  end
69
- install script, "#{local_base}/#{base_name}", :mode => 0755
70
98
  end
71
99
  end
@@ -0,0 +1,9 @@
1
+ namespace :log do
2
+ desc "Truncates all *.log files in log/ to zero bytes"
3
+ task :clear do
4
+ FileList["log/*.log"].each do |log_file|
5
+ f = File.open(log_file, "w")
6
+ f.close
7
+ end
8
+ end
9
+ end
@@ -1,19 +1,4 @@
1
- desc "Run all the tests on a fresh test database"
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
@@ -0,0 +1,46 @@
1
+ # clear
2
+ task :clear_logs => "log:clear"
3
+
4
+ # test
5
+ task :recent => "test:recent"
6
+ task :test_units => "test:units"
7
+ task :test_functional => "test:functionals"
8
+ task :test_plugins => "test:plugins"
9
+
10
+
11
+ # doc
12
+ task :appdoc => "doc:app"
13
+ task :apidoc => "doc:rails"
14
+ task :plugindoc => "doc:plugins"
15
+ task :clobber_plugindoc => "doc:clobber_plugins"
16
+
17
+ FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }.each do |plugin|
18
+ task :"#{plugin}_plugindoc" => "doc:plugins:#{plugin}"
19
+ end
20
+
21
+
22
+ # rails
23
+ task :freeze_gems => "rails:freeze:gems"
24
+ task :freeze_edge => "rails:freeze:edge"
25
+ task :unfreeze_rails => "rails:unfreeze"
26
+ task :add_new_scripts => "rails:update:scripts"
27
+ task :update_javascripts => "rails:update:javascripts"
28
+
29
+
30
+ # db
31
+ task :migrate => "db:migrate"
32
+ task :load_fixtures => "db:fixtures:load"
33
+
34
+ task :db_schema_dump => "db:schema:dump"
35
+ task :db_schema_import => "db:schema:load"
36
+
37
+ task :db_structure_dump => "db:structure:dump"
38
+
39
+ task :purge_test_database => "db:test:purge"
40
+ task :clone_schema_to_test => "db:test:clone"
41
+ task :clone_structure_to_test => "db:test:clone_structure"
42
+ task :prepare_test_database => "db:test:prepare"
43
+
44
+ task :create_sessions_table => "db:sessions:create"
45
+ task :drop_sessions_table => "db:sessions:drop"
46
+ task :purge_sessions_table => "db:sessions:recreate"
@@ -1,12 +1,13 @@
1
1
  STATS_DIRECTORIES = [
2
- %w(Helpers app/helpers),
3
- %w(Controllers app/controllers),
4
- %w(APIs app/apis),
5
- %w(Components components),
6
- %w(Functional\ tests test/functional),
7
- %w(Models app/models),
8
- %w(Unit\ tests test/unit),
9
- %w(Libraries lib/)
2
+ %w(Helpers app/helpers),
3
+ %w(Controllers app/controllers),
4
+ %w(APIs app/apis),
5
+ %w(Components components),
6
+ %w(Functional\ tests test/functional),
7
+ %w(Models app/models),
8
+ %w(Unit\ tests test/unit),
9
+ %w(Libraries lib/),
10
+ %w(Integration\ tests test/integration)
10
11
  ].collect { |name, dir| [ name, "#{RAILS_ROOT}/#{dir}" ] }.select { |name, dir| File.directory?(dir) }
11
12
 
12
13
  desc "Report code statistics (KLOCs, etc) from the application"
@@ -10,41 +10,93 @@ def recent_tests(source_pattern, test_path, touched_since = 10.minutes.ago)
10
10
  end.compact
11
11
  end
12
12
 
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
-
20
- t.libs << 'test'
21
- t.verbose = true
22
- t.test_files = touched.uniq
23
- end
24
13
 
25
- desc "Run the unit tests in test/unit"
26
- Rake::TestTask.new(:test_units => [ :prepare_test_database ]) do |t|
27
- t.libs << "test"
28
- t.pattern = 'test/unit/**/*_test.rb'
29
- t.verbose = true
14
+ # Recreated here from ActiveSupport because :uncommitted needs it before Rails is available
15
+ module Kernel
16
+ def silence_stderr
17
+ old_stderr = STDERR.dup
18
+ STDERR.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
19
+ STDERR.sync = true
20
+ yield
21
+ ensure
22
+ STDERR.reopen(old_stderr)
23
+ end
30
24
  end
31
25
 
32
- desc "Run the functional tests in test/functional"
33
- Rake::TestTask.new(:test_functional => [ :prepare_test_database ]) do |t|
34
- t.libs << "test"
35
- t.pattern = 'test/functional/**/*_test.rb'
36
- t.verbose = true
26
+ desc 'Test all units and functionals'
27
+ task :test do
28
+ Rake::Task["test:units"].invoke rescue got_error = true
29
+ Rake::Task["test:functionals"].invoke rescue got_error = true
30
+
31
+ if File.exist?("test/integration")
32
+ Rake::Task["test:integration"].invoke rescue got_error = true
33
+ end
34
+
35
+ raise "Test failures" if got_error
37
36
  end
38
37
 
39
- desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)"
40
- Rake::TestTask.new(:test_plugins => :environment) do |t|
41
- t.libs << "test"
38
+ namespace :test do
39
+ desc 'Test recent changes'
40
+ Rake::TestTask.new(:recent => "db:test:prepare") do |t|
41
+ since = TEST_CHANGES_SINCE
42
+ touched = FileList['test/**/*_test.rb'].select { |path| File.mtime(path) > since } +
43
+ recent_tests('app/models/*.rb', 'test/unit', since) +
44
+ recent_tests('app/controllers/*.rb', 'test/functional', since)
45
+
46
+ t.libs << 'test'
47
+ t.verbose = true
48
+ t.test_files = touched.uniq
49
+ end
42
50
 
43
- if ENV['PLUGIN']
44
- t.pattern = "vendor/plugins/#{ENV['PLUGIN']}/test/**/*_test.rb"
45
- else
46
- t.pattern = 'vendor/plugins/**/test/**/*_test.rb'
51
+ desc 'Test changes since last checkin (only Subversion)'
52
+ Rake::TestTask.new(:uncommitted => "db:test:prepare") do |t|
53
+ def t.file_list
54
+ changed_since_checkin = silence_stderr { `svn status` }.map { |path| path.chomp[7 .. -1] }
55
+
56
+ models = changed_since_checkin.select { |path| path =~ /app\/models\/.*\.rb/ }
57
+ controllers = changed_since_checkin.select { |path| path =~ /app\/controllers\/.*\.rb/ }
58
+
59
+ unit_tests = models.map { |model| "test/unit/#{File.basename(model, '.rb')}_test.rb" }
60
+ functional_tests = controllers.map { |controller| "test/functional/#{File.basename(controller, '.rb')}_test.rb" }
61
+
62
+ unit_tests.uniq + functional_tests.uniq
63
+ end
64
+
65
+ t.libs << 'test'
66
+ t.verbose = true
47
67
  end
48
68
 
49
- t.verbose = true
69
+ desc "Run the unit tests in test/unit"
70
+ Rake::TestTask.new(:units => "db:test:prepare") do |t|
71
+ t.libs << "test"
72
+ t.pattern = 'test/unit/**/*_test.rb'
73
+ t.verbose = true
74
+ end
75
+
76
+ desc "Run the functional tests in test/functional"
77
+ Rake::TestTask.new(:functionals => "db:test:prepare") do |t|
78
+ t.libs << "test"
79
+ t.pattern = 'test/functional/**/*_test.rb'
80
+ t.verbose = true
81
+ end
82
+
83
+ desc "Run the integration tests in test/integration"
84
+ Rake::TestTask.new(:integration => "db:test:prepare") do |t|
85
+ t.libs << "test"
86
+ t.pattern = 'test/integration/**/*_test.rb'
87
+ t.verbose = true
88
+ end
89
+
90
+ desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)"
91
+ Rake::TestTask.new(:plugins => :environment) do |t|
92
+ t.libs << "test"
93
+
94
+ if ENV['PLUGIN']
95
+ t.pattern = "vendor/plugins/#{ENV['PLUGIN']}/test/**/*_test.rb"
96
+ else
97
+ t.pattern = 'vendor/plugins/**/test/**/*_test.rb'
98
+ end
99
+
100
+ t.verbose = true
101
+ end
50
102
  end