rails 2.3.18 → 3.0.0.beta

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 (215) hide show
  1. metadata +61 -295
  2. data/CHANGELOG +0 -2193
  3. data/MIT-LICENSE +0 -20
  4. data/README +0 -243
  5. data/Rakefile +0 -365
  6. data/bin/about +0 -4
  7. data/bin/console +0 -3
  8. data/bin/dbconsole +0 -3
  9. data/bin/destroy +0 -3
  10. data/bin/generate +0 -3
  11. data/bin/performance/benchmarker +0 -3
  12. data/bin/performance/profiler +0 -3
  13. data/bin/plugin +0 -3
  14. data/bin/rails +0 -21
  15. data/bin/runner +0 -3
  16. data/bin/server +0 -3
  17. data/builtin/rails_info/rails/info.rb +0 -131
  18. data/builtin/rails_info/rails/info_controller.rb +0 -9
  19. data/builtin/rails_info/rails/info_helper.rb +0 -2
  20. data/builtin/rails_info/rails_info_controller.rb +0 -2
  21. data/configs/databases/frontbase.yml +0 -28
  22. data/configs/databases/ibm_db.yml +0 -62
  23. data/configs/databases/mysql.yml +0 -60
  24. data/configs/databases/oracle.yml +0 -39
  25. data/configs/databases/postgresql.yml +0 -51
  26. data/configs/databases/sqlite2.yml +0 -19
  27. data/configs/databases/sqlite3.yml +0 -22
  28. data/configs/empty.log +0 -0
  29. data/configs/initializers/backtrace_silencers.rb +0 -7
  30. data/configs/initializers/cookie_verification_secret.rb +0 -7
  31. data/configs/initializers/inflections.rb +0 -10
  32. data/configs/initializers/mime_types.rb +0 -5
  33. data/configs/initializers/new_rails_defaults.rb +0 -21
  34. data/configs/initializers/session_store.rb +0 -15
  35. data/configs/locales/en.yml +0 -5
  36. data/configs/routes.rb +0 -43
  37. data/configs/seeds.rb +0 -7
  38. data/dispatches/config.ru +0 -7
  39. data/dispatches/dispatch.fcgi +0 -24
  40. data/dispatches/dispatch.rb +0 -10
  41. data/dispatches/gateway.cgi +0 -97
  42. data/doc/README_FOR_APP +0 -2
  43. data/environments/boot.rb +0 -114
  44. data/environments/development.rb +0 -17
  45. data/environments/environment.rb +0 -41
  46. data/environments/production.rb +0 -28
  47. data/environments/test.rb +0 -28
  48. data/fresh_rakefile +0 -10
  49. data/helpers/application_controller.rb +0 -10
  50. data/helpers/application_helper.rb +0 -3
  51. data/helpers/performance_test.rb +0 -9
  52. data/helpers/test_helper.rb +0 -38
  53. data/html/404.html +0 -30
  54. data/html/422.html +0 -30
  55. data/html/500.html +0 -30
  56. data/html/favicon.ico +0 -0
  57. data/html/images/rails.png +0 -0
  58. data/html/index.html +0 -275
  59. data/html/javascripts/application.js +0 -2
  60. data/html/javascripts/controls.js +0 -963
  61. data/html/javascripts/dragdrop.js +0 -973
  62. data/html/javascripts/effects.js +0 -1128
  63. data/html/javascripts/prototype.js +0 -4320
  64. data/html/robots.txt +0 -5
  65. data/lib/code_statistics.rb +0 -107
  66. data/lib/commands.rb +0 -17
  67. data/lib/commands/about.rb +0 -3
  68. data/lib/commands/console.rb +0 -45
  69. data/lib/commands/dbconsole.rb +0 -87
  70. data/lib/commands/destroy.rb +0 -6
  71. data/lib/commands/generate.rb +0 -6
  72. data/lib/commands/ncgi/listener +0 -86
  73. data/lib/commands/ncgi/tracker +0 -69
  74. data/lib/commands/performance/benchmarker.rb +0 -24
  75. data/lib/commands/performance/profiler.rb +0 -50
  76. data/lib/commands/plugin.rb +0 -968
  77. data/lib/commands/runner.rb +0 -54
  78. data/lib/commands/server.rb +0 -114
  79. data/lib/commands/update.rb +0 -4
  80. data/lib/console_app.rb +0 -30
  81. data/lib/console_sandbox.rb +0 -6
  82. data/lib/console_with_helpers.rb +0 -5
  83. data/lib/dispatcher.rb +0 -24
  84. data/lib/fcgi_handler.rb +0 -239
  85. data/lib/initializer.rb +0 -1152
  86. data/lib/performance_test_help.rb +0 -5
  87. data/lib/rails/backtrace_cleaner.rb +0 -54
  88. data/lib/rails/gem_builder.rb +0 -21
  89. data/lib/rails/gem_dependency.rb +0 -317
  90. data/lib/rails/plugin.rb +0 -179
  91. data/lib/rails/plugin/loader.rb +0 -198
  92. data/lib/rails/plugin/locator.rb +0 -100
  93. data/lib/rails/rack.rb +0 -8
  94. data/lib/rails/rack/debugger.rb +0 -23
  95. data/lib/rails/rack/log_tailer.rb +0 -35
  96. data/lib/rails/rack/metal.rb +0 -51
  97. data/lib/rails/rack/static.rb +0 -46
  98. data/lib/rails/vendor_gem_source_index.rb +0 -140
  99. data/lib/rails/version.rb +0 -9
  100. data/lib/rails_generator.rb +0 -46
  101. data/lib/rails_generator/base.rb +0 -266
  102. data/lib/rails_generator/commands.rb +0 -621
  103. data/lib/rails_generator/generated_attribute.rb +0 -47
  104. data/lib/rails_generator/generators/applications/app/USAGE +0 -9
  105. data/lib/rails_generator/generators/applications/app/app_generator.rb +0 -266
  106. data/lib/rails_generator/generators/applications/app/scm/git.rb +0 -18
  107. data/lib/rails_generator/generators/applications/app/scm/scm.rb +0 -8
  108. data/lib/rails_generator/generators/applications/app/scm/svn.rb +0 -7
  109. data/lib/rails_generator/generators/applications/app/template_runner.rb +0 -401
  110. data/lib/rails_generator/generators/components/controller/USAGE +0 -30
  111. data/lib/rails_generator/generators/components/controller/controller_generator.rb +0 -43
  112. data/lib/rails_generator/generators/components/controller/templates/controller.rb +0 -7
  113. data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +0 -8
  114. data/lib/rails_generator/generators/components/controller/templates/helper.rb +0 -2
  115. data/lib/rails_generator/generators/components/controller/templates/helper_test.rb +0 -4
  116. data/lib/rails_generator/generators/components/controller/templates/view.html.erb +0 -2
  117. data/lib/rails_generator/generators/components/helper/USAGE +0 -24
  118. data/lib/rails_generator/generators/components/helper/helper_generator.rb +0 -25
  119. data/lib/rails_generator/generators/components/helper/templates/helper.rb +0 -2
  120. data/lib/rails_generator/generators/components/helper/templates/helper_test.rb +0 -4
  121. data/lib/rails_generator/generators/components/integration_test/USAGE +0 -8
  122. data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +0 -16
  123. data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +0 -10
  124. data/lib/rails_generator/generators/components/mailer/USAGE +0 -16
  125. data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +0 -30
  126. data/lib/rails_generator/generators/components/mailer/templates/fixture.erb +0 -3
  127. data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +0 -0
  128. data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +0 -15
  129. data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +0 -20
  130. data/lib/rails_generator/generators/components/mailer/templates/view.erb +0 -3
  131. data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +0 -0
  132. data/lib/rails_generator/generators/components/metal/USAGE +0 -8
  133. data/lib/rails_generator/generators/components/metal/metal_generator.rb +0 -8
  134. data/lib/rails_generator/generators/components/metal/templates/metal.rb +0 -12
  135. data/lib/rails_generator/generators/components/migration/USAGE +0 -29
  136. data/lib/rails_generator/generators/components/migration/migration_generator.rb +0 -20
  137. data/lib/rails_generator/generators/components/migration/templates/migration.rb +0 -11
  138. data/lib/rails_generator/generators/components/model/USAGE +0 -27
  139. data/lib/rails_generator/generators/components/model/model_generator.rb +0 -52
  140. data/lib/rails_generator/generators/components/model/templates/fixtures.yml +0 -23
  141. data/lib/rails_generator/generators/components/model/templates/migration.rb +0 -16
  142. data/lib/rails_generator/generators/components/model/templates/model.rb +0 -5
  143. data/lib/rails_generator/generators/components/model/templates/unit_test.rb +0 -8
  144. data/lib/rails_generator/generators/components/observer/USAGE +0 -13
  145. data/lib/rails_generator/generators/components/observer/observer_generator.rb +0 -16
  146. data/lib/rails_generator/generators/components/observer/templates/observer.rb +0 -2
  147. data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +0 -8
  148. data/lib/rails_generator/generators/components/performance_test/USAGE +0 -8
  149. data/lib/rails_generator/generators/components/performance_test/performance_test_generator.rb +0 -16
  150. data/lib/rails_generator/generators/components/performance_test/templates/performance_test.rb +0 -9
  151. data/lib/rails_generator/generators/components/plugin/USAGE +0 -25
  152. data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +0 -39
  153. data/lib/rails_generator/generators/components/plugin/templates/MIT-LICENSE +0 -20
  154. data/lib/rails_generator/generators/components/plugin/templates/README +0 -13
  155. data/lib/rails_generator/generators/components/plugin/templates/Rakefile +0 -23
  156. data/lib/rails_generator/generators/components/plugin/templates/USAGE +0 -8
  157. data/lib/rails_generator/generators/components/plugin/templates/generator.rb +0 -8
  158. data/lib/rails_generator/generators/components/plugin/templates/init.rb +0 -1
  159. data/lib/rails_generator/generators/components/plugin/templates/install.rb +0 -1
  160. data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +0 -1
  161. data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +0 -4
  162. data/lib/rails_generator/generators/components/plugin/templates/test_helper.rb +0 -4
  163. data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +0 -1
  164. data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +0 -8
  165. data/lib/rails_generator/generators/components/resource/USAGE +0 -23
  166. data/lib/rails_generator/generators/components/resource/resource_generator.rb +0 -76
  167. data/lib/rails_generator/generators/components/resource/templates/controller.rb +0 -2
  168. data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +0 -8
  169. data/lib/rails_generator/generators/components/resource/templates/helper.rb +0 -2
  170. data/lib/rails_generator/generators/components/resource/templates/helper_test.rb +0 -4
  171. data/lib/rails_generator/generators/components/scaffold/USAGE +0 -29
  172. data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +0 -103
  173. data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +0 -83
  174. data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +0 -45
  175. data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +0 -2
  176. data/lib/rails_generator/generators/components/scaffold/templates/helper_test.rb +0 -4
  177. data/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb +0 -17
  178. data/lib/rails_generator/generators/components/scaffold/templates/style.css +0 -54
  179. data/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +0 -18
  180. data/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb +0 -24
  181. data/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb +0 -17
  182. data/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb +0 -10
  183. data/lib/rails_generator/generators/components/session_migration/USAGE +0 -10
  184. data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +0 -18
  185. data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +0 -16
  186. data/lib/rails_generator/lookup.rb +0 -249
  187. data/lib/rails_generator/manifest.rb +0 -53
  188. data/lib/rails_generator/options.rb +0 -150
  189. data/lib/rails_generator/scripts.rb +0 -89
  190. data/lib/rails_generator/scripts/destroy.rb +0 -29
  191. data/lib/rails_generator/scripts/generate.rb +0 -7
  192. data/lib/rails_generator/scripts/update.rb +0 -12
  193. data/lib/rails_generator/secret_key_generator.rb +0 -24
  194. data/lib/rails_generator/simple_logger.rb +0 -46
  195. data/lib/rails_generator/spec.rb +0 -44
  196. data/lib/railties_path.rb +0 -1
  197. data/lib/ruby_version_check.rb +0 -17
  198. data/lib/rubyprof_ext.rb +0 -35
  199. data/lib/source_annotation_extractor.rb +0 -102
  200. data/lib/tasks/annotations.rake +0 -20
  201. data/lib/tasks/databases.rake +0 -436
  202. data/lib/tasks/documentation.rake +0 -93
  203. data/lib/tasks/framework.rake +0 -146
  204. data/lib/tasks/gems.rake +0 -78
  205. data/lib/tasks/log.rake +0 -9
  206. data/lib/tasks/middleware.rake +0 -7
  207. data/lib/tasks/misc.rake +0 -63
  208. data/lib/tasks/rails.rb +0 -14
  209. data/lib/tasks/routes.rake +0 -18
  210. data/lib/tasks/statistics.rake +0 -17
  211. data/lib/tasks/testing.rake +0 -139
  212. data/lib/tasks/tmp.rake +0 -37
  213. data/lib/test_help.rb +0 -38
  214. data/lib/webrick_server.rb +0 -156
  215. data/railties.gemspec +0 -22
