CHANGELOG.md 9.7 KB
Newer Older
1 2 3 4 5 6 7 8
*   `FileHandler` and `Static` middleware initializers accept `index` argument
    to configure the directory index file name. Defaults to `index` (as in
    `index.html`).

    See #20017.

    *Eliot Sykes*

9 10 11 12
*   Deprecate `:nothing` option for `render` method.

    *Mehmet Emin İNAÇ*

13
*   Fix `rake routes` not showing the right format when
14 15 16 17 18 19
    nesting multiple routes.

    See #18373.

    *Ravil Bayramgalin*

20 21 22 23 24 25 26 27
*   Add ability to override default form builder for a controller.

        class AdminController < ApplicationController
          default_form_builder AdminFormBuilder
        end

    *Kevin McPhillips*

28 29 30 31 32 33 34 35
*   For actions with no corresponding templates, render `head :no_content`
    instead of raising an error. This allows for slimmer API controller
    methods that simply work, without needing further instructions.

    See #19036.

    *Stephen Bussey*

36 37 38 39 40 41 42 43 44 45 46 47 48 49
*   Provide friendlier access to request variants.

        request.variant = :phone
        request.variant.phone?  # true
        request.variant.tablet? # false

        request.variant = [:phone, :tablet]
        request.variant.phone?                  # true
        request.variant.desktop?                # false
        request.variant.any?(:phone, :desktop)  # true
        request.variant.any?(:desktop, :watch)  # false

    *George Claghorn*

A
Arthur Neves 已提交
50 51 52 53 54 55 56
*   Fix regression where a gzip file response would have a Content-type,
    even when it was a 304 status code.

    See #19271.

    *Kohei Suzuki*

Y
Yves Senn 已提交
57
*   Fix handling of empty `X_FORWARDED_HOST` header in `raw_host_with_port`.
58

Y
Yves Senn 已提交
59 60 61
    Previously, an empty `X_FORWARDED_HOST` header would cause
    `Actiondispatch::Http:URL.raw_host_with_port` to return `nil`, causing
    `Actiondispatch::Http:URL.host` to raise a `NoMethodError`.
62 63 64

    *Adam Forsyth*

65
*   Drop request class from RouteSet constructor.
66

67
    If you would like to use a custom request class, please subclass and implement
68 69 70 71
    the `request_class` method.

    *tenderlove@ruby-lang.org*

72 73 74 75 76 77 78 79 80 81
*   Fallback to `ENV['RAILS_RELATIVE_URL_ROOT']` in `url_for`.

    Fixed an issue where the `RAILS_RELATIVE_URL_ROOT` environment variable is not
    prepended to the path when `url_for` is called. If `SCRIPT_NAME` (used by Rack)
    is set, it takes precedence.

    Fixes #5122.

    *Yasyf Mohamedali*

G
Guo Xiang Tan 已提交
82 83 84 85 86
*   Partitioning of routes is now done when the routes are being drawn. This
    helps to decrease the time spent filtering the routes during the first request.

    *Guo Xiang Tan*

87 88 89 90 91 92 93
*   Fix regression in functional tests. Responses should have default headers
    assigned.

    See #18423.

    *Jeremy Kemper*, *Yves Senn*

94 95 96 97 98
*   Deprecate AbstractController#skip_action_callback in favor of individual skip_callback methods
    (which can be made to raise an error if no callback was removed).

    *Iain Beeston*

99
*   Alias the `ActionDispatch::Request#uuid` method to `ActionDispatch::Request#request_id`.
100 101 102 103 104
    Due to implementation, `config.log_tags = [:request_id]` also works in substitute
    for `config.log_tags = [:uuid]`.

    *David Ilizarov*

105 106 107 108 109 110 111 112
*   Change filter on /rails/info/routes to use an actual path regexp from rails
    and not approximate javascript version. Oniguruma supports much more
    extensive list of features than javascript regexp engine.

    Fixes #18402.

    *Ravil Bayramgalin*

