radiant 0.8.0 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of radiant might be problematic. Click here for more details.
- data/CHANGELOG +33 -1
- data/CONTRIBUTORS +15 -2
- data/INSTALL +9 -7
- data/README +11 -7
- data/app/controllers/admin/layouts_controller.rb +5 -2
- data/app/controllers/admin/pages_controller.rb +8 -5
- data/app/controllers/admin/snippets_controller.rb +5 -2
- data/app/controllers/application_controller.rb +7 -0
- data/app/helpers/admin/node_helper.rb +2 -2
- data/app/helpers/application_helper.rb +2 -2
- data/app/models/radiant/config.rb +36 -4
- data/app/models/standard_tags.rb +1 -1
- data/app/views/admin/layouts/index.html.haml +15 -12
- data/app/views/admin/page_parts/_page_part.html.haml +2 -2
- data/app/views/admin/pages/index.html.haml +1 -1
- data/app/views/admin/snippets/_form.html.haml +1 -1
- data/app/views/admin/snippets/index.html.haml +14 -10
- data/config/database.db2.yml +20 -0
- data/config/environment.rb +4 -4
- data/config/environments/test.rb +1 -2
- data/features/support/env.rb +2 -1
- data/lib/generators/extension/extension_generator.rb +5 -0
- data/lib/generators/extension/templates/RSpecRakefile +11 -8
- data/lib/generators/extension/templates/cucumber.yml +1 -0
- data/lib/generators/extension/templates/cucumber_env.rb +16 -0
- data/lib/generators/extension/templates/cucumber_paths.rb +14 -0
- data/lib/generators/extension/templates/extension.rb +1 -1
- data/lib/generators/instance/instance_generator.rb +1 -1
- data/lib/generators/instance/templates/databases/db2.yml +40 -0
- data/lib/generators/instance/templates/instance_environment.rb +6 -6
- data/lib/local_time.rb +3 -9
- data/lib/radiant.rb +1 -1
- data/lib/radiant/cache.rb +10 -8
- data/lib/radiant/extension.rb +36 -0
- data/lib/radiant/extension/script.rb +1 -1
- data/lib/radiant/extension_loader.rb +5 -1
- data/lib/radiant/initializer.rb +52 -4
- data/lib/task_support.rb +33 -0
- data/lib/tasks/cucumber.rake +5 -1
- data/lib/tasks/radiant_config.rake +18 -0
- data/lib/tasks/release.rake +1 -0
- data/public/javascripts/admin/admin.js +1 -1
- data/spec/controllers/admin/layouts_controller_spec.rb +18 -12
- data/spec/controllers/admin/pages_controller_spec.rb +35 -29
- data/spec/controllers/admin/snippets_controller_spec.rb +11 -5
- data/spec/controllers/admin/welcome_controller_spec.rb +1 -1
- data/spec/controllers/application_controller_spec.rb +18 -0
- data/spec/fixtures/radiant_config.yml +10 -0
- data/spec/generators/extension_generator_spec.rb +12 -0
- data/spec/helpers/admin/node_helper_spec.rb +6 -0
- data/spec/helpers/application_helper_spec.rb +1 -1
- data/spec/lib/radiant/extension_loader_spec.rb +17 -0
- data/spec/lib/radiant/extension_spec.rb +28 -0
- data/spec/lib/radiant/initializer_spec.rb +34 -0
- data/spec/lib/task_support_spec.rb +42 -0
- data/spec/models/page_spec.rb +6 -2
- data/spec/models/radiant/config_spec.rb +42 -1
- data/spec/models/standard_tags_spec.rb +2 -2
- data/test/fixtures/extensions/01_basic/app/metal/basic_metal.rb +9 -0
- data/test/fixtures/extensions/02_overriding/app/metal/basic_metal.rb +9 -0
- data/vendor/extensions/textile_filter/textile.html +2 -2
- data/vendor/plugins/dataset/CHANGELOG +2 -1
- data/vendor/plugins/dataset/Rakefile +3 -0
- data/vendor/plugins/dataset/VERSION.yml +2 -2
- data/vendor/plugins/dataset/dataset.gemspec +9 -3
- data/vendor/plugins/dataset/lib/dataset.rb +3 -0
- data/vendor/radius/lib/radius.rb +5 -0
- data/vendor/radius/test/radius_test.rb +6 -0
- data/vendor/rails/actionmailer/CHANGELOG +8 -0
- data/vendor/rails/actionmailer/Rakefile +3 -2
- data/vendor/rails/actionmailer/lib/action_mailer/base.rb +2 -1
- data/vendor/rails/actionmailer/lib/action_mailer/version.rb +1 -1
- data/vendor/rails/actionmailer/test/abstract_unit.rb +0 -3
- data/vendor/rails/actionmailer/test/mail_service_test.rb +3 -2
- data/vendor/rails/actionpack/CHANGELOG +16 -0
- data/vendor/rails/actionpack/Rakefile +5 -3
- data/vendor/rails/actionpack/lib/action_controller.rb +2 -7
- data/vendor/rails/actionpack/lib/action_controller/assertions/response_assertions.rb +13 -3
- data/vendor/rails/actionpack/lib/action_controller/base.rb +12 -3
- data/vendor/rails/actionpack/lib/action_controller/caching.rb +1 -1
- data/vendor/rails/actionpack/lib/action_controller/caching/actions.rb +9 -1
- data/vendor/rails/actionpack/lib/action_controller/caching/sweeper.rb +45 -0
- data/vendor/rails/actionpack/lib/action_controller/caching/sweeping.rb +0 -42
- data/vendor/rails/actionpack/lib/action_controller/cookies.rb +1 -1
- data/vendor/rails/actionpack/lib/action_controller/dispatcher.rb +21 -6
- data/vendor/rails/actionpack/lib/action_controller/failsafe.rb +40 -6
- data/vendor/rails/actionpack/lib/action_controller/flash.rb +11 -3
- data/vendor/rails/actionpack/lib/action_controller/http_authentication.rb +7 -3
- data/vendor/rails/actionpack/lib/action_controller/integration.rb +5 -12
- data/vendor/rails/actionpack/lib/action_controller/middlewares.rb +0 -1
- data/vendor/rails/actionpack/lib/action_controller/params_parser.rb +6 -0
- data/vendor/rails/actionpack/lib/action_controller/reloader.rb +47 -7
- data/vendor/rails/actionpack/lib/action_controller/request.rb +6 -2
- data/vendor/rails/actionpack/lib/action_controller/request_forgery_protection.rb +2 -1
- data/vendor/rails/actionpack/lib/action_controller/resources.rb +17 -13
- data/vendor/rails/actionpack/lib/action_controller/response.rb +8 -2
- data/vendor/rails/actionpack/lib/action_controller/routing.rb +3 -0
- data/vendor/rails/actionpack/lib/action_controller/routing/route_set.rb +20 -6
- data/vendor/rails/actionpack/lib/action_controller/streaming.rb +4 -2
- data/vendor/rails/actionpack/lib/action_controller/test_process.rb +9 -1
- data/vendor/rails/actionpack/lib/action_controller/url_rewriter.rb +1 -1
- data/vendor/rails/actionpack/lib/action_pack/version.rb +1 -1
- data/vendor/rails/actionpack/lib/action_view/helpers.rb +1 -1
- data/vendor/rails/actionpack/lib/action_view/helpers/asset_tag_helper.rb +21 -9
- data/vendor/rails/actionpack/lib/action_view/helpers/atom_feed_helper.rb +1 -1
- data/vendor/rails/actionpack/lib/action_view/helpers/date_helper.rb +2 -2
- data/vendor/rails/actionpack/lib/action_view/helpers/form_helper.rb +26 -12
- data/vendor/rails/actionpack/lib/action_view/helpers/form_options_helper.rb +71 -1
- data/vendor/rails/actionpack/lib/action_view/helpers/form_tag_helper.rb +10 -4
- data/vendor/rails/actionpack/lib/action_view/helpers/number_helper.rb +1 -1
- data/vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb +7 -7
- data/vendor/rails/actionpack/lib/action_view/helpers/scriptaculous_helper.rb +5 -5
- data/vendor/rails/actionpack/lib/action_view/helpers/tag_helper.rb +1 -1
- data/vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb +23 -14
- data/vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb +2 -2
- data/vendor/rails/actionpack/lib/action_view/locale/en.yml +4 -0
- data/vendor/rails/actionpack/lib/action_view/paths.rb +1 -1
- data/vendor/rails/actionpack/lib/action_view/template.rb +22 -33
- data/vendor/rails/actionpack/test/abstract_unit.rb +17 -1
- data/vendor/rails/actionpack/test/activerecord/active_record_store_test.rb +3 -3
- data/vendor/rails/actionpack/test/controller/action_pack_assertions_test.rb +27 -0
- data/vendor/rails/actionpack/test/controller/caching_test.rb +40 -1
- data/vendor/rails/actionpack/test/controller/cookie_test.rb +16 -0
- data/vendor/rails/actionpack/test/controller/dispatcher_test.rb +59 -18
- data/vendor/rails/actionpack/test/controller/failsafe_test.rb +60 -0
- data/vendor/rails/actionpack/test/controller/filter_params_test.rb +3 -1
- data/vendor/rails/actionpack/test/controller/flash_test.rb +6 -1
- data/vendor/rails/actionpack/test/controller/http_basic_authentication_test.rb +25 -0
- data/vendor/rails/actionpack/test/controller/http_digest_authentication_test.rb +63 -9
- data/vendor/rails/actionpack/test/controller/integration_test.rb +31 -3
- data/vendor/rails/actionpack/test/controller/rack_test.rb +18 -1
- data/vendor/rails/actionpack/test/controller/redirect_test.rb +4 -1
- data/vendor/rails/actionpack/test/controller/reloader_test.rb +124 -0
- data/vendor/rails/actionpack/test/controller/render_test.rb +19 -9
- data/vendor/rails/actionpack/test/controller/request/json_params_parsing_test.rb +24 -4
- data/vendor/rails/actionpack/test/controller/request/multipart_params_parsing_test.rb +1 -62
- data/vendor/rails/actionpack/test/controller/request/test_request_test.rb +35 -0
- data/vendor/rails/actionpack/test/controller/request/url_encoded_params_parsing_test.rb +0 -38
- data/vendor/rails/actionpack/test/controller/request/xml_params_parsing_test.rb +15 -0
- data/vendor/rails/actionpack/test/controller/request_forgery_protection_test.rb +6 -5
- data/vendor/rails/actionpack/test/controller/request_test.rb +218 -230
- data/vendor/rails/actionpack/test/controller/resources_test.rb +52 -0
- data/vendor/rails/actionpack/test/controller/routing_test.rb +28 -2
- data/vendor/rails/actionpack/test/controller/send_file_test.rb +12 -2
- data/vendor/rails/actionpack/test/controller/session/cookie_store_test.rb +9 -32
- data/vendor/rails/actionpack/test/controller/test_test.rb +8 -0
- data/vendor/rails/actionpack/test/controller/url_rewriter_test.rb +29 -3
- data/vendor/rails/actionpack/test/fixtures/failsafe/500.html +1 -0
- data/vendor/rails/actionpack/test/fixtures/public/absolute/test.css +23 -0
- data/vendor/rails/actionpack/test/fixtures/public/absolute/test.js +63 -0
- data/vendor/rails/actionpack/test/template/active_record_helper_test.rb +1 -1
- data/vendor/rails/actionpack/test/template/asset_tag_helper_test.rb +46 -0
- data/vendor/rails/actionpack/test/template/atom_feed_helper_test.rb +29 -0
- data/vendor/rails/actionpack/test/template/form_helper_test.rb +143 -6
- data/vendor/rails/actionpack/test/template/form_options_helper_i18n_test.rb +27 -0
- data/vendor/rails/actionpack/test/template/form_options_helper_test.rb +56 -0
- data/vendor/rails/actionpack/test/template/form_tag_helper_test.rb +23 -6
- data/vendor/rails/actionpack/test/template/prototype_helper_test.rb +11 -11
- data/vendor/rails/actionpack/test/template/template_test.rb +32 -0
- data/vendor/rails/actionpack/test/template/text_helper_test.rb +23 -0
- data/vendor/rails/actionpack/test/template/url_helper_test.rb +8 -0
- data/vendor/rails/activerecord/CHANGELOG +18 -0
- data/vendor/rails/activerecord/Rakefile +26 -9
- data/vendor/rails/activerecord/examples/performance.rb +162 -0
- data/vendor/rails/activerecord/lib/active_record/associations.rb +104 -35
- data/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb +10 -5
- data/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb +2 -2
- data/vendor/rails/activerecord/lib/active_record/associations/belongs_to_association.rb +22 -4
- data/vendor/rails/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb +5 -1
- data/vendor/rails/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb +16 -0
- data/vendor/rails/activerecord/lib/active_record/associations/has_many_association.rb +1 -0
- data/vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb +13 -3
- data/vendor/rails/activerecord/lib/active_record/associations/has_one_through_association.rb +15 -9
- data/vendor/rails/activerecord/lib/active_record/autosave_association.rb +15 -9
- data/vendor/rails/activerecord/lib/active_record/base.rb +34 -31
- data/vendor/rails/activerecord/lib/active_record/batches.rb +23 -15
- data/vendor/rails/activerecord/lib/active_record/calculations.rb +7 -13
- data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +16 -2
- data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +2 -2
- data/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +7 -0
- data/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +17 -8
- data/vendor/rails/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +98 -35
- data/vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb +15 -0
- data/vendor/rails/activerecord/lib/active_record/dirty.rb +1 -1
- data/vendor/rails/activerecord/lib/active_record/fixtures.rb +14 -11
- data/vendor/rails/activerecord/lib/active_record/i18n_interpolation_deprecation.rb +1 -1
- data/vendor/rails/activerecord/lib/active_record/locale/en.yml +4 -0
- data/vendor/rails/activerecord/lib/active_record/named_scope.rb +3 -8
- data/vendor/rails/activerecord/lib/active_record/reflection.rb +1 -1
- data/vendor/rails/activerecord/lib/active_record/schema_dumper.rb +6 -3
- data/vendor/rails/activerecord/lib/active_record/serialization.rb +3 -2
- data/vendor/rails/activerecord/lib/active_record/serializers/json_serializer.rb +10 -18
- data/vendor/rails/activerecord/lib/active_record/serializers/xml_serializer.rb +6 -2
- data/vendor/rails/activerecord/lib/active_record/session_store.rb +9 -1
- data/vendor/rails/activerecord/lib/active_record/timestamp.rb +39 -9
- data/vendor/rails/activerecord/lib/active_record/validations.rb +149 -80
- data/vendor/rails/activerecord/lib/active_record/version.rb +1 -1
- data/vendor/rails/activerecord/test/cases/adapter_test.rb +12 -0
- data/vendor/rails/activerecord/test/cases/associations/belongs_to_associations_test.rb +102 -22
- data/vendor/rails/activerecord/test/cases/associations/eager_load_nested_include_test.rb +5 -5
- data/vendor/rails/activerecord/test/cases/associations/eager_test.rb +12 -0
- data/vendor/rails/activerecord/test/cases/associations/habtm_join_table_test.rb +56 -0
- data/vendor/rails/activerecord/test/cases/associations/has_many_associations_test.rb +62 -2
- data/vendor/rails/activerecord/test/cases/associations/has_many_through_associations_test.rb +46 -1
- data/vendor/rails/activerecord/test/cases/associations/has_one_through_associations_test.rb +18 -1
- data/vendor/rails/activerecord/test/cases/associations/inner_join_association_test.rb +5 -0
- data/vendor/rails/activerecord/test/cases/associations/join_model_test.rb +4 -4
- data/vendor/rails/activerecord/test/cases/autosave_association_test.rb +22 -0
- data/vendor/rails/activerecord/test/cases/base_test.rb +51 -6
- data/vendor/rails/activerecord/test/cases/calculations_test.rb +14 -14
- data/vendor/rails/activerecord/test/cases/column_definition_test.rb +34 -0
- data/vendor/rails/activerecord/test/cases/copy_table_test_sqlite.rb +5 -5
- data/vendor/rails/activerecord/test/cases/dirty_test.rb +10 -0
- data/vendor/rails/activerecord/test/cases/finder_test.rb +21 -50
- data/vendor/rails/activerecord/test/cases/fixtures_test.rb +6 -1
- data/vendor/rails/activerecord/test/cases/helper.rb +1 -2
- data/vendor/rails/activerecord/test/cases/i18n_test.rb +5 -0
- data/vendor/rails/activerecord/test/cases/json_serialization_test.rb +57 -57
- data/vendor/rails/activerecord/test/cases/method_scoping_test.rb +14 -4
- data/vendor/rails/activerecord/test/cases/migration_test.rb +39 -11
- data/vendor/rails/activerecord/test/cases/modules_test.rb +42 -0
- data/vendor/rails/activerecord/test/cases/named_scope_test.rb +6 -4
- data/vendor/rails/activerecord/test/cases/pk_test.rb +18 -0
- data/vendor/rails/activerecord/test/cases/reflection_test.rb +7 -7
- data/vendor/rails/activerecord/test/cases/schema_dumper_test.rb +35 -7
- data/vendor/rails/activerecord/test/cases/schema_test_postgresql.rb +76 -0
- data/vendor/rails/activerecord/test/cases/timestamp_test.rb +75 -0
- data/vendor/rails/activerecord/test/cases/validations_i18n_test.rb +656 -624
- data/vendor/rails/activerecord/test/cases/validations_test.rb +12 -2
- data/vendor/rails/activerecord/test/cases/xml_serialization_test.rb +20 -0
- data/vendor/rails/activerecord/test/fixtures/fixture_database.sqlite +0 -0
- data/vendor/rails/activerecord/test/fixtures/fixture_database.sqlite3 +0 -0
- data/vendor/rails/activerecord/test/fixtures/fixture_database_2.sqlite +0 -0
- data/vendor/rails/activerecord/test/fixtures/fixture_database_2.sqlite3 +0 -0
- data/vendor/rails/activerecord/test/fixtures/posts.yml +3 -0
- data/vendor/rails/activerecord/test/models/author.rb +5 -0
- data/vendor/rails/activerecord/test/models/comment.rb +5 -1
- data/vendor/rails/activerecord/test/models/company.rb +9 -7
- data/vendor/rails/activerecord/test/models/company_in_module.rb +1 -1
- data/vendor/rails/activerecord/test/models/contract.rb +5 -0
- data/vendor/rails/activerecord/test/models/developer.rb +10 -0
- data/vendor/rails/activerecord/test/models/essay.rb +3 -0
- data/vendor/rails/activerecord/test/models/organization.rb +2 -0
- data/vendor/rails/activerecord/test/models/pet.rb +1 -1
- data/vendor/rails/activerecord/test/models/project.rb +1 -1
- data/vendor/rails/activerecord/test/models/reply.rb +2 -1
- data/vendor/rails/activerecord/test/models/topic.rb +1 -2
- data/vendor/rails/activerecord/test/models/toy.rb +2 -0
- data/vendor/rails/activerecord/test/schema/postgresql_specific_schema.rb +13 -2
- data/vendor/rails/activerecord/test/schema/schema.rb +19 -0
- data/vendor/rails/activeresource/CHANGELOG +16 -0
- data/vendor/rails/activeresource/Rakefile +3 -2
- data/vendor/rails/activeresource/lib/active_resource/base.rb +89 -9
- data/vendor/rails/activeresource/lib/active_resource/connection.rb +73 -8
- data/vendor/rails/activeresource/lib/active_resource/exceptions.rb +66 -0
- data/vendor/rails/activeresource/lib/active_resource/formats/json_format.rb +2 -2
- data/vendor/rails/activeresource/lib/active_resource/validations.rb +20 -4
- data/vendor/rails/activeresource/lib/active_resource/version.rb +1 -1
- data/vendor/rails/activeresource/test/abstract_unit.rb +1 -3
- data/vendor/rails/activeresource/test/base/load_test.rb +16 -1
- data/vendor/rails/activeresource/test/base_errors_test.rb +56 -19
- data/vendor/rails/activeresource/test/base_test.rb +147 -0
- data/vendor/rails/activeresource/test/connection_test.rb +42 -0
- data/vendor/rails/activeresource/test/debug.log +7974 -0
- data/vendor/rails/activeresource/test/fixtures/proxy.rb +4 -0
- data/vendor/rails/activesupport/CHANGELOG +13 -0
- data/vendor/rails/activesupport/lib/active_support/all.rb +8 -0
- data/vendor/rails/activesupport/lib/active_support/cache.rb +14 -1
- data/vendor/rails/activesupport/lib/active_support/cache/mem_cache_store.rb +16 -10
- data/vendor/rails/activesupport/lib/active_support/cache/strategy/local_cache.rb +1 -1
- data/vendor/rails/activesupport/lib/active_support/core_ext/array/conversions.rb +1 -0
- data/vendor/rails/activesupport/lib/active_support/core_ext/date/calculations.rb +2 -1
- data/vendor/rails/activesupport/lib/active_support/core_ext/enumerable.rb +2 -4
- data/vendor/rails/activesupport/lib/active_support/core_ext/hash/conversions.rb +14 -4
- data/vendor/rails/activesupport/lib/active_support/core_ext/kernel/debugger.rb +4 -2
- data/vendor/rails/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb +2 -0
- data/vendor/rails/activesupport/lib/active_support/core_ext/module/delegation.rb +19 -5
- data/vendor/rails/activesupport/lib/active_support/core_ext/module/model_naming.rb +8 -6
- data/vendor/rails/activesupport/lib/active_support/core_ext/numeric/bytes.rb +15 -9
- data/vendor/rails/activesupport/lib/active_support/core_ext/string.rb +1 -0
- data/vendor/rails/activesupport/lib/active_support/core_ext/string/access.rb +29 -5
- data/vendor/rails/activesupport/lib/active_support/core_ext/string/bytesize.rb +5 -0
- data/vendor/rails/activesupport/lib/active_support/core_ext/time/calculations.rb +7 -7
- data/vendor/rails/activesupport/lib/active_support/deprecation.rb +9 -9
- data/vendor/rails/activesupport/lib/active_support/duration.rb +4 -2
- data/vendor/rails/activesupport/lib/active_support/json.rb +1 -22
- data/vendor/rails/activesupport/lib/active_support/json/backends/jsongem.rb +38 -0
- data/vendor/rails/activesupport/lib/active_support/json/backends/yaml.rb +88 -0
- data/vendor/rails/activesupport/lib/active_support/json/decoding.rb +23 -72
- data/vendor/rails/activesupport/lib/active_support/json/encoders/date.rb +9 -8
- data/vendor/rails/activesupport/lib/active_support/json/encoders/date_time.rb +9 -8
- data/vendor/rails/activesupport/lib/active_support/json/encoders/enumerable.rb +14 -9
- data/vendor/rails/activesupport/lib/active_support/json/encoders/false_class.rb +4 -2
- data/vendor/rails/activesupport/lib/active_support/json/encoders/hash.rb +21 -11
- data/vendor/rails/activesupport/lib/active_support/json/encoders/nil_class.rb +4 -2
- data/vendor/rails/activesupport/lib/active_support/json/encoders/numeric.rb +16 -0
- data/vendor/rails/activesupport/lib/active_support/json/encoders/object.rb +6 -2
- data/vendor/rails/activesupport/lib/active_support/json/encoders/regexp.rb +4 -0
- data/vendor/rails/activesupport/lib/active_support/json/encoders/string.rb +5 -32
- data/vendor/rails/activesupport/lib/active_support/json/encoders/symbol.rb +2 -2
- data/vendor/rails/activesupport/lib/active_support/json/encoders/time.rb +9 -8
- data/vendor/rails/activesupport/lib/active_support/json/encoders/true_class.rb +4 -2
- data/vendor/rails/activesupport/lib/active_support/json/encoding.rb +80 -9
- data/vendor/rails/activesupport/lib/active_support/memoizable.rb +1 -1
- data/vendor/rails/activesupport/lib/active_support/message_verifier.rb +16 -3
- data/vendor/rails/activesupport/lib/active_support/multibyte.rb +30 -6
- data/vendor/rails/activesupport/lib/active_support/multibyte/chars.rb +23 -17
- data/vendor/rails/activesupport/lib/active_support/multibyte/utils.rb +61 -0
- data/vendor/rails/activesupport/lib/active_support/ordered_hash.rb +28 -0
- data/vendor/rails/activesupport/lib/active_support/test_case.rb +9 -8
- data/vendor/rails/activesupport/lib/active_support/testing/deprecation.rb +2 -0
- data/vendor/rails/activesupport/lib/active_support/time_with_zone.rb +9 -8
- data/vendor/rails/activesupport/lib/active_support/vendor.rb +6 -7
- data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/test/i18n_exceptions_test.rb +0 -1
- data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/test/i18n_test.rb +0 -1
- data/vendor/rails/activesupport/lib/active_support/vendor/i18n-0.1.3/test/simple_backend_test.rb +0 -1
- data/vendor/rails/activesupport/lib/active_support/vendor/{memcache-client-1.6.5 → memcache-client-1.7.4}/memcache.rb +242 -70
- data/vendor/rails/activesupport/lib/active_support/version.rb +1 -1
- data/vendor/rails/activesupport/lib/active_support/xml_mini/jdom.rb +162 -0
- data/vendor/rails/railties/CHANGELOG +10 -0
- data/vendor/rails/railties/Rakefile +13 -9
- data/vendor/rails/railties/bin/about +2 -2
- data/vendor/rails/railties/bin/console +1 -1
- data/vendor/rails/railties/bin/dbconsole +1 -1
- data/vendor/rails/railties/bin/destroy +1 -1
- data/vendor/rails/railties/bin/generate +1 -1
- data/vendor/rails/railties/bin/performance/benchmarker +1 -1
- data/vendor/rails/railties/bin/performance/profiler +1 -1
- data/vendor/rails/railties/bin/plugin +1 -1
- data/vendor/rails/railties/bin/runner +1 -1
- data/vendor/rails/railties/bin/server +1 -1
- data/vendor/rails/railties/builtin/rails_info/rails/info.rb +4 -2
- data/vendor/rails/railties/configs/initializers/new_rails_defaults.rb +2 -0
- data/vendor/rails/railties/configs/routes.rb +1 -1
- data/vendor/rails/railties/configs/seeds.rb +7 -0
- data/vendor/rails/railties/environments/boot.rb +1 -1
- data/vendor/rails/railties/guides/files/javascripts/code_highlighter.js +188 -0
- data/vendor/rails/railties/guides/files/javascripts/guides.js +8 -0
- data/vendor/rails/railties/guides/files/javascripts/highlighters.js +90 -0
- data/vendor/rails/railties/guides/files/stylesheets/main.css +441 -0
- data/vendor/rails/railties/guides/files/stylesheets/print.css +52 -0
- data/vendor/rails/railties/guides/files/stylesheets/reset.css +43 -0
- data/vendor/rails/railties/guides/files/stylesheets/style.css +13 -0
- data/vendor/rails/railties/guides/files/stylesheets/syntax.css +31 -0
- data/vendor/rails/railties/guides/images/belongs_to.png +0 -0
- data/vendor/rails/railties/guides/images/book_icon.gif +0 -0
- data/vendor/rails/railties/guides/images/bullet.gif +0 -0
- data/vendor/rails/railties/guides/images/chapters_icon.gif +0 -0
- data/vendor/rails/railties/guides/images/check_bullet.gif +0 -0
- data/vendor/rails/railties/guides/images/credits_pic_blank.gif +0 -0
- data/vendor/rails/railties/guides/images/csrf.png +0 -0
- data/vendor/rails/railties/guides/images/customized_error_messages.png +0 -0
- data/vendor/rails/railties/guides/images/error_messages.png +0 -0
- data/vendor/rails/railties/guides/images/feature_tile.gif +0 -0
- data/vendor/rails/railties/guides/images/footer_tile.gif +0 -0
- data/vendor/rails/railties/guides/images/fxn.jpg +0 -0
- data/vendor/rails/railties/guides/images/grey_bullet.gif +0 -0
- data/vendor/rails/railties/guides/images/habtm.png +0 -0
- data/vendor/rails/railties/guides/images/has_many.png +0 -0
- data/vendor/rails/railties/guides/images/has_many_through.png +0 -0
- data/vendor/rails/railties/guides/images/has_one.png +0 -0
- data/vendor/rails/railties/guides/images/has_one_through.png +0 -0
- data/vendor/rails/railties/guides/images/header_backdrop.png +0 -0
- data/vendor/rails/railties/guides/images/header_tile.gif +0 -0
- data/vendor/rails/railties/guides/images/i18n/demo_localized_pirate.png +0 -0
- data/vendor/rails/railties/guides/images/i18n/demo_translated_en.png +0 -0
- data/vendor/rails/railties/guides/images/i18n/demo_translated_pirate.png +0 -0
- data/vendor/rails/railties/guides/images/i18n/demo_translation_missing.png +0 -0
- data/vendor/rails/railties/guides/images/i18n/demo_untranslated.png +0 -0
- data/vendor/rails/railties/guides/images/icons/README +5 -0
- data/vendor/rails/railties/guides/images/icons/callouts/1.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/10.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/11.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/12.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/13.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/14.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/15.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/2.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/3.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/4.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/5.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/6.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/7.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/8.png +0 -0
- data/vendor/rails/railties/guides/images/icons/callouts/9.png +0 -0
- data/vendor/rails/railties/guides/images/icons/caution.png +0 -0
- data/vendor/rails/railties/guides/images/icons/example.png +0 -0
- data/vendor/rails/railties/guides/images/icons/home.png +0 -0
- data/vendor/rails/railties/guides/images/icons/important.png +0 -0
- data/vendor/rails/railties/guides/images/icons/next.png +0 -0
- data/vendor/rails/railties/guides/images/icons/note.png +0 -0
- data/vendor/rails/railties/guides/images/icons/prev.png +0 -0
- data/vendor/rails/railties/guides/images/icons/tip.png +0 -0
- data/vendor/rails/railties/guides/images/icons/up.png +0 -0
- data/vendor/rails/railties/guides/images/icons/warning.png +0 -0
- data/vendor/rails/railties/guides/images/nav_arrow.gif +0 -0
- data/vendor/rails/railties/guides/images/polymorphic.png +0 -0
- data/vendor/rails/railties/guides/images/posts_index.png +0 -0
- data/vendor/rails/railties/guides/images/rails_guides_logo.gif +0 -0
- data/vendor/rails/railties/guides/images/rails_logo_remix.gif +0 -0
- data/vendor/rails/railties/guides/images/rails_welcome.png +0 -0
- data/vendor/rails/railties/guides/images/session_fixation.png +0 -0
- data/vendor/rails/railties/guides/images/tab_grey.gif +0 -0
- data/vendor/rails/railties/guides/images/tab_info.gif +0 -0
- data/vendor/rails/railties/guides/images/tab_note.gif +0 -0
- data/vendor/rails/railties/guides/images/tab_red.gif +0 -0
- data/vendor/rails/railties/guides/images/tab_yellow.gif +0 -0
- data/vendor/rails/railties/guides/images/tab_yellow.png +0 -0
- data/vendor/rails/railties/guides/images/validation_error_messages.png +0 -0
- data/vendor/rails/railties/guides/rails_guides.rb +42 -0
- data/vendor/rails/railties/guides/rails_guides/generator.rb +138 -0
- data/vendor/rails/railties/guides/rails_guides/helpers.rb +34 -0
- data/vendor/rails/railties/guides/rails_guides/indexer.rb +55 -0
- data/vendor/rails/railties/guides/rails_guides/textile_extensions.rb +41 -0
- data/vendor/rails/railties/guides/source/2_2_release_notes.textile +422 -0
- data/vendor/rails/railties/guides/source/2_3_release_notes.textile +610 -0
- data/vendor/rails/railties/guides/source/action_controller_overview.textile +776 -0
- data/vendor/rails/railties/guides/source/action_mailer_basics.textile +424 -0
- data/vendor/rails/railties/guides/source/active_record_basics.textile +135 -0
- data/vendor/rails/railties/guides/source/active_record_querying.textile +969 -0
- data/vendor/rails/railties/guides/source/activerecord_validations_callbacks.textile +1086 -0
- data/vendor/rails/railties/guides/source/association_basics.textile +1781 -0
- data/vendor/rails/railties/guides/source/caching_with_rails.textile +524 -0
- data/vendor/rails/railties/guides/source/command_line.textile +589 -0
- data/vendor/rails/railties/guides/source/configuring.textile +234 -0
- data/vendor/rails/railties/guides/source/contribute.textile +71 -0
- data/vendor/rails/railties/guides/source/contributing_to_rails.textile +239 -0
- data/vendor/rails/railties/guides/source/credits.erb.textile +52 -0
- data/vendor/rails/railties/guides/source/debugging_rails_applications.textile +709 -0
- data/vendor/rails/railties/guides/source/form_helpers.textile +766 -0
- data/vendor/rails/railties/guides/source/getting_started.textile +1297 -0
- data/vendor/rails/railties/guides/source/i18n.textile +912 -0
- data/vendor/rails/railties/guides/source/index.erb.textile +124 -0
- data/vendor/rails/railties/guides/source/layout.html.erb +103 -0
- data/vendor/rails/railties/guides/source/layouts_and_rendering.textile +979 -0
- data/vendor/rails/railties/guides/source/migrations.textile +591 -0
- data/vendor/rails/railties/guides/source/nested_model_forms.textile +222 -0
- data/vendor/rails/railties/guides/source/performance_testing.textile +531 -0
- data/vendor/rails/railties/guides/source/plugins.textile +1512 -0
- data/vendor/rails/railties/guides/source/rails_on_rack.textile +309 -0
- data/vendor/rails/railties/guides/source/routing.textile +903 -0
- data/vendor/rails/railties/guides/source/security.textile +986 -0
- data/vendor/rails/railties/guides/source/testing.textile +951 -0
- data/vendor/rails/railties/lib/commands/dbconsole.rb +8 -4
- data/vendor/rails/railties/lib/commands/performance/profiler.rb +1 -1
- data/vendor/rails/railties/lib/initializer.rb +27 -4
- data/vendor/rails/railties/lib/rails/gem_dependency.rb +35 -6
- data/vendor/rails/railties/lib/rails/plugin.rb +12 -0
- data/vendor/rails/railties/lib/rails/plugin/loader.rb +7 -0
- data/vendor/rails/railties/lib/rails/rack/metal.rb +1 -1
- data/vendor/rails/railties/lib/rails/version.rb +1 -1
- data/vendor/rails/railties/lib/rails_generator/base.rb +1 -1
- data/vendor/rails/railties/lib/rails_generator/generators/applications/app/app_generator.rb +5 -0
- data/vendor/rails/railties/lib/rails_generator/generators/applications/app/template_runner.rb +1 -1
- data/vendor/rails/railties/lib/rails_generator/generators/components/model/model_generator.rb +9 -2
- data/vendor/rails/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +1 -0
- data/vendor/rails/railties/lib/tasks/databases.rake +17 -4
- data/vendor/rails/railties/lib/tasks/gems.rake +19 -6
- data/vendor/rails/railties/lib/tasks/routes.rake +4 -3
- data/vendor/rails/railties/lib/test_help.rb +4 -1
- metadata +158 -58
- data/spec/lib/local_time_spec.rb +0 -40
- data/vendor/rails/actionpack/lib/action_controller/rewindable_input.rb +0 -28
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack.rb +0 -89
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/adapter/camping.rb +0 -22
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/abstract/handler.rb +0 -37
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/abstract/request.rb +0 -37
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/basic.rb +0 -58
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/digest/md5.rb +0 -124
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/digest/nonce.rb +0 -51
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/digest/params.rb +0 -55
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/digest/request.rb +0 -40
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/auth/openid.rb +0 -480
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/builder.rb +0 -63
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/cascade.rb +0 -36
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/chunked.rb +0 -49
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/commonlogger.rb +0 -61
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/conditionalget.rb +0 -45
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/content_length.rb +0 -29
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/content_type.rb +0 -23
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/deflater.rb +0 -85
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/directory.rb +0 -153
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/file.rb +0 -88
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler.rb +0 -48
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/cgi.rb +0 -61
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/evented_mongrel.rb +0 -8
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/fastcgi.rb +0 -89
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/lsws.rb +0 -55
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/mongrel.rb +0 -84
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/scgi.rb +0 -59
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/swiftiplied_mongrel.rb +0 -8
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/thin.rb +0 -18
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/handler/webrick.rb +0 -67
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/head.rb +0 -19
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/lint.rb +0 -462
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/lobster.rb +0 -65
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/lock.rb +0 -16
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/methodoverride.rb +0 -27
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/mime.rb +0 -204
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/mock.rb +0 -160
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/recursive.rb +0 -57
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/reloader.rb +0 -64
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/request.rb +0 -241
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/response.rb +0 -179
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/session/abstract/id.rb +0 -142
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/session/cookie.rb +0 -91
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/session/memcache.rb +0 -109
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/session/pool.rb +0 -100
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/showexceptions.rb +0 -349
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/showstatus.rb +0 -106
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/static.rb +0 -38
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/urlmap.rb +0 -55
- data/vendor/rails/actionpack/lib/action_controller/vendor/rack-1.0/rack/utils.rb +0 -392
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'uri'
|
2
|
-
|
3
|
-
module Rack
|
4
|
-
# Rack::ForwardRequest gets caught by Rack::Recursive and redirects
|
5
|
-
# the current request to the app at +url+.
|
6
|
-
#
|
7
|
-
# raise ForwardRequest.new("/not-found")
|
8
|
-
#
|
9
|
-
|
10
|
-
class ForwardRequest < Exception
|
11
|
-
attr_reader :url, :env
|
12
|
-
|
13
|
-
def initialize(url, env={})
|
14
|
-
@url = URI(url)
|
15
|
-
@env = env
|
16
|
-
|
17
|
-
@env["PATH_INFO"] = @url.path
|
18
|
-
@env["QUERY_STRING"] = @url.query if @url.query
|
19
|
-
@env["HTTP_HOST"] = @url.host if @url.host
|
20
|
-
@env["HTTP_PORT"] = @url.port if @url.port
|
21
|
-
@env["rack.url_scheme"] = @url.scheme if @url.scheme
|
22
|
-
|
23
|
-
super "forwarding to #{url}"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# Rack::Recursive allows applications called down the chain to
|
28
|
-
# include data from other applications (by using
|
29
|
-
# <tt>rack['rack.recursive.include'][...]</tt> or raise a
|
30
|
-
# ForwardRequest to redirect internally.
|
31
|
-
|
32
|
-
class Recursive
|
33
|
-
def initialize(app)
|
34
|
-
@app = app
|
35
|
-
end
|
36
|
-
|
37
|
-
def call(env)
|
38
|
-
@script_name = env["SCRIPT_NAME"]
|
39
|
-
@app.call(env.merge('rack.recursive.include' => method(:include)))
|
40
|
-
rescue ForwardRequest => req
|
41
|
-
call(env.merge(req.env))
|
42
|
-
end
|
43
|
-
|
44
|
-
def include(env, path)
|
45
|
-
unless path.index(@script_name) == 0 && (path[@script_name.size] == ?/ ||
|
46
|
-
path[@script_name.size].nil?)
|
47
|
-
raise ArgumentError, "can only include below #{@script_name}, not #{path}"
|
48
|
-
end
|
49
|
-
|
50
|
-
env = env.merge("PATH_INFO" => path, "SCRIPT_NAME" => @script_name,
|
51
|
-
"REQUEST_METHOD" => "GET",
|
52
|
-
"CONTENT_LENGTH" => "0", "CONTENT_TYPE" => "",
|
53
|
-
"rack.input" => StringIO.new(""))
|
54
|
-
@app.call(env)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'thread'
|
2
|
-
|
3
|
-
module Rack
|
4
|
-
# Rack::Reloader checks on every request, but at most every +secs+
|
5
|
-
# seconds, if a file loaded changed, and reloads it, logging to
|
6
|
-
# rack.errors.
|
7
|
-
#
|
8
|
-
# It is recommended you use ShowExceptions to catch SyntaxErrors etc.
|
9
|
-
|
10
|
-
class Reloader
|
11
|
-
def initialize(app, secs=10)
|
12
|
-
@app = app
|
13
|
-
@secs = secs # reload every @secs seconds max
|
14
|
-
@last = Time.now
|
15
|
-
end
|
16
|
-
|
17
|
-
def call(env)
|
18
|
-
if Time.now > @last + @secs
|
19
|
-
Thread.exclusive {
|
20
|
-
reload!(env['rack.errors'])
|
21
|
-
@last = Time.now
|
22
|
-
}
|
23
|
-
end
|
24
|
-
|
25
|
-
@app.call(env)
|
26
|
-
end
|
27
|
-
|
28
|
-
def reload!(stderr=$stderr)
|
29
|
-
need_reload = $LOADED_FEATURES.find_all { |loaded|
|
30
|
-
begin
|
31
|
-
if loaded =~ /\A[.\/]/ # absolute filename or 1.9
|
32
|
-
abs = loaded
|
33
|
-
else
|
34
|
-
abs = $LOAD_PATH.map { |path| ::File.join(path, loaded) }.
|
35
|
-
find { |file| ::File.exist? file }
|
36
|
-
end
|
37
|
-
|
38
|
-
if abs
|
39
|
-
::File.mtime(abs) > @last - @secs rescue false
|
40
|
-
else
|
41
|
-
false
|
42
|
-
end
|
43
|
-
end
|
44
|
-
}
|
45
|
-
|
46
|
-
need_reload.each { |l|
|
47
|
-
$LOADED_FEATURES.delete l
|
48
|
-
}
|
49
|
-
|
50
|
-
need_reload.each { |to_load|
|
51
|
-
begin
|
52
|
-
if require to_load
|
53
|
-
stderr.puts "#{self.class}: reloaded `#{to_load}'"
|
54
|
-
end
|
55
|
-
rescue LoadError, SyntaxError => e
|
56
|
-
raise e # Possibly ShowExceptions
|
57
|
-
end
|
58
|
-
}
|
59
|
-
|
60
|
-
stderr.flush
|
61
|
-
need_reload
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,241 +0,0 @@
|
|
1
|
-
require 'rack/utils'
|
2
|
-
|
3
|
-
module Rack
|
4
|
-
# Rack::Request provides a convenient interface to a Rack
|
5
|
-
# environment. It is stateless, the environment +env+ passed to the
|
6
|
-
# constructor will be directly modified.
|
7
|
-
#
|
8
|
-
# req = Rack::Request.new(env)
|
9
|
-
# req.post?
|
10
|
-
# req.params["data"]
|
11
|
-
#
|
12
|
-
# The environment hash passed will store a reference to the Request object
|
13
|
-
# instantiated so that it will only instantiate if an instance of the Request
|
14
|
-
# object doesn't already exist.
|
15
|
-
|
16
|
-
class Request
|
17
|
-
# The environment of the request.
|
18
|
-
attr_reader :env
|
19
|
-
|
20
|
-
def self.new(env)
|
21
|
-
if self == Rack::Request
|
22
|
-
env["rack.request"] ||= super
|
23
|
-
else
|
24
|
-
super
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def initialize(env)
|
29
|
-
@env = env
|
30
|
-
end
|
31
|
-
|
32
|
-
def body; @env["rack.input"] end
|
33
|
-
def scheme; @env["rack.url_scheme"] end
|
34
|
-
def script_name; @env["SCRIPT_NAME"].to_s end
|
35
|
-
def path_info; @env["PATH_INFO"].to_s end
|
36
|
-
def port; @env["SERVER_PORT"].to_i end
|
37
|
-
def request_method; @env["REQUEST_METHOD"] end
|
38
|
-
def query_string; @env["QUERY_STRING"].to_s end
|
39
|
-
def content_length; @env['CONTENT_LENGTH'] end
|
40
|
-
def content_type; @env['CONTENT_TYPE'] end
|
41
|
-
|
42
|
-
# The media type (type/subtype) portion of the CONTENT_TYPE header
|
43
|
-
# without any media type parameters. e.g., when CONTENT_TYPE is
|
44
|
-
# "text/plain;charset=utf-8", the media-type is "text/plain".
|
45
|
-
#
|
46
|
-
# For more information on the use of media types in HTTP, see:
|
47
|
-
# http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7
|
48
|
-
def media_type
|
49
|
-
content_type && content_type.split(/\s*[;,]\s*/, 2)[0].downcase
|
50
|
-
end
|
51
|
-
|
52
|
-
# The media type parameters provided in CONTENT_TYPE as a Hash, or
|
53
|
-
# an empty Hash if no CONTENT_TYPE or media-type parameters were
|
54
|
-
# provided. e.g., when the CONTENT_TYPE is "text/plain;charset=utf-8",
|
55
|
-
# this method responds with the following Hash:
|
56
|
-
# { 'charset' => 'utf-8' }
|
57
|
-
def media_type_params
|
58
|
-
return {} if content_type.nil?
|
59
|
-
content_type.split(/\s*[;,]\s*/)[1..-1].
|
60
|
-
collect { |s| s.split('=', 2) }.
|
61
|
-
inject({}) { |hash,(k,v)| hash[k.downcase] = v ; hash }
|
62
|
-
end
|
63
|
-
|
64
|
-
# The character set of the request body if a "charset" media type
|
65
|
-
# parameter was given, or nil if no "charset" was specified. Note
|
66
|
-
# that, per RFC2616, text/* media types that specify no explicit
|
67
|
-
# charset are to be considered ISO-8859-1.
|
68
|
-
def content_charset
|
69
|
-
media_type_params['charset']
|
70
|
-
end
|
71
|
-
|
72
|
-
def host
|
73
|
-
# Remove port number.
|
74
|
-
(@env["HTTP_HOST"] || @env["SERVER_NAME"]).gsub(/:\d+\z/, '')
|
75
|
-
end
|
76
|
-
|
77
|
-
def script_name=(s); @env["SCRIPT_NAME"] = s.to_s end
|
78
|
-
def path_info=(s); @env["PATH_INFO"] = s.to_s end
|
79
|
-
|
80
|
-
def get?; request_method == "GET" end
|
81
|
-
def post?; request_method == "POST" end
|
82
|
-
def put?; request_method == "PUT" end
|
83
|
-
def delete?; request_method == "DELETE" end
|
84
|
-
def head?; request_method == "HEAD" end
|
85
|
-
|
86
|
-
# The set of form-data media-types. Requests that do not indicate
|
87
|
-
# one of the media types presents in this list will not be eligible
|
88
|
-
# for form-data / param parsing.
|
89
|
-
FORM_DATA_MEDIA_TYPES = [
|
90
|
-
nil,
|
91
|
-
'application/x-www-form-urlencoded',
|
92
|
-
'multipart/form-data'
|
93
|
-
]
|
94
|
-
|
95
|
-
# Determine whether the request body contains form-data by checking
|
96
|
-
# the request media_type against registered form-data media-types:
|
97
|
-
# "application/x-www-form-urlencoded" and "multipart/form-data". The
|
98
|
-
# list of form-data media types can be modified through the
|
99
|
-
# +FORM_DATA_MEDIA_TYPES+ array.
|
100
|
-
def form_data?
|
101
|
-
FORM_DATA_MEDIA_TYPES.include?(media_type)
|
102
|
-
end
|
103
|
-
|
104
|
-
# Returns the data recieved in the query string.
|
105
|
-
def GET
|
106
|
-
if @env["rack.request.query_string"] == query_string
|
107
|
-
@env["rack.request.query_hash"]
|
108
|
-
else
|
109
|
-
@env["rack.request.query_string"] = query_string
|
110
|
-
@env["rack.request.query_hash"] =
|
111
|
-
Utils.parse_nested_query(query_string)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
# Returns the data recieved in the request body.
|
116
|
-
#
|
117
|
-
# This method support both application/x-www-form-urlencoded and
|
118
|
-
# multipart/form-data.
|
119
|
-
def POST
|
120
|
-
if @env["rack.request.form_input"].eql? @env["rack.input"]
|
121
|
-
@env["rack.request.form_hash"]
|
122
|
-
elsif form_data?
|
123
|
-
@env["rack.request.form_input"] = @env["rack.input"]
|
124
|
-
unless @env["rack.request.form_hash"] =
|
125
|
-
Utils::Multipart.parse_multipart(env)
|
126
|
-
form_vars = @env["rack.input"].read
|
127
|
-
|
128
|
-
# Fix for Safari Ajax postings that always append \0
|
129
|
-
form_vars.sub!(/\0\z/, '')
|
130
|
-
|
131
|
-
@env["rack.request.form_vars"] = form_vars
|
132
|
-
@env["rack.request.form_hash"] = Utils.parse_nested_query(form_vars)
|
133
|
-
|
134
|
-
begin
|
135
|
-
@env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind)
|
136
|
-
rescue Errno::ESPIPE
|
137
|
-
# Handles exceptions raised by input streams that cannot be rewound
|
138
|
-
# such as when using plain CGI under Apache
|
139
|
-
end
|
140
|
-
end
|
141
|
-
@env["rack.request.form_hash"]
|
142
|
-
else
|
143
|
-
{}
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
# The union of GET and POST data.
|
148
|
-
def params
|
149
|
-
self.put? ? self.GET : self.GET.update(self.POST)
|
150
|
-
rescue EOFError => e
|
151
|
-
self.GET
|
152
|
-
end
|
153
|
-
|
154
|
-
# shortcut for request.params[key]
|
155
|
-
def [](key)
|
156
|
-
params[key.to_s]
|
157
|
-
end
|
158
|
-
|
159
|
-
# shortcut for request.params[key] = value
|
160
|
-
def []=(key, value)
|
161
|
-
params[key.to_s] = value
|
162
|
-
end
|
163
|
-
|
164
|
-
# like Hash#values_at
|
165
|
-
def values_at(*keys)
|
166
|
-
keys.map{|key| params[key] }
|
167
|
-
end
|
168
|
-
|
169
|
-
# the referer of the client or '/'
|
170
|
-
def referer
|
171
|
-
@env['HTTP_REFERER'] || '/'
|
172
|
-
end
|
173
|
-
alias referrer referer
|
174
|
-
|
175
|
-
|
176
|
-
def cookies
|
177
|
-
return {} unless @env["HTTP_COOKIE"]
|
178
|
-
|
179
|
-
if @env["rack.request.cookie_string"] == @env["HTTP_COOKIE"]
|
180
|
-
@env["rack.request.cookie_hash"]
|
181
|
-
else
|
182
|
-
@env["rack.request.cookie_string"] = @env["HTTP_COOKIE"]
|
183
|
-
# According to RFC 2109:
|
184
|
-
# If multiple cookies satisfy the criteria above, they are ordered in
|
185
|
-
# the Cookie header such that those with more specific Path attributes
|
186
|
-
# precede those with less specific. Ordering with respect to other
|
187
|
-
# attributes (e.g., Domain) is unspecified.
|
188
|
-
@env["rack.request.cookie_hash"] =
|
189
|
-
Utils.parse_query(@env["rack.request.cookie_string"], ';,').inject({}) {|h,(k,v)|
|
190
|
-
h[k] = Array === v ? v.first : v
|
191
|
-
h
|
192
|
-
}
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
def xhr?
|
197
|
-
@env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest"
|
198
|
-
end
|
199
|
-
|
200
|
-
# Tries to return a remake of the original request URL as a string.
|
201
|
-
def url
|
202
|
-
url = scheme + "://"
|
203
|
-
url << host
|
204
|
-
|
205
|
-
if scheme == "https" && port != 443 ||
|
206
|
-
scheme == "http" && port != 80
|
207
|
-
url << ":#{port}"
|
208
|
-
end
|
209
|
-
|
210
|
-
url << fullpath
|
211
|
-
|
212
|
-
url
|
213
|
-
end
|
214
|
-
|
215
|
-
def fullpath
|
216
|
-
path = script_name + path_info
|
217
|
-
path << "?" << query_string unless query_string.empty?
|
218
|
-
path
|
219
|
-
end
|
220
|
-
|
221
|
-
def accept_encoding
|
222
|
-
@env["HTTP_ACCEPT_ENCODING"].to_s.split(/,\s*/).map do |part|
|
223
|
-
m = /^([^\s,]+?)(?:;\s*q=(\d+(?:\.\d+)?))?$/.match(part) # From WEBrick
|
224
|
-
|
225
|
-
if m
|
226
|
-
[m[1], (m[2] || 1.0).to_f]
|
227
|
-
else
|
228
|
-
raise "Invalid value for Accept-Encoding: #{part.inspect}"
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
def ip
|
234
|
-
if addr = @env['HTTP_X_FORWARDED_FOR']
|
235
|
-
addr.split(',').last.strip
|
236
|
-
else
|
237
|
-
@env['REMOTE_ADDR']
|
238
|
-
end
|
239
|
-
end
|
240
|
-
end
|
241
|
-
end
|
@@ -1,179 +0,0 @@
|
|
1
|
-
require 'rack/request'
|
2
|
-
require 'rack/utils'
|
3
|
-
|
4
|
-
module Rack
|
5
|
-
# Rack::Response provides a convenient interface to create a Rack
|
6
|
-
# response.
|
7
|
-
#
|
8
|
-
# It allows setting of headers and cookies, and provides useful
|
9
|
-
# defaults (a OK response containing HTML).
|
10
|
-
#
|
11
|
-
# You can use Response#write to iteratively generate your response,
|
12
|
-
# but note that this is buffered by Rack::Response until you call
|
13
|
-
# +finish+. +finish+ however can take a block inside which calls to
|
14
|
-
# +write+ are syncronous with the Rack response.
|
15
|
-
#
|
16
|
-
# Your application's +call+ should end returning Response#finish.
|
17
|
-
|
18
|
-
class Response
|
19
|
-
attr_accessor :length
|
20
|
-
|
21
|
-
def initialize(body=[], status=200, header={}, &block)
|
22
|
-
@status = status
|
23
|
-
@header = Utils::HeaderHash.new({"Content-Type" => "text/html"}.
|
24
|
-
merge(header))
|
25
|
-
|
26
|
-
@writer = lambda { |x| @body << x }
|
27
|
-
@block = nil
|
28
|
-
@length = 0
|
29
|
-
|
30
|
-
@body = []
|
31
|
-
|
32
|
-
if body.respond_to? :to_str
|
33
|
-
write body.to_str
|
34
|
-
elsif body.respond_to?(:each)
|
35
|
-
body.each { |part|
|
36
|
-
write part.to_s
|
37
|
-
}
|
38
|
-
else
|
39
|
-
raise TypeError, "stringable or iterable required"
|
40
|
-
end
|
41
|
-
|
42
|
-
yield self if block_given?
|
43
|
-
end
|
44
|
-
|
45
|
-
attr_reader :header
|
46
|
-
attr_accessor :status, :body
|
47
|
-
|
48
|
-
def [](key)
|
49
|
-
header[key]
|
50
|
-
end
|
51
|
-
|
52
|
-
def []=(key, value)
|
53
|
-
header[key] = value
|
54
|
-
end
|
55
|
-
|
56
|
-
def set_cookie(key, value)
|
57
|
-
case value
|
58
|
-
when Hash
|
59
|
-
domain = "; domain=" + value[:domain] if value[:domain]
|
60
|
-
path = "; path=" + value[:path] if value[:path]
|
61
|
-
# According to RFC 2109, we need dashes here.
|
62
|
-
# N.B.: cgi.rb uses spaces...
|
63
|
-
expires = "; expires=" + value[:expires].clone.gmtime.
|
64
|
-
strftime("%a, %d-%b-%Y %H:%M:%S GMT") if value[:expires]
|
65
|
-
secure = "; secure" if value[:secure]
|
66
|
-
httponly = "; HttpOnly" if value[:httponly]
|
67
|
-
value = value[:value]
|
68
|
-
end
|
69
|
-
value = [value] unless Array === value
|
70
|
-
cookie = Utils.escape(key) + "=" +
|
71
|
-
value.map { |v| Utils.escape v }.join("&") +
|
72
|
-
"#{domain}#{path}#{expires}#{secure}#{httponly}"
|
73
|
-
|
74
|
-
case self["Set-Cookie"]
|
75
|
-
when Array
|
76
|
-
self["Set-Cookie"] << cookie
|
77
|
-
when String
|
78
|
-
self["Set-Cookie"] = [self["Set-Cookie"], cookie]
|
79
|
-
when nil
|
80
|
-
self["Set-Cookie"] = cookie
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def delete_cookie(key, value={})
|
85
|
-
unless Array === self["Set-Cookie"]
|
86
|
-
self["Set-Cookie"] = [self["Set-Cookie"]].compact
|
87
|
-
end
|
88
|
-
|
89
|
-
self["Set-Cookie"].reject! { |cookie|
|
90
|
-
cookie =~ /\A#{Utils.escape(key)}=/
|
91
|
-
}
|
92
|
-
|
93
|
-
set_cookie(key,
|
94
|
-
{:value => '', :path => nil, :domain => nil,
|
95
|
-
:expires => Time.at(0) }.merge(value))
|
96
|
-
end
|
97
|
-
|
98
|
-
|
99
|
-
def finish(&block)
|
100
|
-
@block = block
|
101
|
-
|
102
|
-
if [204, 304].include?(status.to_i)
|
103
|
-
header.delete "Content-Type"
|
104
|
-
[status.to_i, header.to_hash, []]
|
105
|
-
else
|
106
|
-
[status.to_i, header.to_hash, self]
|
107
|
-
end
|
108
|
-
end
|
109
|
-
alias to_a finish # For *response
|
110
|
-
|
111
|
-
def each(&callback)
|
112
|
-
@body.each(&callback)
|
113
|
-
@writer = callback
|
114
|
-
@block.call(self) if @block
|
115
|
-
end
|
116
|
-
|
117
|
-
# Append to body and update Content-Length.
|
118
|
-
#
|
119
|
-
# NOTE: Do not mix #write and direct #body access!
|
120
|
-
#
|
121
|
-
def write(str)
|
122
|
-
s = str.to_s
|
123
|
-
@length += s.size
|
124
|
-
@writer.call s
|
125
|
-
|
126
|
-
header["Content-Length"] = @length.to_s
|
127
|
-
str
|
128
|
-
end
|
129
|
-
|
130
|
-
def close
|
131
|
-
body.close if body.respond_to?(:close)
|
132
|
-
end
|
133
|
-
|
134
|
-
def empty?
|
135
|
-
@block == nil && @body.empty?
|
136
|
-
end
|
137
|
-
|
138
|
-
alias headers header
|
139
|
-
|
140
|
-
module Helpers
|
141
|
-
def invalid?; @status < 100 || @status >= 600; end
|
142
|
-
|
143
|
-
def informational?; @status >= 100 && @status < 200; end
|
144
|
-
def successful?; @status >= 200 && @status < 300; end
|
145
|
-
def redirection?; @status >= 300 && @status < 400; end
|
146
|
-
def client_error?; @status >= 400 && @status < 500; end
|
147
|
-
def server_error?; @status >= 500 && @status < 600; end
|
148
|
-
|
149
|
-
def ok?; @status == 200; end
|
150
|
-
def forbidden?; @status == 403; end
|
151
|
-
def not_found?; @status == 404; end
|
152
|
-
|
153
|
-
def redirect?; [301, 302, 303, 307].include? @status; end
|
154
|
-
def empty?; [201, 204, 304].include? @status; end
|
155
|
-
|
156
|
-
# Headers
|
157
|
-
attr_reader :headers, :original_headers
|
158
|
-
|
159
|
-
def include?(header)
|
160
|
-
!!headers[header]
|
161
|
-
end
|
162
|
-
|
163
|
-
def content_type
|
164
|
-
headers["Content-Type"]
|
165
|
-
end
|
166
|
-
|
167
|
-
def content_length
|
168
|
-
cl = headers["Content-Length"]
|
169
|
-
cl ? cl.to_i : cl
|
170
|
-
end
|
171
|
-
|
172
|
-
def location
|
173
|
-
headers["Location"]
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
include Helpers
|
178
|
-
end
|
179
|
-
end
|