@@ -1,139 +0,0 @@
1
- TEST_CHANGES_SINCE = Time.now - 600
2
-
3
- # Look up tests for recently modified sources.
4
- def recent_tests(source_pattern, test_path, touched_since = 10.minutes.ago)
5
- FileList[source_pattern].map do |path|
6
- if File.mtime(path) > touched_since
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.exist?(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.exist?(test)
21
-
22
- return tests
23
-
24
- end
25
- end.flatten.compact
26
- end
27
-
28
-
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
39
- end
40
-
41
- desc 'Run all unit, functional and integration tests'
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(:locale => :en)}!" if errors.any?
52
- end
53
-
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)
60
-
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"
66
-
67
- Rake::TestTask.new(:uncommitted => "db:test:prepare") do |t|
68
- def t.file_list
69
- if File.directory?(".svn")
70
- changed_since_checkin = silence_stderr { `svn status` }.map { |path| path.chomp[7 .. -1] }
71
- elsif File.directory?(".git")
72
- changed_since_checkin = silence_stderr { `git ls-files --modified --others` }.map { |path| path.chomp }
73
- else
74
- abort "Not a Subversion or Git checkout."
75
- end
76
-
77
- models = changed_since_checkin.select { |path| path =~ /app[\\\/]models[\\\/].*\.rb$/ }
78
- controllers = changed_since_checkin.select { |path| path =~ /app[\\\/]controllers[\\\/].*\.rb$/ }
79
-
80
- unit_tests = models.map { |model| "test/unit/#{File.basename(model, '.rb')}_test.rb" }
81
- functional_tests = controllers.map { |controller| "test/functional/#{File.basename(controller, '.rb')}_test.rb" }
82
-
83
- unit_tests.uniq + functional_tests.uniq
84
- end
85
-
86
- t.libs << 'test'
87
- t.verbose = true
88
- end
89
- Rake::Task['test:uncommitted'].comment = "Test changes since last checkin (only Subversion and Git)"
90
-
91
- Rake::TestTask.new(:units => "db:test:prepare") do |t|
92
- t.libs << "test"
93
- t.pattern = 'test/unit/**/*_test.rb'
94
- t.verbose = true
95
- end
96
- Rake::Task['test:units'].comment = "Run the unit tests in test/unit"
97
-
98
- Rake::TestTask.new(:functionals => "db:test:prepare") do |t|
99
- t.libs << "test"
100
- t.pattern = 'test/functional/**/*_test.rb'
101
- t.verbose = true
102
- end
103
- Rake::Task['test:functionals'].comment = "Run the functional tests in test/functional"
104
-
105
- Rake::TestTask.new(:integration => "db:test:prepare") do |t|
106
- t.libs << "test"
107
- t.pattern = 'test/integration/**/*_test.rb'
108
- t.verbose = true
109
- end
110
- Rake::Task['test:integration'].comment = "Run the integration tests in test/integration"
111
-
112
- Rake::TestTask.new(:benchmark => 'db:test:prepare') do |t|
113
- t.libs << 'test'
114
- t.pattern = 'test/performance/**/*_test.rb'
115
- t.verbose = true
116
- t.options = '-- --benchmark'
117
- end
118
- Rake::Task['test:benchmark'].comment = 'Benchmark the performance tests'
119
-
120
- Rake::TestTask.new(:profile => 'db:test:prepare') do |t|
121
- t.libs << 'test'
122
- t.pattern = 'test/performance/**/*_test.rb'
123
- t.verbose = true
124
- end
125
- Rake::Task['test:profile'].comment = 'Profile the performance tests'
126
-
127
- Rake::TestTask.new(:plugins => :environment) do |t|
128
- t.libs << "test"
129
-
130
- if ENV['PLUGIN']
131
- t.pattern = "vendor/plugins/#{ENV['PLUGIN']}/test/**/*_test.rb"
132
- else
133
- t.pattern = 'vendor/plugins/*/**/test/**/*_test.rb'
134
- end
135
-
136
- t.verbose = true
137
- end
138
- Rake::Task['test:plugins'].comment = "Run the plugin tests in vendor/plugins/*/**/test (or specify with PLUGIN=name)"
139
- end
@@ -1,37 +0,0 @@
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, sockets, and pids"
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
@@ -1,38 +0,0 @@
1
- # Make double-sure the RAILS_ENV is set to test,
2
- # so fixtures are loaded to the right database
3
- silence_warnings { RAILS_ENV = "test" }
4
-
5
- require 'test/unit'
6
- require 'action_controller/test_case'
7
- require 'action_view/test_case'
8
- require 'action_controller/integration'
9
- require 'action_mailer/test_case' if defined?(ActionMailer)
10
-
11
- if defined?(ActiveRecord)
12
- require 'active_record/test_case'
13
- require 'active_record/fixtures'
14
-
15
- class ActiveSupport::TestCase
16
- include ActiveRecord::TestFixtures
17
- self.fixture_path = "#{RAILS_ROOT}/test/fixtures/"
18
- self.use_instantiated_fixtures = false
19
- self.use_transactional_fixtures = true
20
- end
21
-
22
- ActionController::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
23
-
24
- def create_fixtures(*table_names, &block)
25
- Fixtures.create_fixtures(ActiveSupport::TestCase.fixture_path, table_names, {}, &block)
26
- end
27
- end
28
-
29
- begin
30
- require_library_or_gem 'ruby-debug'
31
- Debugger.start
32
- if Debugger.respond_to?(:settings)
33
- Debugger.settings[:autoeval] = true
34
- Debugger.settings[:autolist] = 1
35
- end
36
- rescue LoadError
37
- # ruby-debug wasn't available so neither can the debugging be
38
- end
@@ -1,156 +0,0 @@
1
- # Donated by Florian Gross
2
-
3
- require 'webrick'
4
- require 'cgi'
5
- require 'stringio'
6
- require 'dispatcher'
7
-
8
- include WEBrick
9
-
10
- class CGI #:nodoc:
11
- def stdinput
12
- @stdin || $stdin
13
- end
14
-
15
- def env_table
16
- @env_table || ENV
17
- end
18
-
19
- def initialize(type = "query", table = nil, stdin = nil)
20
- @env_table, @stdin = table, stdin
21
-
22
- if defined?(MOD_RUBY) && !ENV.key?("GATEWAY_INTERFACE")
23
- Apache.request.setup_cgi_env
24
- end
25
-
26
- extend QueryExtension
27
- @multipart = false
28
- if defined?(CGI_PARAMS)
29
- warn "do not use CGI_PARAMS and CGI_COOKIES"
30
- @params = CGI_PARAMS.dup
31
- @cookies = CGI_COOKIES.dup
32
- else
33
- initialize_query() # set @params, @cookies
34
- end
35
- @output_cookies = nil
36
- @output_hidden = nil
37
- end
38
- end
39
-
40
- # A custom dispatch servlet for use with WEBrick. It dispatches requests
41
- # (using the Rails Dispatcher) to the appropriate controller/action. By default,
42
- # it restricts WEBrick to a managing a single Rails request at a time, but you
43
- # can change this behavior by setting ActionController::Base.allow_concurrency
44
- # to true.
45
- class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
46
- # Start the WEBrick server with the given options, mounting the
47
- # DispatchServlet at <tt>/</tt>.
48
- def self.dispatch(options = {})
49
- Socket.do_not_reverse_lookup = true # patch for OS X
50
-
51
- params = { :Port => options[:port].to_i,
52
- :ServerType => options[:server_type],
53
- :BindAddress => options[:ip] }
54
- params[:MimeTypes] = options[:mime_types] if options[:mime_types]
55
-
56
- server = WEBrick::HTTPServer.new(params)
57
- server.mount('/', DispatchServlet, options)
58
-
59
- trap("INT") { server.shutdown }
60
- server.start
61
- end
62
-
63
- def initialize(server, options) #:nodoc:
64
- @server_options = options
65
- @file_handler = WEBrick::HTTPServlet::FileHandler.new(server, options[:server_root])
66
- # Change to the RAILS_ROOT, since Webrick::Daemon.start does a Dir::cwd("/")
67
- # OPTIONS['working_directory'] is an absolute path of the RAILS_ROOT, set in railties/lib/commands/servers/webrick.rb
68
- Dir.chdir(OPTIONS['working_directory']) if defined?(OPTIONS) && File.directory?(OPTIONS['working_directory'])
69
- super
70
- end
71
-
72
- def service(req, res) #:nodoc:
73
- unless handle_file(req, res)
74
- unless handle_dispatch(req, res)
75
- raise WEBrick::HTTPStatus::NotFound, "`#{req.path}' not found."
76
- end
77
- end
78
- end
79
-
80
- def handle_file(req, res) #:nodoc:
81
- begin
82
- req = req.dup
83
- path = req.path.dup
84
-
85
- # Add .html if the last path piece has no . in it
86
- path << '.html' if path != '/' && (%r{(^|/)[^./]+$} =~ path)
87
- path.gsub!('+', ' ') # Unescape + since FileHandler doesn't do so.
88
-
89
- req.instance_variable_set(:@path_info, path) # Set the modified path...
90
-
91
- @file_handler.send(:service, req, res)
92
- return true
93
- rescue HTTPStatus::PartialContent, HTTPStatus::NotModified => err
94
- res.set_error(err)
95
- return true
96
- rescue => err
97
- return false
98
- end
99
- end
100
-
101
- def handle_dispatch(req, res, origin = nil) #:nodoc:
102
- data = StringIO.new
103
- Dispatcher.dispatch(
104
- CGI.new("query", create_env_table(req, origin), StringIO.new(req.body || "")),
105
- ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS,
106
- data
107
- )
108
-
109
- header, body = extract_header_and_body(data)
110
-
111
- set_charset(header)
112
- assign_status(res, header)
113
- res.cookies.concat(header.delete('set-cookie') || [])
114
- header.each { |key, val| res[key] = val.join(", ") }
115
-
116
- res.body = body
117
- return true
118
- rescue => err
119
- p err, err.backtrace
120
- return false
121
- end
122
-
123
- private
124
- def create_env_table(req, origin)
125
- env = req.meta_vars.clone
126
- env.delete "SCRIPT_NAME"
127
- env["QUERY_STRING"] = req.request_uri.query
128
- env["REQUEST_URI"] = origin if origin
129
- return env
130
- end
131
-
132
- def extract_header_and_body(data)
133
- data.rewind
134
- data = data.read
135
-
136
- raw_header, body = *data.split(/^[\xd\xa]{2}/on, 2)
137
- header = WEBrick::HTTPUtils::parse_header(raw_header)
138
-
139
- return header, body
140
- end
141
-
142
- def set_charset(header)
143
- ct = header["content-type"]
144
- if ct.any? { |x| x =~ /^text\// } && ! ct.any? { |x| x =~ /charset=/ }
145
- ch = @server_options[:charset] || "UTF-8"
146
- ct.find { |x| x =~ /^text\// } << ("; charset=" + ch)
147
- end
148
- end
149
-
150
- def assign_status(res, header)
151
- if /^(\d+)/ =~ header['status'][0]
152
- res.status = $1.to_i
153
- header.delete('status')
154
- end
155
- end
156
- end
@@ -1,22 +0,0 @@
1
- Gem::Specification.new do |s|
2
- s.name = 'rails'
3
- s.version = '2.3.18'
4
- s.summary = 'Web-application framework with template engine, control-flow layer, and ORM.'
5
- s.description = "Rails is a framework for building web-application using CGI, FCGI, mod_ruby, or WEBrick\non top of either MySQL, PostgreSQL, SQLite, DB2, SQL Server, or Oracle with eRuby- or Builder-based templates."
6
-
7
- s.author = 'David Heinemeier Hansson'
8
- s.email = 'david@loudthinking.com'
9
- s.homepage = 'http://www.rubyonrails.org'
10
-
11
- s.require_path = 'lib'
12
- s.files = ['bin/rails']
13
- s.executables = ['rails']
14
- s.rdoc_options = ['--exclude', '.']
15
-
16
- s.add_dependency 'rake', '>= 0.8.3'
17
- s.add_dependency 'activesupport', '= 2.3.18'
18
- s.add_dependency 'activerecord', '= 2.3.18'
19
- s.add_dependency 'actionpack', '= 2.3.18'
20
- s.add_dependency 'actionmailer', '= 2.3.18'
21
- s.add_dependency 'activeresource', '= 2.3.18'
22
- end