1. 07 8月, 2016 1 次提交
  2. 06 8月, 2016 1 次提交
    • E
      Fix GET JSON integration test request to use method override · af1680f5
      eileencodes 提交于
      When a `GET` request is sent `as: :json` in an integration test the test
      should use Rack's method override to change to a post request so the
      paramters are included in the postdata. Otherwise it will not encode the
      parameters correctly for the integration test.
      
      Because integration test sets up it's own middleware,
      `Rack::MethodOverride` needs to be included in the integration tests as
      well.
      
      `headers ||= {}` was moved so that headers are never nil. They should
      default to a hash.
      
      Fixes #26033
      
      [Eileen M. Uchitelle & Aaron Patterson]
      af1680f5
  3. 02 8月, 2016 4 次提交
    • K
      Fix wrong assignment. · 70b995a7
      Kasper Timm Hansen 提交于
      Screwed up both the left and right hand sides!
      70b995a7
    • K
      Set `always_permitted_parameters`. · 1d542e47
      Kasper Timm Hansen 提交于
      The tests were written with the common false value seen in Rails apps,
      show that intent in the code.
      
      Should also fix the build on 5-0-stable.
      1d542e47
    • K
      Let Psych 2.0.9+ deserialize 2.0.8 serialized parameters. · 6eb97823
      Kasper Timm Hansen 提交于
      If we were to serialize an `ActionController::Parameters` on Psych 2.0.8, we'd get:
      
      ```yaml
      --- !ruby/hash:ActionController::Parameters
      key: :value
      ```
      
      Because 2.0.8 didn't store instance variables, while 2.0.9 did:
      https://github.com/tenderlove/psych/commit/8f84ad0fc711a82a1040def861cb121e8985fd4c
      
      That, coupled with 2.0.8 calling `new` instead of `allocate` meant parameters was
      deserialized just fine:
      https://github.com/tenderlove/psych/commit/af308f8307899cb9e1c0fffea4bce3110a1c3926
      
      However, if users have 2.0.8 serialized parameters, then upgrade to Psych 2.0.9+ and
      Rails 5, it would start to blow up because `initialize` will never be called, and thus
      `@parameters` will never be assigned. Hello, `NoMethodErrors` on `NilClass`! :)
      
      To fix this we register another variant of the previous serialization format and take
      it into account in `init_with`.
      
      I've tested this in our app and previously raising code now deserializes like a champ.
      I'm unsure how to test this in our suite because we use Psych 2.0.8 and don't know how
      to make us use 2.0.9+ for just one test.
      6eb97823
    • K
      Make Parameters support legacy YAML encodings. · 31448f2b
      Kasper Timm Hansen 提交于
      By changing ActionController::Parameter's superclass, Rails 5 also changed
      the YAML serialization format.
      
      Since YAML doesn't know how to handle parameters it would fallback to its
      routine for the superclass, which in Rails 4.2 was Hash while just Object
      in Rails 5. As evident in the tags YAML would spit out:
      
      4.2: !ruby/hash-with-ivars:ActionController::Parameters
      5.0: !ruby/object:ActionController::Parameters
      
      Thus when loading parameters YAML from 4.2 in Rails 5, it would parse a
      hash dump as it would an Object class.
      
      To fix this we have to provide our own `init_with` to be aware of the past
      format as well as the new one. Then we add a `load_tags` mapping, such that
      when the YAML parser sees `!ruby/hash-with-ivars:ActionController::Parameters`,
      it knows to call our `init_with` function and not try to instantiate it as
      a normal hash subclass.
      31448f2b
  4. 29 7月, 2016 1 次提交
  5. 28 7月, 2016 1 次提交
    • N
      Reset rack.input when the environment is scrubbed for the next request · 40758347
      Nick Sieger 提交于
      Before this change, posted parameters would leak across requests. The included
      test case failed like so:
      
            1) Failure:
          TestCaseTest#test_multiple_mixed_method_process_should_scrub_rack_input:
          --- expected
          +++ actual
          @@ -1 +1 @@
          -{"bar"=>"an bar", "controller"=>"test_case_test/test", "action"=>"test_params"}
          +{"foo"=>"an foo", "bar"=>"an bar", "controller"=>"test_case_test/test", "action"=>"test_params"}
      
      An argument could be made that this situation isn't encountered often and that
      one should limit the number of requests per test case, but I still think the
      parameter leaking is an unexpected side-effect.
      40758347
  6. 27 7月, 2016 3 次提交
  7. 21 7月, 2016 1 次提交
  8. 17 7月, 2016 1 次提交
  9. 14 7月, 2016 1 次提交
  10. 12 7月, 2016 1 次提交
  11. 09 7月, 2016 1 次提交
    • T
      Trust `Object#dup` in `ActionController::Parameters`, using `#initialize_copy`... · 96070595
      Tim Rogers 提交于
      Trust `Object#dup` in `ActionController::Parameters`, using `#initialize_copy` to manually duplicate the underlying parameters hash
      
      It looks like `ActionController::Parameters#dup` is leftover from when the class inherited from `Hash`. We can just trust `#dup`, which already copies the `@permitted` instance variable (confirmed by tests). We still define a `#initialize_copy` to make `@parameters` a copy that can be mutated without affecting the original instance.
      96070595
  12. 07 7月, 2016 1 次提交
    • T
      Changes to a dupped `ActionController::Parameters` mutate the original · ba3dd5ca
      Tim Rogers 提交于
      When `ActionController::Parameters` is duplicated with `#dup`, it doesn't create a duplicate of the instance variables (e.g. `@parameters`) but rather maintains the reference (see <http://ruby-doc.org/core-2.3.1/Object.html>). Given that the parameters object is often manipulated as if it were a hash (e.g. with `#delete` and similar methods), this leads to unexpected behaviour, like the following:
      
      ```
      params = ActionController::Parameters.new(foo: "bar")
      duplicated_params = params.dup
      duplicated_params.delete(:foo)
      
      params == duplicated_params
      ```
      
      This fixes the bug by defining a private `#initialize_copy` method, used internally by `#dup`, which makes a copy of `@parameters`.
      ba3dd5ca
  13. 29 6月, 2016 1 次提交
  14. 25 6月, 2016 1 次提交
    • Y
      make `as` option work with get parameters · e130ce45
      yuuji.yaginuma 提交于
      Currently, if path is a relative path, add format without the discrimination of the query.
      Therefore, if there is a query, format at end of the query would been added,
      format was not be specified correctly.
      
      This fix add format to end of path rather than query.
      e130ce45
  15. 23 6月, 2016 1 次提交
  16. 09 6月, 2016 1 次提交
  17. 08 6月, 2016 1 次提交
  18. 03 6月, 2016 1 次提交
  19. 01 6月, 2016 1 次提交
  20. 31 5月, 2016 2 次提交
  21. 24 5月, 2016 1 次提交
  22. 19 5月, 2016 1 次提交
  23. 16 5月, 2016 1 次提交
    • J
      Action Mailer: Declarative exception handling with `rescue_from`. · e35b98e6
      Jeremy Daer 提交于
      Follows the same pattern as controllers and jobs. Exceptions raised in
      delivery jobs (enqueued by `#deliver_later`) are also delegated to the
      mailer's rescue_from handlers, so you can handle the DeserializationError
      raised by delivery jobs:
      
      ```ruby
      class MyMailer < ApplicationMailer
        rescue_from ActiveJob::DeserializationError do
          …
        end
      ```
      
      ActiveSupport::Rescuable polish:
      * Add the `rescue_with_handler` class method so exceptions may be
        handled at the class level without requiring an instance.
      * Rationalize `exception.cause` handling. If no handler matches the
        exception, fall back to the handler that matches its cause.
      * Handle exceptions raised elsewhere. Pass `object: …` to execute
        the `rescue_from` handler (e.g. a method call or a block to
        instance_exec) against a different object. Defaults to `self`.
      e35b98e6
  24. 07 5月, 2016 1 次提交
  25. 06 5月, 2016 1 次提交
    • R
      Implement helpers proxy in controller instance level · 541a51ec
      Rafael Mendonça França 提交于
      It is a common pattern in the Rails community that when people want to
      :xa
      use any kind of helper that is defined inside app/helpers they includes
      the helper module inside the controller like:
      
          module UserHelper
            def my_user_helper
              # ...
            end
          end
      
          class UsersController < ApplicationController
            include UserHelper
      
            def index
              render inline: my_user_helper
            end
          end
      
      This has problem because the helper can't access anything that is
      defined in the view level context class.
      
      Also all public methods of the helper become available in the controller
      what can lead to undesirable methods being routed and behaving as
      actions.
      
      Also if you helper depends on other helpers or even Action View helpers
      you need to include each one of these dependencies in your controller
      otherwise your helper is not going to work.
      
      We already have a helpers proxy at controller class level but that proxy
      doesn't have access to the instance variables defined in the
      controller.
      
      With this new instance level helper proxy users can reuse helpers in the
      controller without having to include the modules and with access to
      instance variables defined in the controller.
      
          class UsersController < ApplicationController
            def index
              render inline: helpers.my_user_helper
            end
          end
      541a51ec
  26. 27 4月, 2016 1 次提交
  27. 24 4月, 2016 1 次提交
  28. 21 4月, 2016 1 次提交
  29. 20 4月, 2016 1 次提交
  30. 18 4月, 2016 1 次提交
  31. 15 4月, 2016 1 次提交
  32. 12 4月, 2016 1 次提交
  33. 04 4月, 2016 1 次提交
    • R
      Fixes #24239 · f9910680
      Ryan T. Hosford 提交于
        - skip calling helper_method if it's not there: if we don't have helpers, we needn't define one.
        - tests that an api controller can include and use ActionController::Cookies
      f9910680
  34. 01 4月, 2016 1 次提交
    • J
      Strong ETag validators · c1c9c690
      Jeremy Daer 提交于
      * Introduce `Response#strong_etag=` and `#weak_etag=` and analogous options
        for `fresh_when` and `stale?`. `Response#etag=` sets a weak ETag.
      
        Strong ETags are desirable when you're serving byte-for-byte identical
        responses that support Range requests, like PDFs or videos (typically
        done by reproxying the response from a backend storage service).
        Also desirable when fronted by some CDNs that support strong ETags
        only, like Akamai.
      
      * No longer strips quotes (`"`) from ETag values before comparing them.
        Quotes are significant, part of the ETag. A quoted ETag and an unquoted
        one are not the same entity.
      
      * Support `If-None-Match: *`. Rarely useful for GET requests; meant
        to provide some optimistic concurrency control for PUT requests.
      c1c9c690