113 114 115 116 117
*   Non-string authenticity tokens do not raise NoMethodError when decoding
    the masked token.

    *Ville Lautanala*

118 119
*   Add `http_cache_forever` to Action Controller, so we can cache a response
    that never gets expired.
120 121 122

    *arthurnn*

123
*   `ActionController#translate` supports symbols as shortcuts.
124
    When shortcut is given it also lookups without action name.
125 126 127

    *Max Melentiev*

128 129 130 131 132 133
*   Expand `ActionController::ConditionalGet#fresh_when` and `stale?` to also
    accept a collection of records as the first argument, so that the
    following code can be written in a shorter form.

        # Before
        def index
134 135
          @articles = Article.all
          fresh_when(etag: @articles, last_modified: @articles.maximum(:updated_at))
136 137 138 139
        end

        # After
        def index
140
          @articles = Article.all
141 142 143 144 145
          fresh_when(@articles)
        end

    *claudiob*

146 147
*   Explicitly ignored wildcard verbs when searching for HEAD routes before fallback

148
    Fixes an issue where a mounted rack app at root would intercept the HEAD
149 150 151
    request causing an incorrect behavior during the fall back to GET requests.

    Example:
152 153 154 155 156 157 158 159

        draw do
            get '/home' => 'test#index'
            mount rack_app, at: '/'
        end
        head '/home'
        assert_response :success

160 161 162 163 164 165
    In this case, a HEAD request runs through the routes the first time and fails
    to match anything. Then, it runs through the list with the fallback and matches
    `get '/home'`. The original behavior would match the rack app in the first pass.

    *Terence Sun*

166 167 168 169 170 171 172 173 174 175 176 177 178
*   Migrating xhr methods to keyword arguments syntax
    in `ActionController::TestCase` and `ActionDispatch::Integration`

    Old syntax:

        xhr :get, :create, params: { id: 1 }

    New syntax example:

        get :create, params: { id: 1 }, xhr: true

    *Kir Shatrov*

R
Rafael Mendonça França 已提交
179
*   Migrating to keyword arguments syntax in `ActionController::TestCase` and
Y
Yves Senn 已提交
180
    `ActionDispatch::Integration` HTTP request methods.
181

Y
Yves Senn 已提交
182
    Example:
R
Rafael Mendonça França 已提交
183 184 185 186

        post :create, params: { y: x }, session: { a: 'b' }
        get :view, params: { id: 1 }
        get :view, params: { id: 1 }, format: :json
187 188 189

    *Kir Shatrov*

Y
Yves Senn 已提交
190
*   Preserve default url options when generating URLs.
191 192 193 194 195 196 197

    Fixes an issue that would cause default_url_options to be lost when
    generating URLs with fewer positional arguments than parameters in the
    route definition.

    *Tekin Suleyman*

R
Rafael Mendonça França 已提交
198 199 200 201 202 203
*   Deprecate *_via_redirect integration test methods.

    Use `follow_redirect!` manually after the request call for the same behavior.

    *Aditya Kapoor*

B
brainopia 已提交
204 205 206
*   Add `ActionController::Renderer` to render arbitrary templates
    outside controller actions.

B
brainopia 已提交
207 208 209
    Its functionality is accessible through class methods `render` and
    `renderer` of `ActionController::Base`.

B
brainopia 已提交
210 211
    *Ravil Bayramgalin*

212 213 214 215
*   Support `:assigns` option when rendering with controllers/mailers.

    *Ravil Bayramgalin*

216
*   Default headers, removed in controller actions, are no longer reapplied on
217 218 219 220
    the test response.

    *Jonas Baumann*

221 222 223 224 225
*   Deprecate all *_filter callbacks in favor of *_action callbacks.

    *Rafael Mendonça França*

*   Allow you to pass `prepend: false` to protect_from_forgery to have the
226 227
    verification callback appended instead of prepended to the chain.
    This allows you to let the verification step depend on prior callbacks.
