railties 3.0.0.beta
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 +2201 -0
- data/README +286 -0
- data/bin/rails +11 -0
- data/builtin/rails_info/rails/info.rb +147 -0
- data/builtin/rails_info/rails/info_controller.rb +15 -0
- data/builtin/rails_info/rails/info_helper.rb +2 -0
- data/builtin/routes.rb +3 -0
- data/guides/files/javascripts/code_highlighter.js +188 -0
- data/guides/files/javascripts/guides.js +7 -0
- data/guides/files/javascripts/highlighters.js +90 -0
- data/guides/files/stylesheets/main.css +441 -0
- data/guides/files/stylesheets/print.css +52 -0
- data/guides/files/stylesheets/reset.css +43 -0
- data/guides/files/stylesheets/style.css +13 -0
- data/guides/files/stylesheets/syntax.css +31 -0
- data/guides/images/belongs_to.png +0 -0
- data/guides/images/book_icon.gif +0 -0
- data/guides/images/bullet.gif +0 -0
- data/guides/images/chapters_icon.gif +0 -0
- data/guides/images/check_bullet.gif +0 -0
- data/guides/images/credits_pic_blank.gif +0 -0
- data/guides/images/csrf.png +0 -0
- data/guides/images/customized_error_messages.png +0 -0
- data/guides/images/error_messages.png +0 -0
- data/guides/images/feature_tile.gif +0 -0
- data/guides/images/footer_tile.gif +0 -0
- data/guides/images/fxn.png +0 -0
- data/guides/images/grey_bullet.gif +0 -0
- data/guides/images/habtm.png +0 -0
- data/guides/images/has_many.png +0 -0
- data/guides/images/has_many_through.png +0 -0
- data/guides/images/has_one.png +0 -0
- data/guides/images/has_one_through.png +0 -0
- data/guides/images/header_backdrop.png +0 -0
- data/guides/images/header_tile.gif +0 -0
- data/guides/images/i18n/demo_localized_pirate.png +0 -0
- data/guides/images/i18n/demo_translated_en.png +0 -0
- data/guides/images/i18n/demo_translated_pirate.png +0 -0
- data/guides/images/i18n/demo_translation_missing.png +0 -0
- data/guides/images/i18n/demo_untranslated.png +0 -0
- data/guides/images/icons/README +5 -0
- data/guides/images/icons/callouts/1.png +0 -0
- data/guides/images/icons/callouts/10.png +0 -0
- data/guides/images/icons/callouts/11.png +0 -0
- data/guides/images/icons/callouts/12.png +0 -0
- data/guides/images/icons/callouts/13.png +0 -0
- data/guides/images/icons/callouts/14.png +0 -0
- data/guides/images/icons/callouts/15.png +0 -0
- data/guides/images/icons/callouts/2.png +0 -0
- data/guides/images/icons/callouts/3.png +0 -0
- data/guides/images/icons/callouts/4.png +0 -0
- data/guides/images/icons/callouts/5.png +0 -0
- data/guides/images/icons/callouts/6.png +0 -0
- data/guides/images/icons/callouts/7.png +0 -0
- data/guides/images/icons/callouts/8.png +0 -0
- data/guides/images/icons/callouts/9.png +0 -0
- data/guides/images/icons/caution.png +0 -0
- data/guides/images/icons/example.png +0 -0
- data/guides/images/icons/home.png +0 -0
- data/guides/images/icons/important.png +0 -0
- data/guides/images/icons/next.png +0 -0
- data/guides/images/icons/note.png +0 -0
- data/guides/images/icons/prev.png +0 -0
- data/guides/images/icons/tip.png +0 -0
- data/guides/images/icons/up.png +0 -0
- data/guides/images/icons/warning.png +0 -0
- data/guides/images/nav_arrow.gif +0 -0
- data/guides/images/polymorphic.png +0 -0
- data/guides/images/posts_index.png +0 -0
- data/guides/images/rails_guides_logo.gif +0 -0
- data/guides/images/rails_logo_remix.gif +0 -0
- data/guides/images/rails_welcome.png +0 -0
- data/guides/images/session_fixation.png +0 -0
- data/guides/images/tab_grey.gif +0 -0
- data/guides/images/tab_info.gif +0 -0
- data/guides/images/tab_note.gif +0 -0
- data/guides/images/tab_red.gif +0 -0
- data/guides/images/tab_yellow.gif +0 -0
- data/guides/images/tab_yellow.png +0 -0
- data/guides/images/validation_error_messages.png +0 -0
- data/guides/rails_guides.rb +44 -0
- data/guides/rails_guides/generator.rb +178 -0
- data/guides/rails_guides/helpers.rb +34 -0
- data/guides/rails_guides/indexer.rb +55 -0
- data/guides/rails_guides/levenshtein.rb +31 -0
- data/guides/rails_guides/textile_extensions.rb +41 -0
- data/guides/source/2_2_release_notes.textile +422 -0
- data/guides/source/2_3_release_notes.textile +610 -0
- data/guides/source/3_0_release_notes.textile +560 -0
- data/guides/source/action_controller_overview.textile +783 -0
- data/guides/source/action_mailer_basics.textile +437 -0
- data/guides/source/action_view_overview.textile +1481 -0
- data/guides/source/active_record_basics.textile +204 -0
- data/guides/source/active_record_querying.textile +961 -0
- data/guides/source/active_support_core_extensions.textile +1835 -0
- data/guides/source/activerecord_validations_callbacks.textile +1127 -0
- data/guides/source/ajax_on_rails.textile +342 -0
- data/guides/source/association_basics.textile +1816 -0
- data/guides/source/caching_with_rails.textile +390 -0
- data/guides/source/command_line.textile +589 -0
- data/guides/source/configuring.textile +290 -0
- data/guides/source/contribute.textile +71 -0
- data/guides/source/contributing_to_rails.textile +272 -0
- data/guides/source/credits.textile.erb +52 -0
- data/guides/source/debugging_rails_applications.textile +709 -0
- data/guides/source/form_helpers.textile +768 -0
- data/guides/source/generators.textile +378 -0
- data/guides/source/getting_started.textile +1310 -0
- data/guides/source/i18n.textile +879 -0
- data/guides/source/index.textile.erb +124 -0
- data/guides/source/layout.html.erb +103 -0
- data/guides/source/layouts_and_rendering.textile +979 -0
- data/guides/source/migrations.textile +591 -0
- data/guides/source/nested_model_forms.textile +222 -0
- data/guides/source/performance_testing.textile +531 -0
- data/guides/source/plugins.textile +1512 -0
- data/guides/source/rails_application_templates.textile +238 -0
- data/guides/source/rails_on_rack.textile +306 -0
- data/guides/source/routing.textile +903 -0
- data/guides/source/security.textile +984 -0
- data/guides/source/testing.textile +946 -0
- data/lib/generators/erb.rb +8 -0
- data/lib/generators/erb/controller/controller_generator.rb +21 -0
- data/lib/generators/erb/controller/templates/view.html.erb +2 -0
- data/lib/generators/erb/mailer/mailer_generator.rb +20 -0
- data/lib/generators/erb/mailer/templates/view.text.erb +3 -0
- data/lib/generators/erb/scaffold/scaffold_generator.rb +53 -0
- data/lib/generators/erb/scaffold/templates/_form.html.erb +13 -0
- data/lib/generators/erb/scaffold/templates/edit.html.erb +6 -0
- data/lib/generators/erb/scaffold/templates/index.html.erb +27 -0
- data/lib/generators/erb/scaffold/templates/layout.html.erb +16 -0
- data/lib/generators/erb/scaffold/templates/new.html.erb +5 -0
- data/lib/generators/erb/scaffold/templates/show.html.erb +10 -0
- data/lib/generators/rails/app/USAGE +9 -0
- data/lib/generators/rails/app/app_generator.rb +262 -0
- data/lib/generators/rails/app/templates/Gemfile +34 -0
- data/lib/generators/rails/app/templates/README +243 -0
- data/lib/generators/rails/app/templates/Rakefile +10 -0
- data/lib/generators/rails/app/templates/app/controllers/application_controller.rb +3 -0
- data/lib/generators/rails/app/templates/app/helpers/application_helper.rb +2 -0
- data/lib/generators/rails/app/templates/app/models/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/app/views/layouts/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/config.ru +4 -0
- data/lib/generators/rails/app/templates/config/application.rb +51 -0
- data/lib/generators/rails/app/templates/config/boot.rb +17 -0
- data/lib/generators/rails/app/templates/config/databases/frontbase.yml +28 -0
- data/lib/generators/rails/app/templates/config/databases/ibm_db.yml +71 -0
- data/lib/generators/rails/app/templates/config/databases/mysql.yml +60 -0
- data/lib/generators/rails/app/templates/config/databases/oracle.yml +39 -0
- data/lib/generators/rails/app/templates/config/databases/postgresql.yml +51 -0
- data/lib/generators/rails/app/templates/config/databases/sqlite3.yml +22 -0
- data/lib/generators/rails/app/templates/config/environment.rb +5 -0
- data/lib/generators/rails/app/templates/config/environments/development.rb.tt +19 -0
- data/lib/generators/rails/app/templates/config/environments/production.rb.tt +33 -0
- data/lib/generators/rails/app/templates/config/environments/test.rb.tt +29 -0
- data/lib/generators/rails/app/templates/config/initializers/backtrace_silencers.rb +7 -0
- data/lib/generators/rails/app/templates/config/initializers/cookie_verification_secret.rb.tt +7 -0
- data/lib/generators/rails/app/templates/config/initializers/inflections.rb +10 -0
- data/lib/generators/rails/app/templates/config/initializers/mime_types.rb +5 -0
- data/lib/generators/rails/app/templates/config/initializers/session_store.rb.tt +15 -0
- data/lib/generators/rails/app/templates/config/locales/en.yml +5 -0
- data/lib/generators/rails/app/templates/config/routes.rb +58 -0
- data/lib/generators/rails/app/templates/db/seeds.rb +7 -0
- data/lib/generators/rails/app/templates/doc/README_FOR_APP +2 -0
- data/lib/generators/rails/app/templates/gitignore +4 -0
- data/lib/generators/rails/app/templates/public/404.html +26 -0
- data/lib/generators/rails/app/templates/public/422.html +26 -0
- data/lib/generators/rails/app/templates/public/500.html +26 -0
- data/lib/generators/rails/app/templates/public/favicon.ico +0 -0
- data/lib/generators/rails/app/templates/public/images/rails.png +0 -0
- data/lib/generators/rails/app/templates/public/index.html +278 -0
- data/lib/generators/rails/app/templates/public/javascripts/application.js +2 -0
- data/lib/generators/rails/app/templates/public/javascripts/controls.js +963 -0
- data/lib/generators/rails/app/templates/public/javascripts/dragdrop.js +973 -0
- data/lib/generators/rails/app/templates/public/javascripts/effects.js +1128 -0
- data/lib/generators/rails/app/templates/public/javascripts/prototype.js +4320 -0
- data/lib/generators/rails/app/templates/public/javascripts/rails.js +110 -0
- data/lib/generators/rails/app/templates/public/robots.txt +5 -0
- data/lib/generators/rails/app/templates/public/stylesheets/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/script/rails +9 -0
- data/lib/generators/rails/app/templates/test/fixtures/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/test/functional/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/test/integration/.empty_directory +0 -0
- data/lib/generators/rails/app/templates/test/performance/browsing_test.rb +9 -0
- data/lib/generators/rails/app/templates/test/test_helper.rb +13 -0
- data/lib/generators/rails/app/templates/test/unit/.empty_directory +0 -0
- data/lib/generators/rails/controller/USAGE +18 -0
- data/lib/generators/rails/controller/controller_generator.rb +14 -0
- data/lib/generators/rails/controller/templates/controller.rb +7 -0
- data/lib/generators/rails/generator/USAGE +11 -0
- data/lib/generators/rails/generator/generator_generator.rb +25 -0
- data/lib/generators/rails/generator/templates/%file_name%_generator.rb.tt +5 -0
- data/lib/generators/rails/generator/templates/USAGE.tt +8 -0
- data/lib/generators/rails/generator/templates/templates/.empty_directory +0 -0
- data/lib/generators/rails/helper/USAGE +17 -0
- data/lib/generators/rails/helper/helper_generator.rb +13 -0
- data/lib/generators/rails/helper/templates/helper.rb +2 -0
- data/lib/generators/rails/integration_test/USAGE +10 -0
- data/lib/generators/rails/integration_test/integration_test_generator.rb +7 -0
- data/lib/generators/rails/mailer/USAGE +15 -0
- data/lib/generators/rails/mailer/mailer_generator.rb +14 -0
- data/lib/generators/rails/mailer/templates/mailer.rb +16 -0
- data/lib/generators/rails/metal/USAGE +8 -0
- data/lib/generators/rails/metal/metal_generator.rb +11 -0
- data/lib/generators/rails/metal/templates/metal.rb +12 -0
- data/lib/generators/rails/migration/USAGE +29 -0
- data/lib/generators/rails/migration/migration_generator.rb +8 -0
- data/lib/generators/rails/model/USAGE +30 -0
- data/lib/generators/rails/model/model_generator.rb +8 -0
- data/lib/generators/rails/model_subclass/model_subclass_generator.rb +12 -0
- data/lib/generators/rails/observer/USAGE +12 -0
- data/lib/generators/rails/observer/observer_generator.rb +7 -0
- data/lib/generators/rails/performance_test/USAGE +10 -0
- data/lib/generators/rails/performance_test/performance_test_generator.rb +7 -0
- data/lib/generators/rails/plugin/USAGE +13 -0
- data/lib/generators/rails/plugin/plugin_generator.rb +47 -0
- data/lib/generators/rails/plugin/templates/MIT-LICENSE.tt +20 -0
- data/lib/generators/rails/plugin/templates/README.tt +13 -0
- data/lib/generators/rails/plugin/templates/Rakefile.tt +10 -0
- data/lib/generators/rails/plugin/templates/init.rb +1 -0
- data/lib/generators/rails/plugin/templates/install.rb +1 -0
- data/lib/generators/rails/plugin/templates/lib/%file_name%.rb.tt +1 -0
- data/lib/generators/rails/plugin/templates/lib/tasks/%file_name%_tasks.rake.tt +4 -0
- data/lib/generators/rails/plugin/templates/uninstall.rb +1 -0
- data/lib/generators/rails/resource/USAGE +23 -0
- data/lib/generators/rails/resource/resource_generator.rb +34 -0
- data/lib/generators/rails/scaffold/USAGE +29 -0
- data/lib/generators/rails/scaffold/scaffold_generator.rb +13 -0
- data/lib/generators/rails/scaffold_controller/USAGE +20 -0
- data/lib/generators/rails/scaffold_controller/scaffold_controller_generator.rb +27 -0
- data/lib/generators/rails/scaffold_controller/templates/controller.rb +85 -0
- data/lib/generators/rails/session_migration/USAGE +8 -0
- data/lib/generators/rails/session_migration/session_migration_generator.rb +8 -0
- data/lib/generators/rails/stylesheets/USAGE +5 -0
- data/lib/generators/rails/stylesheets/stylesheets_generator.rb +9 -0
- data/lib/generators/rails/stylesheets/templates/scaffold.css +61 -0
- data/lib/generators/test_unit.rb +8 -0
- data/lib/generators/test_unit/controller/controller_generator.rb +14 -0
- data/lib/generators/test_unit/controller/templates/functional_test.rb +8 -0
- data/lib/generators/test_unit/helper/helper_generator.rb +13 -0
- data/lib/generators/test_unit/helper/templates/helper_test.rb +4 -0
- data/lib/generators/test_unit/integration/integration_generator.rb +13 -0
- data/lib/generators/test_unit/integration/templates/integration_test.rb +10 -0
- data/lib/generators/test_unit/mailer/mailer_generator.rb +21 -0
- data/lib/generators/test_unit/mailer/templates/fixture +3 -0
- data/lib/generators/test_unit/mailer/templates/functional_test.rb +22 -0
- data/lib/generators/test_unit/model/model_generator.rb +24 -0
- data/lib/generators/test_unit/model/templates/fixtures.yml +23 -0
- data/lib/generators/test_unit/model/templates/unit_test.rb +8 -0
- data/lib/generators/test_unit/observer/observer_generator.rb +13 -0
- data/lib/generators/test_unit/observer/templates/unit_test.rb +8 -0
- data/lib/generators/test_unit/performance/performance_generator.rb +13 -0
- data/lib/generators/test_unit/performance/templates/performance_test.rb +9 -0
- data/lib/generators/test_unit/plugin/plugin_generator.rb +13 -0
- data/lib/generators/test_unit/plugin/templates/%file_name%_test.rb.tt +8 -0
- data/lib/generators/test_unit/plugin/templates/test_helper.rb +3 -0
- data/lib/generators/test_unit/scaffold/scaffold_generator.rb +18 -0
- data/lib/generators/test_unit/scaffold/templates/functional_test.rb +47 -0
- data/lib/rails.rb +95 -0
- data/lib/rails/all.rb +14 -0
- data/lib/rails/application.rb +125 -0
- data/lib/rails/application/bootstrap.rb +85 -0
- data/lib/rails/application/configurable.rb +19 -0
- data/lib/rails/application/configuration.rb +86 -0
- data/lib/rails/application/finisher.rb +49 -0
- data/lib/rails/application/metal_loader.rb +50 -0
- data/lib/rails/application/railties.rb +31 -0
- data/lib/rails/application/routes_reloader.rb +46 -0
- data/lib/rails/backtrace_cleaner.rb +54 -0
- data/lib/rails/code_statistics.rb +107 -0
- data/lib/rails/commands.rb +72 -0
- data/lib/rails/commands/application.rb +13 -0
- data/lib/rails/commands/console.rb +55 -0
- data/lib/rails/commands/dbconsole.rb +104 -0
- data/lib/rails/commands/destroy.rb +9 -0
- data/lib/rails/commands/generate.rb +9 -0
- data/lib/rails/commands/performance/benchmarker.rb +23 -0
- data/lib/rails/commands/performance/profiler.rb +46 -0
- data/lib/rails/commands/plugin.rb +542 -0
- data/lib/rails/commands/runner.rb +51 -0
- data/lib/rails/commands/server.rb +75 -0
- data/lib/rails/commands/update.rb +9 -0
- data/lib/rails/configuration.rb +191 -0
- data/lib/rails/console/app.rb +33 -0
- data/lib/rails/console/helpers.rb +5 -0
- data/lib/rails/console/sandbox.rb +6 -0
- data/lib/rails/deprecation.rb +62 -0
- data/lib/rails/dispatcher.rb +24 -0
- data/lib/rails/engine.rb +130 -0
- data/lib/rails/engine/configurable.rb +25 -0
- data/lib/rails/engine/configuration.rb +49 -0
- data/lib/rails/generators.rb +289 -0
- data/lib/rails/generators/actions.rb +309 -0
- data/lib/rails/generators/active_model.rb +78 -0
- data/lib/rails/generators/base.rb +362 -0
- data/lib/rails/generators/generated_attribute.rb +48 -0
- data/lib/rails/generators/migration.rb +64 -0
- data/lib/rails/generators/named_base.rb +95 -0
- data/lib/rails/generators/resource_helpers.rb +80 -0
- data/lib/rails/generators/test_case.rb +239 -0
- data/lib/rails/initializable.rb +97 -0
- data/lib/rails/paths.rb +144 -0
- data/lib/rails/performance_test_help.rb +3 -0
- data/lib/rails/plugin.rb +64 -0
- data/lib/rails/rack.rb +8 -0
- data/lib/rails/rack/debugger.rb +23 -0
- data/lib/rails/rack/log_tailer.rb +33 -0
- data/lib/rails/rack/logger.rb +34 -0
- data/lib/rails/rack/static.rb +5 -0
- data/lib/rails/railtie.rb +74 -0
- data/lib/rails/railtie/configurable.rb +23 -0
- data/lib/rails/railtie/configuration.rb +9 -0
- data/lib/rails/railties_path.rb +1 -0
- data/lib/rails/ruby_version_check.rb +10 -0
- data/lib/rails/rubyprof_ext.rb +35 -0
- data/lib/rails/source_annotation_extractor.rb +102 -0
- data/lib/rails/subscriber.rb +108 -0
- data/lib/rails/subscriber/test_helper.rb +98 -0
- data/lib/rails/tasks.rb +16 -0
- data/lib/rails/tasks/annotations.rake +20 -0
- data/lib/rails/tasks/documentation.rake +96 -0
- data/lib/rails/tasks/framework.rake +69 -0
- data/lib/rails/tasks/log.rake +9 -0
- data/lib/rails/tasks/middleware.rake +7 -0
- data/lib/rails/tasks/misc.rake +71 -0
- data/lib/rails/tasks/routes.rake +17 -0
- data/lib/rails/tasks/statistics.rake +16 -0
- data/lib/rails/tasks/tmp.rake +37 -0
- data/lib/rails/test_help.rb +30 -0
- data/lib/rails/test_unit/railtie.rb +17 -0
- data/lib/rails/test_unit/testing.rake +130 -0
- data/lib/rails/version.rb +9 -0
- data/lib/rails/webrick_server.rb +156 -0
- metadata +427 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
namespace :rails do
|
|
2
|
+
namespace :freeze do
|
|
3
|
+
desc "The rails:freeze:gems is deprecated, please use bundle install instead"
|
|
4
|
+
task :gems do
|
|
5
|
+
puts "The rails:freeze:gems is deprecated, please use bundle install instead"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
desc 'The freeze:edge command has been deprecated, specify the path setting in your app Gemfile instead and bundle install'
|
|
9
|
+
task :edge do
|
|
10
|
+
puts 'The freeze:edge command has been deprecated, specify the path setting in your app Gemfile instead and bundle install'
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
desc 'The unfreeze command has been deprecated, please use bundler commands instead'
|
|
15
|
+
task :unfreeze do
|
|
16
|
+
puts 'The unfreeze command has been deprecated, please use bundler commands instead'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
desc "Update both configs, scripts and public/javascripts from Rails"
|
|
20
|
+
task :update => [ "update:configs", "update:javascripts", "update:scripts", "update:application_controller" ]
|
|
21
|
+
|
|
22
|
+
desc "Applies the template supplied by LOCATION=/path/to/template"
|
|
23
|
+
task :template do
|
|
24
|
+
template = ENV["LOCATION"]
|
|
25
|
+
template = File.expand_path(template) if template !~ %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://}
|
|
26
|
+
|
|
27
|
+
require 'rails/generators'
|
|
28
|
+
require 'generators/rails/app/app_generator'
|
|
29
|
+
generator = Rails::Generators::AppGenerator.new [ Rails.root ], {}, :destination_root => Rails.root
|
|
30
|
+
generator.apply template, :verbose => false
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
namespace :update do
|
|
34
|
+
def invoke_from_app_generator(method)
|
|
35
|
+
require 'rails/generators'
|
|
36
|
+
require 'generators/rails/app/app_generator'
|
|
37
|
+
|
|
38
|
+
generator = Rails::Generators::AppGenerator.new ["rails"], { :with_dispatchers => true },
|
|
39
|
+
:destination_root => Rails.root
|
|
40
|
+
generator.invoke(method)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
desc "Update config/boot.rb from your current rails install"
|
|
44
|
+
task :configs do
|
|
45
|
+
invoke_from_app_generator :create_boot_file
|
|
46
|
+
invoke_from_app_generator :create_config_files
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
desc "Update Prototype javascripts from your current rails install"
|
|
50
|
+
task :javascripts do
|
|
51
|
+
invoke_from_app_generator :create_prototype_files
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
desc "Adds new scripts to the application script/ directory"
|
|
55
|
+
task :scripts do
|
|
56
|
+
invoke_from_app_generator :create_script_files
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
desc "Rename application.rb to application_controller.rb"
|
|
60
|
+
task :application_controller do
|
|
61
|
+
old_style = Rails.root + '/app/controllers/application.rb'
|
|
62
|
+
new_style = Rails.root + '/app/controllers/application_controller.rb'
|
|
63
|
+
if File.exists?(old_style) && !File.exists?(new_style)
|
|
64
|
+
FileUtils.mv(old_style, new_style)
|
|
65
|
+
puts "#{old_style} has been renamed to #{new_style}, update your SCM as necessary"
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
task :default => :test
|
|
2
|
+
|
|
3
|
+
task :rails_env do
|
|
4
|
+
# TODO Do we really need this?
|
|
5
|
+
unless defined? RAILS_ENV
|
|
6
|
+
RAILS_ENV = ENV['RAILS_ENV'] ||= 'development'
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
desc 'Generate a crytographically secure secret key. This is typically used to generate a secret for cookie sessions.'
|
|
11
|
+
task :secret do
|
|
12
|
+
require 'active_support/secure_random'
|
|
13
|
+
puts ActiveSupport::SecureRandom.hex(64)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
desc 'Explain the current environment'
|
|
17
|
+
task :about do
|
|
18
|
+
$LOAD_PATH.unshift "#{RAILTIES_PATH}/builtin/rails_info"
|
|
19
|
+
require 'rails/info'
|
|
20
|
+
puts Rails::Info
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
namespace :time do
|
|
24
|
+
namespace :zones do
|
|
25
|
+
desc 'Displays names of all time zones recognized by the Rails TimeZone class, grouped by offset. Results can be filtered with optional OFFSET parameter, e.g., OFFSET=-6'
|
|
26
|
+
task :all do
|
|
27
|
+
build_time_zone_list(:all)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
desc 'Displays names of US time zones recognized by the Rails TimeZone class, grouped by offset. Results can be filtered with optional OFFSET parameter, e.g., OFFSET=-6'
|
|
31
|
+
task :us do
|
|
32
|
+
build_time_zone_list(:us_zones)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
desc 'Displays names of time zones recognized by the Rails TimeZone class with the same offset as the system local time'
|
|
36
|
+
task :local do
|
|
37
|
+
require 'active_support'
|
|
38
|
+
require 'active_support/time'
|
|
39
|
+
jan_offset = Time.now.beginning_of_year.utc_offset
|
|
40
|
+
jul_offset = Time.now.beginning_of_year.change(:month => 7).utc_offset
|
|
41
|
+
offset = jan_offset < jul_offset ? jan_offset : jul_offset
|
|
42
|
+
build_time_zone_list(:all, offset)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# to find UTC -06:00 zones, OFFSET can be set to either -6, -6:00 or 21600
|
|
46
|
+
def build_time_zone_list(method, offset = ENV['OFFSET'])
|
|
47
|
+
require 'active_support'
|
|
48
|
+
require 'active_support/time'
|
|
49
|
+
if offset
|
|
50
|
+
offset = if offset.to_s.match(/(\+|-)?(\d+):(\d+)/)
|
|
51
|
+
sign = $1 == '-' ? -1 : 1
|
|
52
|
+
hours, minutes = $2.to_f, $3.to_f
|
|
53
|
+
((hours * 3600) + (minutes.to_f * 60)) * sign
|
|
54
|
+
elsif offset.to_f.abs <= 13
|
|
55
|
+
offset.to_f * 3600
|
|
56
|
+
else
|
|
57
|
+
offset.to_f
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
previous_offset = nil
|
|
61
|
+
ActiveSupport::TimeZone.__send__(method).each do |zone|
|
|
62
|
+
if offset.nil? || offset == zone.utc_offset
|
|
63
|
+
puts "\n* UTC #{zone.formatted_offset} *" unless zone.utc_offset == previous_offset
|
|
64
|
+
puts zone.name
|
|
65
|
+
previous_offset = zone.utc_offset
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
puts "\n"
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
desc 'Print out all defined routes in match order, with names. Target specific controller with CONTROLLER=x.'
|
|
2
|
+
task :routes => :environment do
|
|
3
|
+
Rails::Application.reload_routes!
|
|
4
|
+
all_routes = ENV['CONTROLLER'] ? ActionController::Routing::Routes.routes.select { |route| route.defaults[:controller] == ENV['CONTROLLER'] } : ActionController::Routing::Routes.routes
|
|
5
|
+
routes = all_routes.collect do |route|
|
|
6
|
+
name = ActionController::Routing::Routes.named_routes.routes.index(route).to_s
|
|
7
|
+
reqs = route.requirements.empty? ? "" : route.requirements.inspect
|
|
8
|
+
{:name => name, :verb => route.verb.to_s, :path => route.path, :reqs => reqs}
|
|
9
|
+
end
|
|
10
|
+
routes.reject!{ |r| r[:path] == "/rails/info/properties" } # skip the route if it's internal info route
|
|
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
|
+
path_width = routes.collect {|r| r[:path]}.collect {|s| s.length}.max
|
|
14
|
+
routes.each do |r|
|
|
15
|
+
puts "#{r[:name].rjust(name_width)} #{r[:verb].ljust(verb_width)} #{r[:path].ljust(path_width)} #{r[:reqs]}"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
STATS_DIRECTORIES = [
|
|
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(Integration\ tests test/integration),
|
|
8
|
+
%w(Functional\ tests test/functional),
|
|
9
|
+
%w(Unit\ tests test/unit)
|
|
10
|
+
].collect { |name, dir| [ name, "#{Rails.root}/#{dir}" ] }.select { |name, dir| File.directory?(dir) }
|
|
11
|
+
|
|
12
|
+
desc "Report code statistics (KLOCs, etc) from the application"
|
|
13
|
+
task :stats do
|
|
14
|
+
require 'rails/code_statistics'
|
|
15
|
+
CodeStatistics.new(*STATS_DIRECTORIES).to_s
|
|
16
|
+
end
|
|
@@ -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, 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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Make double-sure the RAILS_ENV is set to test,
|
|
2
|
+
# so fixtures are loaded to the right database
|
|
3
|
+
exit("Abort testing: Your Rails environment is not running in test mode!") unless Rails.env.test?
|
|
4
|
+
|
|
5
|
+
require 'test/unit'
|
|
6
|
+
require 'active_support/core_ext/kernel/requires'
|
|
7
|
+
|
|
8
|
+
if defined?(ActiveRecord)
|
|
9
|
+
class ActiveSupport::TestCase
|
|
10
|
+
include ActiveRecord::TestFixtures
|
|
11
|
+
self.fixture_path = "#{Rails.root}/test/fixtures/"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
ActionController::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
|
|
15
|
+
|
|
16
|
+
def create_fixtures(*table_names, &block)
|
|
17
|
+
Fixtures.create_fixtures(ActiveSupport::TestCase.fixture_path, table_names, {}, &block)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
begin
|
|
22
|
+
require_library_or_gem 'ruby-debug'
|
|
23
|
+
Debugger.start
|
|
24
|
+
if Debugger.respond_to?(:settings)
|
|
25
|
+
Debugger.settings[:autoeval] = true
|
|
26
|
+
Debugger.settings[:autolist] = 1
|
|
27
|
+
end
|
|
28
|
+
rescue LoadError
|
|
29
|
+
# ruby-debug wasn't available so neither can the debugging be
|
|
30
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Rails
|
|
2
|
+
class TestUnitRailtie < Rails::Railtie
|
|
3
|
+
railtie_name :test_unit
|
|
4
|
+
|
|
5
|
+
config.generators do |c|
|
|
6
|
+
c.test_framework :test_unit, :fixture => true,
|
|
7
|
+
:fixture_replacement => nil
|
|
8
|
+
|
|
9
|
+
c.integration_tool :test_unit
|
|
10
|
+
c.performance_tool :test_unit
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
rake_tasks do
|
|
14
|
+
load "rails/test_unit/testing.rake"
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
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 * ', '}!" 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.test_files = touched.uniq
|
|
63
|
+
end
|
|
64
|
+
Rake::Task['test:recent'].comment = "Test recent changes"
|
|
65
|
+
|
|
66
|
+
Rake::TestTask.new(:uncommitted => "db:test:prepare") do |t|
|
|
67
|
+
def t.file_list
|
|
68
|
+
if File.directory?(".svn")
|
|
69
|
+
changed_since_checkin = silence_stderr { `svn status` }.map { |path| path.chomp[7 .. -1] }
|
|
70
|
+
elsif File.directory?(".git")
|
|
71
|
+
changed_since_checkin = silence_stderr { `git ls-files --modified --others` }.map { |path| path.chomp }
|
|
72
|
+
else
|
|
73
|
+
abort "Not a Subversion or Git checkout."
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
models = changed_since_checkin.select { |path| path =~ /app[\\\/]models[\\\/].*\.rb$/ }
|
|
77
|
+
controllers = changed_since_checkin.select { |path| path =~ /app[\\\/]controllers[\\\/].*\.rb$/ }
|
|
78
|
+
|
|
79
|
+
unit_tests = models.map { |model| "test/unit/#{File.basename(model, '.rb')}_test.rb" }
|
|
80
|
+
functional_tests = controllers.map { |controller| "test/functional/#{File.basename(controller, '.rb')}_test.rb" }
|
|
81
|
+
|
|
82
|
+
unit_tests.uniq + functional_tests.uniq
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
t.libs << 'test'
|
|
86
|
+
end
|
|
87
|
+
Rake::Task['test:uncommitted'].comment = "Test changes since last checkin (only Subversion and Git)"
|
|
88
|
+
|
|
89
|
+
Rake::TestTask.new(:units => "db:test:prepare") do |t|
|
|
90
|
+
t.libs << "test"
|
|
91
|
+
t.pattern = 'test/unit/**/*_test.rb'
|
|
92
|
+
end
|
|
93
|
+
Rake::Task['test:units'].comment = "Run the unit tests in test/unit"
|
|
94
|
+
|
|
95
|
+
Rake::TestTask.new(:functionals => "db:test:prepare") do |t|
|
|
96
|
+
t.libs << "test"
|
|
97
|
+
t.pattern = 'test/functional/**/*_test.rb'
|
|
98
|
+
end
|
|
99
|
+
Rake::Task['test:functionals'].comment = "Run the functional tests in test/functional"
|
|
100
|
+
|
|
101
|
+
Rake::TestTask.new(:integration => "db:test:prepare") do |t|
|
|
102
|
+
t.libs << "test"
|
|
103
|
+
t.pattern = 'test/integration/**/*_test.rb'
|
|
104
|
+
end
|
|
105
|
+
Rake::Task['test:integration'].comment = "Run the integration tests in test/integration"
|
|
106
|
+
|
|
107
|
+
Rake::TestTask.new(:benchmark => 'db:test:prepare') do |t|
|
|
108
|
+
t.libs << 'test'
|
|
109
|
+
t.pattern = 'test/performance/**/*_test.rb'
|
|
110
|
+
t.options = '-- --benchmark'
|
|
111
|
+
end
|
|
112
|
+
Rake::Task['test:benchmark'].comment = 'Benchmark the performance tests'
|
|
113
|
+
|
|
114
|
+
Rake::TestTask.new(:profile => 'db:test:prepare') do |t|
|
|
115
|
+
t.libs << 'test'
|
|
116
|
+
t.pattern = 'test/performance/**/*_test.rb'
|
|
117
|
+
end
|
|
118
|
+
Rake::Task['test:profile'].comment = 'Profile the performance tests'
|
|
119
|
+
|
|
120
|
+
Rake::TestTask.new(:plugins => :environment) do |t|
|
|
121
|
+
t.libs << "test"
|
|
122
|
+
|
|
123
|
+
if ENV['PLUGIN']
|
|
124
|
+
t.pattern = "vendor/plugins/#{ENV['PLUGIN']}/test/**/*_test.rb"
|
|
125
|
+
else
|
|
126
|
+
t.pattern = 'vendor/plugins/*/**/test/**/*_test.rb'
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
Rake::Task['test:plugins'].comment = "Run the plugin tests in vendor/plugins/*/**/test (or specify with PLUGIN=name)"
|
|
130
|
+
end
|
|
@@ -0,0 +1,156 @@
|
|
|
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
|