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
@@ -26,6 +26,14 @@ module ActiveResource
|
|
26
26
|
def to_s; @message ;end
|
27
27
|
end
|
28
28
|
|
29
|
+
# Raised when a OpenSSL::SSL::SSLError occurs.
|
30
|
+
class SSLError < ConnectionError
|
31
|
+
def initialize(message)
|
32
|
+
@message = message
|
33
|
+
end
|
34
|
+
def to_s; @message ;end
|
35
|
+
end
|
36
|
+
|
29
37
|
# 3xx Redirection
|
30
38
|
class Redirection < ConnectionError # :nodoc:
|
31
39
|
def to_s; response['Location'] ? "#{super} => #{response['Location']}" : super; end
|
@@ -49,6 +57,9 @@ module ActiveResource
|
|
49
57
|
# 409 Conflict
|
50
58
|
class ResourceConflict < ClientError; end # :nodoc:
|
51
59
|
|
60
|
+
# 410 Gone
|
61
|
+
class ResourceGone < ClientError; end # :nodoc:
|
62
|
+
|
52
63
|
# 5xx Server Error
|
53
64
|
class ServerError < ConnectionError; end # :nodoc:
|
54
65
|
|
@@ -67,10 +78,11 @@ module ActiveResource
|
|
67
78
|
HTTP_FORMAT_HEADER_NAMES = { :get => 'Accept',
|
68
79
|
:put => 'Content-Type',
|
69
80
|
:post => 'Content-Type',
|
70
|
-
:delete => 'Accept'
|
81
|
+
:delete => 'Accept',
|
82
|
+
:head => 'Accept'
|
71
83
|
}
|
72
84
|
|
73
|
-
attr_reader :site, :user, :password, :timeout
|
85
|
+
attr_reader :site, :user, :password, :timeout, :proxy, :ssl_options
|
74
86
|
attr_accessor :format
|
75
87
|
|
76
88
|
class << self
|
@@ -95,7 +107,12 @@ module ActiveResource
|
|
95
107
|
@password = URI.decode(@site.password) if @site.password
|
96
108
|
end
|
97
109
|
|
98
|
-
# Set
|
110
|
+
# Set the proxy for remote service.
|
111
|
+
def proxy=(proxy)
|
112
|
+
@proxy = proxy.is_a?(URI) ? proxy : URI.parse(proxy)
|
113
|
+
end
|
114
|
+
|
115
|
+
# Set the user for remote service.
|
99
116
|
def user=(user)
|
100
117
|
@user = user
|
101
118
|
end
|
@@ -110,6 +127,11 @@ module ActiveResource
|
|
110
127
|
@timeout = timeout
|
111
128
|
end
|
112
129
|
|
130
|
+
# Hash of options applied to Net::HTTP instance when +site+ protocol is 'https'.
|
131
|
+
def ssl_options=(opts={})
|
132
|
+
@ssl_options = opts
|
133
|
+
end
|
134
|
+
|
113
135
|
# Execute a GET request.
|
114
136
|
# Used to get (find) resources.
|
115
137
|
def get(path, headers = {})
|
@@ -137,7 +159,7 @@ module ActiveResource
|
|
137
159
|
# Execute a HEAD request.
|
138
160
|
# Used to obtain meta-information about resources, such as whether they exist and their size (via response headers).
|
139
161
|
def head(path, headers = {})
|
140
|
-
request(:head, path, build_request_headers(headers))
|
162
|
+
request(:head, path, build_request_headers(headers, :head))
|
141
163
|
end
|
142
164
|
|
143
165
|
|
@@ -151,6 +173,8 @@ module ActiveResource
|
|
151
173
|
handle_response(result)
|
152
174
|
rescue Timeout::Error => e
|
153
175
|
raise TimeoutError.new(e.message)
|
176
|
+
rescue OpenSSL::SSL::SSLError => e
|
177
|
+
raise SSLError.new(e.message)
|
154
178
|
end
|
155
179
|
|
156
180
|
# Handles response and error codes from remote service.
|
@@ -172,6 +196,8 @@ module ActiveResource
|
|
172
196
|
raise(MethodNotAllowed.new(response))
|
173
197
|
when 409
|
174
198
|
raise(ResourceConflict.new(response))
|
199
|
+
when 410
|
200
|
+
raise(ResourceGone.new(response))
|
175
201
|
when 422
|
176
202
|
raise(ResourceInvalid.new(response))
|
177
203
|
when 401...500
|
@@ -186,10 +212,49 @@ module ActiveResource
|
|
186
212
|
# Creates new Net::HTTP instance for communication with
|
187
213
|
# remote service and resources.
|
188
214
|
def http
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
215
|
+
configure_http(new_http)
|
216
|
+
end
|
217
|
+
|
218
|
+
def new_http
|
219
|
+
if @proxy
|
220
|
+
Net::HTTP.new(@site.host, @site.port, @proxy.host, @proxy.port, @proxy.user, @proxy.password)
|
221
|
+
else
|
222
|
+
Net::HTTP.new(@site.host, @site.port)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def configure_http(http)
|
227
|
+
http = apply_ssl_options(http)
|
228
|
+
|
229
|
+
# Net::HTTP timeouts default to 60 seconds.
|
230
|
+
if @timeout
|
231
|
+
http.open_timeout = @timeout
|
232
|
+
http.read_timeout = @timeout
|
233
|
+
end
|
234
|
+
|
235
|
+
http
|
236
|
+
end
|
237
|
+
|
238
|
+
def apply_ssl_options(http)
|
239
|
+
return http unless @site.is_a?(URI::HTTPS)
|
240
|
+
|
241
|
+
http.use_ssl = true
|
242
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
243
|
+
return http unless defined?(@ssl_options)
|
244
|
+
|
245
|
+
http.ca_path = @ssl_options[:ca_path] if @ssl_options[:ca_path]
|
246
|
+
http.ca_file = @ssl_options[:ca_file] if @ssl_options[:ca_file]
|
247
|
+
|
248
|
+
http.cert = @ssl_options[:cert] if @ssl_options[:cert]
|
249
|
+
http.key = @ssl_options[:key] if @ssl_options[:key]
|
250
|
+
|
251
|
+
http.cert_store = @ssl_options[:cert_store] if @ssl_options[:cert_store]
|
252
|
+
http.ssl_timeout = @ssl_options[:ssl_timeout] if @ssl_options[:ssl_timeout]
|
253
|
+
|
254
|
+
http.verify_mode = @ssl_options[:verify_mode] if @ssl_options[:verify_mode]
|
255
|
+
http.verify_callback = @ssl_options[:verify_callback] if @ssl_options[:verify_callback]
|
256
|
+
http.verify_depth = @ssl_options[:verify_depth] if @ssl_options[:verify_depth]
|
257
|
+
|
193
258
|
http
|
194
259
|
end
|
195
260
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module ActiveResource
|
2
|
+
class ConnectionError < StandardError # :nodoc:
|
3
|
+
attr_reader :response
|
4
|
+
|
5
|
+
def initialize(response, message = nil)
|
6
|
+
@response = response
|
7
|
+
@message = message
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
"Failed with #{response.code} #{response.message if response.respond_to?(:message)}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Raised when a Timeout::Error occurs.
|
16
|
+
class TimeoutError < ConnectionError
|
17
|
+
def initialize(message)
|
18
|
+
@message = message
|
19
|
+
end
|
20
|
+
def to_s; @message ;end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Raised when a OpenSSL::SSL::SSLError occurs.
|
24
|
+
class SSLError < ConnectionError
|
25
|
+
def initialize(message)
|
26
|
+
@message = message
|
27
|
+
end
|
28
|
+
def to_s; @message ;end
|
29
|
+
end
|
30
|
+
|
31
|
+
# 3xx Redirection
|
32
|
+
class Redirection < ConnectionError # :nodoc:
|
33
|
+
def to_s; response['Location'] ? "#{super} => #{response['Location']}" : super; end
|
34
|
+
end
|
35
|
+
|
36
|
+
# 4xx Client Error
|
37
|
+
class ClientError < ConnectionError; end # :nodoc:
|
38
|
+
|
39
|
+
# 400 Bad Request
|
40
|
+
class BadRequest < ClientError; end # :nodoc
|
41
|
+
|
42
|
+
# 401 Unauthorized
|
43
|
+
class UnauthorizedAccess < ClientError; end # :nodoc
|
44
|
+
|
45
|
+
# 403 Forbidden
|
46
|
+
class ForbiddenAccess < ClientError; end # :nodoc
|
47
|
+
|
48
|
+
# 404 Not Found
|
49
|
+
class ResourceNotFound < ClientError; end # :nodoc:
|
50
|
+
|
51
|
+
# 409 Conflict
|
52
|
+
class ResourceConflict < ClientError; end # :nodoc:
|
53
|
+
|
54
|
+
# 410 Gone
|
55
|
+
class ResourceGone < ClientError; end # :nodoc:
|
56
|
+
|
57
|
+
# 5xx Server Error
|
58
|
+
class ServerError < ConnectionError; end # :nodoc:
|
59
|
+
|
60
|
+
# 405 Method Not Allowed
|
61
|
+
class MethodNotAllowed < ClientError # :nodoc:
|
62
|
+
def allowed_methods
|
63
|
+
@response['Allow'].split(',').map { |verb| verb.strip.downcase.to_sym }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -199,11 +199,10 @@ module ActiveResource
|
|
199
199
|
alias_method :count, :size
|
200
200
|
alias_method :length, :size
|
201
201
|
|
202
|
-
# Grabs errors from
|
203
|
-
def
|
202
|
+
# Grabs errors from an array of messages (like ActiveRecord::Validations)
|
203
|
+
def from_array(messages)
|
204
204
|
clear
|
205
205
|
humanized_attributes = @base.attributes.keys.inject({}) { |h, attr_name| h.update(attr_name.humanize => attr_name) }
|
206
|
-
messages = Array.wrap(Hash.from_xml(xml)['errors']['error']) rescue []
|
207
206
|
messages.each do |message|
|
208
207
|
attr_message = humanized_attributes.keys.detect do |attr_name|
|
209
208
|
if message[0, attr_name.size + 1] == "#{attr_name} "
|
@@ -214,6 +213,18 @@ module ActiveResource
|
|
214
213
|
add_to_base message if attr_message.nil?
|
215
214
|
end
|
216
215
|
end
|
216
|
+
|
217
|
+
# Grabs errors from the json response.
|
218
|
+
def from_json(json)
|
219
|
+
array = ActiveSupport::JSON.decode(json)['errors'] rescue []
|
220
|
+
from_array array
|
221
|
+
end
|
222
|
+
|
223
|
+
# Grabs errors from the XML response.
|
224
|
+
def from_xml(xml)
|
225
|
+
array = Array.wrap(Hash.from_xml(xml)['errors']['error']) rescue []
|
226
|
+
from_array array
|
227
|
+
end
|
217
228
|
end
|
218
229
|
|
219
230
|
# Module to support validation and errors with Active Resource objects. The module overrides
|
@@ -248,7 +259,12 @@ module ActiveResource
|
|
248
259
|
save_without_validation
|
249
260
|
true
|
250
261
|
rescue ResourceInvalid => error
|
251
|
-
|
262
|
+
case error.response['Content-Type']
|
263
|
+
when 'application/xml'
|
264
|
+
errors.from_xml(error.response.body)
|
265
|
+
when 'application/json'
|
266
|
+
errors.from_json(error.response.body)
|
267
|
+
end
|
252
268
|
false
|
253
269
|
end
|
254
270
|
|
@@ -49,7 +49,9 @@ class BaseLoadTest < Test::Unit::TestCase
|
|
49
49
|
:id => 1, :state => { :id => 1, :name => 'Oregon',
|
50
50
|
:notable_rivers => [
|
51
51
|
{ :id => 1, :name => 'Willamette' },
|
52
|
-
{ :id => 2, :name => 'Columbia', :rafted_by => @matz }]
|
52
|
+
{ :id => 2, :name => 'Columbia', :rafted_by => @matz }],
|
53
|
+
:postal_codes => [ 97018, 1234567890 ],
|
54
|
+
:places => [ "Columbia City", "Unknown" ]}}}
|
53
55
|
|
54
56
|
@person = Person.new
|
55
57
|
end
|
@@ -125,6 +127,19 @@ class BaseLoadTest < Test::Unit::TestCase
|
|
125
127
|
assert_kind_of Person::Street::State::NotableRiver, rivers.first
|
126
128
|
assert_equal @deep[:street][:state][:notable_rivers].first[:id], rivers.first.id
|
127
129
|
assert_equal @matz[:id], rivers.last.rafted_by.id
|
130
|
+
|
131
|
+
postal_codes = state.postal_codes
|
132
|
+
assert_kind_of Array, postal_codes
|
133
|
+
assert_equal 2, postal_codes.size
|
134
|
+
assert_kind_of Fixnum, postal_codes.first
|
135
|
+
assert_equal @deep[:street][:state][:postal_codes].first, postal_codes.first
|
136
|
+
assert_kind_of Numeric, postal_codes.last
|
137
|
+
assert_equal @deep[:street][:state][:postal_codes].last, postal_codes.last
|
138
|
+
|
139
|
+
places = state.places
|
140
|
+
assert_kind_of Array, places
|
141
|
+
assert_kind_of String, places.first
|
142
|
+
assert_equal @deep[:street][:state][:places].first, places.first
|
128
143
|
end
|
129
144
|
|
130
145
|
def test_nested_collections_within_the_same_namespace
|
@@ -4,45 +4,82 @@ require "fixtures/person"
|
|
4
4
|
class BaseErrorsTest < Test::Unit::TestCase
|
5
5
|
def setup
|
6
6
|
ActiveResource::HttpMock.respond_to do |mock|
|
7
|
-
mock.post "/people.xml", {},
|
7
|
+
mock.post "/people.xml", {}, %q(<?xml version="1.0" encoding="UTF-8"?><errors><error>Age can't be blank</error><error>Name can't be blank</error><error>Name must start with a letter</error><error>Person quota full for today.</error></errors>), 422, {'Content-Type' => 'application/xml'}
|
8
|
+
mock.post "/people.json", {}, %q({"errors":["Age can't be blank","Name can't be blank","Name must start with a letter","Person quota full for today."]}), 422, {'Content-Type' => 'application/json'}
|
8
9
|
end
|
9
10
|
@person = Person.new(:name => '', :age => '')
|
10
11
|
assert_equal @person.save, false
|
11
12
|
end
|
12
13
|
|
13
14
|
def test_should_mark_as_invalid
|
14
|
-
|
15
|
+
[ :json, :xml ].each do |format|
|
16
|
+
invalid_user_using_format(format) do
|
17
|
+
assert !@person.valid?
|
18
|
+
end
|
19
|
+
end
|
15
20
|
end
|
16
21
|
|
17
22
|
def test_should_parse_xml_errors
|
18
|
-
|
19
|
-
|
23
|
+
[ :json, :xml ].each do |format|
|
24
|
+
invalid_user_using_format(format) do
|
25
|
+
assert_kind_of ActiveResource::Errors, @person.errors
|
26
|
+
assert_equal 4, @person.errors.size
|
27
|
+
end
|
28
|
+
end
|
20
29
|
end
|
21
30
|
|
22
31
|
def test_should_parse_errors_to_individual_attributes
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
32
|
+
[ :json, :xml ].each do |format|
|
33
|
+
invalid_user_using_format(format) do
|
34
|
+
assert @person.errors[:name].any?
|
35
|
+
assert_equal "can't be blank", @person.errors[:age]
|
36
|
+
assert_equal ["can't be blank", "must start with a letter"], @person.errors[:name]
|
37
|
+
assert_equal "Person quota full for today.", @person.errors[:base]
|
38
|
+
end
|
39
|
+
end
|
27
40
|
end
|
28
41
|
|
29
42
|
def test_should_iterate_over_errors
|
30
|
-
|
31
|
-
|
32
|
-
|
43
|
+
[ :json, :xml ].each do |format|
|
44
|
+
invalid_user_using_format(format) do
|
45
|
+
errors = []
|
46
|
+
@person.errors.each { |attribute, message| errors << [attribute, message] }
|
47
|
+
assert errors.include?(['name', "can't be blank"])
|
48
|
+
end
|
49
|
+
end
|
33
50
|
end
|
34
51
|
|
35
52
|
def test_should_iterate_over_full_errors
|
36
|
-
|
37
|
-
|
38
|
-
|
53
|
+
[ :json, :xml ].each do |format|
|
54
|
+
invalid_user_using_format(format) do
|
55
|
+
errors = []
|
56
|
+
@person.errors.to_a.each { |message| errors << message }
|
57
|
+
assert errors.include?(["name", "can't be blank"])
|
58
|
+
end
|
59
|
+
end
|
39
60
|
end
|
40
61
|
|
41
62
|
def test_should_format_full_errors
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
63
|
+
[ :json, :xml ].each do |format|
|
64
|
+
invalid_user_using_format(format) do
|
65
|
+
full = @person.errors.full_messages
|
66
|
+
assert full.include?("Age can't be blank")
|
67
|
+
assert full.include?("Name can't be blank")
|
68
|
+
assert full.include?("Name must start with a letter")
|
69
|
+
assert full.include?("Person quota full for today.")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
def invalid_user_using_format(mime_type_reference)
|
76
|
+
previous_format = Person.format
|
77
|
+
Person.format = mime_type_reference
|
78
|
+
@person = Person.new(:name => '', :age => '')
|
79
|
+
assert_equal false, @person.save
|
80
|
+
|
81
|
+
yield
|
82
|
+
ensure
|
83
|
+
Person.format = previous_format
|
47
84
|
end
|
48
85
|
end
|
@@ -3,6 +3,7 @@ require "fixtures/person"
|
|
3
3
|
require "fixtures/customer"
|
4
4
|
require "fixtures/street_address"
|
5
5
|
require "fixtures/beast"
|
6
|
+
require "fixtures/proxy"
|
6
7
|
|
7
8
|
class BaseTest < Test::Unit::TestCase
|
8
9
|
def setup
|
@@ -124,6 +125,28 @@ class BaseTest < Test::Unit::TestCase
|
|
124
125
|
assert_nil actor.site
|
125
126
|
end
|
126
127
|
|
128
|
+
def test_proxy_accessor_accepts_uri_or_string_argument
|
129
|
+
proxy = URI.parse('http://localhost')
|
130
|
+
|
131
|
+
assert_nothing_raised { Person.proxy = 'http://localhost' }
|
132
|
+
assert_equal proxy, Person.proxy
|
133
|
+
|
134
|
+
assert_nothing_raised { Person.proxy = proxy }
|
135
|
+
assert_equal proxy, Person.proxy
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_should_use_proxy_prefix_and_credentials
|
139
|
+
assert_equal 'http://user:password@proxy.local:3000', ProxyResource.proxy.to_s
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_proxy_variable_can_be_reset
|
143
|
+
actor = Class.new(ActiveResource::Base)
|
144
|
+
assert_nil actor.site
|
145
|
+
actor.proxy = 'http://localhost:31337'
|
146
|
+
actor.proxy = nil
|
147
|
+
assert_nil actor.site
|
148
|
+
end
|
149
|
+
|
127
150
|
def test_should_accept_setting_user
|
128
151
|
Forum.user = 'david'
|
129
152
|
assert_equal('david', Forum.user)
|
@@ -142,6 +165,13 @@ class BaseTest < Test::Unit::TestCase
|
|
142
165
|
assert_equal(5, Forum.connection.timeout)
|
143
166
|
end
|
144
167
|
|
168
|
+
def test_should_accept_setting_ssl_options
|
169
|
+
expected = {:verify => 1}
|
170
|
+
Forum.ssl_options= expected
|
171
|
+
assert_equal(expected, Forum.ssl_options)
|
172
|
+
assert_equal(expected, Forum.connection.ssl_options)
|
173
|
+
end
|
174
|
+
|
145
175
|
def test_user_variable_can_be_reset
|
146
176
|
actor = Class.new(ActiveResource::Base)
|
147
177
|
actor.site = 'http://cinema'
|
@@ -172,6 +202,16 @@ class BaseTest < Test::Unit::TestCase
|
|
172
202
|
assert_nil actor.connection.timeout
|
173
203
|
end
|
174
204
|
|
205
|
+
def test_ssl_options_hash_can_be_reset
|
206
|
+
actor = Class.new(ActiveResource::Base)
|
207
|
+
actor.site = 'https://cinema'
|
208
|
+
assert_nil actor.ssl_options
|
209
|
+
actor.ssl_options = {:foo => 5}
|
210
|
+
actor.ssl_options = nil
|
211
|
+
assert_nil actor.ssl_options
|
212
|
+
assert_nil actor.connection.ssl_options
|
213
|
+
end
|
214
|
+
|
175
215
|
def test_credentials_from_site_are_decoded
|
176
216
|
actor = Class.new(ActiveResource::Base)
|
177
217
|
actor.site = 'http://my%40email.com:%31%32%33@cinema'
|
@@ -220,6 +260,47 @@ class BaseTest < Test::Unit::TestCase
|
|
220
260
|
assert_equal fruit.site, apple.site, 'subclass did not adopt changes from parent class'
|
221
261
|
end
|
222
262
|
|
263
|
+
def test_proxy_reader_uses_superclass_site_until_written
|
264
|
+
# Superclass is Object so returns nil.
|
265
|
+
assert_nil ActiveResource::Base.proxy
|
266
|
+
assert_nil Class.new(ActiveResource::Base).proxy
|
267
|
+
|
268
|
+
# Subclass uses superclass proxy.
|
269
|
+
actor = Class.new(Person)
|
270
|
+
assert_equal Person.proxy, actor.proxy
|
271
|
+
|
272
|
+
# Subclass returns frozen superclass copy.
|
273
|
+
assert !Person.proxy.frozen?
|
274
|
+
assert actor.proxy.frozen?
|
275
|
+
|
276
|
+
# Changing subclass proxy doesn't change superclass site.
|
277
|
+
actor.proxy = 'http://localhost:31337'
|
278
|
+
assert_not_equal Person.proxy, actor.proxy
|
279
|
+
|
280
|
+
# Changed subclass proxy is not frozen.
|
281
|
+
assert !actor.proxy.frozen?
|
282
|
+
|
283
|
+
# Changing superclass proxy doesn't overwrite subclass site.
|
284
|
+
Person.proxy = 'http://somewhere.else'
|
285
|
+
assert_not_equal Person.proxy, actor.proxy
|
286
|
+
|
287
|
+
# Changing superclass proxy after subclassing changes subclass site.
|
288
|
+
jester = Class.new(actor)
|
289
|
+
actor.proxy = 'http://nomad'
|
290
|
+
assert_equal actor.proxy, jester.proxy
|
291
|
+
assert jester.proxy.frozen?
|
292
|
+
|
293
|
+
# Subclasses are always equal to superclass proxy when not overridden
|
294
|
+
fruit = Class.new(ActiveResource::Base)
|
295
|
+
apple = Class.new(fruit)
|
296
|
+
|
297
|
+
fruit.proxy = 'http://market'
|
298
|
+
assert_equal fruit.proxy, apple.proxy, 'subclass did not adopt changes from parent class'
|
299
|
+
|
300
|
+
fruit.proxy = 'http://supermarket'
|
301
|
+
assert_equal fruit.proxy, apple.proxy, 'subclass did not adopt changes from parent class'
|
302
|
+
end
|
303
|
+
|
223
304
|
def test_user_reader_uses_superclass_user_until_written
|
224
305
|
# Superclass is Object so returns nil.
|
225
306
|
assert_nil ActiveResource::Base.user
|
@@ -330,6 +411,40 @@ class BaseTest < Test::Unit::TestCase
|
|
330
411
|
assert_equal fruit.timeout, apple.timeout, 'subclass did not adopt changes from parent class'
|
331
412
|
end
|
332
413
|
|
414
|
+
def test_ssl_options_reader_uses_superclass_ssl_options_until_written
|
415
|
+
# Superclass is Object so returns nil.
|
416
|
+
assert_nil ActiveResource::Base.ssl_options
|
417
|
+
assert_nil Class.new(ActiveResource::Base).ssl_options
|
418
|
+
Person.ssl_options = {:foo => 'bar'}
|
419
|
+
|
420
|
+
# Subclass uses superclass ssl_options.
|
421
|
+
actor = Class.new(Person)
|
422
|
+
assert_equal Person.ssl_options, actor.ssl_options
|
423
|
+
|
424
|
+
# Changing subclass ssl_options doesn't change superclass ssl_options.
|
425
|
+
actor.ssl_options = {:baz => ''}
|
426
|
+
assert_not_equal Person.ssl_options, actor.ssl_options
|
427
|
+
|
428
|
+
# Changing superclass ssl_options doesn't overwrite subclass ssl_options.
|
429
|
+
Person.ssl_options = {:color => 'blue'}
|
430
|
+
assert_not_equal Person.ssl_options, actor.ssl_options
|
431
|
+
|
432
|
+
# Changing superclass ssl_options after subclassing changes subclass ssl_options.
|
433
|
+
jester = Class.new(actor)
|
434
|
+
actor.ssl_options = {:color => 'red'}
|
435
|
+
assert_equal actor.ssl_options, jester.ssl_options
|
436
|
+
|
437
|
+
# Subclasses are always equal to superclass ssl_options when not overridden.
|
438
|
+
fruit = Class.new(ActiveResource::Base)
|
439
|
+
apple = Class.new(fruit)
|
440
|
+
|
441
|
+
fruit.ssl_options = {:alpha => 'betas'}
|
442
|
+
assert_equal fruit.ssl_options, apple.ssl_options, 'subclass did not adopt changes from parent class'
|
443
|
+
|
444
|
+
fruit.ssl_options = {:omega => 'moos'}
|
445
|
+
assert_equal fruit.ssl_options, apple.ssl_options, 'subclass did not adopt changes from parent class'
|
446
|
+
end
|
447
|
+
|
333
448
|
def test_updating_baseclass_site_object_wipes_descendent_cached_connection_objects
|
334
449
|
# Subclasses are always equal to superclass site when not overridden
|
335
450
|
fruit = Class.new(ActiveResource::Base)
|
@@ -783,6 +898,14 @@ class BaseTest < Test::Unit::TestCase
|
|
783
898
|
assert_raise(ActiveResource::ResourceNotFound) { StreetAddress.find(1, :params => { :person_id => 1 }) }
|
784
899
|
end
|
785
900
|
|
901
|
+
def test_destroy_with_410_gone
|
902
|
+
assert Person.find(1).destroy
|
903
|
+
ActiveResource::HttpMock.respond_to do |mock|
|
904
|
+
mock.get "/people/1.xml", {}, nil, 410
|
905
|
+
end
|
906
|
+
assert_raise(ActiveResource::ResourceGone) { Person.find(1).destroy }
|
907
|
+
end
|
908
|
+
|
786
909
|
def test_delete
|
787
910
|
assert Person.delete(1)
|
788
911
|
ActiveResource::HttpMock.respond_to do |mock|
|
@@ -798,6 +921,14 @@ class BaseTest < Test::Unit::TestCase
|
|
798
921
|
end
|
799
922
|
assert_raise(ActiveResource::ResourceNotFound) { StreetAddress.find(1, :params => { :person_id => 1 }) }
|
800
923
|
end
|
924
|
+
|
925
|
+
def test_delete_with_410_gone
|
926
|
+
assert Person.delete(1)
|
927
|
+
ActiveResource::HttpMock.respond_to do |mock|
|
928
|
+
mock.get "/people/1.xml", {}, nil, 410
|
929
|
+
end
|
930
|
+
assert_raise(ActiveResource::ResourceGone) { Person.find(1) }
|
931
|
+
end
|
801
932
|
|
802
933
|
def test_exists
|
803
934
|
# Class method.
|
@@ -850,6 +981,22 @@ class BaseTest < Test::Unit::TestCase
|
|
850
981
|
end
|
851
982
|
end
|
852
983
|
|
984
|
+
def test_exists_without_http_mock
|
985
|
+
http = Net::HTTP.new(Person.site.host, Person.site.port)
|
986
|
+
ActiveResource::Connection.any_instance.expects(:http).returns(http)
|
987
|
+
http.expects(:request).returns(ActiveResource::Response.new(""))
|
988
|
+
|
989
|
+
assert Person.exists?('not-mocked')
|
990
|
+
end
|
991
|
+
|
992
|
+
def test_exists_with_410_gone
|
993
|
+
ActiveResource::HttpMock.respond_to do |mock|
|
994
|
+
mock.head "/people/1.xml", {}, nil, 410
|
995
|
+
end
|
996
|
+
|
997
|
+
assert !Person.exists?(1)
|
998
|
+
end
|
999
|
+
|
853
1000
|
def test_to_xml
|
854
1001
|
matz = Person.find(1)
|
855
1002
|
xml = matz.encode
|