Y
Yves Senn 已提交
228

229 230 231 232
    Example:

        class ApplicationController < ActionController::Base
          before_action :authenticate
233
          protect_from_forgery prepend: false, unless: -> { @authenticated_by.oauth? }
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248

          private
            def authenticate
              if oauth_request?
                # authenticate with oauth
                @authenticated_by = 'oauth'.inquiry
              else
                # authenticate with cookies
                @authenticated_by = 'cookie'.inquiry
              end
            end
        end

    *Josef Šimánek*

249
*   Remove `ActionController::HideActions`.
250 251 252

    *Ravil Bayramgalin*

253 254 255 256 257
*   Remove `respond_to`/`respond_with` placeholder methods, this functionality
    has been extracted to the `responders` gem.

    *Carlos Antonio da Silva*

258 259 260 261
*   Remove deprecated assertion files.

    *Rafael Mendonça França*

262 263 264 265
*   Remove deprecated usage of string keys in URL helpers.

    *Rafael Mendonça França*

266 267 268 269
*   Remove deprecated `only_path` option on `*_path` helpers.

    *Rafael Mendonça França*

270 271 272 273
*   Remove deprecated `NamedRouteCollection#helpers`.

    *Rafael Mendonça França*

274 275 276 277
*   Remove deprecated support to define routes with `:to` option that doesn't contain `#`.

    *Rafael Mendonça França*

278 279 280 281
*   Remove deprecated `ActionDispatch::Response#to_ary`.

    *Rafael Mendonça França*

282 283 284 285
*   Remove deprecated `ActionDispatch::Request#deep_munge`.

    *Rafael Mendonça França*

286 287 288 289
*   Remove deprecated `ActionDispatch::Http::Parameters#symbolized_path_parameters`.

    *Rafael Mendonça França*

290 291 292 293
*   Remove deprecated option `use_route` in controller tests.

    *Rafael Mendonça França*

294 295
*   Ensure `append_info_to_payload` is called even if an exception is raised.

296
    Fixes an issue where when an exception is raised in the request the additional
297 298 299
    payload data is not available.

    See:
300
    * #14903
301 302 303 304
    * https://github.com/roidrage/lograge/issues/37

    *Dieter Komendera*, *Margus Pärt*

305 306 307 308
*   Correctly rely on the response's status code to handle calls to `head`.

    *Robin Dupret*

309 310 311 312 313 314 315 316 317 318 319 320
*   Using `head` method returns empty response_body instead
    of returning a single space " ".

    The old behavior was added as a workaround for a bug in an early
    version of Safari, where the HTTP headers are not returned correctly
    if the response body has a 0-length. This is been fixed since and
    the workaround is no longer necessary.

    Fixes #18253.

    *Prathamesh Sonpatki*

321 322 323 324
*   Fix how polymorphic routes works with objects that implement `to_model`.

    *Travis Grathwell*

Y
Yves Senn 已提交
325
*   Stop converting empty arrays in `params` to `nil`.
326

327
    This behavior was introduced in response to CVE-2012-2660, CVE-2012-2694
328 329 330 331 332 333 334 335
    and CVE-2013-0155

    ActiveRecord now issues a safe query when passing an empty array into
    a where clause, so there is no longer a need to defend against this type
    of input (any nils are still stripped from the array).

    *Chris Sinjakli*

Y
Yves Senn 已提交
336
*   Fixed usage of optional scopes in url helpers.
337 338 339

    *Alex Robbin*

Y
Yves Senn 已提交
340
*   Fixed handling of positional url helper arguments when `format: false`.
341 342 343 344 345

    Fixes #17819.

    *Andrew White*, *Tatiana Soukiassian*

346
Please check [4-2-stable](https://github.com/rails/rails/blob/4-2-stable/actionpack/CHANGELOG.md) for previous changes.