~michaelforrest/use-case-mapper/trunk

« back to all changes in this revision

Viewing changes to vendor/rails/actionpack/CHANGELOG

  • Committer: Michael Forrest
  • Date: 2010-10-15 16:28:50 UTC
  • Revision ID: michael.forrest@canonical.com-20101015162850-tj2vchanv0kr0dun
refrozeĀ gems

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
*2.3.5 (November 25, 2009)*
 
2
 
 
3
* Minor Bug Fixes and deprecation warnings
 
4
 
 
5
* Ruby 1.9 Support
 
6
 
 
7
* Fix filtering parameters when there are Fixnum or other un-dupable values.
 
8
 
 
9
* Improvements to ActionView::TestCase
 
10
 
 
11
* Compatiblity with the rails_xss plugin 
 
12
 
 
13
*2.3.4 (September 4, 2009)*
 
14
 
 
15
* Sanitize multibyte strings before escaping them with escape_once. CVE-2009-3009
 
16
 
 
17
* Introduce grouped_collection_select helper.  #1249 [Dan Codeape, Erik Ostrom]
 
18
 
 
19
* Ruby 1.9: fix Content-Length for multibyte send_data streaming.  #2661 [Sava Chankov]
 
20
 
 
21
 
 
22
*2.3.3 (July 12, 2009)*
 
23
 
 
24
* Fixed that TestResponse.cookies was returning cookies unescaped #1867 [Doug McInnes]
 
25
 
 
26
 
 
27
*2.3.2 [Final] (March 15, 2009)*
 
28
 
 
29
* Fixed that redirection would just log the options, not the final url (which lead to "Redirected to #<Post:0x23150b8>") [DHH]
 
30
 
 
31
* Don't check authenticity tokens for any AJAX requests [Ross Kaffenberger/Bryan Helmkamp]
 
32
 
 
33
* Added ability to pass in :public => true to fresh_when, stale?, and expires_in to make the request proxy cachable #2095 [Gregg Pollack]
 
34
 
 
35
* Fixed that passing a custom form builder would be forwarded to nested fields_for calls #2023 [Eloy Duran/Nate Wiger]
 
36
 
 
37
* Form option helpers now support disabled option tags and the use of lambdas for selecting/disabling option tags from collections #837 [Tekin]
 
38
 
 
39
* Added partial scoping to TranslationHelper#translate, so if you call translate(".foo") from the people/index.html.erb template, you'll actually be calling I18n.translate("people.index.foo") [DHH]
 
40
 
 
41
* Fix a syntax error in current_page?() that was prevent matches against URL's with multiple query parameters #1385, #1868 [chris finne/Andrew White]
 
42
 
 
43
* Added localized rescue template when I18n.locale is set (ex: public/404.da.html) #1835 [JosĆ© Valim]
 
44
 
 
45
* Make the form_for and fields_for helpers support the new Active Record nested update options.  #1202 [Eloy Duran]
 
46
 
 
47
                <% form_for @person do |person_form| %>
 
48
                  ...
 
49
                  <% person_form.fields_for :projects do |project_fields| %>
 
50
                    <% if project_fields.object.active? %>
 
51
                      Name: <%= project_fields.text_field :name %>
 
52
                    <% end %>
 
53
                  <% end %>
 
54
                <% end %>
 
55
 
 
56
 
 
57
* Added grouped_options_for_select helper method for wrapping option tags in optgroups. #977 [Jon Crawford]
 
58
 
 
59
* Implement HTTP Digest authentication. #1230 [Gregg Kellogg, Pratik Naik] Example :
 
60
 
 
61
  class DummyDigestController < ActionController::Base
 
62
    USERS = { "lifo" => 'world' }
 
63
 
 
64
    before_filter :authenticate
 
65
 
 
66
    def index
 
67
      render :text => "Hello Secret"
 
68
    end
 
69
 
 
70
    private
 
71
 
 
72
    def authenticate
 
73
      authenticate_or_request_with_http_digest("Super Secret") do |username|
 
74
        # Return the user's password
 
75
        USERS[username]
 
76
      end
 
77
    end
 
78
  end
 
79
 
 
80
* Improved i18n support for the number_to_human_size helper. Changes the storage_units translation data; update your translations accordingly.  #1634 [Yaroslav Markin]
 
81
    storage_units:
 
82
      # %u is the storage unit, %n is the number (default: 2 MB)
 
83
      format: "%n %u"
 
84
      units:
 
85
        byte:
 
86
          one: "Byte"
 
87
          other: "Bytes"
 
88
        kb: "KB"
 
89
        mb: "MB"
 
90
        gb: "GB"
 
91
        tb: "TB"
 
92
 
 
93
* Added :silence option to BenchmarkHelper#benchmark and turned log_level into a hash parameter and deprecated the old use [DHH]
 
94
 
 
95
* Fixed the AssetTagHelper cache to use the computed asset host as part of the cache key instead of just assuming the its a string #1299 [DHH]
 
96
 
 
97
* Make ActionController#render(string) work as a shortcut for render :file/:template/:action => string. [#1435] [Pratik Naik] Examples:
 
98
 
 
99
  # Instead of render(:action => 'other_action')
 
100
  render('other_action') # argument has no '/'
 
101
  render(:other_action)
 
102
 
 
103
  # Instead of render(:template => 'controller/action')
 
104
  render('controller/action') # argument must not begin with a '/', but contain a '/'
 
105
 
 
106
  # Instead of render(:file => '/Users/lifo/home.html.erb')
 
107
  render('/Users/lifo/home.html.erb') # argument must begin with a '/'
 
108
 
 
109
* Add :prompt option to date/time select helpers. #561 [Sam Oliver]
 
110
 
 
111
* Fixed that send_file shouldn't set an etag #1578 [Hongli Lai]
 
112
 
 
113
* Allow users to opt out of the spoofing checks in Request#remote_ip.  Useful for sites whose traffic regularly triggers false positives. [Darren Boyd]
 
114
 
 
115
* Deprecated formatted_polymorphic_url.  [Jeremy Kemper]
 
116
 
 
117
* Added the option to declare an asset_host as an object that responds to call (see http://github.com/dhh/asset-hosting-with-minimum-ssl for an example) [David Heinemeier Hansson]
 
118
 
 
119
* Added support for multiple routes.rb files (useful for plugin engines). This also means that draw will no longer clear the route set, you have to do that by hand (shouldn't make a difference to you unless you're doing some funky stuff) [David Heinemeier Hansson]
 
120
 
 
121
* Dropped formatted_* routes in favor of just passing in :format as an option. This cuts resource routes generation in half #1359 [aaronbatalion]
 
122
 
 
123
* Remove support for old double-encoded cookies from the cookie store.  These values haven't been generated since before 2.1.0, and any users who have visited the app in the intervening 6 months will have had their cookie upgraded. [Michael Koziarski]
 
124
 
 
125
* Allow helpers directory to be overridden via ActionController::Base.helpers_dir #1424 [Sam Pohlenz]
 
126
 
 
127
* Remove deprecated ActionController::Base#assign_default_content_type_and_charset
 
128
 
 
129
* Changed the default of ActionView#render to assume partials instead of files when not given an options hash [David Heinemeier Hansson]. Examples:
 
130
 
 
131
    # Instead of <%= render :partial => "account" %>
 
132
    <%= render "account" %>
 
133
    
 
134
    # Instead of <%= render :partial => "account", :locals => { :account => @buyer } %>
 
135
    <%= render "account", :account => @buyer %>
 
136
    
 
137
    # @account is an Account instance, so it uses the RecordIdentifier to replace
 
138
    # <%= render :partial => "accounts/account", :locals => { :account => @account } %>
 
139
    <%= render(@account) %>
 
140
    
 
141
    # @posts is an array of Post instances, so it uses the RecordIdentifier to replace
 
142
    # <%= render :partial => "posts/post", :collection => @posts %>
 
143
    <%= render(@posts) %>
 
144
 
 
145
* Remove deprecated render_component. Please use the plugin from http://github.com/rails/render_component/tree/master [Pratik Naik]
 
146
 
 
147
* Fixed RedCloth and BlueCloth shouldn't preload. Instead just assume that they're available if you want to use textilize and markdown and let autoload require them [David Heinemeier Hansson]
 
148
 
 
149
 
 
150
*2.2.2 (November 21st, 2008)*
 
151
 
 
152
* I18n: translate number_to_human_size. Add storage_units: [Bytes, KB, MB, GB, TB] to your translations.  #1448 [Yaroslav Markin]
 
153
 
 
154
* Restore backwards compatible functionality for setting relative_url_root.  Include deprecation
 
155
 
 
156
* Switched the CSRF module to use the request content type to decide if the request is forgeable.  #1145 [Jeff Cohen]
 
157
 
 
158
* Added :only and :except to map.resources to let people cut down on the number of redundant routes in an application. Typically only useful for huge routesets.  #1215 [Tom Stuart]
 
159
 
 
160
   map.resources :products, :only => :show do |product|
 
161
     product.resources :images, :except => :destroy
 
162
   end
 
163
 
 
164
* Added render :js for people who want to render inline JavaScript replies without using RJS [David Heinemeier Hansson]
 
165
 
 
166
* Fixed that polymorphic_url should compact given array #1317 [hiroshi]
 
167
 
 
168
* Fixed the sanitize helper to avoid double escaping already properly escaped entities #683 [antonmos/Ryan McGeary]
 
169
 
 
170
* Fixed that FormTagHelper generated illegal html if name contained square brackets #1238 [Vladimir Dobriakov]
 
171
 
 
172
* Fix regression bug that made date_select and datetime_select raise a Null Pointer Exception when a nil date/datetime was passed and only month and year were displayed #1289 [Bernardo Padua/Tor Erik]
 
173
 
 
174
* Simplified the logging format for parameters (don't include controller, action, and format as duplicates) [David Heinemeier Hansson]
 
175
 
 
176
* Remove the logging of the Session ID when the session store is CookieStore [David Heinemeier Hansson]
 
177
 
 
178
* Fixed regex in redirect_to to fully support URI schemes #1247 [Seth Fitzsimmons]
 
179
 
 
180
* Fixed bug with asset timestamping when using relative_url_root #1265 [Joe Goldwasser]
 
181
 
 
182
 
 
183
*2.2.0 [RC1] (October 24th, 2008)*
 
184
 
 
185
* Fix incorrect closing CDATA delimiter and that HTML::Node.parse would blow up on unclosed CDATA sections [packagethief]
 
186
 
 
187
* Added stale? and fresh_when methods to provide a layer of abstraction above request.fresh? and friends [David Heinemeier Hansson]. Example:
 
188
 
 
189
    class ArticlesController < ApplicationController
 
190
      def show_with_respond_to_block
 
191
        @article = Article.find(params[:id])
 
192
 
 
193
 
 
194
        # If the request sends headers that differs from the options provided to stale?, then
 
195
        # the request is indeed stale and the respond_to block is triggered (and the options
 
196
        # to the stale? call is set on the response).
 
197
        #
 
198
        # If the request headers match, then the request is fresh and the respond_to block is
 
199
        # not triggered. Instead the default render will occur, which will check the last-modified
 
200
        # and etag headers and conclude that it only needs to send a "304 Not Modified" instead
 
201
        # of rendering the template.
 
202
        if stale?(:last_modified => @article.published_at.utc, :etag => @article)
 
203
          respond_to do |wants|
 
204
            # normal response processing
 
205
          end
 
206
        end
 
207
      end
 
208
 
 
209
      def show_with_implied_render
 
210
        @article = Article.find(params[:id])
 
211
 
 
212
        # Sets the response headers and checks them against the request, if the request is stale
 
213
        # (i.e. no match of either etag or last-modified), then the default render of the template happens.
 
214
        # If the request is fresh, then the default render will return a "304 Not Modified"
 
215
        # instead of rendering the template.
 
216
        fresh_when(:last_modified => @article.published_at.utc, :etag => @article)
 
217
      end
 
218
    end
 
219
 
 
220
 
 
221
* Added inline builder yield to atom_feed_helper tags where appropriate [Sam Ruby]. Example:
 
222
 
 
223
    entry.summary :type => 'xhtml' do |xhtml|
 
224
      xhtml.p pluralize(order.line_items.count, "line item")
 
225
      xhtml.p "Shipped to #{order.address}"
 
226
      xhtml.p "Paid by #{order.pay_type}"
 
227
    end
 
228
 
 
229
* Make PrototypeHelper#submit_to_remote a wrapper around PrototypeHelper#button_to_remote. [Tarmo TƤnav]
 
230
 
 
231
* Set HttpOnly for the cookie session store's cookie.  #1046 
 
232
 
 
233
* Added FormTagHelper#image_submit_tag confirm option #784 [Alastair Brunton]
 
234
 
 
235
* Fixed FormTagHelper#submit_tag with :disable_with option wouldn't submit the button's value when was clicked #633 [Jose Fernandez]
 
236
 
 
237
* Stopped logging template compiles as it only clogs up the log [David Heinemeier Hansson]
 
238
 
 
239
* Changed the X-Runtime header to report in milliseconds [David Heinemeier Hansson]
 
240
 
 
241
* Changed BenchmarkHelper#benchmark to report in milliseconds [David Heinemeier Hansson]
 
242
 
 
243
* Changed logging format to be millisecond based and skip misleading stats [David Heinemeier Hansson]. Went from:
 
244
 
 
245
    Completed in 0.10000 (4 reqs/sec) | Rendering: 0.04000 (40%) | DB: 0.00400 (4%) | 200 OK [http://example.com]
 
246
 
 
247
  ...to:
 
248
  
 
249
    Completed in 100ms (View: 40, DB: 4) | 200 OK [http://example.com]
 
250
 
 
251
* Add support for shallow nesting of routes. #838 [S. Brent Faulkner]
 
252
 
 
253
  Example :
 
254
 
 
255
  map.resources :users, :shallow => true do |user|
 
256
    user.resources :posts
 
257
  end
 
258
 
 
259
  - GET /users/1/posts (maps to PostsController#index action as usual)
 
260
    named route "user_posts" is added as usual.
 
261
 
 
262
  - GET /posts/2 (maps to PostsController#show action as if it were not nested)
 
263
    Additionally, named route "post" is added too.
 
264
 
 
265
* Added button_to_remote helper.  #3641 [Donald Piret, Tarmo TƤnav]
 
266
 
 
267
* Deprecate render_component. Please use render_component plugin from http://github.com/rails/render_component/tree/master [Pratik Naik]
 
268
 
 
269
* Routes may be restricted to lists of HTTP methods instead of a single method or :any.  #407 [Brennan Dunn, Gaius Centus Novus]
 
270
    map.resource :posts, :collection => { :search => [:get, :post] }
 
271
    map.session 'session', :requirements => { :method => [:get, :post, :delete] }
 
272
 
 
273
* Deprecated implicit local assignments when rendering partials [Josh Peek]
 
274
 
 
275
* Introduce current_cycle helper method to return the current value without bumping the cycle.  #417 [Ken Collins]
 
276
 
 
277
* Allow polymorphic_url helper to take url options. #880 [Tarmo TƤnav]
 
278
 
 
279
* Switched integration test runner to use Rack processor instead of CGI [Josh Peek]
 
280
 
 
281
* Made AbstractRequest.if_modified_sense return nil if the header could not be parsed [Jamis Buck]
 
282
 
 
283
* Added back ActionController::Base.allow_concurrency flag [Josh Peek]
 
284
 
 
285
* AbstractRequest.relative_url_root is no longer automatically configured by a HTTP header. It can now be set in your configuration environment with config.action_controller.relative_url_root [Josh Peek]
 
286
 
 
287
* Update Prototype to 1.6.0.2 #599 [Patrick Joyce]
 
288
 
 
289
* Conditional GET utility methods.  [Jeremy Kemper]
 
290
    response.last_modified = @post.updated_at
 
291
    response.etag = [:admin, @post, current_user]
 
292
 
 
293
    if request.fresh?(response)
 
294
      head :not_modified
 
295
    else
 
296
      # render ...
 
297
    end
 
298
 
 
299
* All 2xx requests are considered successful [Josh Peek]
 
300
 
 
301
* Fixed that AssetTagHelper#compute_public_path shouldn't cache the asset_host along with the source or per-request proc's won't run [David Heinemeier Hansson]
 
302
 
 
303
* Removed config.action_view.cache_template_loading, use config.cache_classes instead [Josh Peek]
 
304
 
 
305
* Get buffer for fragment cache from template's @output_buffer [Josh Peek]
 
306
 
 
307
* Set config.action_view.warn_cache_misses = true to receive a warning if you perform an action that results in an expensive disk operation that could be cached [Josh Peek]
 
308
 
 
309
* Refactor template preloading. New abstractions include Renderable mixins and a refactored Template class [Josh Peek]
 
310
 
 
311
* Changed ActionView::TemplateHandler#render API method signature to render(template, local_assigns = {}) [Josh Peek]
 
312
 
 
313
* Changed PrototypeHelper#submit_to_remote to PrototypeHelper#button_to_remote to stay consistent with link_to_remote (submit_to_remote still works as an alias) #8994 [clemens]
 
314
 
 
315
* Add :recursive option to javascript_include_tag and stylesheet_link_tag to be used along with :all. #480 [Damian Janowski]
 
316
 
 
317
* Allow users to disable the use of the Accept header [Michael Koziarski]
 
318
 
 
319
    The accept header is poorly implemented by browsers and causes strange
 
320
        errors when used on public sites where crawlers make requests too.  You
 
321
        can use formatted urls (e.g. /people/1.xml) to support API clients in a
 
322
        much simpler way.
 
323
 
 
324
        To disable the header you need to set:
 
325
 
 
326
        config.action_controller.use_accept_header = false
 
327
 
 
328
* Do not stat template files in production mode before rendering. You will no longer be able to modify templates in production mode without restarting the server [Josh Peek]
 
329
 
 
330
* Deprecated TemplateHandler line offset [Josh Peek]
 
331
 
 
332
* Allow caches_action to accept cache store options. #416. [JosĆ© Valim]. Example:
 
333
  
 
334
  caches_action :index, :redirected, :if => Proc.new { |c| !c.request.format.json? }, :expires_in => 1.hour
 
335
 
 
336
* Remove define_javascript_functions, javascript_include_tag and friends are far superior. [Michael Koziarski]
 
337
 
 
338
* Deprecate :use_full_path render option. The supplying the option no longer has an effect [Josh Peek]
 
339
 
 
340
* Add :as option to render a collection of partials with a custom local variable name. #509 [Simon Jefford, Pratik Naik]
 
341
 
 
342
  render :partial => 'other_people', :collection => @people, :as => :person
 
343
  
 
344
  This will let you access objects of @people as 'person' local variable inside 'other_people' partial template.
 
345
 
 
346
* time_zone_select: support for regexp matching of priority zones. Resolves #195 [Ernie Miller]
 
347
 
 
348
* Made ActionView::Base#render_file private [Josh Peek]
 
349
 
 
350
* Refactor and simplify the implementation of assert_redirected_to.  Arguments are now normalised relative to the controller being tested,  not the root of the application.  [Michael Koziarski]
 
351
 
 
352
  This could cause some erroneous test failures if you were redirecting between controllers
 
353
  in different namespaces and wrote your assertions relative to the root of the application.
 
354
 
 
355
* Remove follow_redirect from controller functional tests.
 
356
 
 
357
        If you want to follow redirects you can use integration tests.  The functional test
 
358
        version was only useful if you were using redirect_to :id=>...
 
359
 
 
360
* Fix polymorphic_url with singleton resources.  #461 [Tammer Saleh]
 
361
 
 
362
* Replaced TemplateFinder abstraction with ViewLoadPaths [Josh Peek]
 
363
 
 
364
* Added block-call style to link_to [Sam Stephenson/David Heinemeier Hansson]. Example:
 
365
 
 
366
    <% link_to(@profile) do %>
 
367
      <strong><%= @profile.name %></strong> -- <span>Check it out!!</span>
 
368
    <% end %>
 
369
 
 
370
* Performance: integration test benchmarking and profiling.  [Jeremy Kemper]
 
371
 
 
372
* Make caching more aware of mime types. Ensure request format is not considered while expiring cache.  [Jonathan del Strother]
 
373
 
 
374
* Drop ActionController::Base.allow_concurrency flag [Josh Peek]
 
375
 
 
376
* More efficient concat and capture helpers. Remove ActionView::Base.erb_variable.  [Jeremy Kemper]
 
377
 
 
378
* Added page.reload functionality. Resolves #277. [Sean Huber]
 
379
 
 
380
* Fixed Request#remote_ip to only raise hell if the HTTP_CLIENT_IP and HTTP_X_FORWARDED_FOR doesn't match (not just if they're both present) [Mark Imbriaco, Bradford Folkens]
 
381
 
 
382
* Allow caches_action to accept a layout option [JosĆ© Valim]
 
383
 
 
384
* Added Rack processor [Ezra Zygmuntowicz, Josh Peek]
 
385
 
 
386
 
 
387
*2.1.0 (May 31st, 2008)*
 
388
 
 
389
* InstanceTag#default_time_from_options overflows to DateTime [Geoff Buesing]
 
390
 
 
391
* Fixed that forgery protection can be used without session tracking (Peter Jones) [#139]
 
392
 
 
393
* Added session(:on) to turn session management back on in a controller subclass if the superclass turned it off (Peter Jones) [#136]
 
394
 
 
395
* Change the request forgery protection to go by Content-Type instead of request.format so that you can't bypass it by POSTing to "#{request.uri}.xml" [Rick Olson]
 
396
* InstanceTag#default_time_from_options with hash args uses Time.current as default; respects hash settings when time falls in system local spring DST gap [Geoff Buesing]
 
397
 
 
398
* select_date defaults to Time.zone.today when config.time_zone is set [Geoff Buesing]
 
399
 
 
400
* Fixed that TextHelper#text_field would corrypt when raw HTML was used as the value (mchenryc, Kevin Glowacz) [#80]
 
401
 
 
402
* Added ActionController::TestCase#rescue_action_in_public! to control whether the action under test should use the regular rescue_action path instead of simply raising the exception inline (great for error testing) [David Heinemeier Hansson]
 
403
 
 
404
* Reduce number of instance variables being copied from controller to view. [Pratik Naik]
 
405
 
 
406
* select_datetime and select_time default to Time.zone.now when config.time_zone is set [Geoff Buesing]
 
407
 
 
408
* datetime_select defaults to Time.zone.now when config.time_zone is set [Geoff Buesing]
 
409
 
 
410
* Remove ActionController::Base#view_controller_internals flag. [Pratik Naik]
 
411
 
 
412
* Add conditional options to caches_page method. [Paul Horsfall]
 
413
 
 
414
* Move missing template logic to ActionView. [Pratik Naik]
 
415
 
 
416
* Introduce ActionView::InlineTemplate class. [Pratik Naik]
 
417
 
 
418
* Automatically parse posted JSON content for Mime::JSON requests.  [Rick Olson]
 
419
 
 
420
  POST /posts
 
421
  {"post": {"title": "Breaking News"}}
 
422
 
 
423
  def create
 
424
    @post = Post.create params[:post]
 
425
    # ...
 
426
  end
 
427
 
 
428
* add json_escape ERB util to escape html entities in json strings that are output in HTML pages. [Rick Olson]
 
429
 
 
430
* Provide a helper proxy to access helper methods from outside views. Closes #10839 [Josh Peek]
 
431
  e.g. ApplicationController.helpers.simple_format(text)
 
432
 
 
433
* Improve documentation. [Xavier Noria, leethal, jerome]
 
434
 
 
435
* Ensure RJS redirect_to doesn't html-escapes string argument. Closes #8546 [Josh Peek, eventualbuddha, Pratik Naik]
 
436
 
 
437
* Support render :partial => collection of heterogeneous elements.  #11491 [Zach Dennis]
 
438
 
 
439
* Avoid remote_ip spoofing.  [Brian Candler]
 
440
 
 
441
* Added support for regexp flags like ignoring case in the :requirements part of routes declarations #11421 [NeilW]
 
442
 
 
443
* Fixed that ActionController::Base#read_multipart would fail if boundary was exactly 10240 bytes #10886 [ariejan]
 
444
 
 
445
* Fixed HTML::Tokenizer (used in sanitize helper) didn't handle unclosed CDATA tags #10071 [esad, packagethief]
 
446
 
 
447
* Improve documentation. [Ryan Bigg, Jan De Poorter, Cheah Chu Yeow, Xavier Shay, Jack Danger Canty, Emilio Tagua, Xavier Noria,  Sunny Ripert]
 
448
 
 
449
* Fixed that FormHelper#radio_button would produce invalid ids #11298 [harlancrystal]
 
450
 
 
451
* Added :confirm option to submit_tag #11415 [Emilio Tagua]
 
452
 
 
453
* Fixed NumberHelper#number_with_precision to properly round in a way that works equally on Mac, Windows, Linux (closes #11409, #8275, #10090, #8027) [zhangyuanyi]
 
454
 
 
455
* Allow the #simple_format text_helper to take an html_options hash for each paragraph.  #2448 [FranƧois Beausoleil, Chris O'Sullivan]
 
456
 
 
457
* Fix regression from filter refactoring where re-adding a skipped filter resulted in it being called twice.  [Rick Olson]
 
458
 
 
459
* Refactor filters to use Active Support callbacks.  #11235 [Josh Peek]
 
460
 
 
461
* Fixed that polymorphic routes would modify the input array #11363 [thomas.lee]
 
462
 
 
463
* Added :format option to NumberHelper#number_to_currency to enable better localization support #11149 [lylo]
 
464
 
 
465
* Fixed that TextHelper#excerpt would include one character too many #11268 [Irfy]
 
466
 
 
467
* Fix more obscure nested parameter hash parsing bug.  #10797 [thomas.lee]
 
468
 
 
469
* Added ActionView::Helpers::register_javascript/stylesheet_expansion to make it easier for plugin developers to inject multiple assets.  #10350 [lotswholetime]
 
470
 
 
471
* Fix nested parameter hash parsing bug.  #10797 [thomas.lee]
 
472
 
 
473
* Allow using named routes in ActionController::TestCase before any request has been made. Closes #11273 [Eloy Duran]
 
474
 
 
475
* Fixed that sweepers defined by cache_sweeper will be added regardless of the perform_caching setting. Instead, control whether the sweeper should be run with the perform_caching setting. This makes testing easier when you want to turn perform_caching on/off [David Heinemeier Hansson]
 
476
 
 
477
* Make MimeResponds::Responder#any work without explicit types. Closes #11140 [jaw6]
 
478
 
 
479
* Better error message for type conflicts when parsing params.  Closes #7962 [spicycode, matt]
 
480
 
 
481
* Remove unused ActionController::Base.template_class. Closes #10787 [Pratik Naik]
 
482
 
 
483
* Moved template handlers related code from ActionView::Base to ActionView::Template. [Pratik Naik]
 
484
 
 
485
* Tests for div_for and content_tag_for helpers. Closes #11223 [Chris O'Sullivan]
 
486
 
 
487
* Allow file uploads in Integration Tests.  Closes #11091 [RubyRedRick]
 
488
 
 
489
* Refactor partial rendering into a PartialTemplate class. [Pratik Naik]
 
490
 
 
491
* Added that requests with JavaScript as the priority mime type in the accept header and no format extension in the parameters will be treated as though their format was :js when it comes to determining which template to render. This makes it possible for JS requests to automatically render action.js.rjs files without an explicit respond_to block  [David Heinemeier Hansson]
 
492
 
 
493
* Tests for distance_of_time_in_words with TimeWithZone instances. Closes #10914 [Ernesto Jimenez]
 
494
 
 
495
* Remove support for multivalued (e.g., '&'-delimited) cookies. [Jamis Buck]
 
496
 
 
497
* Fix problem with render :partial collections, records, and locals. #11057 [lotswholetime] 
 
498
 
 
499
* Added support for naming concrete classes in sweeper declarations [David Heinemeier Hansson]
 
500
 
 
501
* Remove ERB trim variables from trace template in case ActionView::Base.erb_trim_mode is changed in the application.  #10098 [Tim Pope, Chris Kampmeier]
 
502
 
 
503
* Fix typo in form_helper documentation.  #10650 [Xavier Shay, Chris Kampmeier]
 
504
 
 
505
* Fix bug with setting Request#format= after the getter has cached the value.  #10889 [cch1]
 
506
 
 
507
* Correct inconsistencies in RequestForgeryProtection docs.  #11032 [Mislav Marohnić]
 
508
 
 
509
* Introduce a Template class to ActionView.  #11024 [Pratik Naik]
 
510
 
 
511
* Introduce the :index option for form_for and fields_for to simplify multi-model forms (see http://railscasts.com/episodes/75).  #9883 [rmm5t]
 
512
 
 
513
* Introduce map.resources :cards, :as => 'tarjetas' to use a custom resource name in the URL: cards_path == '/tarjetas'.  #10578 [blj]
 
514
 
 
515
* TestSession supports indifferent access.  #7372 [tamc, Arsen7, mhackett, julik, jean.helou]
 
516
 
 
517
* Make assert_routing aware of the HTTP method used.  #8039 [mpalmer]
 
518
  e.g. assert_routing({ :method => 'put', :path => '/product/321' }, { :controller => "product", :action => "update", :id => "321" })
 
519
 
 
520
* Make map.root accept a single symbol as an argument to declare an alias.  #10818 [bscofield] 
 
521
 
 
522
  e.g.  map.dashboard '/dashboard', :controller=>'dashboard'
 
523
        map.root      :dashboard
 
524
 
 
525
* Handle corner case with image_tag when passed 'messed up' image names. #9018 [Duncan Beevers, mpalmer]
 
526
 
 
527
* Add label_tag helper for generating elements. #10802 [DefV]
 
528
 
 
529
* Introduce TemplateFinder to handle view paths and lookups.  #10800 [Pratik Naik] 
 
530
 
 
531
* Performance: optimize route recognition. Large speedup for apps with many resource routes.  #10835 [oleganza]
 
532
 
 
533
* Make render :partial recognise form builders and use the _form partial.  #10814 [Damian Janowski]
 
534
 
 
535
* Allow users to declare other namespaces when using the atom feed helpers. #10304 [david.calavera]
 
536
 
 
537
* Introduce send_file :x_sendfile => true to send an X-Sendfile response header.  [Jeremy Kemper]
 
538
 
 
539
* Fixed ActionView::Helpers::ActiveRecordHelper::form for when protect_from_forgery is used #10739 [Jeremy Evans]
 
540
 
 
541
* Provide nicer access to HTTP Headers.  Instead of request.env["HTTP_REFERRER"] you can now use request.headers["Referrer"]. [Michael Koziarski]
 
542
 
 
543
* UrlWriter respects relative_url_root.  #10748 [Cheah Chu Yeow]
 
544
 
 
545
* The asset_host block takes the controller request as an optional second argument. Example: use a single asset host for SSL requests.  #10549 [Cheah Chu Yeow, Peter B, Tom Taylor]
 
546
 
 
547
* Support render :text => nil.  #6684 [tjennings, PotatoSalad, Cheah Chu Yeow]
 
548
 
 
549
* assert_response failures include the exception message.  #10688 [Seth Rasmussen]
 
550
 
 
551
* All fragment cache keys are now by default prefixed with the "views/" namespace [David Heinemeier Hansson]
 
552
 
 
553
* Moved the caching stores from ActionController::Caching::Fragments::* to ActiveSupport::Cache::*. If you're explicitly referring to a store, like ActionController::Caching::Fragments::MemoryStore, you need to update that reference with ActiveSupport::Cache::MemoryStore [David Heinemeier Hansson]
 
554
 
 
555
* Deprecated ActionController::Base.fragment_cache_store for ActionController::Base.cache_store [David Heinemeier Hansson]
 
556
 
 
557
* Made fragment caching in views work for rjs and builder as well #6642 [Dee Zsombor]
 
558
 
 
559
* Fixed rendering of partials with layout when done from site layout #9209 [antramm]
 
560
 
 
561
* Fix atom_feed_helper to comply with the atom spec.  Closes #10672 [Xavier Shay]
 
562
 
 
563
  * The tags created do not contain a date (http://feedvalidator.org/docs/error/InvalidTAG.html)
 
564
  * IDs are not guaranteed unique
 
565
  * A default self link was not provided, contrary to the documentation
 
566
  * NOTE:  This changes tags for existing atom entries, but at least they validate now.
 
567
 
 
568
* Correct indentation in tests.  Closes #10671 [Luca Guidi]
 
569
 
 
570
* Fix that auto_link looks for ='s in url paths (Amazon urls have them).  Closes #10640 [Brad Greenlee]
 
571
 
 
572
* Ensure that test case setup is run even if overridden.  #10382 [Josh Peek]
 
573
 
 
574
* Fix HTML Sanitizer to allow trailing spaces in CSS style attributes.  Closes #10566 [wesley.moxam]
 
575
 
 
576
* Add :default option to time_zone_select.  #10590 [Matt Aimonetti]
 
577
 
 
578
 
 
579
*2.0.2* (December 16th, 2007)
 
580
 
 
581
* Added delete_via_redirect and put_via_redirect to integration testing #10497 [philodespotos]
 
582
 
 
583
* Allow headers['Accept'] to be set by hand when calling xml_http_request #10461 [BMorearty]
 
584
 
 
585
* Added OPTIONS to list of default accepted HTTP methods #10449 [holoway]
 
586
 
 
587
* Added option to pass proc to ActionController::Base.asset_host for maximum configurability #10521 [Cheah Chu Yeow]. Example:
 
588
 
 
589
    ActionController::Base.asset_host = Proc.new { |source|
 
590
      if source.starts_with?('/images')
 
591
        "http://images.example.com"
 
592
      else
 
593
        "http://assets.example.com"
 
594
      end
 
595
    }
 
596
 
 
597
* Fixed that ActionView#file_exists? would be incorrect if @first_render is set #10569 [dbussink]
 
598
 
 
599
* Added that Array#to_param calls to_param on all it's elements #10473 [brandon]
 
600
 
 
601
* Ensure asset cache directories are automatically created.  #10337 [Josh Peek, Cheah Chu Yeow]
 
602
 
 
603
* render :xml and :json preserve custom content types.  #10388 [jmettraux, Cheah Chu Yeow]
 
604
 
 
605
* Refactor Action View template handlers.  #10437, #10455 [Josh Peek]
 
606
 
 
607
* Fix DoubleRenderError message and leave out mention of returning false from filters.  Closes #10380 [Frederick Cheung]
 
608
 
 
609
* Clean up some cruft around ActionController::Base#head.  Closes #10417 [ssoroka]
 
610
 
 
611
 
 
612
*2.0.1* (December 7th, 2007)
 
613
 
 
614
* Fixed send_file/binary_content for testing #8044 [tolsen]
 
615
 
 
616
* When a NonInferrableControllerError is raised, make the proposed fix clearer in the error message. Closes #10199 [Jack Danger Canty]
 
617
 
 
618
* Update Prototype to 1.6.0.1.  [sam]
 
619
 
 
620
* Update script.aculo.us to 1.8.0.1.  [madrobby]
 
621
 
 
622
* Add 'disabled' attribute to <OPTION> separators used in time zone and country selects.  Closes #10354 [Josh Susser]
 
623
 
 
624
* Added the same record identification guessing rules to fields_for as form_for has [David Heinemeier Hansson]
 
625
 
 
626
* Fixed that verification violations with no specified action didn't halt the chain (now they do with a 400 Bad Request) [David Heinemeier Hansson]
 
627
 
 
628
* Raise UnknownHttpMethod exception for unknown HTTP methods. Closes #10303 [Tarmo TƤnav]
 
629
 
 
630
* Update to Prototype -r8232.  [sam]
 
631
 
 
632
* Make sure the optimisation code for routes doesn't get used if :host, :anchor or :port are provided in the hash arguments. [pager, Michael Koziarski] #10292
 
633
 
 
634
* Added protection from trailing slashes on page caching #10229 [devrieda]
 
635
 
 
636
* Asset timestamps are appended, not prepended. Closes #10276 [Mike Naberezny]
 
637
 
 
638
* Minor inconsistency in description of render example. Closes #10029 [ScottSchram]
 
639
 
 
640
* Add #prepend_view_path and #append_view_path instance methods on ActionController::Base for consistency with the class methods.  [Rick Olson]
 
641
 
 
642
* Refactor sanitizer helpers into HTML classes and make it easy to swap them out with custom implementations.  Closes #10129.  [Rick Olson]
 
643
 
 
644
* Add deprecation for old subtemplate syntax for ActionMailer templates, use render :partial [Rick Olson]
 
645
 
 
646
* Fix TemplateError so it doesn't bomb on exceptions while running tests [Rick Olson]
 
647
 
 
648
* Fixed that named routes living under resources shouldn't have double slashes #10198 [Isaac Feliu]
 
649
 
 
650
* Make sure that cookie sessions use a secret that is at least 30 chars in length. [Michael Koziarski]
 
651
 
 
652
* Fixed that partial rendering should look at the type of the first render to determine its own type if no other clues are available (like when using text.plain.erb as the extension in AM) #10130 [java]
 
653
 
 
654
* Fixed that has_many :through associations should render as collections too #9051 [mathie/Jack Danger Canty]
 
655
 
 
656
* Added :mouseover short-cut to AssetTagHelper#image_tag for doing easy image swaps #6893 [joost]
 
657
 
 
658
* Fixed handling of non-domain hosts #9479 [purp]
 
659
 
 
660
* Fix syntax error in documentation example for cycle method. Closes #8735 [foca]
 
661
 
 
662
* Document :with option for link_to_remote. Closes #8765 [Ryan Bates]
 
663
 
 
664
* Document :minute_step option for time_select. Closes #8814 [brupm]
 
665
 
 
666
* Explain how to use the :href option for link_to_remote to degrade gracefully in the absence of JavaScript. Closes #8911 [vlad]
 
667
 
 
668
* Disambiguate :size option for text area tag. Closes #8955 [redbeard]
 
669
 
 
670
* Fix broken tag in assert_tag documentation. Closes #9037 [mfazekas]
 
671
 
 
672
* Add documentation for route conditions. Closes #9041 [innu, Manfred Stienstra]
 
673
 
 
674
* Fix typo left over from previous typo fix in url helper. Closes #9414 [Henrik N]
 
675
 
 
676
* Fixed that ActionController::CgiRequest#host_with_port() should handle standard port #10082 [moro]
 
677
 
 
678
* Update Prototype to 1.6.0 and script.aculo.us to 1.8.0.  [sam, madrobby]
 
679
 
 
680
* Expose the cookie jar as a helper method (before the view would just get the raw cookie hash) [David Heinemeier Hansson]
 
681
 
 
682
* Integration tests: get_ and post_via_redirect take a headers hash.  #9130 [simonjefford]
 
683
 
 
684
* Simplfy #view_paths implementation.  ActionView templates get the exact object, not a dup.  [Rick Olson]
 
685
 
 
686
* Update tests for ActiveSupport's JSON escaping change.  [Rick Olson]
 
687
 
 
688
* FormHelper's auto_index should use #to_param instead of #id_before_type_cast.  Closes #9994 [mattly]
 
689
 
 
690
* Doc typo fixes for ActiveRecordHelper. Closes #9973 [mikong]
 
691
 
 
692
* Make example parameters in restful routing docs idiomatic. Closes #9993 [Jack Danger Canty]
 
693
 
 
694
* Make documentation comment for mime responders match documentation example.  Closes #9357 [yon]
 
695
 
 
696
* Introduce a new test case class for functional tests.  ActionController::TestCase. [Michael Koziarski]
 
697
 
 
698
* Fix incorrect path in helper rdoc. Closes #9926 [viktor tron]
 
699
 
 
700
* Partials also set 'object' to the default partial variable.  #8823 [Nick Retallack, Jeremy Kemper]
 
701
 
 
702
* Request profiler.  [Jeremy Kemper]
 
703
    $ cat login_session.rb
 
704
    get_with_redirect '/'
 
705
    say "GET / => #{path}"
 
706
    post_with_redirect '/sessions', :username => 'john', :password => 'doe'
 
707
    say "POST /sessions => #{path}"
 
708
    $ ./script/performance/request -n 10 login_session.rb
 
709
 
 
710
* Disabled checkboxes don't submit a form value.  #9301 [vladr, robinjfisher]
 
711
 
 
712
* Added tests for options to ActiveRecordHelper#form. Closes #7213 [richcollins, mikong, Mislav Marohnić]
 
713
 
 
714
* Changed before_filter halting to happen automatically on render or redirect but no longer on simply returning false [David Heinemeier Hansson]
 
715
 
 
716
* Ensure that cookies handle array values correctly.  Closes #9937 [queso]
 
717
 
 
718
* Make sure resource routes don't clash with internal helpers like javascript_path, image_path etc.  #9928 [Geoff Buesing]
 
719
 
 
720
* caches_page uses a single after_filter instead of one per action.  #9891 [Pratik Naik]
 
721
 
 
722
* Update Prototype to 1.6.0_rc1 and script.aculo.us to 1.8.0 preview 0.  [sam, madrobby]
 
723
 
 
724
* Dispatcher: fix that to_prepare should only run once in production.  #9889 [Nathaniel Talbott]
 
725
 
 
726
* Memcached sessions: add session data on initialization; don't silently discard exceptions; add unit tests.  #9823 [kamk]
 
727
 
 
728
* error_messages_for also takes :message and :header_message options which defaults to the old "There were problems with the following fields:" and "<count> errors prohibited this <object_name> from being saved".  #8270 [rmm5t, zach-inglis-lt3]
 
729
 
 
730
* Make sure that custom inflections are picked up by map.resources.  #9815 [Mislav Marohnić]
 
731
 
 
732
* Changed SanitizeHelper#sanitize to only allow the custom attributes and tags when specified in the call [David Heinemeier Hansson]
 
733
 
 
734
* Extracted sanitization methods from TextHelper to SanitizeHelper [David Heinemeier Hansson]
 
735
 
 
736
* rescue_from accepts :with => lambda { |exception| ... } or a normal block.  #9827 [Pratik Naik]
 
737
 
 
738
* Add :status to redirect_to allowing users to choose their own response code without manually setting headers. #8297 [Coda Hale, chasgrundy]
 
739
 
 
740
* Add link_to :back which uses your referrer with a fallback to a javascript link. #7366 [eventualbuddha, Tarmo TƤnav]
 
741
 
 
742
* error_messages_for and friends also work with local variables.  #9699 [Frederick Cheung]
 
743
 
 
744
* Fix url_for, redirect_to, etc. with :controller => :symbol instead of 'string'.  #8562, #9525 [Justin Lynn, Tarmo TƤnav, shoe]
 
745
 
 
746
* Use #require_library_or_gem to load the memcache library for the MemCache session and fragment cache stores.  Closes #8662. [Rick Olson]
 
747
 
 
748
* Move ActionController::Routing.optimise_named_routes to ActionController::Base.optimise_named_routes.  Now you can set it in the config. [Rick Olson]
 
749
 
 
750
  config.action_controller.optimise_named_routes = false
 
751
 
 
752
* ActionController::Routing::DynamicSegment#interpolation_chunk should call #to_s on all values before calling URI.escape.  [Rick Olson]
 
753
 
 
754
* Only accept session ids from cookies, prevents session fixation attacks.  [bradediger] 
 
755
 
 
756
 
 
757
*2.0.0 [Preview Release]* (September 29th, 2007) [Includes duplicates of changes from 1.12.2 - 1.13.3]
 
758
 
 
759
* Fixed that render template did not honor exempt_from_layout #9698 [pezra]
 
760
 
 
761
* Better error messages if you leave out the :secret option for request forgery protection.  Closes #9670 [Rick Olson]
 
762
 
 
763
* Allow ability to disable request forgery protection, disable it in test mode by default.  Closes #9693 [Pratik Naik]
 
764
 
 
765
* Avoid calling is_missing on LoadErrors. Closes #7460. [ntalbott]
 
766
 
 
767
* Move Railties' Dispatcher to ActionController::Dispatcher, introduce before_ and after_dispatch callbacks, and warm up to non-CGI requests.  [Jeremy Kemper]
 
768
 
 
769
* The tag helper may bypass escaping.  [Jeremy Kemper]
 
770
 
 
771
* Cache asset ids.  [Jeremy Kemper]
 
772
 
 
773
* Optimized named routes respect AbstractRequest.relative_url_root.  #9612 [Daniel Morrison, Jeremy Kemper]
 
774
 
 
775
* Introduce ActionController::Base.rescue_from to declare exception-handling methods. Cleaner style than the case-heavy rescue_action_in_public.  #9449 [Norbert Crombach]
 
776
 
 
777
* Rename some RequestForgeryProtection methods.  The class method is now #protect_from_forgery, and the default parameter is now 'authenticity_token'.  [Rick Olson]
 
778
 
 
779
* Merge csrf_killer plugin into rails.  Adds RequestForgeryProtection model that verifies session-specific _tokens for non-GET requests.  [Rick Olson]
 
780
 
 
781
* Secure #sanitize, #strip_tags, and #strip_links helpers against xss attacks.  Closes #8877. [Rick Olson, Pratik Naik, Jacques Distler]
 
782
 
 
783
  This merges and renames the popular white_list helper (along with some css sanitizing from Jacques Distler version of the same plugin).
 
784
  Also applied updated versions of #strip_tags and #strip_links from #8877.
 
785
 
 
786
* Remove use of & logic operator. Closes #8114. [watson]
 
787
 
 
788
* Fixed JavaScriptHelper#escape_javascript to also escape closing tags #8023 [Ruy Asan]
 
789
 
 
790
* Fixed TextHelper#word_wrap for multiline strings with extra carrier returns #8663 [seth]
 
791
 
 
792
* Fixed that setting the :host option in url_for would automatically turn off :only_path (since :host would otherwise not be shown) #9586 [Bounga]
 
793
 
 
794
* Added FormHelper#label.  #8641, #9850 [jcoglan, Jarkko Laine]
 
795
 
 
796
* Added AtomFeedHelper (slightly improved from the atom_feed_helper plugin) [David Heinemeier Hansson]
 
797
 
 
798
* Prevent errors when generating routes for uncountable resources, (i.e. sheep where plural == singluar).   map.resources :sheep now creates sheep_index_url for the collection and sheep_url for the specific item.  [Michael Koziarski]
 
799
 
 
800
* Added support for HTTP Only cookies (works in IE6+ and FF 2.0.5+) as an improvement for XSS attacks #8895 [Pratik Naik, Mark Somerville]
 
801
 
 
802
* Don't warn when a path segment precedes a required segment. Closes #9615. [Nicholas Seckar]
 
803
 
 
804
* Fixed CaptureHelper#content_for to work with the optional content parameter instead of just the block #9434 [sandofsky/wildchild].
 
805
 
 
806
* Added Mime::Type.register_alias for dealing with different formats using the same mime type [David Heinemeier Hansson]. Example:
 
807
 
 
808
    class PostsController < ApplicationController
 
809
      before_filter :adjust_format_for_iphone
 
810
 
 
811
      def index
 
812
        @posts = Post.find(:all)
 
813
        
 
814
        respond_to do |format|
 
815
          format.html   # => renders index.html.erb and uses "text/html" as the content type
 
816
          format.iphone # => renders index.iphone.erb and uses "text/html" as the content type
 
817
        end
 
818
      end
 
819
 
 
820
 
 
821
      private
 
822
        def adjust_format_for_iphone
 
823
          if request.env["HTTP_USER_AGENT"] && request.env["HTTP_USER_AGENT"][/iPhone/]
 
824
            request.format = :iphone
 
825
          end
 
826
        end
 
827
    end
 
828
 
 
829
* Added that render :json will automatically call .to_json unless it's being passed a string [David Heinemeier Hansson].
 
830
 
 
831
* Autolink behaves well with emails embedded in URLs.  #7313 [Jeremy McAnally, Tarmo TƤnav]
 
832
 
 
833
* Fixed that default layouts did not take the format into account #9564 [Pratik Naik]
 
834
 
 
835
* Fixed optimized route segment escaping.  #9562 [wildchild, Jeremy Kemper]
 
836
 
 
837
* Added block acceptance to JavaScriptHelper#javascript_tag.  #7527 [Bob Silva, Tarmo TƤnav, rmm5t]
 
838
 
 
839
* root_path returns '/' not ''.  #9563 [Pratik Naik]
 
840
 
 
841
* Fixed that setting request.format should also affect respond_to blocks [David Heinemeier Hansson]
 
842
 
 
843
* Add option to force binary mode on tempfile used for fixture_file_upload.  #6380 [Jonathan Viney]
 
844
 
 
845
* Fixed that resource namespaces wouldn't stick to all nested resources #9399 [pixeltrix]
 
846
 
 
847
* Moved ActionController::Macros::AutoComplete into the auto_complete plugin on the official Rails svn.  #9512 [Pratik Naik]
 
848
 
 
849
* Moved ActionController::Macros::InPlaceEditing into the in_place_editor plugin on the official Rails svn.  #9513 [Pratik Naik]
 
850
 
 
851
* Removed deprecated form of calling xml_http_request/xhr without the first argument being the http verb [David Heinemeier Hansson]
 
852
 
 
853
* Removed deprecated methods [David Heinemeier Hansson]:
 
854
 
 
855
  - ActionController::Base#keep_flash (use flash.keep instead)
 
856
  - ActionController::Base#expire_matched_fragments (just call expire_fragment with a regular expression)
 
857
  - ActionController::Base.template_root/= methods (use ActionController#Base.view_paths/= instead)
 
858
  - ActionController::Base.cookie (use ActionController#Base.cookies[]= instead)
 
859
 
 
860
* Removed the deprecated behavior of appending ".png" to image_tag/image_path calls without an existing extension [David Heinemeier Hansson]
 
861
 
 
862
* Removed ActionController::Base.scaffold -- it went through the whole idea of scaffolding (card board walls you remove and tweak one by one). Use the scaffold generator instead (it does resources too now!) [David Heinemeier Hansson]
 
863
 
 
864
* Optimise named route generation when using positional arguments.  [Michael Koziarski]
 
865
 
 
866
  This change delivers significant performance benefits for the most
 
867
  common usage scenarios for modern rails applications by avoiding the
 
868
  costly trip through url_for.  Initial benchmarks indicate this is
 
869
  between 6 and 20 times as fast.
 
870
 
 
871
* Explicitly require active_record/query_cache before using it.  [Jeremy Kemper]
 
872
 
 
873
* Fix layout overriding response status.  #9476 [lotswholetime]
 
874
 
 
875
* Add field_set_tag for generating field_sets, closes #9477. [Damian Janowski]
 
876
 
 
877
* Allow additional parameters to be passed to named route helpers when using positional arguments.  Closes #8930 [Ian White]
 
878
 
 
879
* Make render :partial work with a :collection of Hashes, previously this wasn't possible due to backwards compatibility restrictions.  [Pratik Naik]
 
880
 
 
881
* request.host works with IPv6 addresses.  #9458 [yuya]
 
882
 
 
883
* Fix bug where action caching sets the content type to the ActionCachePath object.  Closes #9282 [mindforge]
 
884
 
 
885
* Find layouts even if they're not in the first view_paths directory.  Closes #9258 [caio]
 
886
 
 
887
* Major improvement to the documentation for the options / select form helpers. Closes #9038 [Chris Kampmeier, jardeon, wesg]
 
888
 
 
889
* Fix number_to_human_size when using different precisions. Closes #7536. [RichardStrand, mpalmer]
 
890
 
 
891
* Added partial layouts (see example in action_view/lib/partials.rb) [David Heinemeier Hansson]
 
892
 
 
893
* Allow you to set custom :conditions on resource routes.  [Rick Olson]
 
894
 
 
895
* Fixed that file.content_type for uploaded files would include a trailing \r #9053 [Brad Greenlee]
 
896
 
 
897
* url_for now accepts a series of symbols representing the namespace of the record [Josh Knowles]
 
898
 
 
899
* Make :trailing_slash work with query parameters for url_for. Closes #4004 [nov]
 
900
 
 
901
* Make sure missing template exceptions actually say which template they were looking for.  Closes #8683 [dasil003]
 
902
 
 
903
* Fix errors with around_filters which do not yield, restore 1.1 behaviour with after filters. Closes #8891 [Stefan Kaes]
 
904
 
 
905
  After filters will *no longer* be run if an around_filter fails to yield, users relying on
 
906
  this behaviour are advised to put the code in question after a yield statement in an around filter.
 
907
  
 
908
 
 
909
* Allow you to delete cookies with options. Closes #3685 [Josh Peek, Chris Wanstrath]
 
910
 
 
911
* Allow you to render views with periods in the name.  Closes #8076 [Norbert Crombach]
 
912
 
 
913
  render :partial => 'show.html.erb'
 
914
 
 
915
* Improve capture helper documentation.  #8796 [Chris Kampmeier]
 
916
 
 
917
* Prefix nested resource named routes with their action name, e.g. new_group_user_path(@group) instead of group_new_user_path(@group). The old nested action named route is deprecated in Rails 1.2.4.  #8558 [David Chelimsky]
 
918
 
 
919
* Allow sweepers to be created solely for expiring after controller actions, not model changes [David Heinemeier Hansson]
 
920
 
 
921
* Added assigns method to ActionController::Caching::Sweeper to easily access instance variables on the controller [David Heinemeier Hansson]
 
922
 
 
923
* Give the legacy X-POST_DATA_FORMAT header greater precedence during params parsing for backward compatibility.  [Jeremy Kemper]
 
924
 
 
925
* Fixed that link_to with an href of # when using :method will not allow for click-through without JavaScript #7037 [Steven Bristol, Josh Peek]
 
926
 
 
927
* Fixed that radio_button_tag should generate unique ids #3353 [Bob Silva, Rebecca, Josh Peek]
 
928
 
 
929
* Fixed that HTTP authentication should work if the header is called REDIRECT_X_HTTP_AUTHORIZATION as well #6754 [Mislav Marohnić]
 
930
 
 
931
* Don't mistakenly interpret the request uri as the query string.  #8731 [Pratik Naik, Jeremy Kemper]
 
932
 
 
933
* Make ActionView#view_paths an attr_accessor for real this time.  Also, don't perform an unnecessary #compact on the @view_paths array in #initialize.  Closes #8582 [dasil003, julik, Rick Olson]
 
934
 
 
935
* Tolerate missing content type on multipart file uploads. Fix for Safari 3.  [Jeremy Kemper]
 
936
 
 
937
* Deprecation: remove pagination. Install the classic_pagination plugin for forward compatibility, or move to the superior will_paginate plugin.  #8157 [Josh Peek]
 
938
 
 
939
* Action caching is limited to GET requests returning 200 OK status.  #3335 [tom@craz8.com, halfbyte, Dan Kubb, Josh Peek]
 
940
 
 
941
* Improve Text Helper test coverage.  #7274 [Rob Sanheim, Josh Peek]
 
942
 
 
943
* Improve helper test coverage.  #7208, #7212, #7215, #7233, #7234, #7235, #7236, #7237, #7238, #7241, #7243, #7244 [Rich Collins, Josh Peek]
 
944
 
 
945
* Improve UrlRewriter tests.  #7207 [Rich Collins]
 
946
 
 
947
* Resources: url_for([parent, child]) generates /parents/1/children/2 for the nested resource. Likewise with the other simply helpful methods like form_for and link_to.  #6432 [mhw, Jonathan Vaught, lotswholetime]
 
948
 
 
949
* Assume html format when rendering partials in RJS. #8076 [Rick Olson]
 
950
 
 
951
* Don't double-escape url_for in views.  #8144 [Rich Collins, Josh Peek]
 
952
 
 
953
* Allow JSON-style values for the :with option of observe_field.  Closes #8557 [kommen]
 
954
 
 
955
* Remove RAILS_ROOT from backtrace paths.  #8540 [Tim Pope]
 
956
 
 
957
* Routing: map.resource :logo routes to LogosController so the controller may be reused for multiple nestings or namespaces.  [Jeremy Kemper]
 
958
 
 
959
* render :partial recognizes Active Record associations as Arrays.  #8538 [Kamal Fariz Mahyuddin]
 
960
 
 
961
* Routing: drop semicolon and comma as route separators.  [Jeremy Kemper]
 
962
 
 
963
* request.remote_ip understands X-Forwarded-For addresses with nonstandard whitespace.  #7386 [moses]
 
964
 
 
965
* Don't prepare response when rendering a component.  #8493 [jsierles]
 
966
 
 
967
* Reduce file stat calls when checking for template changes.  #7736 [alex]
 
968
 
 
969
* Added custom path cache_page/expire_page parameters in addition to the options hashes [David Heinemeier Hansson]. Example:
 
970
 
 
971
    def index
 
972
      caches_page(response.body, "/index.html")
 
973
    end
 
974
 
 
975
* Action Caching speedup.  #8231 [Stefan Kaes]
 
976
 
 
977
* Wordsmith resources documentation.  #8484 [marclove]
 
978
 
 
979
* Fix syntax error in code example for routing documentation. #8377. [Norbert Crombach]
 
980
 
 
981
* Routing: respond with 405 Method Not Allowed status when the route path matches but the HTTP method does not.  #6953 [Josh Peek, defeated, Dan Kubb, Coda Hale]
 
982
 
 
983
* Add support for assert_select_rjs with :show and :hide. #7780 [dchelimsky]
 
984
 
 
985
* Make assert_select's failure messages clearer about what failed. #7779 [dchelimsky]
 
986
 
 
987
* Introduce a default respond_to block for custom types.  #8174 [Josh Peek]
 
988
 
 
989
* auto_complete_field takes a :method option so you can GET or POST.  #8120 [zapnap]
 
990
 
 
991
* Added option to suppress :size when using :maxlength for FormTagHelper#text_field #3112 [Tim Pope]
 
992
 
 
993
* catch possible WSOD when trying to render a missing partial. Closes #8454 [Jonathan del Strother]
 
994
 
 
995
* Rewind request body after reading it, if possible.  #8438 [s450r1]
 
996
 
 
997
* Resource namespaces are inherited by their has_many subresources.  #8280 [marclove, Geoff Garside]
 
998
 
 
999
* Fix filtered parameter logging with nil parameter values.  #8422 [choonkeat]
 
1000
 
 
1001
* Integration tests: alias xhr to xml_http_request and add a request_method argument instead of always using POST.  #7124 [Nik Wakelin, FranƧois Beausoleil, Wizard]
 
1002
 
 
1003
* Document caches_action.  #5419 [Jarkko Laine]
 
1004
 
 
1005
* Update to Prototype 1.5.1.  [Sam Stephenson]
 
1006
 
 
1007
* Allow routes to be decalred under namespaces [Tobias LĆ¼tke]: 
 
1008
  
 
1009
  map.namespace :admin do |admin|
 
1010
    admin.root :controller => "products"       
 
1011
    admin.feed 'feed.xml', :controller => 'products', :action => 'feed', :format => 'xml'
 
1012
  end
 
1013
  
 
1014
* Update to script.aculo.us 1.7.1_beta3.  [Thomas Fuchs]
 
1015
 
 
1016
* observe_form always sends the serialized form.  #5271 [Manfred Stienstra, normelton@gmail.com]
 
1017
 
 
1018
* Parse url-encoded and multipart requests ourselves instead of delegating to CGI.  [Jeremy Kemper]
 
1019
 
 
1020
* select :include_blank option can be set to a string instead of true, which just uses an empty string.  #7664 [Wizard]
 
1021
 
 
1022
* Added url_for usage on render :location, which allows for record identification [David Heinemeier Hansson]. Example:
 
1023
 
 
1024
    render :xml => person, :status => :created, :location => person
 
1025
  
 
1026
  ...expands the location to person_url(person).
 
1027
 
 
1028
* Introduce the request.body stream. Lazy-read to parse parameters rather than always setting RAW_POST_DATA. Reduces the memory footprint of large binary PUT requests.  [Jeremy Kemper]
 
1029
 
 
1030
* Add some performance enhancements to ActionView.
 
1031
 
 
1032
  * Cache base_paths in @@cached_base_paths
 
1033
  * Cache template extensions in @@cached_template_extension
 
1034
  * Remove unnecessary rescues
 
1035
 
 
1036
* Assume that rendered partials go by the HTML format by default
 
1037
 
 
1038
  def my_partial
 
1039
    render :update do |page|
 
1040
      # in this order
 
1041
      # _foo.html.erb
 
1042
      # _foo.erb
 
1043
      # _foo.rhtml
 
1044
      page.replace :foo, :partial => 'foo'
 
1045
    end
 
1046
  end
 
1047
 
 
1048
* Added record identifications to FormHelper#form_for and PrototypeHelper#remote_form_for [David Heinemeier Hansson]. Examples:
 
1049
 
 
1050
    <% form_for(@post) do |f| %>
 
1051
      ...
 
1052
    <% end %>
 
1053
  
 
1054
  This will expand to be the same as:
 
1055
  
 
1056
    <% form_for :post, @post, :url => post_path(@post), :html => { :method => :put, :class => "edit_post", :id => "edit_post_45" } do |f| %>
 
1057
      ...
 
1058
    <% end %>
 
1059
  
 
1060
  And for new records:
 
1061
  
 
1062
    <% form_for(Post.new) do |f| %>
 
1063
      ...
 
1064
    <% end %>
 
1065
  
 
1066
  This will expand to be the same as:
 
1067
  
 
1068
    <% form_for :post, @post, :url => posts_path, :html => { :class => "new_post", :id => "new_post" } do |f| %>
 
1069
      ...
 
1070
    <% end %>
 
1071
 
 
1072
* Rationalize route path escaping according to RFC 2396 section 3.3.  #7544, #8307. [Jeremy Kemper, Chris Roos, begemot, jugend]
 
1073
 
 
1074
* Added record identification with polymorphic routes for ActionController::Base#url_for and ActionView::Base#url_for [David Heinemeier Hansson]. Examples:
 
1075
 
 
1076
    redirect_to(post)         # => redirect_to(posts_url(post))         => Location: http://example.com/posts/1
 
1077
    link_to(post.title, post) # => link_to(post.title, posts_url(post)) => <a href="/posts/1">Hello world</a>
 
1078
 
 
1079
  Any method that calls url_for on its parameters will automatically benefit from this. 
 
1080
 
 
1081
* Removed deprecated parameters_for_method_reference concept (legacy from before named routes) [David Heinemeier Hansson]
 
1082
 
 
1083
* Add ActionController::Routing::Helpers, a module to contain common URL helpers such as polymorphic_url. [Nicholas Seckar]
 
1084
 
 
1085
* Included the HttpAuthentication plugin as part of core (ActionController::HttpAuthentication::Basic) [David Heinemeier Hansson]
 
1086
 
 
1087
* Modernize documentation for form helpers. [Jeremy McAnally]
 
1088
 
 
1089
* Add brief introduction to REST to the resources documentation. [fearoffish]
 
1090
 
 
1091
* Fix various documentation typos throughout ActionPack. [Henrik N]
 
1092
 
 
1093
* Enhance documentation and add examples for url_for. [Jeremy McAnally]
 
1094
 
 
1095
* Fix documentation typo in routes. [Norbert Crombach, pam]
 
1096
 
 
1097
* Sweep flash when filter chain is halted. [Caio Chassot <lists@v2studio.com>]
 
1098
 
 
1099
* Fixed that content_tag with a block will just return the result instead of concate it if not used in a ERb view #7857, #7432 [michael.niessner]
 
1100
 
 
1101
* Replace the current block/continuation filter chain handling by an implementation based on a simple loop.  #8226 [Stefan Kaes]
 
1102
 
 
1103
* Update UrlWriter to accept :anchor parameter. Closes #6771. [Chris McGrath]
 
1104
 
 
1105
* Added RecordTagHelper for using RecordIdentifier conventions on divs and other container elements [David Heinemeier Hansson]. Example:
 
1106
 
 
1107
    <% div_for(post) do %>     <div id="post_45" class="post">
 
1108
      <%= post.body %>           What a wonderful world!
 
1109
    <% end %>                  </div>
 
1110
 
 
1111
* Added page[record] accessor to JavaScriptGenerator that relies on RecordIdentifier to find the right dom id [David Heinemeier Hansson]. Example:
 
1112
 
 
1113
    format.js do
 
1114
      # Calls: new Effect.fade('post_45');
 
1115
      render(:update) { |page| page[post].visual_effect(:fade) }
 
1116
    end
 
1117
 
 
1118
* Added RecordIdentifier to enforce view conventions on records for dom ids, classes, and partial paths [David Heinemeier Hansson]
 
1119
 
 
1120
* Added map.namespace to deal with the common situation of admin sections and the like [David Heinemeier Hansson]
 
1121
 
 
1122
    Before:
 
1123
    
 
1124
      map.resources :products, :path_prefix => "admin", :controller => "admin/products", :collection => { :inventory => :get }, :member => { :duplicate => :post }
 
1125
      map.resources :tags, :name_prefix => 'admin_product_', :path_prefix => "admin/products/:product_id", :controller => "admin/product_tags"
 
1126
      map.resources :images, :name_prefix => 'admin_product_', :path_prefix => "admin/products/:product_id", :controller => "admin/product_images"
 
1127
      map.resources :variants, :name_prefix => 'admin_product_', :path_prefix => "admin/products/:product_id", :controller => "admin/product_variants"
 
1128
 
 
1129
    After:
 
1130
    
 
1131
      map.namespace(:admin) do |admin|
 
1132
        admin.resources :products,
 
1133
          :collection => { :inventory => :get },
 
1134
          :member     => { :duplicate => :post },
 
1135
          :has_many   => [ :tags, :images, :variants ]
 
1136
      end
 
1137
 
 
1138
* Added :name_prefix as standard for nested resources [David Heinemeier Hansson]. WARNING: May be backwards incompatible with your app
 
1139
 
 
1140
    Before:
 
1141
 
 
1142
      map.resources :emails do |emails|
 
1143
        emails.resources :comments,    :name_prefix => "email_"
 
1144
        emails.resources :attachments, :name_prefix => "email_"
 
1145
      end
 
1146
      
 
1147
    After:
 
1148
 
 
1149
      map.resources :emails do |emails|
 
1150
        emails.resources :comments
 
1151
        emails.resources :attachments
 
1152
      end
 
1153
    
 
1154
    This does mean that if you intended to have comments_url go to /emails/5/comments, then you'll have to set :name_prefix to nil explicitly.
 
1155
 
 
1156
* Added :has_many and :has_one for declaring plural and singular resources beneath the current [David Heinemeier Hansson]
 
1157
 
 
1158
    Before:
 
1159
      
 
1160
      map.resources :notes do |notes|
 
1161
        notes.resources :comments
 
1162
        notes.resources :attachments
 
1163
        notes.resource :author
 
1164
      end
 
1165
    
 
1166
    After:
 
1167
    
 
1168
      map.resources :notes, :has_many => [ :comments, :attachments ], :has_one => :author
 
1169
 
 
1170
* Added that render :xml will try to call to_xml if it can [David Heinemeier Hansson]. Makes these work:
 
1171
 
 
1172
    render :xml => post
 
1173
    render :xml => comments
 
1174
 
 
1175
* Added :location option to render so that the common pattern of rendering a response after creating a new resource is now a 1-liner [David Heinemeier Hansson]
 
1176
 
 
1177
    render :xml => post.to_xml, :status => :created, :location => post_url(post)
 
1178
 
 
1179
* Ensure that render_text only adds string content to the body of the response [David Heinemeier Hansson]
 
1180
 
 
1181
* Return the string representation from an Xml Builder when rendering a partial. Closes #5044 [Tim Pope]
 
1182
 
 
1183
* Fixed that parameters from XML should also be presented in a hash with indifferent access [David Heinemeier Hansson]
 
1184
 
 
1185
* Tweak template format rules so that the ACCEPT header is only used if it's text/javascript.  This is so ajax actions without a :format param get recognized as Mime::JS. [Rick Olson]
 
1186
 
 
1187
* The default respond_to blocks don't set a specific extension anymore, so that both 'show.rjs' and 'show.js.rjs' will work. [Rick Olson]
 
1188
 
 
1189
* Allow layouts with extension of .html.erb.  Closes #8032 [Josh Knowles]
 
1190
 
 
1191
* Change default respond_to templates for xml and rjs formats. [Rick Olson]
 
1192
 
 
1193
  * Default xml template goes from #{action_name}.rxml => #{action_name}.xml.builder.
 
1194
  * Default rjs template goes from #{action_name}.rjs => #{action_name}.js.rjs.
 
1195
  
 
1196
  You can still specify your old templates:
 
1197
  
 
1198
    respond_to do |format|
 
1199
      format.xml do
 
1200
        render :action => "#{action_name}.rxml"
 
1201
      end
 
1202
    end
 
1203
 
 
1204
* Fix WSOD due to modification of a formatted template extension so that requests to templates like 'foo.html.erb' fail on the second hit.  [Rick Olson]
 
1205
 
 
1206
* Fix WSOD when template compilation fails [Rick Olson]
 
1207
 
 
1208
* Change ActionView template defaults.  Look for templates using the request format first, such as "show.html.erb" or "show.xml.builder", before looking for the old defaults like "show.erb" or "show.builder" [Rick Olson]
 
1209
 
 
1210
* Highlight helper highlights one or many terms in a single pass.  [Jeremy Kemper]
 
1211
 
 
1212
* Dropped the use of ; as a separator of non-crud actions on resources and went back to the vanilla slash. It was a neat idea, but lots of the non-crud actions turned out not to be RPC (as the ; was primarily intended to discourage), but legitimate sub-resources, like /parties/recent, which didn't deserve the uglification of /parties;recent. Further more, the semicolon caused issues with caching and HTTP authentication in Safari. Just Not Worth It [David Heinemeier Hansson]
 
1213
 
 
1214
* Added that FormTagHelper#submit_tag will return to its original state if the submit fails and you're using :disable_with [David Heinemeier Hansson]
 
1215
 
 
1216
* Cleaned up, corrected, and mildly expanded ActionPack documentation.  Closes #7190 [Jeremy McAnally]
 
1217
 
 
1218
* Small collection of ActionController documentation cleanups.  Closes #7319 [Jeremy McAnally]
 
1219
 
 
1220
* Make sure the route expiry hash is constructed by comparing the to_param-ized values of each hash. [Jamis Buck]
 
1221
 
 
1222
* Allow configuration of the default action cache path for #caches_action calls.  [Rick Olson]
 
1223
 
 
1224
  class ListsController < ApplicationController
 
1225
    caches_action :index, :cache_path => Proc.new { |controller| 
 
1226
      controller.params[:user_id] ? 
 
1227
        controller.send(:user_lists_url, c.params[:user_id]) :
 
1228
        controller.send(:lists_url) }
 
1229
  end
 
1230
 
 
1231
* Performance: patch cgi/session/pstore to require digest/md5 once rather than per #initialize.  #7583 [Stefan Kaes]
 
1232
 
 
1233
* Cookie session store: ensure that new sessions doesn't reuse data from a deleted session in the same request.  [Jeremy Kemper]
 
1234
 
 
1235
* Deprecation: verification with :redirect_to => :named_route shouldn't be deprecated.  #7525 [Justin French]
 
1236
 
 
1237
* Cookie session store: raise ArgumentError when :session_key is blank.  [Jeremy Kemper]
 
1238
 
 
1239
* Deprecation: remove deprecated request, redirect, and dependency methods. Remove deprecated instance variables. Remove deprecated url_for(:symbol, *args) and redirect_to(:symbol, *args) in favor of named routes. Remove uses_component_template_root for toplevel components directory. Privatize deprecated render_partial and render_partial_collection view methods. Remove deprecated link_to_image, link_image_to, update_element_function, start_form_tag, and end_form_tag helper methods. Remove deprecated human_size helper alias.  [Jeremy Kemper]
 
1240
 
 
1241
* Consistent public/protected/private visibility for chained methods.  #7813 [Dan Manges]
 
1242
 
 
1243
* Prefer MIME constants to strings.  #7707 [Dan Kubb]
 
1244
 
 
1245
* Allow array and hash query parameters. Array route parameters are converted/to/a/path as before.  #6765, #7047, #7462 [bgipsy, Jeremy McAnally, Dan Kubb, brendan]
 
1246
 
 
1247
# Add a #dbman attr_reader for CGI::Session and make CGI::Session::CookieStore#generate_digest public so it's easy to generate digests
 
1248
using the cookie store's secret. [Rick Olson]
 
1249
 
 
1250
* Added Request#url that returns the complete URL used for the request [David Heinemeier Hansson]
 
1251
 
 
1252
* Extract dynamic scaffolding into a plugin.  #7700 [Josh Peek]
 
1253
 
 
1254
* Added user/password options for url_for to add http authentication in a URL [David Heinemeier Hansson]
 
1255
 
 
1256
* Fixed that FormTagHelper#text_area_tag should disregard :size option if it's not a string [Brendon Davidson]
 
1257
 
 
1258
* Set the original button value in an attribute of the button when using the :disable_with key with submit_tag, so that the original can be restored later. [Jamis Buck]
 
1259
 
 
1260
* session_enabled? works with session :off.  #6680 [Jonathan del Strother]
 
1261
 
 
1262
* Added :port and :host handling to UrlRewriter (which unified url_for usage, regardless of whether it's called in view or controller) #7616 [alancfrancis]
 
1263
 
 
1264
* Allow send_file/send_data to use a registered mime type as the :type parameter #7620 [jonathan]
 
1265
 
 
1266
* Allow routing requirements on map.resource(s) #7633 [quixoten]. Example:
 
1267
 
 
1268
  map.resources :network_interfaces, :requirements => { :id => /^\d+\.\d+\.\d+\.\d+$/ }
 
1269
 
 
1270
* Cookie session store: empty and unchanged sessions don't write a cookie.  [Jeremy Kemper]
 
1271
 
 
1272
* Added helper(:all) as a way to include all helpers from app/helpers/**/*.rb in ApplicationController [David Heinemeier Hansson]
 
1273
 
 
1274
* Integration tests: introduce methods for other HTTP methods.  #6353 [caboose]
 
1275
 
 
1276
* Routing: better support for escaped values in route segments.  #7544 [Chris
 
1277
Roos]
 
1278
 
 
1279
* Introduce a cookie-based session store as the Rails default. Sessions typically contain at most a user_id and flash message; both fit within the 4K cookie size limit. A secure message digest is included with the cookie to ensure data integrity (a user cannot alter his user_id without knowing the secret key included in the digest). If you have more than 4K of session data or don't want your data to be visible to the user, pick another session store.  Cookie-based sessions are dramatically faster than the alternatives.   [Jeremy Kemper]
 
1280
 
 
1281
  Example config/environment.rb:
 
1282
    # Use an application-wide secret key and the default SHA1 message digest.
 
1283
    config.action_controller.session = { :secret => "can't touch this" }
 
1284
 
 
1285
    # Store a secret key per user and employ a stronger message digest.
 
1286
    config.action_controller.session = {
 
1287
      :digest => 'SHA512',
 
1288
      :secret => Proc.new { User.current.secret_key }
 
1289
    }
 
1290
 
 
1291
* Added .erb and .builder as preferred aliases to the now deprecated .rhtml and .rxml extensions [Chad Fowler]. This is done to separate the renderer from the mime type. .erb templates are often used to render emails, atom, csv, whatever. So labeling them .rhtml doesn't make too much sense. The same goes for .rxml, which can be used to build everything from HTML to Atom to whatever. .rhtml and .rxml will continue to work until Rails 3.0, though. So this is a slow phasing out. All generators and examples will start using the new aliases, though.
 
1292
 
 
1293
* Added caching option to AssetTagHelper#stylesheet_link_tag and AssetTagHelper#javascript_include_tag [David Heinemeier Hansson]. Examples:
 
1294
 
 
1295
    stylesheet_link_tag :all, :cache => true # when ActionController::Base.perform_caching is false =>
 
1296
      <link href="/stylesheets/style1.css"  media="screen" rel="Stylesheet" type="text/css" />
 
1297
      <link href="/stylesheets/styleB.css"  media="screen" rel="Stylesheet" type="text/css" />
 
1298
      <link href="/stylesheets/styleX2.css" media="screen" rel="Stylesheet" type="text/css" />
 
1299
 
 
1300
    stylesheet_link_tag :all, :cache => true # when ActionController::Base.perform_caching is true =>
 
1301
      <link href="/stylesheets/all.css"  media="screen" rel="Stylesheet" type="text/css" />
 
1302
 
 
1303
  ...when caching is on, all.css is the concatenation of style1.css, styleB.css, and styleX2.css.
 
1304
  Same deal for JavaScripts.
 
1305
 
 
1306
* Work around the two connection per host browser limit: use asset%d.myapp.com to distribute asset requests among asset[0123].myapp.com. Use a DNS wildcard or CNAMEs to map these hosts to your asset server. See http://www.die.net/musings/page_load_time/ for background.  [Jeremy Kemper]
 
1307
 
 
1308
* Added default mime type for CSS (Mime::CSS) [David Heinemeier Hansson]
 
1309
 
 
1310
* Added that rendering will automatically insert the etag header on 200 OK responses. The etag is calculated using MD5 of the response body. If a request comes in that has a matching etag, the response will be changed to a 304 Not Modified and the response body will be set to an empty string. [David Heinemeier Hansson]
 
1311
 
 
1312
* Added X-Runtime to all responses with the request run time [David Heinemeier Hansson]
 
1313
 
 
1314
* Add Mime::Type convenience methods to check the current mime type. [Rick Olson]
 
1315
 
 
1316
  request.format.html? # => true if Mime::HTML
 
1317
  request.format.jpg?  # => true if Mime::JPG
 
1318
 
 
1319
  # ActionController sample usage:
 
1320
  # the session will be disabled for non html/ajax requests
 
1321
  session :off, :if => Proc.new { |req| !(req.format.html? || req.format.js?) }
 
1322
 
 
1323
* Performance: patch cgi/session to require digest/md5 once rather than per #create_new_id.  [Stefan Kaes]
 
1324
 
 
1325
* Add a :url_based_filename => true option to ActionController::Streaming::send_file, which allows URL-based filenames.  [Thomas Fuchs]
 
1326
 
 
1327
* Fix that FormTagHelper#submit_tag using :disable_with should trigger the onsubmit handler of its form if available [David Heinemeier Hansson]
 
1328
 
 
1329
* Fix #render_file so that TemplateError is called with the correct params and you don't get the WSOD.  [Rick Olson]
 
1330
 
 
1331
* Fix issue with deprecation messing up #template_root= usage.  Add #prepend_view_path and #append_view_path to allow modification of a copy of the
 
1332
superclass' view_paths.  [Rick Olson]
 
1333
 
 
1334
* Allow Controllers to have multiple view_paths instead of a single template_root.  Closes #2754 [John Long]
 
1335
 
 
1336
* Add much-needed html-scanner tests.  Fixed CDATA parsing bug. [Rick Olson]
 
1337
 
 
1338
* improve error message for Routing for named routes.  Closes #7346 [Rob Sanheim]
 
1339
 
 
1340
* Added enhanced docs to routing assertions.  Closes #7359 [Rob Sanheim]
 
1341
 
 
1342
* fix form_for example in ActionController::Resources documentation.  Closes #7362 [gnarg]
 
1343
 
 
1344
* Make sure that the string returned by TextHelper#truncate is actually a string, not a char proxy -- that should only be used internally while working on a multibyte-safe way of truncating [David Heinemeier Hansson]
 
1345
 
 
1346
* Added FormBuilder#submit as a delegate for FormTagHelper#submit_tag [David Heinemeier Hansson]
 
1347
 
 
1348
* Allow Routes to generate all urls for a set of options by specifying :generate_all => true. Allows caching to properly set or expire all paths for a resource. References #1739. [Nicholas Seckar]
 
1349
 
 
1350
* Change the query parser to map empty GET params to "" rather than nil. Closes #5694. [Nicholas Seckar]
 
1351
 
 
1352
* date_select and datetime_select take a :default option.  #7052 [Nik Wakelin]
 
1353
    date_select "post", "written_on", :default => 3.days.from_now
 
1354
    date_select "credit_card", "bill_due", :default => { :day => 20 }
 
1355
 
 
1356
* select :multiple => true suffixes the attribute name with [] unless already suffixed.  #6977 [nik.kakelin, ben, julik]
 
1357
 
 
1358
* Improve routes documentation.  #7095 [zackchandler]
 
1359
 
 
1360
* mail_to :encode => 'hex' also encodes the mailto: part of the href attribute as well as the linked email when no name is given.  #2061 [Jarkko Laine, pfc.pille@gmx.net]
 
1361
 
 
1362
* Resource member routes require :id, eliminating the ambiguous overlap with collection routes.  #7229 [dkubb]
 
1363
 
 
1364
* Remove deprecated assertions.  [Jeremy Kemper]
 
1365
 
 
1366
* Change session restoration to allow namespaced models to be autoloaded. Closes #6348. [Nicholas Seckar]
 
1367
 
 
1368
* Fix doubly appearing parameters due to string and symbol mixups. Closes #2551. [Anthony Eden]
 
1369
 
 
1370
* Fix overly greedy rescues when loading helpers. Fixes #6268. [Nicholas Seckar]
 
1371
 
 
1372
* Fixed NumberHelper#number_with_delimiter to use "." always for splitting the original number, not the delimiter parameter #7389 [ceefour]
 
1373
 
 
1374
* Autolinking recognizes trailing and embedded . , : ;  #7354 [Jarkko Laine]
 
1375
 
 
1376
* Make TextHelper::auto_link recognize URLs with colons in path correctly, fixes #7268.  [imajes]
 
1377
 
 
1378
* Update to script.aculo.us 1.7.0.  [Thomas Fuchs]
 
1379
 
 
1380
* Modernize cookie testing code, and increase coverage (Heckle++) #7101 [Kevin Clark]
 
1381
 
 
1382
* Improve Test Coverage for ActionController::Routing::Route#matches_controller_and_action? (Heckle++) #7115 [Kevin Clark]
 
1383
 
 
1384
* Heckling ActionController::Resources::Resource revealed that set_prefixes didn't break when :name_prefix was munged. #7081 [Kevin Clark]
 
1385
 
 
1386
* Fix #distance_of_time_in_words to report accurately against the Duration class.  #7114 [eventualbuddha]
 
1387
 
 
1388
* Refactor #form_tag to allow easy extending.  [Rick Olson]
 
1389
 
 
1390
* Update to Prototype 1.5.0. [Sam Stephenson]
 
1391
 
 
1392
* RecordInvalid, RecordNotSaved => 422 Unprocessable Entity, StaleObjectError => 409 Conflict.  #7097 [dkubb]
 
1393
 
 
1394
* Allow fields_for to be nested inside form_for, so that the name and id get properly constructed [Jamis Buck]
 
1395
 
 
1396
* Allow inGroupsOf and eachSlice to be called through rjs. #7046 [Cody Fauser]
 
1397
 
 
1398
* Allow exempt_from_layout :rhtml.  #6742, #7026 [Dan Manges, Squeegy]
 
1399
 
 
1400
* Recognize the .txt extension as Mime::TEXT [Rick Olson]
 
1401
 
 
1402
* Fix parsing of array[] CGI parameters so extra empty values aren't included.  #6252 [Nicholas Seckar, aiwilliams, brentrowland]
 
1403
 
 
1404
* link_to_unless_current works with full URLs as well as paths.  #6891 [Jarkko Laine, Manfred Stienstra, idrifter]
 
1405
 
 
1406
* Lookup the mime type for #auto_discovery_link_tag in the Mime::Type class.  Closes #6941 [Josh Peek]
 
1407
 
 
1408
* Fix bug where nested resources ignore a parent singleton parent's path prefix.  Closes #6940 [Dan Kubb]
 
1409
 
 
1410
* Fix no method error with error_messages_on.  Closes #6935 [nik.wakelin Koz]
 
1411
 
 
1412
* Slight doc tweak to the ActionView::Helpers::PrototypeHelper#replace docs.  Closes #6922 [Steven Bristol]
 
1413
 
 
1414
* Slight doc tweak to #prepend_filter.  Closes #6493 [Jeremy Voorhis]
 
1415
 
 
1416
* Add more extensive documentation to the AssetTagHelper.  Closes #6452 [Bob Silva]
 
1417
 
 
1418
* Clean up multiple calls to #stringify_keys in TagHelper, add better documentation and testing for TagHelper.  Closes #6394 [Bob Silva]
 
1419
 
 
1420
* [DOCS] fix reference to ActionController::Macros::AutoComplete for #text_field_with_auto_complete. Closes #2578 [Jan Prill]
 
1421
 
 
1422
* Make sure html_document is reset between integration test requests. [ctm]
 
1423
 
 
1424
* Set session to an empty hash if :new_session => false and no session cookie or param is present. CGI::Session was raising an unrescued ArgumentError.  [Josh Susser]
 
1425
 
 
1426
* Routing uses URI escaping for path components and CGI escaping for query parameters.  [darix, Jeremy Kemper]
 
1427
 
 
1428
* Fix assert_redirected_to bug where redirecting from a nested to to a top-level controller incorrectly added the current controller's nesting.  Closes #6128.  [Rick Olson]
 
1429
 
 
1430
* Singleton resources: POST /singleton => create, GET /singleton/new => new.  [Jeremy Kemper]
 
1431
 
 
1432
* Use 400 Bad Request status for unrescued ActiveRecord::RecordInvalid exceptions.  [Jeremy Kemper]
 
1433
 
 
1434
* Silence log_error deprecation warnings from inspecting deprecated instance variables.  [Nate Wiger]
 
1435
 
 
1436
* Only cache GET requests with a 200 OK response.  #6514, #6743 [RSL, anamba]
 
1437
 
 
1438
* Add a 'referer' attribute to TestRequest. [Jamis Buck]
 
1439
 
 
1440
* Ensure render :json => ... skips the layout.  Closes #6808 [Josh Peek]
 
1441
 
 
1442
* Fix HTML::Node to output double quotes instead of single quotes.  Closes #6845 [mitreandy]
 
1443
 
 
1444
* Correctly report which filter halted the chain.  #6699 [Martin Emde]
 
1445
 
 
1446
* Fix a bug in Routing where a parameter taken from the path of the current request could not be used as a query parameter for the next. Closes #6752. [Nicholas Seckar]
 
1447
 
 
1448
* Unrescued ActiveRecord::RecordNotFound responds with 404 instead of 500.  [Jeremy Kemper]
 
1449
 
 
1450
* Improved auto_link to match more valid urls correctly [Tobias LĆ¼tke]
 
1451
 
 
1452
* Add singleton resources. [Rick Olson]
 
1453
 
 
1454
  map.resource :account
 
1455
  
 
1456
  GET /account
 
1457
  GET /account;edit
 
1458
  UPDATE /account
 
1459
  DELETE /account
 
1460
 
 
1461
* respond_to recognizes JSON. render :json => @person.to_json automatically sets the content type and takes a :callback option to specify a client-side function to call using the rendered JSON as an argument.  #4185 [Scott Raymond, eventualbuddha]
 
1462
    # application/json response with body 'Element.show({:name: "David"})'
 
1463
    respond_to do |format|
 
1464
      format.json { render :json => { :name => "David" }.to_json, :callback => 'Element.show' }
 
1465
    end
 
1466
 
 
1467
* Makes :discard_year work without breaking multi-attribute parsing in AR.  #1260, #3800 [sean@ardismg.com, jmartin@desertflood.com, stephen@touset.org, Bob Silva]
 
1468
 
 
1469
* Adds html id attribute to date helper elements.  #1050, #1382 [mortonda@dgrmm.net, David North, Bob Silva]
 
1470
 
 
1471
* Add :index and @auto_index capability to model driven date/time selects.  #847, #2655 [moriq, Doug Fales, Bob Silva]
 
1472
 
 
1473
* Add :order to datetime_select, select_datetime, and select_date.  #1427 [Timothee Peignier, Patrick Lenz, Bob Silva]
 
1474
 
 
1475
* Added time_select to work with time values in models. Update scaffolding.  #2489, #2833 [Justin Palmer, Andre Caum, Bob Silva]
 
1476
 
 
1477
* Added :include_seconds to select_datetime, datetime_select and time_select.  #2998 [csn, Bob Silva]
 
1478
 
 
1479
* All date/datetime selects can now accept an array of month names with :use_month_names. Allows for localization.  #363 [tomasj, Bob Silva]
 
1480
 
 
1481
* Adds :time_separator to select_time and :date_separator to select_datetime. Preserves BC.  #3811 [Bob Silva]
 
1482
 
 
1483
* Added map.root as an alias for map.connect '' [David Heinemeier Hansson]
 
1484
 
 
1485
* Added Request#format to return the format used for the request as a mime type. If no format is specified, the first Request#accepts type is used. This means you can stop using respond_to for anything else than responses [David Heinemeier Hansson]. Examples:
 
1486
 
 
1487
    GET /posts/5.xml   | request.format => Mime::XML
 
1488
    GET /posts/5.xhtml | request.format => Mime::HTML
 
1489
    GET /posts/5       | request.format => request.accepts.first (usually Mime::HTML for browsers)
 
1490
 
 
1491
* Added the option for extension aliases to mime type registration [David Heinemeier Hansson]. Example (already in the default routes):
 
1492
 
 
1493
    Mime::Type.register "text/html", :html, %w( application/xhtml+xml ), %w( xhtml )
 
1494
  
 
1495
  ...will respond on both .html and .xhtml.
 
1496
 
 
1497
* @response.redirect_url works with 201 Created responses: just return headers['Location'] rather than checking the response status.  [Jeremy Kemper]
 
1498
 
 
1499
* Added CSV to Mime::SET so that respond_to csv will work [Cody Fauser]
 
1500
 
 
1501
* Fixed that HEAD should return the proper Content-Length header (that is, actually use @body.size, not just 0) [David Heinemeier Hansson]
 
1502
 
 
1503
* Added GET-masquarading for HEAD, so request.method will return :get even for HEADs. This will help anyone relying on case request.method to automatically work with HEAD and map.resources will also allow HEADs to all GET actions. Rails automatically throws away the response content in a reply to HEAD, so you don't even need to worry about that. If you, for whatever reason, still need to distinguish between GET and HEAD in some edge case, you can use Request#head? and even Request.headers["REQUEST_METHOD"] for get the "real" answer. Closes #6694 [David Heinemeier Hansson]
 
1504
 
 
1505
* Update Routing to complain when :controller is not specified by a route. Closes #6669. [Nicholas Seckar]
 
1506
 
 
1507
* Ensure render_to_string cleans up after itself when an exception is raised.  #6658 [Rob Sanheim]
 
1508
 
 
1509
* Extract template_changed_since? from compile_template? so plugins may override its behavior for non-file-based templates.  #6651 [Jeff Barczewski]
 
1510
 
 
1511
* Update to Prototype and script.aculo.us [5579]. [Thomas Fuchs]
 
1512
 
 
1513
* simple_format helper doesn't choke on nil.  #6644 [jerry426]
 
1514
 
 
1515
* Update to Prototype 1.5.0_rc2 [5550] which makes it work in Opera again [Thomas Fuchs]
 
1516
 
 
1517
* Reuse named route helper module between Routing reloads. Use remove_method to delete named route methods after each load. Since the module is never collected, this fixes a significant memory leak. [Nicholas Seckar]
 
1518
 
 
1519
* ActionView::Base.erb_variable accessor names the buffer variable used to render templates. Defaults to _erbout; use _buf for erubis.  [Rick Olson]
 
1520
 
 
1521
* assert_select_rjs :remove.  [Dylan Egan]
 
1522
 
 
1523
* Always clear model associations from session.  #4795 [sd@notso.net, andylien@gmail.com]
 
1524
 
 
1525
* Update to Prototype 1.5.0_rc2. [Sam Stephenson]
 
1526
 
 
1527
* Remove JavaScriptLiteral in favor of ActiveSupport::JSON::Variable. [Sam Stephenson]
 
1528
 
 
1529
* Sync ActionController::StatusCodes::STATUS_CODES with http://www.iana.org/assignments/http-status-codes.  #6586 [dkubb]
 
1530
 
 
1531
* Multipart form values may have a content type without being treated as uploaded files if they do not provide a filename.  #6401 [Andreas Schwarz, Jeremy Kemper]
 
1532
 
 
1533
* assert_response supports symbolic status codes.  #6569 [Kevin Clark]
 
1534
    assert_response :ok
 
1535
    assert_response :not_found
 
1536
    assert_response :forbidden
 
1537
 
 
1538
* Cache parsed query parameters.  #6559 [Stefan Kaes]
 
1539
 
 
1540
* Deprecate JavaScriptHelper#update_element_function, which is superseeded by RJS [Thomas Fuchs]
 
1541
 
 
1542
* pluralize helper interprets nil as zero.  #6474 [Tim Pope]
 
1543
 
 
1544
* Fix invalid test fixture exposed by stricter Ruby 1.8.5 multipart parsing.  #6524 [Bob Silva]
 
1545
 
 
1546
* Set ActionView::Base.default_form_builder once rather than passing the :builder option to every form or overriding the form helper methods.  [Jeremy Kemper]
 
1547
 
 
1548
* Deprecate expire_matched_fragments. Use expire_fragment instead.  #6535 [Bob Silva]
 
1549
 
 
1550
* Update to latest Prototype, which doesn't serialize disabled form elements, adds clone() to arrays, empty/non-string Element.update() and adds a fixes excessive error reporting in WebKit beta versions [Thomas Fuchs]
 
1551
 
 
1552
* Deprecate start_form_tag and end_form_tag.  Use form_tag / '</form>' from now on.  [Rick Olson]
 
1553
 
 
1554
* Added block-usage to PrototypeHelper#form_remote_tag, document block-usage of FormTagHelper#form_tag [Rick Olson]
 
1555
 
 
1556
* Add a 0 margin/padding div around the hidden _method input tag that form_tag outputs.  [Rick Olson]
 
1557
 
 
1558
* Added block-usage to TagHelper#content_tag [David Heinemeier Hansson]. Example:
 
1559
 
 
1560
   <% content_tag :div, :class => "strong" %>
 
1561
     Hello world!
 
1562
   <% end %>
 
1563
  
 
1564
  Will output:
 
1565
    <div class="strong">Hello world!</div>
 
1566
 
 
1567
* Deprecated UrlHelper#link_to_image and UrlHelper#link_to :post => true #6409 [Bob Silva]
 
1568
 
 
1569
* Upgraded NumberHelper with number_to_phone support international formats to comply with ITU E.123 by supporting area codes with less than 3 digits, added precision argument to number_to_human_size (defaults to 1) #6421 [Bob Silva]
 
1570
 
 
1571
* Fixed that setting RAILS_ASSET_ID to "" should not add a trailing slash after assets #6454 [Bob Silva/chrismear]
 
1572
 
 
1573
* Force *_url named routes to show the host in ActionView [Rick Olson]
 
1574
 
 
1575
  <%= url_for ... %> # no host
 
1576
  <%= foo_path %>    # no host
 
1577
  <%= foo_url %>     # host!
 
1578
 
 
1579
* Add support for converting blocks into function arguments to JavaScriptGenerator#call and JavaScriptProxy#call. [Sam Stephenson]
 
1580
 
 
1581
* Add JavaScriptGenerator#literal for wrapping a string in an object whose #to_json is the string itself. [Sam Stephenson]
 
1582
 
 
1583
* Add <%= escape_once html %> to escape html while leaving any currently escaped entities alone.  Fix button_to double-escaping issue. [Rick Olson]
 
1584
 
 
1585
* Fix double-escaped entities, such as &amp;amp;, &amp;#123;, etc. [Rick Olson]
 
1586
 
 
1587
* Fix deprecation warnings when rendering the template error template. [Nicholas Seckar]
 
1588
 
 
1589
* Fix routing to correctly determine when generation fails. Closes #6300. [psross].
 
1590
 
 
1591
* Fix broken assert_generates when extra keys are being checked. [Jamis Buck]
 
1592
 
 
1593
* Replace KCODE checks with String#chars for truncate.  Closes #6385 [Manfred Stienstra]
 
1594
 
 
1595
* Make page caching respect the format of the resource that is being requested even if the current route is the default route so that, e.g. posts.rss is not transformed by url_for to '/' and subsequently cached as '/index.html' when it should be cached as '/posts.rss'.  [Marcel Molina Jr.]
 
1596
 
 
1597
* Use String#chars in TextHelper::excerpt. Closes #6386 [Manfred Stienstra]
 
1598
 
 
1599
* Install named routes into ActionView::Base instead of proxying them to the view via helper_method. Closes #5932. [Nicholas Seckar]
 
1600
 
 
1601
* Update to latest Prototype and script.aculo.us trunk versions [Thomas Fuchs]
 
1602
 
 
1603
* Fix relative URL root matching problems. [Mark Imbriaco]
 
1604
 
 
1605
* Fix filter skipping in controller subclasses.  #5949, #6297, #6299 [Martin Emde]
 
1606
 
 
1607
* render_text may optionally append to the response body. render_javascript appends by default. This allows you to chain multiple render :update calls by setting @performed_render = false between them (awaiting a better public API).  [Jeremy Kemper]
 
1608
 
 
1609
* Rename test assertion to prevent shadowing. Closes #6306. [psross]
 
1610
 
 
1611
* Fixed that NumberHelper#number_to_delimiter should respect precision of higher than two digits #6231 [Philip Hallstrom]
 
1612
 
 
1613
* Fixed that FormHelper#radio_button didn't respect an :id being passed in #6266 [evansj]
 
1614
 
 
1615
* Added an html_options hash parameter to javascript_tag() and update_page_tag() helpers #6311 [tzaharia]. Example:
 
1616
 
 
1617
    update_page_tag :defer => 'true' { |page| ... }
 
1618
 
 
1619
  Gives:
 
1620
 
 
1621
    <script defer="true" type="text/javascript">...</script>
 
1622
    
 
1623
  Which is needed for dealing with the IE6 DOM when it's not yet fully loaded.
 
1624
 
 
1625
* Fixed that rescue template path shouldn't be hardcoded, then it's easier to hook in your own #6295 [Mike Naberezny]
 
1626
 
 
1627
* Fixed escaping of backslashes in JavaScriptHelper#escape_javascript #6302 [sven@c3d2.de]
 
1628
 
 
1629
* Fixed that some 500 rescues would cause 500's themselves because the response had not yet been generated #6329 [cmselmer]
 
1630
 
 
1631
* respond_to :html doesn't assume .rhtml.  #6281 [Hampton Catlin]
 
1632
 
 
1633
* Fixed some deprecation warnings in ActionPack [Rick Olson]
 
1634
 
 
1635
* assert_select_rjs decodes escaped unicode chars since the Javascript generators encode them.  #6240 [japgolly]
 
1636
 
 
1637
* Deprecation: @cookies, @headers, @request, @response will be removed after 1.2. Use the corresponding method instead.  [Jeremy Kemper]
 
1638
 
 
1639
* Make the :status parameter expand to the default message for that status code if it is an integer. Also support symbol statuses. [Jamis Buck]. Examples:
 
1640
 
 
1641
    head :status => 404        # expands to "404 Not Found"
 
1642
    head :status => :not_found # expands to "404 Not Found"
 
1643
    head :status => :created   # expands to "201 Created"
 
1644
 
 
1645
* Add head(options = {}) for responses that have no body. [Jamis Buck]. Examples:
 
1646
 
 
1647
    head :status => 404 # return an empty response with a 404 status
 
1648
    head :location => person_path(@person), :status => 201
 
1649
 
 
1650
* Fix bug that kept any before_filter except the first one from being able to halt the before_filter chain.  [Rick Olson]
 
1651
 
 
1652
* strip_links is case-insensitive.  #6285 [tagoh, Bob Silva]
 
1653
 
 
1654
* Clear the cache of possible controllers whenever Routes are reloaded. [Nicholas Seckar]
 
1655
 
 
1656
* Filters overhaul including meantime filter support using around filters + blocks.  #5949 [Martin Emde, Roman Le Negrate, Stefan Kaes, Jeremy Kemper]
 
1657
 
 
1658
* Update RJS render tests. [sam]
 
1659
 
 
1660
* Update CGI process to allow sessions to contain namespaced models. Closes #4638. [dfelstead@site5.com]
 
1661
 
 
1662
* Fix routing to respect user provided requirements and defaults when assigning default routing options (such as :action => 'index'). Closes #5950. [Nicholas Seckar]
 
1663
 
 
1664
* Rescue Errno::ECONNRESET to handle an unexpectedly closed socket connection. Improves SCGI reliability.  #3368, #6226 [sdsykes, fhanshaw@vesaria.com]
 
1665
 
 
1666
* Added that respond_to blocks will automatically set the content type to be the same as is requested [David Heinemeier Hansson]. Examples:
 
1667
 
 
1668
    respond_to do |format|
 
1669
      format.html { render :text => "I'm being sent as text/html" }
 
1670
      format.rss  { render :text => "I'm being sent as application/rss+xml" }
 
1671
      format.atom { render :text => "I'm being sent as application/xml", :content_type => Mime::XML }
 
1672
    end
 
1673
 
 
1674
* Added utf-8 as the default charset for all renders. You can change this default using ActionController::Base.default_charset=(encoding) [David Heinemeier Hansson]
 
1675
 
 
1676
* Added proper getters and setters for content type and charset [David Heinemeier Hansson]. Example of what we used to do:
 
1677
 
 
1678
    response.headers["Content-Type"] = "application/atom+xml; charset=utf-8"
 
1679
  
 
1680
  ...now:
 
1681
  
 
1682
    response.content_type = Mime::ATOM
 
1683
    response.charset      = "utf-8"
 
1684
 
 
1685
* Updated prototype.js to 1.5.0_rc1 with latest fixes. [Rick Olson]
 
1686
 
 
1687
  - XPATH support
 
1688
  - Make Form.getElements() return elements in the correct order
 
1689
  - fix broken Form.serialize return
 
1690
 
 
1691
* Declare file extensions exempt from layouts.  #6219 [brandon]
 
1692
    Example: ActionController::Base.exempt_from_layout 'rpdf'
 
1693
 
 
1694
* Add chained replace/update support for assert_select_rjs [Rick Olson]
 
1695
 
 
1696
    Given RJS like...
 
1697
 
 
1698
      page['test1'].replace "<div id=\"1\">foo</div>"
 
1699
      page['test2'].replace_html "<div id=\"2\">foo</div>"
 
1700
 
 
1701
    Test it with...
 
1702
 
 
1703
      assert_select_rjs :chained_replace
 
1704
      assert_select_rjs :chained_replace, "test1"
 
1705
 
 
1706
      assert_select_rjs :chained_replace_html
 
1707
      assert_select_rjs :chained_replace_html, "test2"
 
1708
 
 
1709
* Load helpers in alphabetical order for consistency. Resolve cyclic javascript_helper dependency.  #6132, #6178 [choonkeat@gmail.com]
 
1710
 
 
1711
* Skip params with empty names, such as the &=Save query string from <input type="submit"/>.  #2569 [Manfred Stienstra, raphinou@yahoo.com]
 
1712
 
 
1713
* Fix assert_tag so that :content => "foo" does not match substrings, but only exact strings. Use :content => /foo/ to match substrings. #2799 [Eric Hodel]
 
1714
 
 
1715
* Add descriptive messages to the exceptions thrown by cgi_methods. #6091, #6103 [Nicholas Seckar, Bob Silva]
 
1716
 
 
1717
* Update JavaScriptGenerator#show/hide/toggle/remove to new Prototype syntax for multiple ids,  #6068 [petermichaux@gmail.com]
 
1718
 
 
1719
* Update UrlWriter to support :only_path. [Nicholas Seckar, Dave Thomas]
 
1720
 
 
1721
* Fixed JavaScriptHelper#link_to_function and JavaScriptHelper#button_to_function to have the script argument be optional [David Heinemeier Hansson]. So what used to require a nil, like this:
 
1722
 
 
1723
    link_to("Hider", nil, :class => "hider_link") { |p| p[:something].hide }
 
1724
  
 
1725
  ...can be written like this:
 
1726
 
 
1727
    link_to("Hider", :class => "hider_link") { |p| p[:something].hide }
 
1728
 
 
1729
* Update to script.aculo.us 1.6.3 [Thomas Fuchs]
 
1730
 
 
1731
* Update to Prototype 1.5.0_rc1 [sam]
 
1732
 
 
1733
* Added access to nested attributes in RJS #4548 [richcollins@gmail.com]. Examples:
 
1734
 
 
1735
    page['foo']['style']                  # => $('foo').style;
 
1736
    page['foo']['style']['color']         # => $('blank_slate').style.color;
 
1737
    page['foo']['style']['color'] = 'red' # => $('blank_slate').style.color = 'red';
 
1738
    page['foo']['style'].color = 'red'    # => $('blank_slate').style.color = 'red';
 
1739
 
 
1740
* Fixed that AssetTagHelper#image_tag and others using compute_public_path should not modify the incoming source argument (closes #5102) [eule@space.ch]
 
1741
 
 
1742
* Deprecated the auto-appending of .png to AssetTagHelper#image_tag calls that doesn't have an extension [David Heinemeier Hansson] 
 
1743
 
 
1744
* Fixed FormOptionsHelper#select to respect :selected value #5813
 
1745
 
 
1746
* Fixed TextHelper#simple_format to deal with multiple single returns within a single paragraph #5835 [moriq@moriq.com]
 
1747
 
 
1748
* Fixed TextHelper#pluralize to handle 1 as a string #5909 [rails@bencurtis.com]
 
1749
 
 
1750
* Improved resolution of DateHelper#distance_of_time_in_words for better precision #5994 [Bob Silva]
 
1751
 
 
1752
* Changed that uncaught exceptions raised any where in the application will cause RAILS_ROOT/public/500.html to be read and shown instead of just the static "Application error (Rails)" [David Heinemeier Hansson]
 
1753
 
 
1754
* Integration tests: thoroughly test ActionController::Integration::Session.  #6022 [Kevin Clark]
 
1755
    (tests skipped unless you `gem install mocha`)
 
1756
 
 
1757
* Added deprecation language for pagination which will become a plugin by Rails 2.0 [David Heinemeier Hansson]
 
1758
 
 
1759
* Added deprecation language for in_place_editor and auto_complete_field that both pieces will become plugins by Rails 2.0 [David Heinemeier Hansson]
 
1760
 
 
1761
* Deprecated all of ActionController::Dependencies. All dependency loading is now handled from Active Support [David Heinemeier Hansson]
 
1762
 
 
1763
* Added assert_select* for CSS selector-based testing (deprecates assert_tag) #5936 [assaf.arkin@gmail.com]
 
1764
 
 
1765
* radio_button_tag generates unique id attributes.  #3353 [Bob Silva, somekool@gmail.com]
 
1766
 
 
1767
* strip_tags passes through blank args such as nil or "".  #2229, #6702 [duncan@whomwah.com, dharana]
 
1768
 
 
1769
* Cleanup assert_tag :children counting.  #2181 [jamie@bravenet.com]
 
1770
 
 
1771
* button_to accepts :method so you can PUT and DELETE with it.  #6005 [Dan Webb]
 
1772
 
 
1773
* Update sanitize text helper to strip plaintext tags, and <img src="javascript:bang">.  [Rick Olson]
 
1774
 
 
1775
* Update routing documentation.  Closes #6017 [Nathan Witmer]
 
1776
 
 
1777
* Add routing tests to assert that RoutingError is raised when conditions aren't met.  Closes #6016 [Nathan Witmer]
 
1778
 
 
1779
* Deprecation: update docs. #5998 [Jakob Skjerning, Kevin Clark]
 
1780
 
 
1781
* Make auto_link parse a greater subset of valid url formats. [Jamis Buck]
 
1782
 
 
1783
* Integration tests: headers beginning with X aren't excluded from the HTTP_ prefix, so X-Requested-With becomes HTTP_X_REQUESTED_WITH as expected. [Mike Clark]
 
1784
 
 
1785
* Tighten rescue clauses.  #5985 [james@grayproductions.net]
 
1786
 
 
1787
* Fix send_data documentation typo.  #5982 [brad@madriska.com]
 
1788
 
 
1789
* Switch to using FormEncodedPairParser for parsing request parameters. [Nicholas Seckar, David Heinemeier Hansson]
 
1790
 
 
1791
* respond_to .html now always renders #{action_name}.rhtml so that registered custom template handlers do not override it in priority. Custom mime types require a block and throw proper error now. [Tobias LĆ¼tke]
 
1792
 
 
1793
* Deprecation: test deprecated instance vars in partials. [Jeremy Kemper]
 
1794
 
 
1795
* Add UrlWriter to allow writing urls from Mailers and scripts. [Nicholas Seckar]
 
1796
 
 
1797
* Clean up and run the Active Record integration tests by default.  #5854 [Kevin Clark, Jeremy Kemper]
 
1798
 
 
1799
* Correct example in cookies docs.  #5832 [jessemerriman@warpmail.net]
 
1800
 
 
1801
* Updated to script.aculo.us 1.6.2 [Thomas Fuchs]
 
1802
 
 
1803
* Relax Routing's anchor pattern warning; it was preventing use of [^/] inside restrictions. [Nicholas Seckar]
 
1804
 
 
1805
* Add controller_paths variable to Routing. [Nicholas Seckar]
 
1806
 
 
1807
* Fix assert_redirected_to issue with named routes for module controllers.  [Rick Olson]
 
1808
 
 
1809
* Tweak RoutingError message to show option diffs, not just missing named route significant keys. [Rick Olson]
 
1810
 
 
1811
* Invoke method_missing directly on hidden actions. Closes #3030. [Nicholas Seckar]
 
1812
 
 
1813
* Require Tempfile explicitly for TestUploadedFile due to changes in class auto loading.  [Rick Olson]
 
1814
 
 
1815
* Add RoutingError exception when RouteSet fails to generate a path from a Named Route. [Rick Olson]
 
1816
 
 
1817
* Replace Reloadable with Reloadable::Deprecated. [Nicholas Seckar]
 
1818
 
 
1819
* Deprecation: check whether instance variables have been monkeyed with before assigning them to deprecation proxies. Raises a RuntimeError if so. [Jeremy Kemper]
 
1820
 
 
1821
* Add support for the param_name parameter to the auto_complete_field helper. #5026 [david.a.williams@gmail.com]
 
1822
 
 
1823
* Deprecation! @params, @session, @flash will be removed after 1.2. Use the corresponding instance methods instead. You'll get printed warnings during tests and logged warnings in dev mode when you access either instance variable directly. [Jeremy Kemper]
 
1824
 
 
1825
* Make Routing noisy when an anchor regexp is assigned to a segment. #5674 [FranƧois Beausoleil]
 
1826
 
 
1827
* Added months and years to the resolution of DateHelper#distance_of_time_in_words, such that "60 days ago" becomes "2 months ago" #5611 [pjhyett@gmail.com]
 
1828
 
 
1829
* Short documentation to mention use of Mime::Type.register. #5710 [choonkeat@gmail.com]
 
1830
 
 
1831
* Make controller_path available as an instance method.  #5724 [jmckible@gmail.com]
 
1832
 
 
1833
* Update query parser to support adjacent hashes. [Nicholas Seckar]
 
1834
 
 
1835
* Make action caching aware of different formats for the same action so that, e.g.  foo.xml is cached separately from foo.html. Implicitly set content type when reading in cached content with mime revealing extensions so the entire onous isn't on the webserver. [Marcel Molina Jr.]
 
1836
 
 
1837
* Restrict Request Method hacking with ?_method to POST requests.  [Rick Olson]
 
1838
 
 
1839
* Fix bug when passing multiple options to SimplyRestful, like :new => { :preview => :get, :draft => :get }.  [Rick Olson, Josh Susser, Lars Pind]
 
1840
 
 
1841
* Dup the options passed to map.resources so that multiple resources get the same options.  [Rick Olson]
 
1842
 
 
1843
* Fixed the new_#{resource}_url route and added named route tests for Simply Restful.  [Rick Olson]
 
1844
 
 
1845
* Added map.resources from the Simply Restful plugin [David Heinemeier Hansson]. Examples (the API has changed to use plurals!):
 
1846
 
 
1847
    map.resources :messages
 
1848
    map.resources :messages, :comments
 
1849
    map.resources :messages, :new => { :preview => :post }
 
1850
 
 
1851
* Fixed that integration simulation of XHRs should set Accept header as well [Edward Frederick]
 
1852
 
 
1853
* TestRequest#reset_session should restore a TestSession, not a hash [Michael Koziarski]
 
1854
 
 
1855
* Don't search a load-path of '.' for controller files [Jamis Buck]
 
1856
 
 
1857
* Update integration.rb to require test_process explicitly instead of via Dependencies. [Nicholas Seckar]
 
1858
 
 
1859
* Fixed that you can still access the flash after the flash has been reset in reset_session.  Closes #5584 [lmarlow]
 
1860
 
 
1861
* Allow form_for and fields_for to work with indexed form inputs.  [Jeremy Kemper, Matt Lyon]
 
1862
 
 
1863
  <% form_for 'post[]', @post do |f| -%>
 
1864
  <% end -%>
 
1865
 
 
1866
* Remove leak in development mode by replacing define_method with module_eval. [Nicholas Seckar]
 
1867
 
 
1868
* Provide support for decimal columns to form helpers. Closes #5672. [Dave Thomas]
 
1869
 
 
1870
* Update documentation for erb trim syntax. #5651 [matt@mattmargolis.net]
 
1871
 
 
1872
* Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com, sebastien@goetzilla.info]
 
1873
 
 
1874
* Reset @html_document between requests so assert_tag works. #4810 [Jarkko Laine, easleydp@gmail.com]
 
1875
 
 
1876
* Update render :partial documentation. #5646 [matt@mattmargolis.net]
 
1877
 
 
1878
* Integration tests behave well with render_component. #4632 [edward.frederick@revolution.com, dev.rubyonrails@maxdunn.com]
 
1879
 
 
1880
* Added exception handling of missing layouts #5373 [chris@ozmm.org]
 
1881
 
 
1882
* Fixed that real files and symlinks should be treated the same when compiling templates #5438 [zachary@panandscan.com]
 
1883
 
 
1884
* Fixed that the flash should be reset when reset_session is called #5584 [Shugo Maeda]
 
1885
 
 
1886
* Added special case for "1 Byte" in NumberHelper#number_to_human_size #5593 [murpyh@rubychan.de]
 
1887
 
 
1888
* Fixed proper form-encoded parameter parsing for requests with "Content-Type: application/x-www-form-urlencoded; charset=utf-8" (note the presence of a charset directive) [David Heinemeier Hansson]
 
1889
 
 
1890
* Add route_name_path method to generate only the path for a named routes. For example, map.person will add person_path. [Nicholas Seckar]
 
1891
 
 
1892
* Avoid naming collision among compiled view methods. [Jeremy Kemper]
 
1893
 
 
1894
* Fix CGI extensions when they expect string but get nil in Windows. Closes #5276 [Mislav Marohnić]
 
1895
 
 
1896
* Determine the correct template_root for deeply nested components.  #2841 [s.brink@web.de]
 
1897
 
 
1898
* Fix that routes with *path segments in the recall can generate URLs. [Rick Olson]
 
1899
 
 
1900
* Fix strip_links so that it doesn't hang on multiline <acronym> tags [Jamis Buck]
 
1901
 
 
1902
* Remove problematic control chars in rescue template. #5316 [Stefan Kaes]
 
1903
 
 
1904
* Make sure passed routing options are not mutated by routing code. #5314 [Blair Zajac]
 
1905
 
 
1906
* Make sure changing the controller from foo/bar to bing/bang does not change relative to foo. [Jamis Buck]
 
1907
 
 
1908
* Escape the path before routing recognition. #3671
 
1909
 
 
1910
* Make sure :id and friends are unescaped properly. #5275 [me@julik.nl]
 
1911
 
 
1912
* Fix documentation for with_routing to reflect new reality. #5281 [rramdas@gmail.com]
 
1913
 
 
1914
* Rewind readable CGI params so others may reread them (such as CGI::Session when passing the session id in a multipart form).  #210 [mklame@atxeu.com, matthew@walker.wattle.id.au]
 
1915
 
 
1916
* Added Mime::TEXT (text/plain) and Mime::ICS (text/calendar) as new default types [David Heinemeier Hansson]
 
1917
 
 
1918
* Added Mime::Type.register(string, symbol, synonyms = []) for adding new custom mime types [David Heinemeier Hansson]. Example: Mime::Type.register("image/gif", :gif)
 
1919
 
 
1920
* Added support for Mime objects in render :content_type option [David Heinemeier Hansson]. Example: render :text => some_atom, :content_type => Mime::ATOM
 
1921
 
 
1922
* Add :status option to send_data and send_file. Defaults to '200 OK'.  #5243 [Manfred Stienstra <m.stienstra@fngtps.com>]
 
1923
 
 
1924
* Routing rewrite. Simpler, faster, easier to understand. The published API for config/routes.rb is unchanged, but nearly everything else is different, so expect breakage in plugins and libs that try to fiddle with routes. [Nicholas Seckar, Jamis Buck]
 
1925
 
 
1926
  map.connect '/foo/:id', :controller => '...', :action => '...'
 
1927
  map.connect '/foo/:id.:format', :controller => '...', :action => '...'
 
1928
  map.connect '/foo/:id', ..., :conditions => { :method => :get }
 
1929
 
 
1930
* Cope with missing content type and length headers. Parse parameters from multipart and urlencoded request bodies only. [Jeremy Kemper]
 
1931
 
 
1932
* Accept multipart PUT parameters. #5235 [guy.naor@famundo.com]
 
1933
 
 
1934
* Added interrogation of params[:format] to determine Accept type. If :format is specified and matches a declared extension, like "rss" or "xml", that mime type will be put in front of the accept handler. This means you can link to the same action from different extensions and use that fact to determine output [David Heinemeier Hansson]. Example:
 
1935
 
 
1936
  class WeblogController < ActionController::Base
 
1937
    def index
 
1938
      @posts = Post.find :all
 
1939
      
 
1940
      respond_to do |format|
 
1941
        format.html
 
1942
        format.xml { render :xml => @posts.to_xml }
 
1943
        format.rss { render :action => "feed.rxml" }
 
1944
      end
 
1945
    end
 
1946
  end
 
1947
  
 
1948
  # returns HTML when requested by a browser, since the browser
 
1949
  # has the HTML mimetype at the top of its priority list
 
1950
  Accept: text/html
 
1951
  GET /weblog 
 
1952
  
 
1953
  # returns the XML 
 
1954
  Accept: application/xml
 
1955
  GET /weblog 
 
1956
 
 
1957
  # returns the HTML 
 
1958
  Accept: application/xml
 
1959
  GET /weblog.html
 
1960
 
 
1961
  # returns the XML
 
1962
  Accept: text/html
 
1963
  GET /weblog.xml
 
1964
  
 
1965
  All this relies on the fact that you have a route that includes .:format.
 
1966
  
 
1967
* Expanded :method option in FormTagHelper#form_tag, FormHelper#form_for, PrototypeHelper#remote_form_for, PrototypeHelper#remote_form_tag, and PrototypeHelper#link_to_remote to allow for verbs other than GET and POST by automatically creating a hidden form field named _method, which will simulate the other verbs over post [David Heinemeier Hansson]
 
1968
 
 
1969
* Added :method option to UrlHelper#link_to, which allows for using other verbs than GET for the link. This replaces the :post option, which is now deprecated. Example: link_to "Destroy", person_url(:id => person), :method => :delete [David Heinemeier Hansson]
 
1970
 
 
1971
* follow_redirect doesn't complain about being redirected to the same controller. #5153 [dymo@mk.ukrtelecom.ua]
 
1972
 
 
1973
* Add layout attribute to response object with the name of the layout that was rendered, or nil if none rendered. [Kevin Clark]
 
1974
 
 
1975
* Fix NoMethodError when parsing params like &&. [Adam Greenfield]
 
1976
 
 
1977
* Fix flip flopped logic in docs for url_for's :only_path option. Closes #4998. [esad@esse.at]
 
1978
 
 
1979
* form.text_area handles the :size option just like the original text_area (:size => '60x10' becomes cols="60" rows="10").  [Jeremy Kemper]
 
1980
 
 
1981
* Excise ingrown code from FormOptionsHelper#options_for_select. #5008 [anonymous]
 
1982
 
 
1983
* Small fix in routing to allow dynamic routes (broken after [4242]) [Rick Olson]
 
1984
 
 
1985
    map.connect '*path', :controller => 'files', :action => 'show'
 
1986
 
 
1987
* Replace alias method chaining with Module#alias_method_chain. [Marcel Molina Jr.]
 
1988
 
 
1989
* Replace Ruby's deprecated append_features in favor of included. [Marcel Molina Jr.]
 
1990
 
 
1991
* Use #flush between switching from #write to #syswrite. Closes #4907. [Blair Zajac <blair@orcaware.com>]
 
1992
 
 
1993
* Documentation fix: integration test scripts don't require integration_test. Closes #4914. [Frederick Ros <sl33p3r@free.fr>]
 
1994
 
 
1995
* ActionController::Base Summary documentation rewrite. Closes #4900. [Kevin Clark]
 
1996
 
 
1997
* Fix text_helper.rb documentation rendering. Closes #4725. [Frederick Ros]
 
1998
 
 
1999
* Fixes bad rendering of JavaScriptMacrosHelper rdoc (closes #4910) [Frederick Ros]
 
2000
 
 
2001
* Allow error_messages_for to report errors for multiple objects, as well as support for customizing the name of the object in the error summary header. Closes #4186. [andrew@redlinesoftware.com, Marcel Molina Jr.]
 
2002
  
 
2003
  error_messages_for :account, :user, :subscription, :object_name => :account
 
2004
 
 
2005
* Enhance documentation for setting headers in integration tests. Skip auto HTTP prepending when its already there. Closes #4079. [Rick Olson]
 
2006
 
 
2007
* Documentation for AbstractRequest. Closes #4895. [Kevin Clark] 
 
2008
 
 
2009
* Refactor various InstanceTag instance method to class methods. Closes #4800. [Stefan Kaes]
 
2010
 
 
2011
* Remove all remaining references to @params in the documentation. [Marcel Molina Jr.]
 
2012
 
 
2013
* Add documentation for redirect_to :back's RedirectBackError exception.  [Marcel Molina Jr.]
 
2014
 
 
2015
* Update layout and content_for documentation to use yield rather than magic @content_for instance variables. [Marcel Molina Jr.]
 
2016
 
 
2017
* Fix assert_redirected_to tests according to real-world usage.  Also, don't fail if you add an extra :controller option: [Rick Olson]
 
2018
 
 
2019
    redirect_to :action => 'new'
 
2020
    assert_redirected_to :controller => 'monkeys', :action => 'new'
 
2021
 
 
2022
* Cache CgiRequest#request_parameters so that multiple calls don't re-parse multipart data. [Rick Olson]
 
2023
 
 
2024
* Diff compared routing options.  Allow #assert_recognizes to take a second arg as a hash to specify optional request method [Rick Olson]
 
2025
 
 
2026
    assert_recognizes({:controller => 'users', :action => 'index'}, 'users')
 
2027
    assert_recognizes({:controller => 'users', :action => 'create'}, {:path => 'users', :method => :post})
 
2028
 
 
2029
* Diff compared options with #assert_redirected_to [Rick Olson]
 
2030
 
 
2031
* Add support in routes for semicolon delimited "subpaths", like /books/:id;:action [Jamis Buck]
 
2032
 
 
2033
* Change link_to_function and button_to_function to (optionally) take an update_page block instead of a JavaScript string. Closes #4804. [zraii@comcast.net, Sam Stephenson]
 
2034
 
 
2035
* Fixed that remote_form_for can leave out the object parameter and default to the instance variable of the object_name, just like form_for [David Heinemeier Hansson]
 
2036
 
 
2037
* Modify routing so that you can say :require => { :method => :post } for a route, and the route will never be selected unless the request method is POST. Only works for route recognition, not for route generation. [Jamis Buck]
 
2038
 
 
2039
* Added :add_headers option to verify which merges a hash of name/value pairs into the response's headers hash if the prerequisites cannot be satisfied. [Sam Stephenson]
 
2040
  ex. verify :only => :speak, :method => :post, 
 
2041
             :render => { :status => 405, :text => "Must be post" }, 
 
2042
             :add_headers => { "Allow" => "POST" }
 
2043
 
 
2044
* Added ActionController.filter_parameter_logging that makes it easy to remove passwords, credit card numbers, and other sensitive information from being logged when a request is handled #1897 [jeremye@bsa.ca.gov]
 
2045
 
 
2046
 
 
2047
*1.13.3* (March 12th, 2007)
 
2048
 
 
2049
* Apply [5709] to stable.
 
2050
 
 
2051
* session_enabled? works with session :off.  #6680 [Jonathan del Strother]
 
2052
 
 
2053
* Performance: patch cgi/session to require digest/md5 once rather than per #create_new_id.  [Stefan Kaes]
 
2054
 
 
2055
 
 
2056
*1.13.2* (February 5th, 2007)
 
2057
 
 
2058
* Add much-needed html-scanner tests.  Fixed CDATA parsing bug. [Rick Olson]
 
2059
 
 
2060
* improve error message for Routing for named routes. [Rob Sanheim]
 
2061
 
 
2062
* Added enhanced docs to routing assertions. [Rob Sanheim]
 
2063
 
 
2064
* fix form_for example in ActionController::Resources documentation. [gnarg]
 
2065
 
 
2066
* Add singleton resources from trunk [Rick Olson]
 
2067
 
 
2068
* select :multiple => true suffixes the attribute name with [] unless already suffixed.  #6977 [nik.kakelin, ben, julik]
 
2069
 
 
2070
* Improve routes documentation.  #7095 [zackchandler]
 
2071
 
 
2072
* Resource member routes require :id, eliminating the ambiguous overlap with collection routes.  #7229 [dkubb]
 
2073
 
 
2074
* Fixed NumberHelper#number_with_delimiter to use "." always for splitting the original number, not the delimiter parameter #7389 [ceefour]
 
2075
 
 
2076
* Autolinking recognizes trailing and embedded . , : ;  #7354 [Jarkko Laine]
 
2077
 
 
2078
* Make TextHelper::auto_link recognize URLs with colons in path correctly, fixes #7268.  [imajes]
 
2079
 
 
2080
* Improved auto_link to match more valid urls correctly [Tobias LĆ¼tke]
 
2081
 
 
2082
 
 
2083
*1.13.1* (January 18th, 2007)
 
2084
 
 
2085
* Fixed content-type bug in Prototype [sam]
 
2086
 
 
2087
 
 
2088
*1.13.0* (January 16th, 2007)
 
2089
 
 
2090
* Modernize cookie testing code, and increase coverage (Heckle++) #7101 [Kevin Clark]
 
2091
 
 
2092
* Heckling ActionController::Resources::Resource revealed that set_prefixes didn't break when :name_prefix was munged. #7081 [Kevin Clark]
 
2093
 
 
2094
* Update to Prototype 1.5.0. [Sam Stephenson]
 
2095
 
 
2096
* Allow exempt_from_layout :rhtml.  #6742, #7026 [Dan Manges, Squeegy]
 
2097
 
 
2098
* Fix parsing of array[] CGI parameters so extra empty values aren't included.  #6252 [Nicholas Seckar, aiwilliams, brentrowland]
 
2099
 
 
2100
* link_to_unless_current works with full URLs as well as paths.  #6891 [Jarkko Laine, Manfred Stienstra, idrifter]
 
2101
 
 
2102
* Fix HTML::Node to output double quotes instead of single quotes.  Closes #6845 [mitreandy]
 
2103
 
 
2104
* Fix no method error with error_messages_on.  Closes #6935 [nik.wakelin Koz]
 
2105
 
 
2106
* Slight doc tweak to the ActionView::Helpers::PrototypeHelper#replace docs.  Closes #6922 [Steven Bristol]
 
2107
 
 
2108
* Slight doc tweak to #prepend_filter.  Closes #6493 [Jeremy Voorhis]
 
2109
 
 
2110
* Add more extensive documentation to the AssetTagHelper.  Closes #6452 [Bob Silva]
 
2111
 
 
2112
* Clean up multiple calls to #stringify_keys in TagHelper, add better documentation and testing for TagHelper.  Closes #6394 [Bob Silva]
 
2113
 
 
2114
* [DOCS] fix reference to ActionController::Macros::AutoComplete for #text_field_with_auto_complete. Closes #2578 [Jan Prill]
 
2115
 
 
2116
* Make sure html_document is reset between integration test requests. [ctm]
 
2117
 
 
2118
* Set session to an empty hash if :new_session => false and no session cookie or param is present. CGI::Session was raising an unrescued ArgumentError.  [Josh Susser]
 
2119
 
 
2120
* Fix assert_redirected_to bug where redirecting from a nested to to a top-level controller incorrectly added the current controller's nesting.  Closes #6128.  [Rick Olson]
 
2121
 
 
2122
* Ensure render :json => ... skips the layout.  #6808 [Josh Peek]
 
2123
 
 
2124
* Silence log_error deprecation warnings from inspecting deprecated instance variables.  [Nate Wiger]
 
2125
 
 
2126
* Only cache GET requests with a 200 OK response.  #6514, #6743 [RSL, anamba]
 
2127
 
 
2128
* Correctly report which filter halted the chain.  #6699 [Martin Emde]
 
2129
 
 
2130
* respond_to recognizes JSON. render :json => @person.to_json automatically sets the content type and takes a :callback option to specify a client-side function to call using the rendered JSON as an argument.  #4185 [Scott Raymond, eventualbuddha]
 
2131
    # application/json response with body 'Element.show({:name: "David"})'
 
2132
    respond_to do |format|
 
2133
      format.json { render :json => { :name => "David" }.to_json, :callback => 'Element.show' }
 
2134
    end
 
2135
 
 
2136
* Makes :discard_year work without breaking multi-attribute parsing in AR.  #1260, #3800 [sean@ardismg.com, jmartin@desertflood.com, stephen@touset.org, Bob Silva]
 
2137
 
 
2138
* Adds html id attribute to date helper elements.  #1050, #1382 [mortonda@dgrmm.net, David North, Bob Silva]
 
2139
 
 
2140
* Add :index and @auto_index capability to model driven date/time selects.  #847, #2655 [moriq, Doug Fales, Bob Silva]
 
2141
 
 
2142
* Add :order to datetime_select, select_datetime, and select_date.  #1427 [Timothee Peignier, Patrick Lenz, Bob Silva]
 
2143
 
 
2144
* Added time_select to work with time values in models. Update scaffolding.  #2489, #2833 [Justin Palmer, Andre Caum, Bob Silva]
 
2145
 
 
2146
* Added :include_seconds to select_datetime, datetime_select and time_select.  #2998 [csn, Bob Silva]
 
2147
 
 
2148
* All date/datetime selects can now accept an array of month names with :use_month_names. Allows for localization.  #363 [tomasj, Bob Silva]
 
2149
 
 
2150
* Adds :time_separator to select_time and :date_separator to select_datetime. Preserves BC.  #3811 [Bob Silva]
 
2151
 
 
2152
* @response.redirect_url works with 201 Created responses: just return headers['Location'] rather than checking the response status.  [Jeremy Kemper]
 
2153
 
 
2154
* Fixed that HEAD should return the proper Content-Length header (that is, actually use @body.size, not just 0) [David Heinemeier Hansson]
 
2155
 
 
2156
* Added GET-masquarading for HEAD, so request.method will return :get even for HEADs. This will help anyone relying on case request.method to automatically work with HEAD and map.resources will also allow HEADs to all GET actions. Rails automatically throws away the response content in a reply to HEAD, so you don't even need to worry about that. If you, for whatever reason, still need to distinguish between GET and HEAD in some edge case, you can use Request#head? and even Request.headers["REQUEST_METHOD"] for get the "real" answer. Closes #6694 [David Heinemeier Hansson]
 
2157
 
 
2158
 
 
2159
*1.13.0 RC1* (r5619, November 22nd, 2006)
 
2160
 
 
2161
* Update Routing to complain when :controller is not specified by a route. Closes #6669. [Nicholas Seckar]
 
2162
 
 
2163
* Ensure render_to_string cleans up after itself when an exception is raised.  #6658 [rsanheim]
 
2164
 
 
2165
* Update to Prototype and script.aculo.us [5579]. [Sam Stephenson, Thomas Fuchs]
 
2166
 
 
2167
* simple_format helper doesn't choke on nil.  #6644 [jerry426]
 
2168
 
 
2169
* Reuse named route helper module between Routing reloads. Use remove_method to delete named route methods after each load. Since the module is never collected, this fixes a significant memory leak. [Nicholas Seckar]
 
2170
 
 
2171
* Deprecate standalone components.  [Jeremy Kemper]
 
2172
 
 
2173
* Always clear model associations from session.  #4795 [sd@notso.net, andylien@gmail.com]
 
2174
 
 
2175
* Remove JavaScriptLiteral in favor of ActiveSupport::JSON::Variable. [Sam Stephenson]
 
2176
 
 
2177
* Sync ActionController::StatusCodes::STATUS_CODES with http://www.iana.org/assignments/http-status-codes.  #6586 [dkubb]
 
2178
 
 
2179
* Multipart form values may have a content type without being treated as uploaded files if they do not provide a filename.  #6401 [Andreas Schwarz, Jeremy Kemper]
 
2180
 
 
2181
* assert_response supports symbolic status codes.  #6569 [Kevin Clark]
 
2182
    assert_response :ok
 
2183
    assert_response :not_found
 
2184
    assert_response :forbidden
 
2185
 
 
2186
* Cache parsed query parameters.  #6559 [Stefan Kaes]
 
2187
 
 
2188
* Deprecate JavaScriptHelper#update_element_function, which is superseeded by RJS [Thomas Fuchs]
 
2189
 
 
2190
* Fix invalid test fixture exposed by stricter Ruby 1.8.5 multipart parsing.  #6524 [Bob Silva]
 
2191
 
 
2192
* Set ActionView::Base.default_form_builder once rather than passing the :builder option to every form or overriding the form helper methods.  [Jeremy Kemper]
 
2193
 
 
2194
* Deprecate expire_matched_fragments. Use expire_fragment instead.  #6535 [Bob Silva]
 
2195
 
 
2196
* Deprecate start_form_tag and end_form_tag.  Use form_tag / '</form>' from now on.  [Rick Olson]
 
2197
 
 
2198
* Added block-usage to PrototypeHelper#form_remote_tag, document block-usage of FormTagHelper#form_tag [Rick Olson]
 
2199
 
 
2200
* Add a 0 margin/padding div around the hidden _method input tag that form_tag outputs.  [Rick Olson]
 
2201
 
 
2202
* Added block-usage to TagHelper#content_tag [David Heinemeier Hansson]. Example:
 
2203
 
 
2204
   <% content_tag :div, :class => "strong" %>
 
2205
     Hello world!
 
2206
   <% end %>
 
2207
  
 
2208
  Will output:
 
2209
    <div class="strong">Hello world!</div>
 
2210
 
 
2211
* Deprecated UrlHelper#link_to_image and UrlHelper#link_to :post => true #6409 [Bob Silva]
 
2212
 
 
2213
* Upgraded NumberHelper with number_to_phone support international formats to comply with ITU E.123 by supporting area codes with less than 3 digits, added precision argument to number_to_human_size (defaults to 1) #6421 [Bob Silva]
 
2214
 
 
2215
* Fixed that setting RAILS_ASSET_ID to "" should not add a trailing slash after assets #6454 [Bob Silva/chrismear]
 
2216
 
 
2217
* Force *_url named routes to show the host in ActionView [Rick Olson]
 
2218
 
 
2219
  <%= url_for ... %> # no host
 
2220
  <%= foo_path %>    # no host
 
2221
  <%= foo_url %>     # host!
 
2222
 
 
2223
* Add support for converting blocks into function arguments to JavaScriptGenerator#call and JavaScriptProxy#call. [Sam Stephenson]
 
2224
 
 
2225
* Add JavaScriptGenerator#literal for wrapping a string in an object whose #to_json is the string itself. [Sam Stephenson]
 
2226
 
 
2227
* Add <%= escape_once html %> to escape html while leaving any currently escaped entities alone.  Fix button_to double-escaping issue. [Rick Olson]
 
2228
 
 
2229
* Fix double-escaped entities, such as &amp;amp;, &amp;#123;, etc. [Rick Olson]
 
2230
 
 
2231
* Fix routing to correctly determine when generation fails. Closes #6300. [psross].
 
2232
 
 
2233
* Fix broken assert_generates when extra keys are being checked. [Jamis Buck]
 
2234
 
 
2235
* Replace KCODE checks with String#chars for truncate.  Closes #6385 [Manfred Stienstra]
 
2236
 
 
2237
* Make page caching respect the format of the resource that is being requested even if the current route is the default route so that, e.g. posts.rss is not transformed by url_for to '/' and subsequently cached as '/index.html' when it should be cached as '/posts.rss'.  [Marcel Molina Jr.]
 
2238
 
 
2239
* Use String#chars in TextHelper::excerpt. Closes #6386 [Manfred Stienstra]
 
2240
 
 
2241
* Fix relative URL root matching problems. [Mark Imbriaco]
 
2242
 
 
2243
* Fix filter skipping in controller subclasses.  #5949, #6297, #6299 [Martin Emde]
 
2244
 
 
2245
* render_text may optionally append to the response body. render_javascript appends by default. This allows you to chain multiple render :update calls by setting @performed_render = false between them (awaiting a better public API).  [Jeremy Kemper]
 
2246
 
 
2247
* Rename test assertion to prevent shadowing. Closes #6306. [psross]
 
2248
 
 
2249
* Fixed that NumberHelper#number_to_delimiter should respect precision of higher than two digits #6231 [Philip Hallstrom]
 
2250
 
 
2251
* Fixed that FormHelper#radio_button didn't respect an :id being passed in #6266 [evansj]
 
2252
 
 
2253
* Added an html_options hash parameter to javascript_tag() and update_page_tag() helpers #6311 [tzaharia]. Example:
 
2254
 
 
2255
    update_page_tag :defer => 'true' { |page| ... }
 
2256
 
 
2257
  Gives:
 
2258
 
 
2259
    <script defer="true" type="text/javascript">...</script>
 
2260
    
 
2261
  Which is needed for dealing with the IE6 DOM when it's not yet fully loaded.
 
2262
 
 
2263
* Fixed that rescue template path shouldn't be hardcoded, then it's easier to hook in your own #6295 [Mike Naberezny]
 
2264
 
 
2265
* Fixed escaping of backslashes in JavaScriptHelper#escape_javascript #6302 [sven@c3d2.de]
 
2266
 
 
2267
* Fixed that some 500 rescues would cause 500's themselves because the response had not yet been generated #6329 [cmselmer]
 
2268
 
 
2269
* respond_to :html doesn't assume .rhtml.  #6281 [Hampton Catlin]
 
2270
 
 
2271
* Fixed some deprecation warnings in ActionPack [Rick Olson]
 
2272
 
 
2273
* assert_select_rjs decodes escaped unicode chars since the Javascript generators encode them.  #6240 [japgolly]
 
2274
 
 
2275
* Deprecation: @cookies, @headers, @request, @response will be removed after 1.2. Use the corresponding method instead.  [Jeremy Kemper]
 
2276
 
 
2277
* Make the :status parameter expand to the default message for that status code if it is an integer. Also support symbol statuses. [Jamis Buck]. Examples:
 
2278
 
 
2279
    head :status => 404        # expands to "404 Not Found"
 
2280
    head :status => :not_found # expands to "404 Not Found"
 
2281
    head :status => :created   # expands to "201 Created"
 
2282
 
 
2283
* Add head(options = {}) for responses that have no body. [Jamis Buck]. Examples:
 
2284
 
 
2285
    head :status => 404 # return an empty response with a 404 status
 
2286
    head :location => person_path(@person), :status => 201
 
2287
 
 
2288
* Fix bug that kept any before_filter except the first one from being able to halt the before_filter chain.  [Rick Olson]
 
2289
 
 
2290
* strip_links is case-insensitive.  #6285 [tagoh, Bob Silva]
 
2291
 
 
2292
* Clear the cache of possible controllers whenever Routes are reloaded. [Nicholas Seckar]
 
2293
 
 
2294
* Filters overhaul including meantime filter support using around filters + blocks.  #5949 [Martin Emde, Roman Le Negrate, Stefan Kaes, Jeremy Kemper]
 
2295
 
 
2296
* Update CGI process to allow sessions to contain namespaced models. Closes #4638. [dfelstead@site5.com]
 
2297
 
 
2298
* Fix routing to respect user provided requirements and defaults when assigning default routing options (such as :action => 'index'). Closes #5950. [Nicholas Seckar]
 
2299
 
 
2300
* Rescue Errno::ECONNRESET to handle an unexpectedly closed socket connection. Improves SCGI reliability.  #3368, #6226 [sdsykes, fhanshaw@vesaria.com]
 
2301
 
 
2302
* Added that respond_to blocks will automatically set the content type to be the same as is requested [David Heinemeier Hansson]. Examples:
 
2303
 
 
2304
    respond_to do |format|
 
2305
      format.html { render :text => "I'm being sent as text/html" }
 
2306
      format.rss  { render :text => "I'm being sent as application/rss+xml" }
 
2307
      format.atom { render :text => "I'm being sent as application/xml", :content_type => Mime::XML }
 
2308
    end
 
2309
 
 
2310
* Added utf-8 as the default charset for all renders. You can change this default using ActionController::Base.default_charset=(encoding) [David Heinemeier Hansson]
 
2311
 
 
2312
* Added proper getters and setters for content type and charset [David Heinemeier Hansson]. Example of what we used to do:
 
2313
 
 
2314
    response.headers["Content-Type"] = "application/atom+xml; charset=utf-8"
 
2315
  
 
2316
  ...now:
 
2317
  
 
2318
    response.content_type = Mime::ATOM
 
2319
    response.charset      = "utf-8"
 
2320
 
 
2321
* Declare file extensions exempt from layouts.  #6219 [brandon]
 
2322
    Example: ActionController::Base.exempt_from_layout 'rpdf'
 
2323
 
 
2324
* Add chained replace/update support for assert_select_rjs [Rick Olson]
 
2325
 
 
2326
    Given RJS like...
 
2327
 
 
2328
      page['test1'].replace "<div id=\"1\">foo</div>"
 
2329
      page['test2'].replace_html "<div id=\"2\">foo</div>"
 
2330
 
 
2331
    Test it with...
 
2332
 
 
2333
      assert_select_rjs :chained_replace
 
2334
      assert_select_rjs :chained_replace, "test1"
 
2335
 
 
2336
      assert_select_rjs :chained_replace_html
 
2337
      assert_select_rjs :chained_replace_html, "test2"
 
2338
 
 
2339
* Load helpers in alphabetical order for consistency. Resolve cyclic javascript_helper dependency.  #6132, #6178 [choonkeat@gmail.com]
 
2340
 
 
2341
* Skip params with empty names, such as the &=Save query string from <input type="submit"/>.  #2569 [Manfred Stienstra, raphinou@yahoo.com]
 
2342
 
 
2343
* Fix assert_tag so that :content => "foo" does not match substrings, but only exact strings. Use :content => /foo/ to match substrings. #2799 [Eric Hodel]
 
2344
 
 
2345
* Update JavaScriptGenerator#show/hide/toggle/remove to new Prototype syntax for multiple ids,  #6068 [petermichaux@gmail.com]
 
2346
 
 
2347
* Update UrlWriter to support :only_path. [Nicholas Seckar, Dave Thomas]
 
2348
 
 
2349
* Fixed JavaScriptHelper#link_to_function and JavaScriptHelper#button_to_function to have the script argument be optional [David Heinemeier Hansson]. So what used to require a nil, like this:
 
2350
 
 
2351
    link_to("Hider", nil, :class => "hider_link") { |p| p[:something].hide }
 
2352
  
 
2353
  ...can be written like this:
 
2354
 
 
2355
    link_to("Hider", :class => "hider_link") { |p| p[:something].hide }
 
2356
 
 
2357
* Added access to nested attributes in RJS #4548 [richcollins@gmail.com]. Examples:
 
2358
 
 
2359
    page['foo']['style']                  # => $('foo').style;
 
2360
    page['foo']['style']['color']         # => $('blank_slate').style.color;
 
2361
    page['foo']['style']['color'] = 'red' # => $('blank_slate').style.color = 'red';
 
2362
    page['foo']['style'].color = 'red'    # => $('blank_slate').style.color = 'red';
 
2363
 
 
2364
* Fixed that AssetTagHelper#image_tag and others using compute_public_path should not modify the incoming source argument (closes #5102) [eule@space.ch]
 
2365
 
 
2366
* Deprecated the auto-appending of .png to AssetTagHelper#image_tag calls that doesn't have an extension [David Heinemeier Hansson] 
 
2367
 
 
2368
* Fixed FormOptionsHelper#select to respect :selected value #5813
 
2369
 
 
2370
* Fixed TextHelper#simple_format to deal with multiple single returns within a single paragraph #5835 [moriq@moriq.com]
 
2371
 
 
2372
* Fixed TextHelper#pluralize to handle 1 as a string #5909 [rails@bencurtis.com]
 
2373
 
 
2374
* Improved resolution of DateHelper#distance_of_time_in_words for better precision #5994 [Bob Silva]
 
2375
 
 
2376
* Changed that uncaught exceptions raised any where in the application will cause RAILS_ROOT/public/500.html to be read and shown instead of just the static "Application error (Rails)" [David Heinemeier Hansson]
 
2377
 
 
2378
* Added deprecation language for pagination which will become a plugin by Rails 2.0 [David Heinemeier Hansson]
 
2379
 
 
2380
* Added deprecation language for in_place_editor and auto_complete_field that both pieces will become plugins by Rails 2.0 [David Heinemeier Hansson]
 
2381
 
 
2382
* Deprecated all of ActionController::Dependencies. All dependency loading is now handled from Active Support [David Heinemeier Hansson]
 
2383
 
 
2384
* Added assert_select* for CSS selector-based testing (deprecates assert_tag) #5936 [assaf.arkin@gmail.com]
 
2385
 
 
2386
* radio_button_tag generates unique id attributes.  #3353 [Bob Silva, somekool@gmail.com]
 
2387
 
 
2388
* strip_tags passes through blank args such as nil or "".  #2229, #6702 [duncan@whomwah.com, dharana]
 
2389
 
 
2390
* Cleanup assert_tag :children counting.  #2181 [jamie@bravenet.com]
 
2391
 
 
2392
* button_to accepts :method so you can PUT and DELETE with it.  #6005 [Dan Webb]
 
2393
 
 
2394
* Update sanitize text helper to strip plaintext tags, and <img src="javascript:bang">.  [Rick Olson]
 
2395
 
 
2396
* Add routing tests to assert that RoutingError is raised when conditions aren't met.  Closes #6016 [Nathan Witmer]
 
2397
 
 
2398
* Make auto_link parse a greater subset of valid url formats. [Jamis Buck]
 
2399
 
 
2400
* Integration tests: headers beginning with X aren't excluded from the HTTP_ prefix, so X-Requested-With becomes HTTP_X_REQUESTED_WITH as expected. [Mike Clark]
 
2401
 
 
2402
* Switch to using FormEncodedPairParser for parsing request parameters. [Nicholas Seckar, David Heinemeier Hansson]
 
2403
 
 
2404
* respond_to .html now always renders #{action_name}.rhtml so that registered custom template handlers do not override it in priority. Custom mime types require a block and throw proper error now. [Tobias LĆ¼tke]
 
2405
 
 
2406
* Deprecation: test deprecated instance vars in partials. [Jeremy Kemper]
 
2407
 
 
2408
* Add UrlWriter to allow writing urls from Mailers and scripts. [Nicholas Seckar]
 
2409
 
 
2410
* Relax Routing's anchor pattern warning; it was preventing use of [^/] inside restrictions. [Nicholas Seckar]
 
2411
 
 
2412
* Add controller_paths variable to Routing. [Nicholas Seckar]
 
2413
 
 
2414
* Fix assert_redirected_to issue with named routes for module controllers.  [Rick Olson]
 
2415
 
 
2416
* Tweak RoutingError message to show option diffs, not just missing named route significant keys. [Rick Olson]
 
2417
 
 
2418
* Invoke method_missing directly on hidden actions. Closes #3030. [Nicholas Seckar]
 
2419
 
 
2420
* Add RoutingError exception when RouteSet fails to generate a path from a Named Route. [Rick Olson]
 
2421
 
 
2422
* Replace Reloadable with Reloadable::Deprecated. [Nicholas Seckar]
 
2423
 
 
2424
* Deprecation: check whether instance variables have been monkeyed with before assigning them to deprecation proxies. Raises a RuntimeError if so. [Jeremy Kemper]
 
2425
 
 
2426
* Add support for the param_name parameter to the auto_complete_field helper. #5026 [david.a.williams@gmail.com]
 
2427
 
 
2428
* Deprecation! @params, @session, @flash will be removed after 1.2. Use the corresponding instance methods instead. You'll get printed warnings during tests and logged warnings in dev mode when you access either instance variable directly. [Jeremy Kemper]
 
2429
 
 
2430
* Make Routing noisy when an anchor regexp is assigned to a segment. #5674 [FranƧois Beausoleil]
 
2431
 
 
2432
* Added months and years to the resolution of DateHelper#distance_of_time_in_words, such that "60 days ago" becomes "2 months ago" #5611 [pjhyett@gmail.com]
 
2433
 
 
2434
* Make controller_path available as an instance method.  #5724 [jmckible@gmail.com]
 
2435
 
 
2436
* Update query parser to support adjacent hashes. [Nicholas Seckar]
 
2437
 
 
2438
* Make action caching aware of different formats for the same action so that, e.g.  foo.xml is cached separately from foo.html. Implicitly set content type when reading in cached content with mime revealing extensions so the entire onous isn't on the webserver. [Marcel Molina Jr.]
 
2439
 
 
2440
* Restrict Request Method hacking with ?_method to POST requests.  [Rick Olson]
 
2441
 
 
2442
* Fixed the new_#{resource}_url route and added named route tests for Simply Restful.  [Rick Olson]
 
2443
 
 
2444
* Added map.resources from the Simply Restful plugin [David Heinemeier Hansson]. Examples (the API has changed to use plurals!):
 
2445
 
 
2446
    map.resources :messages
 
2447
    map.resources :messages, :comments
 
2448
    map.resources :messages, :new => { :preview => :post }
 
2449
 
 
2450
* Fixed that integration simulation of XHRs should set Accept header as well [Edward Frederick]
 
2451
 
 
2452
* TestRequest#reset_session should restore a TestSession, not a hash [Michael Koziarski]
 
2453
 
 
2454
* Don't search a load-path of '.' for controller files [Jamis Buck]
 
2455
 
 
2456
* Update integration.rb to require test_process explicitly instead of via Dependencies. [Nicholas Seckar]
 
2457
 
 
2458
* Fixed that you can still access the flash after the flash has been reset in reset_session.  Closes #5584 [lmarlow]
 
2459
 
 
2460
* Allow form_for and fields_for to work with indexed form inputs.  [Jeremy Kemper, Matt Lyon]
 
2461
 
 
2462
  <% form_for 'post[]', @post do |f| -%>
 
2463
  <% end -%>
 
2464
 
 
2465
* Remove leak in development mode by replacing define_method with module_eval. [Nicholas Seckar]
 
2466
 
 
2467
* Provide support for decimal columns to form helpers. Closes #5672. [Dave Thomas]
 
2468
 
 
2469
* Pass :id => nil or :class => nil to error_messages_for to supress that html attribute. #3586 [olivier_ansaldi@yahoo.com, sebastien@goetzilla.info]
 
2470
 
 
2471
* Reset @html_document between requests so assert_tag works. #4810 [Jarkko Laine, easleydp@gmail.com]
 
2472
 
 
2473
* Integration tests behave well with render_component. #4632 [edward.frederick@revolution.com, dev.rubyonrails@maxdunn.com]
 
2474
 
 
2475
* Added exception handling of missing layouts #5373 [chris@ozmm.org]
 
2476
 
 
2477
* Fixed that real files and symlinks should be treated the same when compiling templates #5438 [zachary@panandscan.com]
 
2478
 
 
2479
* Fixed that the flash should be reset when reset_session is called #5584 [Shugo Maeda]
 
2480
 
 
2481
* Added special case for "1 Byte" in NumberHelper#number_to_human_size #5593 [murpyh@rubychan.de]
 
2482
 
 
2483
* Fixed proper form-encoded parameter parsing for requests with "Content-Type: application/x-www-form-urlencoded; charset=utf-8" (note the presence of a charset directive) [David Heinemeier Hansson]
 
2484
 
 
2485
* Add route_name_path method to generate only the path for a named routes. For example, map.person will add person_path. [Nicholas Seckar]
 
2486
 
 
2487
* Avoid naming collision among compiled view methods. [Jeremy Kemper]
 
2488
 
 
2489
* Fix CGI extensions when they expect string but get nil in Windows. Closes #5276 [Mislav Marohnić]
 
2490
 
 
2491
* Determine the correct template_root for deeply nested components.  #2841 [s.brink@web.de]
 
2492
 
 
2493
* Fix that routes with *path segments in the recall can generate URLs. [Rick Olson]
 
2494
 
 
2495
* Fix strip_links so that it doesn't hang on multiline <acronym> tags [Jamis Buck]
 
2496
 
 
2497
* Remove problematic control chars in rescue template. #5316 [Stefan Kaes]
 
2498
 
 
2499
* Make sure passed routing options are not mutated by routing code. #5314 [Blair Zajac]
 
2500
 
 
2501
* Make sure changing the controller from foo/bar to bing/bang does not change relative to foo. [Jamis Buck]
 
2502
 
 
2503
* Escape the path before routing recognition. #3671
 
2504
 
 
2505
* Make sure :id and friends are unescaped properly. #5275 [me@julik.nl]
 
2506
 
 
2507
* Rewind readable CGI params so others may reread them (such as CGI::Session when passing the session id in a multipart form).  #210 [mklame@atxeu.com, matthew@walker.wattle.id.au]
 
2508
 
 
2509
* Added Mime::TEXT (text/plain) and Mime::ICS (text/calendar) as new default types [David Heinemeier Hansson]
 
2510
 
 
2511
* Added Mime::Type.register(string, symbol, synonyms = []) for adding new custom mime types [David Heinemeier Hansson]. Example: Mime::Type.register("image/gif", :gif)
 
2512
 
 
2513
* Added support for Mime objects in render :content_type option [David Heinemeier Hansson]. Example: render :text => some_atom, :content_type => Mime::ATOM
 
2514
 
 
2515
* Add :status option to send_data and send_file. Defaults to '200 OK'.  #5243 [Manfred Stienstra <m.stienstra@fngtps.com>]
 
2516
 
 
2517
* Routing rewrite. Simpler, faster, easier to understand. The published API for config/routes.rb is unchanged, but nearly everything else is different, so expect breakage in plugins and libs that try to fiddle with routes. [Nicholas Seckar, Jamis Buck]
 
2518
 
 
2519
  map.connect '/foo/:id', :controller => '...', :action => '...'
 
2520
  map.connect '/foo/:id.:format', :controller => '...', :action => '...'
 
2521
  map.connect '/foo/:id', ..., :conditions => { :method => :get }
 
2522
 
 
2523
* Cope with missing content type and length headers. Parse parameters from multipart and urlencoded request bodies only. [Jeremy Kemper]
 
2524
 
 
2525
* Accept multipart PUT parameters. #5235 [guy.naor@famundo.com]
 
2526
 
 
2527
* Added interrogation of params[:format] to determine Accept type. If :format is specified and matches a declared extension, like "rss" or "xml", that mime type will be put in front of the accept handler. This means you can link to the same action from different extensions and use that fact to determine output [David Heinemeier Hansson]. Example:
 
2528
 
 
2529
  class WeblogController < ActionController::Base
 
2530
    def index
 
2531
      @posts = Post.find :all
 
2532
      
 
2533
      respond_to do |format|
 
2534
        format.html
 
2535
        format.xml { render :xml => @posts.to_xml }
 
2536
        format.rss { render :action => "feed.rxml" }
 
2537
      end
 
2538
    end
 
2539
  end
 
2540
  
 
2541
  # returns HTML when requested by a browser, since the browser
 
2542
  # has the HTML mimetype at the top of its priority list
 
2543
  Accept: text/html
 
2544
  GET /weblog 
 
2545
  
 
2546
  # returns the XML 
 
2547
  Accept: application/xml
 
2548
  GET /weblog 
 
2549
 
 
2550
  # returns the HTML 
 
2551
  Accept: application/xml
 
2552
  GET /weblog.html
 
2553
 
 
2554
  # returns the XML
 
2555
  Accept: text/html
 
2556
  GET /weblog.xml
 
2557
  
 
2558
  All this relies on the fact that you have a route that includes .:format.
 
2559
  
 
2560
* Expanded :method option in FormTagHelper#form_tag, FormHelper#form_for, PrototypeHelper#remote_form_for, PrototypeHelper#remote_form_tag, and PrototypeHelper#link_to_remote to allow for verbs other than GET and POST by automatically creating a hidden form field named _method, which will simulate the other verbs over post [David Heinemeier Hansson]
 
2561
 
 
2562
* Added :method option to UrlHelper#link_to, which allows for using other verbs than GET for the link. This replaces the :post option, which is now deprecated. Example: link_to "Destroy", person_url(:id => person), :method => :delete [David Heinemeier Hansson]
 
2563
 
 
2564
* follow_redirect doesn't complain about being redirected to the same controller. #5153 [dymo@mk.ukrtelecom.ua]
 
2565
 
 
2566
* Add layout attribute to response object with the name of the layout that was rendered, or nil if none rendered. [Kevin Clark]
 
2567
 
 
2568
* Fix NoMethodError when parsing params like &&. [Adam Greenfield]
 
2569
 
 
2570
* form.text_area handles the :size option just like the original text_area (:size => '60x10' becomes cols="60" rows="10").  [Jeremy Kemper]
 
2571
 
 
2572
* Excise ingrown code from FormOptionsHelper#options_for_select. #5008 [anonymous]
 
2573
 
 
2574
* Small fix in routing to allow dynamic routes (broken after [4242]) [Rick Olson]
 
2575
 
 
2576
    map.connect '*path', :controller => 'files', :action => 'show'
 
2577
 
 
2578
* Use #flush between switching from #write to #syswrite. Closes #4907. [Blair Zajac <blair@orcaware.com>]
 
2579
 
 
2580
* Allow error_messages_for to report errors for multiple objects, as well as support for customizing the name of the object in the error summary header. Closes #4186. [andrew@redlinesoftware.com, Marcel Molina Jr.]
 
2581
  
 
2582
  error_messages_for :account, :user, :subscription, :object_name => :account
 
2583
 
 
2584
* Fix assert_redirected_to tests according to real-world usage.  Also, don't fail if you add an extra :controller option: [Rick Olson]
 
2585
 
 
2586
    redirect_to :action => 'new'
 
2587
    assert_redirected_to :controller => 'monkeys', :action => 'new'
 
2588
 
 
2589
* Diff compared routing options.  Allow #assert_recognizes to take a second arg as a hash to specify optional request method [Rick Olson]
 
2590
 
 
2591
    assert_recognizes({:controller => 'users', :action => 'index'}, 'users')
 
2592
    assert_recognizes({:controller => 'users', :action => 'create'}, {:path => 'users', :method => :post})
 
2593
 
 
2594
* Diff compared options with #assert_redirected_to [Rick Olson]
 
2595
 
 
2596
* Add support in routes for semicolon delimited "subpaths", like /books/:id;:action [Jamis Buck]
 
2597
 
 
2598
* Change link_to_function and button_to_function to (optionally) take an update_page block instead of a JavaScript string. Closes #4804. [zraii@comcast.net, Sam Stephenson]
 
2599
 
 
2600
* Modify routing so that you can say :require => { :method => :post } for a route, and the route will never be selected unless the request method is POST. Only works for route recognition, not for route generation. [Jamis Buck]
 
2601
 
 
2602
* Added :add_headers option to verify which merges a hash of name/value pairs into the response's headers hash if the prerequisites cannot be satisfied. [Sam Stephenson]
 
2603
  ex. verify :only => :speak, :method => :post, 
 
2604
             :render => { :status => 405, :text => "Must be post" }, 
 
2605
             :add_headers => { "Allow" => "POST" }
 
2606
 
 
2607
 
 
2608
*1.12.5* (August 10th, 2006)
 
2609
 
 
2610
* Updated security fix
 
2611
 
 
2612
 
 
2613
*1.12.4* (August 8th, 2006)
 
2614
 
 
2615
* Cache CgiRequest#request_parameters so that multiple calls don't re-parse multipart data. [Rick Olson]
 
2616
 
 
2617
* Fixed that remote_form_for can leave out the object parameter and default to the instance variable of the object_name, just like form_for [David Heinemeier Hansson]
 
2618
 
 
2619
* Added ActionController.filter_parameter_logging that makes it easy to remove passwords, credit card numbers, and other sensitive information from being logged when a request is handled.  #1897 [jeremye@bsa.ca.gov]
 
2620
 
 
2621
* Fixed that real files and symlinks should be treated the same when compiling templates.  #5438 [zachary@panandscan.com]
 
2622
 
 
2623
* Add :status option to send_data and send_file. Defaults to '200 OK'.  #5243 [Manfred Stienstra <m.stienstra@fngtps.com>]
 
2624
 
 
2625
* Update documentation for erb trim syntax. #5651 [matt@mattmargolis.net]
 
2626
 
 
2627
* Short documentation to mention use of Mime::Type.register. #5710 [choonkeat@gmail.com]
 
2628
 
 
2629
 
 
2630
*1.12.3* (June 28th, 2006)
 
2631
 
 
2632
* Fix broken traverse_to_controller. We now:
 
2633
  Look for a _controller.rb file under RAILS_ROOT to load.
 
2634
  If we find it, we require_dependency it and return the controller it defined. (If none was defined we stop looking.)
 
2635
  If we don't find it, we look for a .rb file under RAILS_ROOT to load. If we find it, and it loads a constant we keep looking.
 
2636
  Otherwise we check to see if a directory of the same name exists, and if it does we create a module for it.
 
2637
 
 
2638
 
 
2639
*1.12.2* (June 27th, 2006)
 
2640
 
 
2641
* Refinement to avoid exceptions in traverse_to_controller.
 
2642
 
 
2643
* (Hackish) Fix loading of arbitrary files in Ruby's load path by traverse_to_controller. [Nicholas Seckar]
 
2644
 
 
2645
 
 
2646
*1.12.1* (April 6th, 2006)
 
2647
 
 
2648
* Fixed that template extensions would be cached development mode #4624 [Stefan Kaes]
 
2649
 
 
2650
* Update to Prototype 1.5.0_rc0 [Sam Stephenson]
 
2651
 
 
2652
* Honor skipping filters conditionally for only certain actions even when the parent class sets that filter to conditionally be executed only for the same actions. #4522 [Marcel Molina Jr.]
 
2653
 
 
2654
* Delegate xml_http_request in integration tests to the session instance. [Jamis Buck]
 
2655
 
 
2656
* Update the diagnostics template skip the useless '<controller not set>' text. [Nicholas Seckar]
 
2657
 
 
2658
* CHANGED DEFAULT: Don't parse YAML input by default, but keep it available as an easy option [David Heinemeier Hansson]
 
2659
 
 
2660
* Add additional autocompleter options [aballai, Thomas Fuchs]
 
2661
 
 
2662
* Fixed fragment caching of binary data on Windows #4493 [bellis@deepthought.org]
 
2663
 
 
2664
* Applied Prototype $() performance patches (#4465, #4477) and updated script.aculo.us [Sam Stephenson, Thomas Fuchs]
 
2665
 
 
2666
* Added automated timestamping to AssetTagHelper methods for stylesheets, javascripts, and images when Action Controller is run under Rails [David Heinemeier Hansson]. Example:
 
2667
 
 
2668
    image_tag("rails.png") # => '<img alt="Rails" src="/images/rails.png?1143664135" />'
 
2669
  
 
2670
  ...to avoid frequent stats (not a problem for most people), you can set RAILS_ASSET_ID in the ENV to avoid stats:
 
2671
 
 
2672
    ENV["RAILS_ASSET_ID"] = "2345"
 
2673
    image_tag("rails.png") # => '<img alt="Rails" src="/images/rails.png?2345" />'
 
2674
 
 
2675
  This can be used by deployment managers to set the asset id by application revision
 
2676
 
 
2677
 
 
2678
*1.12.0* (March 27th, 2006)
 
2679
 
 
2680
* Add documentation for respond_to. [Jamis Buck]
 
2681
 
 
2682
* Fixed require of bluecloth and redcloth when gems haven't been loaded #4446 [murphy@cYcnus.de]
 
2683
 
 
2684
* Update to Prototype 1.5.0_pre1 [Sam Stephenson]
 
2685
 
 
2686
* Change #form_for and #fields_for so that the second argument is not required [Dave Thomas]
 
2687
 
 
2688
    <% form_for :post, @post, :url => { :action => 'create' } do |f| -%>
 
2689
    
 
2690
  becomes...
 
2691
  
 
2692
    <% form_for :post, :url => { :action => 'create' } do |f| -%>
 
2693
 
 
2694
* Update to script.aculo.us 1.6 [Thomas Fuchs]
 
2695
 
 
2696
* Enable application/x-yaml processing by default [Jamis Buck]
 
2697
 
 
2698
* Fix double url escaping of remote_function. Add :escape => false option to ActionView's url_for. [Nicholas Seckar]
 
2699
 
 
2700
* Add :script option to in_place_editor to support evalScripts (closes #4194) [Cody Fauser]
 
2701
 
 
2702
* Fix mixed case enumerable methods in the JavaScript Collection Proxy (closes #4314) [Cody Fauser]
 
2703
 
 
2704
* Undo accidental escaping for mail_to; add regression test. [Nicholas Seckar]
 
2705
 
 
2706
* Added nicer message for assert_redirected_to (closes #4294) [court3nay]
 
2707
 
 
2708
    assert_redirected_to :action => 'other_host', :only_path => false
 
2709
    
 
2710
  when it was expecting...
 
2711
  
 
2712
    redirected_to :action => 'other_host', :only_path => true, :host => 'other.test.host'
 
2713
  
 
2714
  gives the error message...
 
2715
 
 
2716
    response is not a redirection to all of the options supplied (redirection is <{:only_path=>false, :host=>"other.test.host", :action=>"other_host"}>), difference: <{:only_path=>"true", :host=>"other.test.host"}>
 
2717
 
 
2718
* Change url_for to escape the resulting URLs when called from a view. [Nicholas Seckar, coffee2code]
 
2719
 
 
2720
* Added easy support for testing file uploads with fixture_file_upload #4105 [turnip@turnipspatch.com]. Example:
 
2721
 
 
2722
    # Looks in Test::Unit::TestCase.fixture_path + '/files/spongebob.png'
 
2723
    post :change_avatar, :avatar => fixture_file_upload('/files/spongebob.png', 'image/png')
 
2724
 
 
2725
* Fixed UrlHelper#current_page? to behave even when url-escaped entities are present #3929 [jeremy@planetargon.com]
 
2726
 
 
2727
* Add ability for relative_url_root to be specified via an environment variable RAILS_RELATIVE_URL_ROOT. [isaac@reuben.com, Nicholas Seckar]
 
2728
 
 
2729
* Fixed link_to "somewhere", :post => true to produce valid XHTML by using the parentnode instead of document.body for the instant form #3007 [Bob Silva]
 
2730
 
 
2731
* Added :function option to PrototypeHelper#observe_field/observe_form that allows you to call a function instead of submitting an ajax call as the trigger #4268 [jonathan@daikini.com]
 
2732
 
 
2733
* Make Mime::Type.parse consider q values (if any) [Jamis Buck]
 
2734
 
 
2735
* XML-formatted requests are typecast according to "type" attributes for :xml_simple [Jamis Buck]
 
2736
 
 
2737
* Added protection against proxy setups treating requests as local even when they're not #3898 [Steve Purcell]
 
2738
 
 
2739
* Added TestRequest#raw_post that simulate raw_post from CgiRequest #3042 [FranƧois Beausoleil]
 
2740
 
 
2741
* Underscore dasherized keys in formatted requests [Jamis Buck]
 
2742
 
 
2743
* Add MimeResponds::Responder#any for managing multiple types with identical responses [Jamis Buck]
 
2744
 
 
2745
* Make the xml_http_request testing method set the HTTP_ACCEPT header [Jamis Buck]
 
2746
 
 
2747
* Add Verification to scaffolds.   Prevent destructive actions using GET [Michael Koziarski]
 
2748
 
 
2749
* Avoid hitting the filesystem when using layouts by using a File.directory? cache. [Stefan Kaes, Nicholas Seckar]
 
2750
 
 
2751
* Simplify ActionController::Base#controller_path [Nicholas Seckar]
 
2752
 
 
2753
* Added simple alert() notifications for RJS exceptions when config.action_view.debug_rjs = true. [Sam Stephenson]
 
2754
 
 
2755
* Added :content_type option to render, so you can change the content type on the fly [David Heinemeier Hansson]. Example: render :action => "atom.rxml", :content_type => "application/atom+xml"
 
2756
 
 
2757
* CHANGED DEFAULT: The default content type for .rxml is now application/xml instead of type/xml, see http://www.xml.com/pub/a/2004/07/21/dive.html for reason [David Heinemeier Hansson]
 
2758
 
 
2759
* Added option to render action/template/file of a specific extension (and here by template type). This means you can have multiple templates with the same name but a different extension [David Heinemeier Hansson]. Example:
 
2760
  
 
2761
    class WeblogController < ActionController::Base
 
2762
      def index
 
2763
        @posts = Post.find :all
 
2764
  
 
2765
        respond_to do |type|
 
2766
          type.html # using defaults, which will render weblog/index.rhtml
 
2767
          type.xml  { render :action => "index.rxml" }
 
2768
          type.js   { render :action => "index.rjs" }
 
2769
        end
 
2770
      end
 
2771
    end
 
2772
 
 
2773
* Added better support for using the same actions to output for different sources depending on the Accept header [David Heinemeier Hansson]. Example:
 
2774
 
 
2775
    class WeblogController < ActionController::Base
 
2776
      def create
 
2777
        @post = Post.create(params[:post])
 
2778
      
 
2779
        respond_to do |type|
 
2780
          type.js   { render }  # renders create.rjs
 
2781
          type.html { redirect_to :action => "index" }
 
2782
          type.xml  do
 
2783
            headers["Location"] = url_for(:action => "show", :id => @post)
 
2784
            render(:nothing, :status => "201 Created")
 
2785
          end
 
2786
        end
 
2787
      end
 
2788
    end
 
2789
 
 
2790
* Added Base#render(:xml => xml) that works just like Base#render(:text => text), but sets the content-type to text/xml and the charset to UTF-8 [David Heinemeier Hansson]
 
2791
 
 
2792
* Integration test's url_for now runs in the context of the last request (if any) so after post /products/show/1 url_for :action => 'new' will yield /product/new  [Tobias LĆ¼tke]
 
2793
 
 
2794
* Re-added mixed-in helper methods for the JavascriptGenerator.  Moved JavascriptGenerators methods to a module that is mixed in after the helpers are added.  Also fixed that variables set in the enumeration methods like #collect are set correctly.  Documentation added for the enumeration methods [Rick Olson].  Examples:
 
2795
 
 
2796
    page.select('#items li').collect('items') do |element|
 
2797
      element.hide
 
2798
    end
 
2799
    # => var items = $$('#items li').collect(function(value, index) { return value.hide(); });
 
2800
 
 
2801
* Added plugin support for parameter parsers, which allows for better support for REST web services. By default, posts submitted with the application/xml content type is handled by creating a XmlSimple hash with the same name as the root element of the submitted xml. More handlers can easily be registered like this:
 
2802
 
 
2803
    # Assign a new param parser to a new content type
 
2804
    ActionController::Base.param_parsers['application/atom+xml'] = Proc.new do |data| 
 
2805
      node = REXML::Document.new(post) 
 
2806
     { node.root.name => node.root }
 
2807
    end
 
2808
 
 
2809
    # Assign the default XmlSimple to a new content type
 
2810
    ActionController::Base.param_parsers['application/backpack+xml'] = :xml_simple
 
2811
 
 
2812
Default YAML web services were retired, ActionController::Base.param_parsers carries an example which shows how to get this functionality back. As part of this new plugin support, request.[formatted_post?, xml_post?, yaml_post? and post_format] were all deprecated in favor of request.content_type [Tobias LĆ¼tke]
 
2813
 
 
2814
* Fixed Effect.Appear in effects.js to work with floats in Safari #3524, #3813, #3044 [Thomas Fuchs]
 
2815
 
 
2816
* Fixed that default image extension was not appended when using a full URL with AssetTagHelper#image_tag #4032, #3728 [rubyonrails@beautifulpixel.com]
 
2817
 
 
2818
* Added that page caching will only happen if the response code is less than 400 #4033 [g.bucher@teti.ch]
 
2819
 
 
2820
* Add ActionController::IntegrationTest to allow high-level testing of the way the controllers and routes all work together [Jamis Buck]
 
2821
 
 
2822
* Added support to AssetTagHelper#javascript_include_tag for having :defaults appear anywhere in the list, so you can now make one call ala javascript_include_tag(:defaults, "my_scripts") or javascript_include_tag("my_scripts", :defaults) depending on how you want the load order #3506 [Bob Silva]
 
2823
 
 
2824
* Added support for visual effects scoped queues to the visual_effect helper #3530 [Abdur-Rahman Advany]
 
2825
 
 
2826
* Added .rxml (and any non-rhtml template, really) supportfor CaptureHelper#content_for and CaptureHelper#capture #3287 [Brian Takita]
 
2827
 
 
2828
* Added script.aculo.us drag and drop helpers to RJS [Thomas Fuchs]. Examples:
 
2829
 
 
2830
    page.draggable 'product-1'
 
2831
    page.drop_receiving 'wastebasket', :url => { :action => 'delete' }
 
2832
    page.sortable 'todolist', :url => { action => 'change_order' }
 
2833
 
 
2834
* Fixed that form elements would strip the trailing [] from the first parameter #3545 [ruby@bobsilva.com]
 
2835
 
 
2836
* During controller resolution, update the NameError suppression to check for the expected constant. [Nicholas Seckar]
 
2837
 
 
2838
* Update script.aculo.us to V1.5.3 [Thomas Fuchs]
 
2839
 
 
2840
* Added various InPlaceEditor options, #3746, #3891, #3896, #3906 [Bill Burcham, ruairi, sl33p3r]
 
2841
 
 
2842
* Added :count option to pagination that'll make it possible for the ActiveRecord::Base.count call to using something else than * for the count. Especially important for count queries using DISTINCT #3839 [Stefan Kaes]
 
2843
 
 
2844
* Update script.aculo.us to V1.5.2 [Thomas Fuchs]
 
2845
 
 
2846
* Added element and collection proxies to RJS [David Heinemeier Hansson]. Examples:
 
2847
 
 
2848
    page['blank_slate']                  # => $('blank_slate');
 
2849
    page['blank_slate'].show             # => $('blank_slate').show();
 
2850
    page['blank_slate'].show('first').up # => $('blank_slate').show('first').up();
 
2851
    
 
2852
    page.select('p')                      # => $$('p');
 
2853
    page.select('p.welcome b').first      # => $$('p.welcome b').first();
 
2854
    page.select('p.welcome b').first.hide # => $$('p.welcome b').first().hide();
 
2855
 
 
2856
* Add JavaScriptGenerator#replace for replacing an element's "outer HTML". #3246 [tom@craz8.com, Sam Stephenson]
 
2857
 
 
2858
* Remove over-engineered form_for code for a leaner implementation. [Nicholas Seckar]
 
2859
 
 
2860
* Document form_for's :html option. [Nicholas Seckar]
 
2861
 
 
2862
* Major components cleanup and speedup.  #3527 [Stefan Kaes]
 
2863
 
 
2864
* Fix problems with pagination and :include.  [Kevin Clark]
 
2865
 
 
2866
* Add ActiveRecordTestCase for testing AR integration. [Kevin Clark]
 
2867
 
 
2868
* Add Unit Tests for pagination [Kevin Clark]
 
2869
 
 
2870
* Add :html option for specifying form tag options in form_for. [Sam Stephenson]
 
2871
 
 
2872
* Replace dubious controller parent class in filter docs. #3655, #3722  [info@rhalff.com, eigentone@gmail.com]
 
2873
 
 
2874
* Don't interpret the :value option on text_area as an html attribute. Set the text_area's value. #3752 [gabriel@gironda.org]
 
2875
 
 
2876
* Fix remote_form_for creates a non-ajax form. [Rick Olson]
 
2877
 
 
2878
* Don't let arbitrary classes match as controllers -- a potentially dangerous bug. [Nicholas Seckar]
 
2879
 
 
2880
* Fix Routing tests. Fix routing where failing to match a controller would prevent the rest of routes from being attempted. [Nicholas Seckar]
 
2881
 
 
2882
* Add :builder => option to form_for and friends. [Nicholas Seckar, Rick Olson]
 
2883
 
 
2884
* Fix controller resolution to avoid accidentally inheriting a controller from a parent module. [Nicholas Seckar]
 
2885
 
 
2886
* Set sweeper's @controller to nil after a request so that the controller may be collected between requests. [Nicholas Seckar]
 
2887
 
 
2888
* Subclasses of ActionController::Caching::Sweeper should be Reloadable. [Rick Olson]
 
2889
 
 
2890
* Document the :xhr option for verifications. #3666 [leeo]
 
2891
 
 
2892
* Added :only and :except controls to skip_before/after_filter just like for when you add filters [David Heinemeier Hansson]
 
2893
 
 
2894
* Ensure that the instance variables are copied to the template when performing render :update. [Nicholas Seckar]
 
2895
 
 
2896
* Add the ability to call JavaScriptGenerator methods from helpers called in update blocks. [Sam Stephenson]  Example:
 
2897
  module ApplicationHelper
 
2898
    def update_time
 
2899
      page.replace_html 'time', Time.now.to_s(:db)
 
2900
      page.visual_effect :highlight, 'time'
 
2901
    end
 
2902
  end
 
2903
 
 
2904
  class UserController < ApplicationController
 
2905
    def poll
 
2906
      render :update { |page| page.update_time }
 
2907
    end
 
2908
  end
 
2909
 
 
2910
* Add render(:update) to ActionView::Base. [Sam Stephenson]
 
2911
 
 
2912
* Fix render(:update) to not render layouts. [Sam Stephenson]
 
2913
 
 
2914
* Fixed that SSL would not correctly be detected when running lighttpd/fcgi behind lighttpd w/mod_proxy #3548 [Steve Purcell]
 
2915
 
 
2916
* Added the possibility to specify atomatic expiration for the memcachd session container #3571 [Stefan Kaes]
 
2917
 
 
2918
* Change layout discovery to take into account the change in semantics with File.join and nil arguments. [Marcel Molina Jr.]
 
2919
 
 
2920
* Raise a RedirectBackError if redirect_to :back is called when there's no HTTP_REFERER defined #3049 [Kevin Clark]
 
2921
 
 
2922
* Treat timestamps like datetimes for scaffolding purposes #3388 [Maik Schmidt]
 
2923
 
 
2924
* Fix IE bug with link_to "something", :post => true #3443 [Justin Palmer]
 
2925
 
 
2926
* Extract Test::Unit::TestCase test process behavior into an ActionController::TestProcess module. [Sam Stephenson]
 
2927
 
 
2928
* Pass along blocks from render_to_string to render. [Sam Stephenson]
 
2929
 
 
2930
* Add render :update for inline RJS. [Sam Stephenson]  Example:
 
2931
  class UserController < ApplicationController
 
2932
    def refresh
 
2933
      render :update do |page|
 
2934
        page.replace_html  'user_list', :partial => 'user', :collection => @users
 
2935
        page.visual_effect :highlight, 'user_list'
 
2936
      end
 
2937
    end
 
2938
  end
 
2939
 
 
2940
* allow nil objects for error_messages_for [Michael Koziarski]
 
2941
 
 
2942
* Refactor human_size to exclude decimal place if it is zero. [Marcel Molina Jr.]
 
2943
 
 
2944
* Update to Prototype 1.5.0_pre0 [Sam Stephenson]
 
2945
 
 
2946
* Automatically discover layouts when a controller is namespaced. #2199, #3424 [me@jonnii.com rails@jeffcole.net Marcel Molina Jr.]
 
2947
 
 
2948
* Add support for multiple proxy servers to CgiRequest#host [gaetanot@comcast.net]
 
2949
 
 
2950
* Documentation typo fix. #2367 [Blair Zajac]
 
2951
 
 
2952
* Remove Upload Progress. #2871 [Sean Treadway]
 
2953
 
 
2954
* Fix typo in function name mapping in auto_complete_field. #2929 #3446 [doppler@gmail.com phil.ross@gmail.com]
 
2955
 
 
2956
*  Allow auto-discovery of third party template library layouts. [Marcel Molina Jr.]
 
2957
 
 
2958
* Have the form builder output radio button, not check box, when calling the radio button helper. #3331 [LouisStAmour@gmail.com]
 
2959
 
 
2960
* Added assignment of the Autocompleter object created by JavaScriptMacroHelper#auto_complete_field to a local javascript variables [David Heinemeier Hansson]
 
2961
 
 
2962
* Added :on option for PrototypeHelper#observe_field that allows you to specify a different callback hook to have the observer trigger on [David Heinemeier Hansson]
 
2963
 
 
2964
* Added JavaScriptHelper#button_to_function that works just like JavaScriptHelper#link_to_function but uses a button instead of a href [David Heinemeier Hansson]
 
2965
 
 
2966
* Added that JavaScriptHelper#link_to_function will honor existing :onclick definitions when adding the function call [David Heinemeier Hansson]
 
2967
 
 
2968
* Added :disable_with option to FormTagHelper#submit_tag to allow for easily disabled submit buttons with different text [David Heinemeier Hansson]
 
2969
 
 
2970
* Make auto_link handle nil by returning quickly if blank? [Scott Barron]
 
2971
 
 
2972
* Make auto_link match urls with a port number specified. [Marcel Molina Jr.]
 
2973
 
 
2974
* Added support for toggling visual effects to ScriptaculousHelper::visual_effect, #3323. [Thomas Fuchs]
 
2975
 
 
2976
* Update to script.aculo.us to 1.5.0 rev. 3343 [Thomas Fuchs]
 
2977
 
 
2978
* Added :select option for JavaScriptMacroHelper#auto_complete_field that makes it easier to only use part of the auto-complete suggestion as the value for insertion [Thomas Fuchs]
 
2979
 
 
2980
* Added delayed execution of Javascript from within RJS #3264 [devslashnull@gmail.com]. Example:
 
2981
 
 
2982
    page.delay(20) do
 
2983
      page.visual_effect :fade, 'notice'
 
2984
    end
 
2985
 
 
2986
* Add session ID to default logging, but remove the verbose description of every step [David Heinemeier Hansson]
 
2987
 
 
2988
* Add the following RJS methods: [Sam Stephenson]
 
2989
  
 
2990
    * alert - Displays an alert() dialog
 
2991
    * redirect_to - Changes window.location.href to simulate a browser redirect
 
2992
    * call - Calls a JavaScript function
 
2993
    * assign - Assigns to a JavaScript variable
 
2994
    * << - Inserts an arbitrary JavaScript string
 
2995
 
 
2996
* Fix incorrect documentation for form_for [Nicholas Seckar]
 
2997
 
 
2998
* Don't include a layout when rendering an rjs template using render's :template option. [Marcel Molina Jr.]
 
2999
 
 
3000
*1.1.2* (December 13th, 2005)
 
3001
 
 
3002
* Become part of Rails 1.0
 
3003
 
 
3004
* Update to script.aculo.us 1.5.0 final (equals 1.5.0_rc6) [Thomas Fuchs]
 
3005
 
 
3006
* Update to Prototype 1.4.0 final [Sam Stephenson]
 
3007
 
 
3008
* Added form_remote_for (form_for meets form_remote_tag) [David Heinemeier Hansson]
 
3009
 
 
3010
* Update to script.aculo.us 1.5.0_rc6
 
3011
 
 
3012
* More robust relative url root discovery for SCGI compatibility.  This solves the 'SCGI routes problem' -- you no longer need to prefix all your routes with the name of the SCGI mountpoint.  #3070 [Dave Ringoen]
 
3013
 
 
3014
* Fix docs for text_area_tag. #3083. [Christopher Cotton]
 
3015
 
 
3016
* Change form_for and fields_for method signatures to take object name and object as separate arguments rather than as a Hash. [David Heinemeier Hansson]
 
3017
 
 
3018
* Introduce :selected option to the select helper.  Allows you to specify a selection other than the current value of object.method.  Specify :selected => nil to leave all options unselected.  #2991 [Jonathan Viney <jonathan@bluewire.net.nz>]
 
3019
 
 
3020
* Initialize @optional in routing code to avoid warnings about uninitialized access to an instance variable. [Nicholas Seckar]
 
3021
 
 
3022
* Make ActionController's render honor the :locals option when rendering a :file. #1665. [Emanuel Borsboom, Marcel Molina Jr.]
 
3023
 
 
3024
* Allow assert_tag(:conditions) to match the empty string when a tag has no children. Closes #2959. [Jamis Buck]
 
3025
 
 
3026
* Update html-scanner to handle CDATA sections better. Closes #2970. [Jamis Buck]
 
3027
 
 
3028
* Don't put flash in session if sessions are disabled.  [Jeremy Kemper]
 
3029
 
 
3030
* Strip out trailing &_= for raw post bodies. Closes #2868. [Sam Stephenson]
 
3031
 
 
3032
* Pass multiple arguments to Element.show and Element.hide in JavaScriptGenerator instead of using iterators. [Sam Stephenson]
 
3033
 
 
3034
* Improve expire_fragment documentation.  #2966 [court3nay]
 
3035
 
 
3036
* Correct docs for automatic layout assignment. #2610. [Charles M. Gerungan]
 
3037
 
 
3038
* Always create new AR sessions rather than trying too hard to avoid database traffic.  #2731 [Jeremy Kemper]
 
3039
 
 
3040
* Update to Prototype 1.4.0_rc4. Closes #2943 (old Array.prototype.reverse behavior can be obtained by passing false as an argument). [Sam Stephenson]
 
3041
 
 
3042
* Use Element.update('id', 'html') instead of $('id').innerHTML = 'html' in JavaScriptGenerator#replace_html so that script tags are evaluated. [Sam Stephenson]
 
3043
 
 
3044
* Make rjs templates always implicitly skip out on layouts. [Marcel Molina Jr.]
 
3045
 
 
3046
* Correct length for the truncate text helper.  #2913 [Stefan Kaes]
 
3047
 
 
3048
* Update to Prototype 1.4.0_rc3. Closes #1893, #2505, #2550, #2748, #2783. [Sam Stephenson]
 
3049
 
 
3050
* Add support for new rjs templates which wrap an update_page block. [Marcel Molina Jr.]
 
3051
 
 
3052
* Rename Version constant to VERSION. #2802 [Marcel Molina Jr.]
 
3053
 
 
3054
* Correct time_zone_options_for_select docs.  #2892 [pudeyo@rpi.com]
 
3055
 
 
3056
* Remove the unused, slow response_dump and session_dump variables from error pages.  #1222 [lmarlow]
 
3057
 
 
3058
* Performance tweaks: use Set instead of Array to speed up prototype helper include? calls.  Avoid logging code if logger is nil.  Inline commonly-called template presence checks.  #2880, #2881, #2882, #2883 [Stefan Kaes]
 
3059
 
 
3060
* MemCache store may be given multiple addresses.  #2869 [Ryan Carver <ryan@fivesevensix.com>]
 
3061
 
 
3062
* Handle cookie parsing irregularity for certain Nokia phones.  #2530 [zaitzow@gmail.com]
 
3063
 
 
3064
* Added PrototypeHelper::JavaScriptGenerator and PrototypeHelper#update_page for easily modifying multiple elements in an Ajax response. [Sam Stephenson]  Example:
 
3065
 
 
3066
    update_page do |page|
 
3067
      page.insert_html :bottom, 'list', '<li>Last item</li>'
 
3068
      page.visual_effect :highlight, 'list'
 
3069
      page.hide 'status-indicator', 'cancel-link'
 
3070
    end
 
3071
  
 
3072
  generates the following JavaScript:
 
3073
  
 
3074
    new Insertion.Bottom("list", "<li>Last item</li>");
 
3075
    new Effect.Highlight("list");
 
3076
    ["status-indicator", "cancel-link"].each(Element.hide);
 
3077
  
 
3078
* Refactored JavaScriptHelper into PrototypeHelper and ScriptaculousHelper [Sam Stephenson]
 
3079
 
 
3080
* Update to latest script.aculo.us version (as of [3031])
 
3081
 
 
3082
* Updated docs for in_place_editor, fixes a couple bugs and offers extended support for external controls [Justin Palmer]
 
3083
 
 
3084
* Update documentation for render :file.  #2858 [Tom Werner]
 
3085
 
 
3086
* Only include builtin filters whose filenames match /^[a-z][a-z_]*_helper.rb$/ to avoid including operating system metadata such as ._foo_helper.rb.  #2855 [court3nay]
 
3087
 
 
3088
* Added FormHelper#form_for and FormHelper#fields_for that makes it easier to work with forms for single objects also if they don't reside in instance variables [David Heinemeier Hansson]. Examples:
 
3089
 
 
3090
  <% form_for :person, @person, :url => { :action => "update" } do |f| %>
 
3091
    First name: <%= f.text_field :first_name %>
 
3092
    Last name : <%= f.text_field :last_name %>
 
3093
    Biography : <%= f.text_area :biography %>
 
3094
    Admin?    : <%= f.check_box :admin %>
 
3095
  <% end %>
 
3096
 
 
3097
  <% form_for :person, person, :url => { :action => "update" } do |person_form| %>
 
3098
    First name: <%= person_form.text_field :first_name %>
 
3099
    Last name : <%= person_form.text_field :last_name %>
 
3100
    
 
3101
    <% fields_for :permission => person.permission do |permission_fields| %>
 
3102
      Admin?  : <%= permission_fields.check_box :admin %>
 
3103
    <% end %>
 
3104
  <% end %>
 
3105
  
 
3106
* options_for_select allows any objects which respond_to? :first and :last rather than restricting to Array and Range.  #2824 [Jacob Robbins <jrobbins@cmj.com>, Jeremy Kemper]
 
3107
 
 
3108
* The auto_link text helper accepts an optional block to format the link text for each url and email address.  Example: auto_link(post.body) { |text| truncate(text, 10) }  [Jeremy Kemper]
 
3109
 
 
3110
* assert_tag uses exact matches for string conditions, instead of partial matches. Use regex to do partial matches. #2799 [Jamis Buck]
 
3111
 
 
3112
* CGI::Session::ActiveRecordStore.data_column_name = 'foobar' to use a different session data column than the 'data' default.  [nbpwie102@sneakemail.com]
 
3113
 
 
3114
* Do not raise an exception when default helper is missing; log a debug message instead.  It's nice to delete empty helpers.  [Jeremy Kemper]
 
3115
 
 
3116
* Controllers with acronyms in their names (e.g. PDFController) require the correct default helper (PDFHelper in file pdf_helper.rb).  #2262 [jeff@opendbms.com]
 
3117
 
 
3118
 
 
3119
*1.11.0* (November 7th, 2005)
 
3120
 
 
3121
* Added request as instance method to views, so you can do <%= request.env["HTTP_REFERER"] %>, just like you can already access response, session, and the likes [David Heinemeier Hansson]
 
3122
 
 
3123
* Fix conflict with assert_tag and Glue gem #2255 [david.felstead@gmail.com]
 
3124
 
 
3125
* Add documentation to assert_tag indicating that it only works with well-formed XHTML #1937, #2570 [Jamis Buck]
 
3126
 
 
3127
* Added action_pack.rb stub so that ActionPack::Version loads properly [Sam Stephenson]
 
3128
 
 
3129
* Added short-hand to assert_tag so assert_tag :tag => "span" can be written as assert_tag "span" [David Heinemeier Hansson]
 
3130
 
 
3131
* Added skip_before_filter/skip_after_filter for easier control of the filter chain in inheritance hierachies [David Heinemeier Hansson]. Example:
 
3132
 
 
3133
    class ApplicationController < ActionController::Base
 
3134
      before_filter :authenticate
 
3135
    end
 
3136
    
 
3137
    class WeblogController < ApplicationController
 
3138
      # will run the :authenticate filter
 
3139
    end
 
3140
    
 
3141
    class SignupController < ActionController::Base
 
3142
      # will not run the :authenticate filter
 
3143
      skip_before_filter :authenticate
 
3144
    end
 
3145
 
 
3146
* Added redirect_to :back as a short-hand for redirect_to(request.env["HTTP_REFERER"]) [David Heinemeier Hansson]
 
3147
 
 
3148
* Change javascript_include_tag :defaults to not use script.aculo.us loader, which facilitates the use of plugins for future script.aculo.us and third party javascript extensions, and provide register_javascript_include_default for plugins to specify additional JavaScript files to load. Removed slider.js and builder.js from actionpack. [Thomas Fuchs]
 
3149
 
 
3150
* Fix problem where redirecting components can cause an infinite loop [Rick Olson]
 
3151
 
 
3152
* Added support for the queue option on visual_effect [Thomas Fuchs]
 
3153
 
 
3154
* Update script.aculo.us to V1.5_rc4 [Thomas Fuchs]
 
3155
 
 
3156
* Fix that render :text didn't interpolate instance variables #2629, #2626 [Stefan Kaes]
 
3157
 
 
3158
* Fix line number detection and escape RAILS_ROOT in backtrace Regexp [Nicholas Seckar]
 
3159
 
 
3160
* Fixed document.getElementsByClassName from Prototype to be speedy again [Sam Stephenson]
 
3161
 
 
3162
* Recognize ./#{RAILS_ROOT} as RAILS_ROOT in error traces [Nicholas Seckar]
 
3163
 
 
3164
* Remove ARStore session fingerprinting [Nicholas Seckar]
 
3165
 
 
3166
* Fix obscure bug in ARStore [Nicholas Seckar]
 
3167
 
 
3168
* Added TextHelper#strip_tags for removing HTML tags from a string (using HTMLTokenizer) #2229 [marcin@junkheap.net]
 
3169
 
 
3170
* Added a reader for flash.now, so it's possible to do stuff like flash.now[:alert] ||= 'New if not set' #2422 [Caio Chassot]
 
3171
 
 
3172
 
 
3173
*1.10.2* (October 26th, 2005)
 
3174
 
 
3175
* Reset template variables after using render_to_string [Stefan Kaes]
 
3176
 
 
3177
* Expose the session model backing CGI::Session
 
3178
 
 
3179
* Abbreviate RAILS_ROOT in traces
 
3180
 
 
3181
 
 
3182
*1.10.1* (October 19th, 2005)
 
3183
 
 
3184
* Update error trace templates [Nicholas Seckar]
 
3185
 
 
3186
* Stop showing generated routing code in application traces [Nicholas Seckar]
 
3187
 
 
3188
 
 
3189
*1.10.0* (October 16th, 2005)
 
3190
 
 
3191
* Make string-keys locals assigns optional. Add documentation describing depreciated state [Stefan Kaes]
 
3192
 
 
3193
* Improve line number detection for template errors [Nicholas Seckar]
 
3194
 
 
3195
* Update/clean up documentation (rdoc)
 
3196
 
 
3197
* Upgrade to Prototype 1.4.0_rc0 [Sam Stephenson]
 
3198
 
 
3199
* Added assert_vaild. Reports the proper AR error messages as fail message when the passed record is invalid [Tobias LĆ¼tke]
 
3200
 
 
3201
* Add temporary support for passing locals to render using string keys [Nicholas Seckar]
 
3202
 
 
3203
* Clean up error pages by providing better backtraces [Nicholas Seckar]
 
3204
 
 
3205
* Raise an exception if an attempt is made to insert more session data into the ActiveRecordStore data column than the column can hold. #2234.  [justin@textdrive.com]
 
3206
 
 
3207
* Removed references to assertions.rb from actionpack assert's backtraces. Makes error reports in functional unit tests much less noisy. [Tobias LĆ¼tke]
 
3208
 
 
3209
* Updated and clarified documentation for JavaScriptHelper to be more concise about the various options for including the JavaScript libs. [Thomas Fuchs]
 
3210
 
 
3211
* Hide "Retry with Breakpoint" button on error pages until feature is functional. [David Heinemeier Hansson]
 
3212
 
 
3213
* Fix Request#host_with_port to use the standard port when Rails is behind a proxy. [Nicholas Seckar]
 
3214
 
 
3215
* Escape query strings in the href attribute of URLs created by url_helper.  #2333 [Michael Schuerig <michael@schuerig.de>]
 
3216
 
 
3217
* Improved line number reporting for template errors [Nicholas Seckar]
 
3218
 
 
3219
* Added :locals support for render :inline #2463 [mdabney@cavoksolutions.com]
 
3220
 
 
3221
* Unset the X-Requested-With header when using the xhr wrapper in functional tests so that future requests aren't accidentally xhr'ed #2352 [me@julik.nl, Sam Stephenson]
 
3222
 
 
3223
* Unescape paths before writing cache to file system. #1877. [Damien Pollet]
 
3224
 
 
3225
* Wrap javascript_tag contents in a CDATA section and add a cdata_section method to TagHelper #1691 [Michael Schuerig, Sam Stephenson]
 
3226
 
 
3227
* Misc doc fixes (typos/grammar/etc). #2445. [coffee2code]
 
3228
 
 
3229
* Speed improvement for session_options. #2287. [Stefan Kaes]
 
3230
 
 
3231
* Make cacheing binary files friendly with Windows. #1975. [Rich Olson]
 
3232
 
 
3233
* Convert boolean form options form the tag_helper. #809. [Michael Schuerig <michael@schuerig.de>]
 
3234
 
 
3235
* Fixed that an instance variable with the same name as a partial should be implicitly passed as the partial :object #2269 [court3nay]
 
3236
 
 
3237
* Update Prototype to V1.4.0_pre11, script.aculo.us to [2502] [Thomas Fuchs]
 
3238
 
 
3239
* Make assert_tag :children count appropriately. Closes #2181. [jamie@bravenet.com]
 
3240
 
 
3241
* Forced newer versions of RedCloth to use hard breaks [David Heinemeier Hansson]
 
3242
 
 
3243
* Added new scriptaculous options for auto_complete_field #2343 [Manfred Stienstra]
 
3244
 
 
3245
* Don't prepend the asset host if the string is already a fully-qualified URL
 
3246
 
 
3247
* Updated to script.aculo.us V1.5.0_rc2 and Prototype to V1.4.0_pre7 [Thomas Fuchs]
 
3248
 
 
3249
* Undo condition change made in [2345] to prevent normal parameters arriving as StringIO.
 
3250
 
 
3251
* Tolerate consecutive delimiters in query parameters.  #2295 [darashi@gmail.com]
 
3252
 
 
3253
* Streamline render process, code cleaning. Closes #2294. [skae]
 
3254
 
 
3255
* Keep flash after components are rendered. #2291 [Rick Olson, Scott]
 
3256
 
 
3257
* Shorten IE file upload path to filename only to match other browsers.  #1507 [court3nay]
 
3258
 
 
3259
* Fix open/save dialog in IE not opening files send with send_file/send_data, #2279 [Thomas Fuchs]
 
3260
 
 
3261
* Fixed that auto_discovery_link_tag couldn't take a string as the URL [David Heinemeier Hansson]
 
3262
 
 
3263
* Fixed problem with send_file and WEBrick using stdout #1812 [David Heinemeier Hansson]
 
3264
 
 
3265
* Optimized tag_options to not sort keys, which is no longer necessary when assert_dom_equal and friend is available #1995 [skae]
 
3266
 
 
3267
* Added assert_dom_equal and assert_dom_not_equal to compare tags generated by the helpers in an order-indifferent manner #1995 [skae]
 
3268
 
 
3269
* Fixed that Request#domain caused an exception if the domain header wasn't set in the original http request #1795 [Michael Koziarski]
 
3270
 
 
3271
* Make the truncate() helper multi-byte safe (assuming $KCODE has been set to something other than "NONE") #2103
 
3272
 
 
3273
* Add routing tests from #1945 [ben@groovie.org]
 
3274
 
 
3275
* Add a routing test case covering #2101 [Nicholas Seckar]
 
3276
 
 
3277
* Cache relative_url_root for all webservers, not just Apache #2193 [skae]
 
3278
 
 
3279
* Speed up cookie use by decreasing string copying #2194 [skae]
 
3280
 
 
3281
* Fixed access to "Host" header with requests made by crappy old HTTP/1.0 clients #2124 [Marcel Molina Jr.]
 
3282
 
 
3283
* Added easy assignment of fragment cache store through use of symbols for included stores (old way still works too)
 
3284
 
 
3285
  Before:
 
3286
    ActionController::Base.fragment_cache_store = 
 
3287
      ActionController::Base::Caching::Fragments::FileStore.new("/path/to/cache/directory")
 
3288
 
 
3289
  After:
 
3290
    ActionController::Base.fragment_cache_store = :file_store, "/path/to/cache/directory"
 
3291
 
 
3292
* Added ActionController::Base.session_store=, session_store, and session_options to make it easier to tweak the session options (instead of going straight to ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS)
 
3293
 
 
3294
* Added TextHelper#cycle to cycle over an array of values on each hit (useful for alternating row colors etc) #2154 [dave-ml@dribin.org]
 
3295
 
 
3296
* Ensure that request.path never returns nil. Closes #1675 [Nicholas Seckar]
 
3297
 
 
3298
* Add ability to specify Route Regexps for controllers. Closes #1917. [Sebastian Kanthak]
 
3299
 
 
3300
* Provide Named Route's hash methods as helper methods. Closes #1744. [Nicholas Seckar, Steve Purcell]
 
3301
 
 
3302
* Added :multipart option to ActiveRecordHelper#form to make it possible to add file input fields #2034 [jstirk@oobleyboo.com]
 
3303
 
 
3304
* Moved auto-completion and in-place editing into the Macros module and their helper counterparts into JavaScriptMacrosHelper
 
3305
 
 
3306
* Added in-place editing support in the spirit of auto complete with ActionController::Base.in_place_edit_for, JavascriptHelper#in_place_editor_field, and Javascript support from script.aculo.us #2038 [Jon Tirsen]
 
3307
 
 
3308
* Added :disabled option to all data selects that'll make the elements inaccessible for change #2167, #253 [eigentone]
 
3309
 
 
3310
* Fixed that TextHelper#auto_link_urls would include punctuation in the links #2166, #1671 [eigentone]
 
3311
 
 
3312
* Fixed that number_to_currency(1000, {:precision => 0})) should return "$1,000", instead of "$1,000." #2122 [sd@notso.net]
 
3313
 
 
3314
* Allow link_to_remote to use any DOM-element as the parent of the form elements to be submitted #2137 [erik@ruby-lang.nl]. Example:
 
3315
 
 
3316
    <tr id="row023">
 
3317
      <td><input name="foo"/></td>
 
3318
      <td><input name="bar"/></td>
 
3319
      <td><%= link_to_remote 'Save', :update => "row023",
 
3320
            :submit => "row023", :url => {:action => 'save_row'} %></td>
 
3321
    </tr>
 
3322
 
 
3323
* Fixed that render :partial would fail when :object was a Hash (due to backwards compatibility issues) #2148 [Sam Stephenson]
 
3324
 
 
3325
* Fixed JavascriptHelper#auto_complete_for to only include unique items #2153 [Thomas Fuchs]
 
3326
 
 
3327
* Fixed all AssetHelper methods to work with relative paths, such that javascript_include_tag('stdlib/standard') will look in /javascripts/stdlib/standard instead of '/stdlib/standard/' #1963
 
3328
 
 
3329
* Avoid extending view instance with helper modules each request. Closes #1979
 
3330
 
 
3331
* Performance improvements to CGI methods. Closes #1980 [Stefan Kaes]
 
3332
 
 
3333
* Added :post option to UrlHelper#link_to that makes it possible to do POST requests through normal ahref links using Javascript
 
3334
 
 
3335
* Fixed overwrite_params
 
3336
 
 
3337
* Added ActionController::Base.benchmark and ActionController::Base.silence to allow for easy benchmarking and turning off the log
 
3338
 
 
3339
* Updated vendor copy of html-scanner to support better xml parsing
 
3340
 
 
3341
* Added :popup option to UrlHelper#link_to #1996 [gabriel.gironda@gmail.com]. Examples:
 
3342
 
 
3343
    link_to "Help", { :action => "help" }, :popup => true
 
3344
    link_to "Busy loop", { :action => "busy" }, :popup => ['new_window', 'height=300,width=600']
 
3345
 
 
3346
* Drop trailing \000 if present on RAW_POST_DATA (works around bug in Safari Ajax implementation) #918
 
3347
 
 
3348
* Fix observe_field to fall back to event-based observation if frequency <= 0 #1916 [Michael Schubert]
 
3349
 
 
3350
* Allow use of the :with option for submit_to_remote #1936 [jon@instance-design.co.uk]
 
3351
 
 
3352
* AbstractRequest#domain returns nil when host is an ip address #2012 [Kevin Clark]
 
3353
 
 
3354
* ActionController documentation update #2051 [FranƧois Beausoleil]
 
3355
 
 
3356
* Yield @content_for_ variables to templates #2058 [Sam Stephenson]
 
3357
 
 
3358
* Make rendering an empty partial collection behave like :nothing => true #2080 [Sam Stephenson]
 
3359
 
 
3360
* Add option to specify the singular name used by pagination.
 
3361
 
 
3362
* Use string key to obtain action value. Allows indifferent hashes to be disabled.
 
3363
 
 
3364
* Added ActionView::Base.cache_template_loading back.
 
3365
 
 
3366
* Rewrote compiled templates to decrease code complexity. Removed template load caching in favour of compiled caching. Fixed template error messages. [Nicholas Seckar]
 
3367
 
 
3368
* Fix Routing to handle :some_param => nil better. [Nicholas Seckar, Luminas]
 
3369
 
 
3370
* Add support for :include with pagination (subject to existing constraints for :include with :limit and :offset) #1478 [Michael Schubert]
 
3371
 
 
3372
* Prevent the benchmark module from blowing up if a non-HTTP/1.1 request is processed
 
3373
 
 
3374
* Added :use_short_month option to select_month helper to show month names as abbreviations
 
3375
 
 
3376
* Make link_to escape the javascript in the confirm option #1964 [nicolas.pouillard@gmail.com]
 
3377
 
 
3378
* Make assert_redirected_to properly check URL's passed as strings #1910 [Scott Barron]
 
3379
 
 
3380
* Make sure :layout => false is always used when rendering inside a layout
 
3381
 
 
3382
* Use raise instead of assert_not_nil in Test::Unit::TestCase#process to ensure that the test variables (controller, request, response) have been set
 
3383
 
 
3384
* Make sure assigns are built for every request when testing #1866
 
3385
 
 
3386
* Allow remote_addr to be queried on TestRequest #1668
 
3387
 
 
3388
* Fixed bug when a partial render was passing a local with the same name as the partial
 
3389
 
 
3390
* Improved performance of test app req/sec with ~10% refactoring the render method #1823 [Stefan Kaes]
 
3391
 
 
3392
* Improved performance of test app req/sec with 5-30% through a series of Action Pack optimizations #1811 [Stefan Kaes]
 
3393
 
 
3394
* Changed caching/expiration/hit to report using the DEBUG log level and errors to use the ERROR log level instead of both using INFO
 
3395
 
 
3396
* Added support for per-action session management #1763
 
3397
 
 
3398
* Improved rendering speed on complicated templates by up to 100% (the more complex the templates, the higher the speedup) #1234 [Stefan Kaes]. This did necessasitate a change to the internals of ActionView#render_template that now has four parameters. Developers of custom view handlers (like Amrita) need to update for that.
 
3399
 
 
3400
* Added options hash as third argument to FormHelper#input, so you can do input('person', 'zip', :size=>10) #1719 [jeremye@bsa.ca.gov]
 
3401
 
 
3402
* Added Base#expires_in(seconds)/Base#expires_now to control HTTP content cache headers #1755 [Thomas Fuchs]
 
3403
 
 
3404
* Fixed line number reporting for Builder template errors #1753 [piotr]
 
3405
 
 
3406
* Fixed assert_routing so that testing controllers in modules works as expected [Nicholas Seckar, Rick Olson]
 
3407
 
 
3408
* Fixed bug with :success/:failure callbacks for the JavaScriptHelper methods #1730 [court3nay/Thomas Fuchs]
 
3409
 
 
3410
* Added named_route method to RouteSet instances so that RouteSet instance methods do not prevent certain names from being used. [Nicholas Seckar]
 
3411
 
 
3412
* Fixed routes so that routes which do not specify :action in the path or in the requirements have a default of :action => 'index', In addition, fixed url generation so that :action => 'index' does not need to be provided for such urls. [Nicholas Seckar, Markjuh]
 
3413
 
 
3414
* Worked around a Safari bug where it wouldn't pass headers through if the response was zero length by having render :nothing return ' ' instead of ''
 
3415
 
 
3416
* Fixed Request#subdomains to handle "foo.foo.com" correctly
 
3417
 
 
3418
 
 
3419
*1.9.1* (11 July, 2005)
 
3420
 
 
3421
* Fixed that auto_complete_for didn't force the input string to lower case even as the db comparison was
 
3422
 
 
3423
* Fixed that Action View should always use the included Builder, never attempt to require the gem, to ensure compatibility
 
3424
 
 
3425
* Added that nil options are not included in tags, so tag("p", :ignore => nil) now returns <p /> not <p ignore="" />  but that tag("p", :ignore => "") still includes it #1465 [Michael Schuerig]
 
3426
 
 
3427
* Fixed that UrlHelper#link_to_unless/link_to_if used html_escape on the name if no link was to be applied. This is unnecessary and breaks its use with images #1649 [joergd@pobox.com]
 
3428
 
 
3429
* Improved error message for DoubleRenderError
 
3430
 
 
3431
* Fixed routing to allow for testing of *path components #1650 [Nicholas Seckar]
 
3432
 
 
3433
* Added :handle as an option to sortable_element to restrict the drag handle to a given class #1642 [thejohnny]
 
3434
 
 
3435
* Added a bunch of script.aculo.us features #1644, #1677, #1695 [Thomas Fuchs]
 
3436
  * Effect.ScrollTo, to smoothly scroll the page to an element
 
3437
  * Better Firefox flickering handling on SlideUp/SlideDown
 
3438
  * Removed a possible memory leak in IE with draggables
 
3439
  * Added support for cancelling dragging my hitting ESC
 
3440
  * Added capability to remove draggables/droppables and redeclare sortables in dragdrop.js (this makes it possible to call sortable_element on the same element more than once, e.g. in AJAX returns that modify the sortable element. all current sortable 'stuff' on the element will be discarded and the sortable will be rebuilt)
 
3441
  * Always reset background color on Effect.Highlight; this make change backwards-compatibility, to be sure include style="background-color:(target-color)" on your elements or else elements will fall back to their CSS rules (which is a good thing in most circumstances)
 
3442
  * Removed circular references from element to prevent memory leaks (still not completely gone in IE)
 
3443
  * Changes to class extension in effects.js
 
3444
  * Make Effect.Highlight restore any previously set background color when finishing (makes effect work with CSS classes that set a background color)
 
3445
  * Fixed myriads of memory leaks in IE and Gecko-based browsers [David ZĆ¼lke]
 
3446
  * Added incremental and local autocompleting and loads of documentation to controls.js [Ivan Krstic]
 
3447
  * Extended the auto_complete_field helper to accept tokens option
 
3448
  * Changed object extension mechanism to favor Object.extend to make script.aculo.us easily adaptable to support 3rd party libs like IE7.js [David ZĆ¼lke]
 
3449
  
 
3450
* Fixed that named routes didn't use the default values for action and possible other parameters #1534 [Nicholas Seckar]
 
3451
 
 
3452
* Fixed JavascriptHelper#visual_effect to use camelize such that :blind_up will work #1639 [pelletierm@eastmedia.net]
 
3453
 
 
3454
* Fixed that a SessionRestoreError was thrown if a model object was placed in the session that wasn't available to all controllers. This means that it's no longer necessary to use the 'model :post' work-around in ApplicationController to have a Post model in your session.
 
3455
 
 
3456
 
 
3457
*1.9.0* (6 July, 2005)
 
3458
 
 
3459
* Added logging of the request URI in the benchmark statement (makes it easy to grep for slow actions)
 
3460
 
 
3461
* Added javascript_include_tag :defaults shortcut that'll include all the default javascripts included with Action Pack (prototype, effects, controls, dragdrop)
 
3462
 
 
3463
* Cache several controller variables that are expensive to calculate #1229 [Stefan Kaes]
 
3464
 
 
3465
* The session class backing CGI::Session::ActiveRecordStore may be replaced with any class that duck-types with a subset of Active Record.  See docs for details #1238 [Stefan Kaes]
 
3466
 
 
3467
* Fixed that hashes was not working properly when passed by GET to lighttpd #849 [Nicholas Seckar]
 
3468
 
 
3469
* Fixed assert_template nil will be true when no template was rendered #1565 [maceywj@telus.net]
 
3470
 
 
3471
* Added :prompt option to FormOptions#select (and the users of it, like FormOptions#select_country etc) to create "Please select" style descriptors #1181 [Michael Schuerig]
 
3472
 
 
3473
* Added JavascriptHelper#update_element_function, which returns a Javascript function (or expression) that'll update a DOM element according to the options passed #933 [mortonda@dgrmm.net]. Examples:
 
3474
 
 
3475
    <%= update_element_function("products", :action => :insert, :position => :bottom, :content => "<p>New product!</p>") %>
 
3476
 
 
3477
    <% update_element_function("products", :action => :replace, :binding => binding) do %>
 
3478
      <p>Product 1</p>
 
3479
      <p>Product 2</p>
 
3480
    <% end %>
 
3481
 
 
3482
* Added :field_name option to DateHelper#select_(year|month|day) to deviate from the year/month/day defaults #1266 [Marcel Molina Jr.]
 
3483
 
 
3484
* Added JavascriptHelper#draggable_element and JavascriptHelper#drop_receiving_element to facilitate easy dragging and dropping through the script.aculo.us libraries #1578 [Thomas Fuchs]
 
3485
 
 
3486
* Added that UrlHelper#mail_to will now also encode the default link title #749 [f.svehla@gmail.com]
 
3487
 
 
3488
* Removed the default option of wrap=virtual on FormHelper#text_area to ensure XHTML compatibility #1300 [thomas@columbus.rr.com]
 
3489
 
 
3490
* Adds the ability to include XML CDATA tags using Builder #1563 [Josh Knowles]. Example:
 
3491
 
 
3492
    xml.cdata! "some text" # => <![CDATA[some text]]>
 
3493
 
 
3494
* Added evaluation of <SCRIPT> blocks in content returned to Ajax calls #1577 [Thomas Fuchs/court3nay/Sean Treadway]
 
3495
 
 
3496
* Directly generate paths with a leading slash instead of tacking it on later.  #1543 [Nicholas Seckar]
 
3497
 
 
3498
* Fixed errant parameter modification in functional tests.  #1542 [Nicholas Seckar]
 
3499
 
 
3500
* Routes fail with leading slash #1540 [Nicholas Seckar]
 
3501
 
 
3502
* Added support for graceful error handling of Ajax calls #1217 [Jamis Buck/Thomas Fuchs]. Example:
 
3503
 
 
3504
    link_to_remote(
 
3505
      "test", 
 
3506
      :url => { :action => "faulty" }, 
 
3507
      :update => { :success => "good", :failure => "bad" },
 
3508
      403 => "alert('Forbidden- got ya!')",
 
3509
      404 => "alert('Nothing there...?')", 
 
3510
      :failure => "alert('Unkown error ' + request.status)")
 
3511
  
 
3512
* Attempt to explicitly flush the output at the end of CgiProcess#out
 
3513
 
 
3514
* Fixed assert_redirected_to to handle absolute controller paths properly #1472 [Rick Olson/Nicholas Seckar]
 
3515
 
 
3516
* Added event-based observations when frequency is not set on observe_field/form #1474 [flash@vanklinkenbergsoftware.nl]
 
3517
 
 
3518
* Added script.aculo.us Javascripts (controls.js, dragdrop.js, effects.js) (NEEDS MORE DESCRIPTION) #1509 [Thomas Fuchs]
 
3519
 
 
3520
* Fixed prototype to consider all fields it doesn't know as text (such as Safari's search) just like the browser in its serialization #1497 [Sean Treadway]
 
3521
 
 
3522
* Improved performance of Routes generation by a factor of 5 #1434 [Nicholas Seckar] 
 
3523
 
 
3524
* Added named routes (NEEDS BETTER DESCRIPTION) #1434 [Nicholas Seckar]
 
3525
 
 
3526
* Improved AbstractRequest documentation #1483 [court3nay]
 
3527
 
 
3528
* Added ActionController::Base.allow_concurrency to control whether the application is thread-safe, so multi-threaded servers like WEBrick knows whether to apply a mutex around the performance of each action. Turned off by default. EXPERIMENTAL FEATURE.
 
3529
 
 
3530
* Added TextHelper#word_wrap(text, line_length = 80) #1449 [tuxie@dekadance.se]
 
3531
 
 
3532
* Added a fall-through action for form_remote_tag that'll be used in case Javascript is unavailable #1459 [Scott Barron]. Example:
 
3533
 
 
3534
    form_remote_tag :html => { :action => url_for(:controller => "some", :action => "place") }
 
3535
 
 
3536
* Added :xhr => true/false option to verify so you can ensure that a request is coming from an Ajax call or not #1464 [Thomas Fuchs]
 
3537
 
 
3538
* Added tag_options as a third parameter to AssetHelper#auto_discovery_link_tag to control options like the title of the link #1430 [Kevin Clark]
 
3539
 
 
3540
* Added option to pass in parameters to CaptureHelper#capture, so you can create more advanced view helper methods #1466 [duane.johnson@gmail.com]. Example:
 
3541
 
 
3542
    <% show_calendar(:year => 2005, :month => 6) do |day, options| %>
 
3543
      <% options[:bgcolor] = '#dfd' if 10..15.include? day %>
 
3544
      [<%= day %>]
 
3545
    <% end %>
 
3546
 
 
3547
* Changed the default name of the input tag generated by FormTagHelper#submit_tag from "submit" to "commit" so it doesn't clash with form.submit() calls in Javascript #1271
 
3548
 
 
3549
* Fixed relative urls support for lighttpd #1048 [Nicholas Seckar/maznawak@nerim.net]
 
3550
 
 
3551
* Correct distance_of_time_in_words for integer arguments and make the second arg optional, treating the first arg as a duration in seconds.  #1458 [madrobby <thomas@fesch.at>]
 
3552
 
 
3553
* Fixed query parser to deal gracefully with equal signs inside keys and values #1345 [gorou]. 
 
3554
  Example: /?sig=abcdef=:foobar=&x=y will pass now. 
 
3555
 
 
3556
* Added Cuba to country list #1351 [todd]
 
3557
 
 
3558
* Fixed radio_button to work with numeric values #1352 [demetrius]
 
3559
 
 
3560
* Added :extension option to NumberHelper#number_to_phone #1361 [delynnb]
 
3561
 
 
3562
* Added button_to as a form-based solution to deal with harmful actions that should be hidden behind POSTs. This makes it just as easy as link_to to create a safe trigger for actions like destroy, although it's limited by being a block element, the fixed look, and a no-no inside other forms. #1371 [tom@moertel.com]
 
3563
 
 
3564
* Fixed image_tag so an exception is not thrown just because the image is missing and alt value can't be generated #1395 [Marcel Molina Jr.]
 
3565
 
 
3566
* Added a third parameter to TextHelper#auto_link called href_options for specifying additional tag options on the links generated #1401 [tyler.kovacs@gmail.com]. Example: auto_link(text, :all, { :target => "_blank" }) to have all the generated links open in a new window.
 
3567
 
 
3568
* Fixed TextHelper#highlight to return the text, not nil, if the phrase is blank #1409 [Patrick Lenz]
 
3569
 
 
3570
* Fixed TagHelper such that :name and 'name' keys in the options doesn't result in two attributes #1455 [take_tk]
 
3571
 
 
3572
* Ensure that helpers are only available to the controllers where they are defined and their subclasses.  #1394 [kdole@tamu.edu]
 
3573
 
 
3574
* render("foo/bar") works with a layout again 
 
3575
 
 
3576
* Fixed double-singularization on scaffolded pagination call (Address would be turned into Addres) #1216, #1404 [nilsga]
 
3577
 
 
3578
* Removed the require hack used by functional testing to work around an earlier bug in rake.
 
3579
 
 
3580
* Allow distance_of_time_in_words to work with any value that responds to #to_time (like dates) #969
 
3581
 
 
3582
* Support :render option for :verify #1440 [Tobias LĆ¼tke]
 
3583
 
 
3584
* Updated vendor copy of html-scanner lib to 0.5.2, for bug fixes and optimizations. The :content option may be used as expected--to find a tag whose textual content is a particular value--in assert_tag, now.
 
3585
 
 
3586
* Changed test requests to come from 0.0.0.0 instead of 127.0.0.1 such that they don't trigger debugging screens on exceptions, but instead call rescue_action_in_public
 
3587
 
 
3588
* Modernize scaffolding to match the generator: use the new render method and change style from the warty @params["id"] to the sleek params[:id].  #1367
 
3589
 
 
3590
* Include :id in the action generated by the form helper method.  Then, for example, the controller can do Model.find(params[:id]) for both edit and update actions.  Updated scaffolding to take advantage.  #1367
 
3591
 
 
3592
* Add assertions with friendly messages to TestCase#process to ensure that @controller, @request, and @response are set.  #1367
 
3593
 
 
3594
* Arrays, hashes sent via multipart posts are converted to strings #1032 [dj@omelia.org, me@julik.nl]
 
3595
 
 
3596
* render(:layout => true) is a synonym for render(:layout => nil)
 
3597
 
 
3598
* Make sure the benchmarking render method always returns the output of the render.
 
3599
 
 
3600
* render(:action), render(:template) and render() are the only three calls that default to using a layout. All other render calls assume :layout => false. This also fixes send_file, which was applying a layout if one existed for the current action.
 
3601
 
 
3602
* verify with :redirect_to won't redirect if a redirect or render has already been performed #1350
 
3603
 
 
3604
* render(:partial => true) is identical to the behavior of the deprecated render_partial()
 
3605
 
 
3606
* Fixed render(:partial => "...") to use an empty Hash for the local assigns #1365
 
3607
 
 
3608
* Fixed Caching::Fragments::FileStore.delete to not raise an exception if the delete fails.
 
3609
 
 
3610
* Deprecated all render_* methods in favor of consolidating all rendering behavior in Base#render(options). This enables more natural use of combining options, such as layouts. Examples:
 
3611
 
 
3612
    +---------------------------------------------------------------+-------------------------------------------------------+
 
3613
    | BEFORE                                                        | AFTER                                                 |
 
3614
    +---------------------------------------------------------------+-------------------------------------------------------+
 
3615
    | render_with_layout "weblog/show", "200 OK", "layouts/dialog"  | render :action => "show", :layout => "dialog"         |
 
3616
    | render_without_layout "weblog/show"                           | render :action => "show", :layout => false            |
 
3617
    | render_action "error", "404 Not Found"                        | render :action => "error", :status => "404 Not Found" |
 
3618
    | render_template "xml.div('stuff')", "200 OK", :rxml           | render :inline => "xml.div('stuff')", :type => :rxml  |
 
3619
    | render_text "hello world!"                                    | render :text => "hello world!"                        |
 
3620
    | render_partial_collection "person", @people, nil, :a => 1     | render :partial => "person", :collection => @people,  |
 
3621
    |                                                               |        :locals => { :a => 1 }                         |
 
3622
    +---------------------------------------------------------------+-------------------------------------------------------+      
 
3623
 
 
3624
* Deprecated redirect_to_path and redirect_to_url in favor of letting redirect_to do the right thing when passed either a path or url.
 
3625
 
 
3626
* Fixed use of an integer as return code for renders, so render_text "hello world", 404 now works #1327
 
3627
 
 
3628
* Fixed assert_redirect_to to work with redirect_to_path #869 [Nicholas Seckar]
 
3629
 
 
3630
* Fixed escaping of :method option in remote_form_tag #1218 [Rick Olson]
 
3631
 
 
3632
* Added Serbia and Montenegro to the country_select #1239 [todd@robotcoop.com]
 
3633
 
 
3634
* Fixed Request#remote_ip in testing #1251 [Jeremy Kemper]
 
3635
 
 
3636
* Fixed that compute_public_path should recognize external URLs, so image_tag("http://www.example.com/images/icon.gif") is not prefixed with the relative url path #1254 [victor-ronr-trac@carotena.net]
 
3637
 
 
3638
* Added support for descending year values in DateHelper#select_year, like select_year(Date.today, :start_year => 2005, :end_year => 1900), which would count down from 2005 to 1900 instead of the other way #1274 [nwoods@mail.com]
 
3639
 
 
3640
* Fixed that FormHelper#checkbox should return a checked checkbox if the value is the same as checked_value #1286 [Florian Weber]
 
3641
 
 
3642
* Fixed Form.disable in Prototype #1317 [Wintermute]
 
3643
 
 
3644
* Added accessors to logger, params, response, session, flash, and headers from the view, so you can write <% logger.info "stuff" %> instead of <% @logger.info "others" %> -- more consistent with the preferred way of accessing these attributes and collections from the controller
 
3645
 
 
3646
* Added support for POST data in form of YAML or XML, which is controller through the Content-Type header. Example request:
 
3647
 
 
3648
    Content-Type: application/xml
 
3649
    <request><item><content>HelloWorld</content></item></request>
 
3650
  
 
3651
  ...is the same as:
 
3652
 
 
3653
    Content-Type: application/x-yaml
 
3654
    ---
 
3655
    item:
 
3656
      content: HelloWorld
 
3657
 
 
3658
  ...is the same as:
 
3659
  
 
3660
    item[content]=HelloWorld
 
3661
  
 
3662
  Which in the end turns into { "item" => { "content" => "HelloWorld" } }. This makes it a lot easier to publish REST web services on top of your regular actions (as they won't care).
 
3663
  
 
3664
  Example Curl call:
 
3665
 
 
3666
    curl -H 'Content-Type: application/xml' -d '<request><item><content>KillMeMore</content></item></request>' http://www.example.com/service
 
3667
 
 
3668
  You can query to find out whether a given request came through as one of these types with:
 
3669
    - request.post_format? (:url_encoded, :xml or :yaml)
 
3670
    - request.formatted_post? (for either xml or yaml)
 
3671
    - request.xml_post?
 
3672
    - request.yaml_post?
 
3673
 
 
3674
* Added bundling of XmlSimple by Maik Schmidt
 
3675
 
 
3676
* Fixed that render_partial_collection should always return a string (and not sometimes an array, despite <%= %> not caring)
 
3677
 
 
3678
* Added TextHelper#sanitize that can will remove any Javascript handlers, blocks, and forms from an input of HTML.  This allows for use of HTML on public sites, but still be free of XSS issues. #1277 [Jamis Buck]
 
3679
 
 
3680
* Fixed the HTML scanner used by assert_tag where a infinite loop could be caused by a stray less-than sign in the input #1270 [Jamis Buck]
 
3681
 
 
3682
* Added functionality to assert_tag, so you can now do tests on the siblings of a node, to assert that some element comes before or after the element in question, or just to assert that some element exists as a sibling #1226 [Jamis Buck]
 
3683
 
 
3684
* Added better error handling for regexp caching expiration
 
3685
 
 
3686
* Fixed handling of requests coming from unknown HTTP methods not to kill the server
 
3687
 
 
3688
* Added that both AssetHelper#stylesheet_link_tag and AssetHelper#javascript_include_tag now accept an option hash as the last parameter, so you can do stuff like: stylesheet_link_tag "style", :media => "all"
 
3689
 
 
3690
* Added FormTagHelper#image_submit_tag for making submit buttons that uses images
 
3691
 
 
3692
* Added ActionController::Base.asset_host that will then be used by all the asset helpers. This enables you to easily offload static content like javascripts and images to a separate server tuned just for that.
 
3693
 
 
3694
* Fixed action/fragment caching using the filestore when a directory and a file wanted to use the same name. Now there's a .cache prefix that sidesteps the conflict #1188 [imbcmdth@hotmail.com]
 
3695
 
 
3696
* Fixed missing id uniqueness in FormTag#radio_button #1207 [Jarkko Laine]
 
3697
 
 
3698
* Fixed assert_redirected_to to work with :only_path => false #1204 [Alisdair McDiarmid]
 
3699
 
 
3700
* Fixed render_partial_collection to output an empty string instead of nil when handed an empty array #1202 [Ryan Carver]
 
3701
 
 
3702
* Improved the speed of regular expression expirations for caching by a factor of 10 #1221 [Jamis Buck]
 
3703
 
 
3704
* Removed dumping of template assigns on the rescue page as it would very easily include a ton of data making page loads take seconds (and the information was rarely helpful) #1222
 
3705
 
 
3706
* Added BenchmarkHelper that can measure the execution time of a block in a template and reports the result to the log. Example:
 
3707
  
 
3708
    <% benchmark "Notes section" do %>
 
3709
      <%= expensive_notes_operation %>
 
3710
    <% end %>
 
3711
  
 
3712
   Will add something like "Notes section (0.345234)" to the log.
 
3713
 
 
3714
* Added ActionController::Caching::Sweeper as an improved an easier to use sweeper. The new sweepers work on a single-step approach instead of two-steps like the old ones. Before
 
3715
 
 
3716
    def after_save(record)
 
3717
      @list = record.is_a?(List) ? record : record.list
 
3718
    end
 
3719
    
 
3720
    def filter(controller)
 
3721
      controller.expire_page(:controller => "lists", :action => %w( show public feed ), :id => @list.id)
 
3722
      controller.expire_action(:controller => "lists", :action => "all")
 
3723
      @list.shares.each { |share| controller.expire_page(:controller => "lists", :action => "show", :id => share.url_key) }
 
3724
    end
 
3725
 
 
3726
  ..after:
 
3727
 
 
3728
    def after_save(record)
 
3729
      list = record.is_a?(List) ? record : record.list
 
3730
      expire_page(:controller => "lists", :action => %w( show public feed ), :id => list.id)
 
3731
      expire_action(:controller => "lists", :action => "all")
 
3732
      list.shares.each { |share| expire_page(:controller => "lists", :action => "show", :id => share.url_key) }
 
3733
    end
 
3734
 
 
3735
  The new sweepers can also observe on the actions themselves by implementing methods according to (before|after)_$controller_$action. Example of a callback that'll be called after PagesController#update_title has been performed:
 
3736
  
 
3737
      def after_pages_update_title
 
3738
        expire_fragment(%r{pages/#{controller.assigns["page"].id}/.*})
 
3739
      end
 
3740
 
 
3741
  Note that missing_method is delegated to the controller instance, which is assigned in a before filter. This means that you can call expire_fragment instead of @controller.expire_fragment.
 
3742
 
 
3743
* Added that Fragments#expire_fragment now accepts as a regular expression as the name thereby deprecating expire_matched_fragments
 
3744
 
 
3745
* Fixed that fragments shouldn't use the current host and the path as part of the key like pages does
 
3746
 
 
3747
* Added conditions to around_filters just like before_filter and after_filter
 
3748
 
 
3749
 
 
3750
*1.8.1* (20th April, 2005)
 
3751
 
 
3752
* Added xml_http_request/xhr method for simulating XMLHttpRequest in functional tests #1151 [Sam Stephenson]. Example:
 
3753
 
 
3754
    xhr :post, :index
 
3755
 
 
3756
* Fixed that Ajax.Base.options.asynchronous wasn't being respected in Ajax.Request (thanks Jon Casey)
 
3757
 
 
3758
* Fixed that :get, :post, and the others should take a flash array as the third argument just like process #1144 [rails@cogentdude.com]
 
3759
 
 
3760
* Fixed a problem with Flash.now
 
3761
 
 
3762
* Fixed stringification on all assigned hashes. The sacrifice is that assigns[:person] won't work in testing. Instead assigns["person"] or assigns(:person) must be used. In other words, the keys of assigns stay strings but we've added a method-based accessor to appease the need for symbols.
 
3763
 
 
3764
* Fixed that rendering a template would require a connection to the database #1146
 
3765
 
 
3766
 
 
3767
*1.8.0* (19th April, 2005)
 
3768
 
 
3769
* Added assert_tag and assert_no_tag as a much improved alternative to the deprecated assert_template_xpath_match #1126 [Jamis Buck]
 
3770
 
 
3771
* Deprecated the majority of all the testing assertions and replaced them with a much smaller core and access to all the collections the old assertions relied on. That way the regular test/unit assertions can be used against these. Added documentation about how to use it all.
 
3772
 
 
3773
* Added a wide range of new Javascript effects:
 
3774
    * Effect.Puff zooms the element out and makes it smoothly transparent at the same time, giving a "puff" illusion #996 [thomas@fesch.at]
 
3775
      After the animation is completed, the display property will be set to none. 
 
3776
      This effect will work on relative and absolute positioned elements.
 
3777
      
 
3778
    * Effect.Appear as the opposite of Effect.Fade #990 [thomas@fesch.at]
 
3779
      You should return elements with style="display:none;" or a like class for this to work best and have no chance of flicker.
 
3780
      
 
3781
    * Effect.Squish for scaling down an element and making it disappear at the end #972 [thomas@fesch.at]
 
3782
    
 
3783
    * Effect.Scale for smoothly scaling images or text up and down #972 [thomas@fesch.at]
 
3784
    
 
3785
    * Effect.Fade which smoothly turns opacity from 100 to 0 and then hides the element #960 [thomas@fesch.at]
 
3786
 
 
3787
* Added Request#xml_http_request? (and an alias xhr?) to that'll return true when the request came from one of the Javascript helper methods (Ajax). This can be used to give one behavior for modern browsers supporting Ajax, another to old browsers #1127 [Sam Stephenson]
 
3788
 
 
3789
* Changed render_partial to take local assigns as the second parameter instead of an explicit object and then the assigns. So the API changes from:
 
3790
 
 
3791
    <%= render_partial "account", person, "rules" => regulations.rules %>
 
3792
    
 
3793
  ...to:
 
3794
  
 
3795
    <%= render_partial "account", :account => person, :rules => regulations.rules %>
 
3796
  
 
3797
  The old API will still work, though, and render_partial "account" will still assume :account => @account.
 
3798
 
 
3799
* Added support for web servers that use PATH_INFO instead of REQUEST_URI like IIS #1014 [BradG/Nicholas Seckar]
 
3800
 
 
3801
* Added graceful handling of PUT, DELETE, and OPTIONS requests for a complete coverage of REST functionality #1136 [Josh Knowles]
 
3802
 
 
3803
* Fixed that you can now pass an alternative :href option to link_to_function/remote in order to point to somewhere other than # if the javascript fails or is turned off. You can do the same with form_remote_tag by passing in :action. #1113 [Sam Stephenson]
 
3804
 
 
3805
* Fixed DateHelper to return values on the option tags such that they'll work properly in IE with form_remote_tag #1024 [Scott Raymond]
 
3806
 
 
3807
* Fixed FormTagHelper#check_box to respect checked #1049 [DelynnB]
 
3808
 
 
3809
* Added that render_partial called from a controller will use the action name as default #828 [Dan Peterson]
 
3810
 
 
3811
* Added Element.toggle, Element.show, and Element.hide to the prototype javascript library. Toggle.display has been deprecated, but will still work #992 [Lucas Carlson]
 
3812
 
 
3813
* Added that deleting a cookie should not just set it to an empty string but also instantly expire it #1118 [todd@robotcoop.com]
 
3814
 
 
3815
* Added AssetTagHelper#image_path, AssetTagHelper#javascript_path, and AssetTagHelper#stylesheet_path #1110 [Larry Halff]
 
3816
 
 
3817
* Fixed url_for(nil) in functional tests #1116 [Alisdair McDiarmid]
 
3818
 
 
3819
* Fixed error handling of broken layouts #1115 [Michael Schubert]
 
3820
 
 
3821
* Added submit_to_remote that allows you to trigger an Ajax form submition at the click of the submission button, which allows for multiple targets in a single form through the use of multiple submit buttons #930 [yrashk@gmail.com]
 
3822
 
 
3823
* Fixed pagination to work with joins #1034 [scott@sigkill.org]
 
3824
 
 
3825
* Fixed that *rest parameter in map.connect couldn't accept an empty list #1037 [Dee Zsombor]
 
3826
 
 
3827
* Added :confirm option to link_to_remote just like link_to has #1082 [yrashk@fp.org.ua]
 
3828
 
 
3829
* Added minute_step as an option to select_minute (and the helpers that use it) to jump in larger increments than just 1 minute. At 15, it would return 0, 15, 30, 45 options #1085 [ordwaye@evergreen.edu]
 
3830
 
 
3831
* Fixed that an exception would be thrown when an empty form was submitted #1090 [jan@ulbrich-boerwang.de]
 
3832
 
 
3833
* Moved TextHelper#human_size to NumberHelper#number_to_human_size, but kept an deprecated alias to the old method name
 
3834
 
 
3835
* Fixed that the content-type for some browsers could include an additional \r which made wonky things happen #1067 [Thomas Fuchs]
 
3836
 
 
3837
* Fixed that radio buttons shouldn't have a default size attribute #1074 [hendrik@mans.de]
 
3838
 
 
3839
* Added ActionView::Helpers::InstanceTag::DEFAULT_RADIO_OPTIONS that contains a hash of default options for radio buttons #1074 [hendrik@mans.de]
 
3840
 
 
3841
* Fixed that in some circumstances controllers outside of modules may have hidden ones inside modules. For example, admin/content might have been hidden by /content. #1075 [Nicholas Seckar]
 
3842
 
 
3843
* Added JavascriptHelper#periodically_call_remote in order to create areas of a page that update automatically at a set interval #945 [Jon Tirsen]
 
3844
 
 
3845
* Fixed Cache#expire_matched_fragments that couldn't recognize the difference between string and url_for options #1030 [Stefan Kaes]
 
3846
 
 
3847
* Added simulation of @request.request_uri in functional tests #1038 [Jamis Buck]
 
3848
 
 
3849
* Fixed autolinking to work better in more cases #1013 [Jamis Buck]
 
3850
 
 
3851
* Added the possible of using symbols in form helpers that relate to instance variables like text_field :account, :name in addition to text_field "account", "name"'
 
3852
 
 
3853
* Fixed javascript_include_tag to output type instead of language and conform to XHTML #1018 [Rick Olson]
 
3854
 
 
3855
* Added NumberHelper for common string representations like phone number, currency, and percentage #1015 [DeLynn]
 
3856
 
 
3857
* Added pagination for scaffolding (10 items per page) #964 [mortonda@dgrmm.net]
 
3858
 
 
3859
* Added assert_no_cookie and fixed assert_cookie_equal to deal with non-existing cookies #979 [Jeremy Kemper]
 
3860
 
 
3861
* Fixed :overwrite_param so it doesn't delete but reject elements from @request.parameters #982 [raphinou@yahoo.com]
 
3862
 
 
3863
* Added :method option to verify for ensuring that either GET, POST, etc is allowed #984 [Jamis Buck]
 
3864
 
 
3865
* Added options to set cc, bcc, subject, and body for UrlHelper#mail_to #966 [DeLynn]
 
3866
 
 
3867
* Fixed include_blank for select_hour/minute/second #527 [edward@debian.org]
 
3868
 
 
3869
* Improved the message display on the exception handler pages #963 [Johan Sorensen]
 
3870
 
 
3871
* Fixed that on very rare occasions, webrick would raise a NoMethodError: private method 'split' called for nil #1001 [Flurin Egger]
 
3872
 
 
3873
* Fixed problem with page caching #958 [Rick Olson]
 
3874
 
 
3875
 
 
3876
*1.7.0* (27th March, 2005)
 
3877
 
 
3878
* Added ActionController::Base.page_cache_extension for setting the page cache file extension (the default is .html) #903 [Andreas]
 
3879
 
 
3880
* Fixed "bad environment variable value" exception caused by Safari, Apache, and Ajax calls #918
 
3881
 
 
3882
* Fixed that pagination_helper would ignore :params #947 [Sebastian Kanthak]
 
3883
 
 
3884
* Added :owerwrite_params back to url_for and friends -- it was AWL since the introduction of Routes #921 [raphinou]
 
3885
 
 
3886
* Added :position option to link_to_remote/form_remote_tag that can be either :before, :top, :bottom, or :after and specifies where the return from the method should be inserted #952 [Matthew McCray/Sam Stephenson]
 
3887
 
 
3888
* Added Effect.Highlight to prototype.js to do Yellow Fade Technique (of 37signals' fame) on any container #952 [Sam Stephenson/court3nay]
 
3889
 
 
3890
* Added include_seconds option as the third parameter to distance_of_time_in_words which will render "less than a minute" in higher resolution ("less than 10 seconds" etc) #944 [thomas@fesch.at]
 
3891
 
 
3892
* Added fourth option to process in test cases to specify the content of the flash #949 [Jamis Buck]
 
3893
 
 
3894
* Added Verifications that allows you to specify preconditions to actions in form of statements like <tt>verify :only => :update_post, :params => "admin_privileges", :redirect_to => { :action => "settings" }</tt>, which ensure that the update_post action is only called if admin_privileges is available as a parameter -- otherwise the user is redirected to settings. #897 [Jamis Buck]
 
3895
 
 
3896
* Fixed Form.Serialize for the JavascriptHelper to also seriliaze password fields #934 [dweitzman@gmail.com]
 
3897
 
 
3898
* Added JavascriptHelper#escape_javascript as a public method (was private) and made it escape both single and double quotes and new lines #940 [mortonda@dgrmm.net]
 
3899
 
 
3900
* Added trailing_slash option to url_for, so you can generate urls ending in a slash. Note that is currently not recommended unless you need it for special reasons since it breaks caching #937 [stian@grytoyr.net]
 
3901
 
 
3902
* Added expire_matched_fragments(regular_expression) to clear out a lot of fragment caches at once #927 [Rick Olson]
 
3903
 
 
3904
* Fixed the problems with : and ? in file names for fragment caches on Windows #927 [Rick Olson]
 
3905
 
 
3906
* Added TextHelper#human_size for formatting file sizes, like human_size(1234567) => 1.2 MB #943 [thomas@fesch.at]
 
3907
 
 
3908
* Fixed link_to :confirm #936 [Nicholas Seckar]
 
3909
 
 
3910
* Improved error reporting especially around never shallowing exceptions. Debugging helpers should be much easier now #980 [Nicholas Seckar]
 
3911
 
 
3912
* Fixed Toggle.display in prototype.js #902 [Lucas Carlson]
 
3913
 
 
3914
 
 
3915
*1.6.0* (22th March, 2005)
 
3916
 
 
3917
* Added a JavascriptHelper and accompanying prototype.js library that opens the world of Ajax to Action Pack with a large array of options for dynamically interacting with an application without reloading the page #884 [Sam Stephenson/David]
 
3918
 
 
3919
* Added pagination support through both a controller and helper add-on #817 [Sam Stephenson]
 
3920
 
 
3921
* Fixed routing and helpers to make Rails work on non-vhost setups #826 [Nicholas Seckar/Tobias LĆ¼tke]
 
3922
 
 
3923
* Added a much improved Flash module that allows for finer-grained control on expiration and allows you to flash the current action #839 [Caio Chassot]. Example of flash.now:
 
3924
 
 
3925
    class SomethingController < ApplicationController
 
3926
      def save
 
3927
        ...
 
3928
        if @something.save
 
3929
          # will redirect, use flash
 
3930
          flash[:message] = 'Save successful'
 
3931
          redirect_to :action => 'list'
 
3932
        else
 
3933
          # no redirect, message is for current action, use flash.now
 
3934
          flash.now[:message] = 'Save failed, review'
 
3935
          render_action 'edit'
 
3936
        end
 
3937
      end    
 
3938
    end
 
3939
 
 
3940
* Added to_param call for parameters when composing an url using url_for from something else than strings #812 [Sam Stephenson]. Example:
 
3941
 
 
3942
    classĀ Page
 
3943
    Ā Ā defĀ initialize(number)
 
3944
    Ā Ā Ā Ā @numberĀ =Ā number
 
3945
    Ā Ā end
 
3946
    Ā Ā #Ā ...
 
3947
    Ā Ā defĀ to_param
 
3948
    Ā Ā Ā Ā @number.to_s
 
3949
    Ā Ā end
 
3950
    end
 
3951
 
 
3952
  You can now use instances of Page with url_for:
 
3953
 
 
3954
    classĀ BarControllerĀ <Ā ApplicationController
 
3955
    Ā Ā defĀ baz
 
3956
    Ā Ā Ā Ā pageĀ =Ā Page.new(4)
 
3957
    Ā Ā Ā Ā urlĀ =Ā url_forĀ :pageĀ =>Ā pageĀ #Ā =>Ā "http://foo/bar/baz?page=4"
 
3958
    Ā Ā end
 
3959
    end
 
3960
 
 
3961
* Fixed form helpers to query Model#id_before_type_cast instead of Model#id as a temporary workaround for Ruby 1.8.2 warnings #818 [DeLynn B]
 
3962
 
 
3963
* Fixed TextHelper#markdown to use blank? instead of empty? so it can deal with nil strings passed #814 [Johan Sƶrensen]
 
3964
 
 
3965
* Added TextHelper#simple_format as a non-dependency text presentation helper #814 [Johan Sƶrensen]
 
3966
 
 
3967
* Added that the html options disabled, readonly, and multiple can all be treated as booleans. So specifying <tt>disabled => :true</tt> will give <tt>disabled="disabled"</tt>. #809 [mindel]
 
3968
 
 
3969
* Added path collection syntax for Routes that will gobble up the rest of the url and pass it on to the controller #830 [rayners]. Example:
 
3970
 
 
3971
    map.connect 'categories/*path_info', :controller => 'categories', :action => 'show'
 
3972
 
 
3973
  A request for /categories/top-level-cat, would give @params[:path_info] with "top-level-cat".
 
3974
  A request for /categories/top-level-cat/level-1-cat, would give @params[:path_info] with "top-level-cat/level-1-cat" and so forth.
 
3975
  
 
3976
  The @params[:path_info] return is really an array, but where to_s has been overwritten to do join("/").
 
3977
 
 
3978
* Fixed options_for_select on selected line issue #624 [Florian Weber]
 
3979
 
 
3980
* Added CaptureHelper with CaptureHelper#capture and CaptureHelper#content_for. See documentation in helper #837 [Tobias LĆ¼tke]
 
3981
 
 
3982
* Fixed :anchor use in url_for #821 [Nicholas Seckar]
 
3983
 
 
3984
* Removed the reliance on PATH_INFO as it was causing problems for caching and inhibited the new non-vhost support #822 [Nicholas Seckar]
 
3985
 
 
3986
* Added assigns shortcut for @response.template.assigns to controller test cases [Jeremy Kemper]. Example:
 
3987
 
 
3988
  Before:
 
3989
 
 
3990
    def test_list
 
3991
      assert_equal 5, @response.template.assigns['recipes'].size
 
3992
      assert_equal 8, @response.template.assigns['categories'].size
 
3993
    end
 
3994
 
 
3995
  After:
 
3996
 
 
3997
    def test_list
 
3998
      assert_equal 5, assigns(:recipes).size
 
3999
      assert_equal 8, assigns(:categories).size
 
4000
    end
 
4001
 
 
4002
* Added TagHelper#image_tag and deprecated UrlHelper#link_image_to (recommended approach is to combine image_tag and link_to instead)
 
4003
 
 
4004
* Fixed textilize to be resilient to getting nil parsed (by using Object#blank? instead of String#empty?)
 
4005
 
 
4006
* Fixed that the :multipart option in FormTagHelper#form_tag would be ignored [Yonatan Feldman]
 
4007
 
 
4008
 
 
4009
*1.5.1* (7th March, 2005)
 
4010
 
 
4011
* Fixed that the routes.rb file wouldn't be found on symlinked setups due to File.expand_path #793 [piotr@t-p-l.com]
 
4012
 
 
4013
* Changed ActiveRecordStore to use Marshal instead of YAML as the latter proved troublesome in persisting circular dependencies. Updating existing applications MUST clear their existing session table from data to start using this updated store #739 [Jamis Buck]
 
4014
 
 
4015
* Added shortcut :id assignment to render_component and friends (before you had to go through :params) #784 [Lucas Carlson]
 
4016
 
 
4017
* Fixed that map.connect should convert arguments to strings #780 [Nicholas Seckar]
 
4018
 
 
4019
* Added UrlHelper#link_to_if/link_to_unless to enable other conditions that just link_to_unless_current #757 [mindel]
 
4020
 
 
4021
* Fixed that single quote was not escaped in a UrlHelper#link_to javascript confirm #549 [Scott Barron]
 
4022
 
 
4023
* Removed the default border on link_image_to (it broke xhtml strict) -- can be specified with :border => 0 #517 [?/caleb]
 
4024
 
 
4025
* Fixed that form helpers would treat string and symbol keys differently in html_options (and possibly create duplicate entries) #112 [Jeremy Kemper]
 
4026
 
 
4027
* Fixed that broken pipe errors (clients disconnecting in mid-request) could bring down a fcgi process
 
4028
 
 
4029
* Added the original exception message to session recall errors (so you can see which class wasnt required)
 
4030
 
 
4031
* Fixed that RAILS_ROOT might not be defined when AP was loaded, so do a late initialization of the ROUTE_FILE #761 [Scott Barron]
 
4032
 
 
4033
* Fix request.path_info and clear up LoadingModule behavior #754 [Nicholas Seckar]
 
4034
 
 
4035
* Fixed caching to be aware of extensions (so you can cache files like api.wsdl or logo.png) #734 [Nicholas Seckar]
 
4036
 
 
4037
* Fixed that Routes would raise NameErrors if a controller component contains characters that are not valid constant names #733 [Nicholas Seckar]
 
4038
 
 
4039
* Added PATH_INFO access from the request that allows urls like the following to be interpreted by rails: http://www.example.com/dispatcher.cgi/controller/action -- that makes it possible to use rails as a CGI under lighttpd and would also allow (for example) Rublog to be ported to rails without breaking existing links to Rublog-powered blogs. #728 [Jamis Buck]
 
4040
 
 
4041
* Fixed that caching the root would result in .html not index.html #731, #734 [alisdair/Nicholas Seckar]
 
4042
 
 
4043
 
 
4044
*1.5.0* (24th February, 2005)
 
4045
 
 
4046
* Added Routing as a replacement for mod_rewrite pretty urls [Nicholas Seckar]. Read more in ActionController::Base.url_for and on http://manuals.rubyonrails.com/read/book/9
 
4047
 
 
4048
* Added components that allows you to call other actions for their rendered response while execution another action. You can either delegate the entire response rendering or you can mix a partial response in with your other content. Read more on http://manuals.rubyonrails.com/read/book/14
 
4049
 
 
4050
*Ā Fixed that proxy IPs do not follow all RFC1918 nets #251 [caleb@aei-tech.com]
 
4051
 
 
4052
* Added Base#render_to_string to parse a template and get the result back as a string #479
 
4053
 
 
4054
* Fixed that send_file/data can work even if render* has been called before in action processing to render the content of a file to be send for example #601
 
4055
 
 
4056
* Added FormOptionsHelper#time_zone_select and FormOptionsHelper#time_zone_options_for_select to work with the new value object TimeZone in Active Support #688 [Jamis Buck]
 
4057
 
 
4058
* Added FormHelper#file_field and FormTagHelper#file_field_tag for creating file upload fields
 
4059
 
 
4060
* Added :order option for date_select that allows control over the order in which the date dropdowns is used and which of them should be used #619 [Tim Bates]. Examples:
 
4061
 
 
4062
    date_select("post", "written_on", :order => [:day, :month, :year])
 
4063
    date_select("user", "birthday",   :order => [:month, :day])
 
4064
 
 
4065
* Added ActionView::Base.register_template_handler for easy integration of an alternative template language to ERb and Builder. See test/controller/custom_handler_test.rb for a usage example #656 [Jamis Buck]
 
4066
 
 
4067
* Added AssetTagHelper that provides methods for linking a HTML page together with other assets, such as javascripts, stylesheets, and feeds.
 
4068
 
 
4069
* Added FormTagHelper that provides a number of methods for creating form tags that doesn't rely on conventions with an object assigned to the template like FormHelper does. With the FormTagHelper, you provide the names and values yourself.
 
4070
 
 
4071
* Added Afghanistan, Iran, and Iraq to the countries list used by FormOptions#country_select and FormOptions#country_options_for_select
 
4072
 
 
4073
* Renamed link_to_image to link_image_to (since thats what it actually does) -- kept alias for the old method name
 
4074
 
 
4075
* Fixed textilize for RedCloth3 to keep doing hardbreaks
 
4076
 
 
4077
* Fixed that assert_template_xpath_matches did not indicate when a path was not found #658 [Eric Hodel]
 
4078
 
 
4079
* Added TextHelper#auto_link to turn email addresses and urls into ahrefs
 
4080
 
 
4081
* Fixed that on validation errors, scaffold couldn't find template #654 [mindel]
 
4082
 
 
4083
* Added Base#hide_action(*names) to hide public methods from a controller that would otherwise have been callable through the URL. For the majority of cases, its preferred just to make the methods you don't want to expose protected or private (so they'll automatically be hidden) -- but if you must have a public method, this is a way to make it uncallable. Base#hidden_actions retrieve the list of all hidden actions for the controller #644 [Nicholas Seckar]
 
4084
 
 
4085
* Fixed that a bunch of methods from ActionController::Base was accessible as actions (callable through a URL) when they shouldn't have been #644 [Nicholas Seckar]
 
4086
 
 
4087
* Added UrlHelper#current_page?(options) method to check if the url_for options passed corresponds to the current page
 
4088
 
 
4089
* Fixed https handling on other ports than 443 [Alan Gano]
 
4090
 
 
4091
* Added follow_redirect method for functional tests that'll get-request the redirect that was made. Example:
 
4092
 
 
4093
    def test_create_post
 
4094
      post :create, "post" => { "title" => "Exciting!" }
 
4095
      assert_redirected_to :action => "show"
 
4096
      
 
4097
      follow_redirect
 
4098
      assert_rendered_file "post/show"
 
4099
    end
 
4100
  
 
4101
  Limitation: Only works for redirects to other actions within the same controller.
 
4102
 
 
4103
* Fixed double requiring of models with the same name as the controller
 
4104
 
 
4105
* Fixed that query params could be forced to nil on a POST due to the raw post fix #562 [moriq@moriq.com]
 
4106
 
 
4107
* Fixed that cookies shouldn't be frozen in TestRequest #571 [Eric Hodel]
 
4108
 
 
4109
 
 
4110
*1.4.0* (January 25th, 2005)
 
4111
 
 
4112
* Fixed problems with ActiveRecordStore under the development environment in Rails
 
4113
 
 
4114
* Fixed the ordering of attributes in the xml-decleration of Builder #540 [woeye]
 
4115
 
 
4116
* Added @request.raw_post as a convenience access to @request.env['RAW_POST_DATA'] #534 [Tobias LĆ¼tke]
 
4117
 
 
4118
* Added support for automatic id-based indexing for lists of items #532 [dblack]. Example:
 
4119
 
 
4120
    <% @students.each do |@student| %>
 
4121
      <%= text_field "student[]", "first_name", :size => "20" %>
 
4122
      <%= text_field "student[]", "last_name" %>
 
4123
      <%= text_field "student[]", "grade", :size => "5" %>
 
4124
    <% end %>
 
4125
  
 
4126
  ...would produce, for say David Black with id 123 and a grace of C+:
 
4127
  
 
4128
    <input id="student_123_first_name" name="student[123][first_name]" size="20"     size="30" type="text" value="David" />
 
4129
    <input id="student_123_last_name" name="student[123][last_name]" size="30"  type="text" value="Black" />
 
4130
    <input id="student_123_grade" name="student[123][grade]" size="5" type="text"  value="C+" />
 
4131
 
 
4132
* Added :application_prefix to url_for and friends that makes it easier to setup Rails in non-vhost environments #516 [Jamis Buck]
 
4133
 
 
4134
* Added :encode option to mail_to that'll allow you to masquarede the email address behind javascript or hex encoding #494 [Lucas Carlson]
 
4135
 
 
4136
* Fixed that the content-header was being set to application/octet_stream instead of application/octet-stream on send_date/file [Alexey]
 
4137
 
 
4138
* Removed the need for passing the binding when using CacheHelper#cache
 
4139
 
 
4140
* Added TestResponse#binary_content that'll return as a string the data sent through send_data/send_file for testing #500 [Alexey]
 
4141
 
 
4142
* Added @request.env['RAW_POST_DATA'] for people who need access to the data before Ruby's CGI has parsed it #505 [Jeremy Kemper]
 
4143
 
 
4144
* Fixed that a default fragment store wan't being set to MemoryStore as intended.
 
4145
 
 
4146
* Fixed that all redirect and render calls now return true, so you can use the pattern of "do and return". Example:
 
4147
 
 
4148
    def show
 
4149
      redirect_to(:action => "login") and return unless @person.authenticated?
 
4150
      render_text "I won't happen unless the person is authenticated"
 
4151
    end
 
4152
 
 
4153
* Added that renders and redirects called in before_filters will have the same effect as returning false: stopping the chain. Example:
 
4154
 
 
4155
    class WeblogController
 
4156
      before_filter { |c| c.send(:redirect_to_url("http://www.farfaraway.com")}) }
 
4157
      
 
4158
      def hello
 
4159
        render_text "I will never be called"
 
4160
      end
 
4161
    end
 
4162
 
 
4163
 
 
4164
* Added that only one render or redirect can happen per action. The first call wins and subsequent calls are ignored. Example:
 
4165
 
 
4166
    def do_something
 
4167
      redirect_to :action => "elsewhere"
 
4168
      render_action "overthere"
 
4169
    end
 
4170
  
 
4171
  Only the redirect happens. The rendering call is simply ignored.
 
4172
 
 
4173
 
 
4174
*1.3.1* (January 18th, 2005)
 
4175
 
 
4176
* Fixed a bug where cookies wouldn't be set if a symbol was used instead of a string as the key
 
4177
 
 
4178
* Added assert_cookie_equal to assert the contents of a named cookie
 
4179
 
 
4180
* Fixed bug in page caching that prevented it from working at all 
 
4181
 
 
4182
 
 
4183
*1.3.0* (January 17th, 2005)
 
4184
 
 
4185
* Added an extensive caching module that offers three levels of granularity (page, action, fragment) and a variety of stores. 
 
4186
  Read more in ActionController::Caching.
 
4187
 
 
4188
* Added the option of passing a block to ActiveRecordHelper#form in order to add more to the auto-generated form #469 [dom@sisna.com]
 
4189
 
 
4190
    form("entry", :action => "sign") do |form|
 
4191
      form << content_tag("b", "Department")
 
4192
      form << collection_select("department", "id", @departments, "id", "name")
 
4193
    end
 
4194
 
 
4195
* Added arrays as a value option for params in url_for and friends #467 [Eric Anderson]. Example:
 
4196
 
 
4197
    url_for(:controller => 'user', :action => 'delete', :params => { 'username' =>  %( paul john steve ) } )
 
4198
    # => /user/delete?username[]=paul&username[]=john&username[]=steve
 
4199
 
 
4200
* Fixed that controller tests can now assert on the use of cookies #466 [Alexey]
 
4201
 
 
4202
* Fixed that send_file would "remember" all the files sent by adding to the headers again and again #458 [Jeremy Kemper]
 
4203
 
 
4204
* Fixed url rewriter confusion when the controller or action name was a substring of the controller_prefix or action_prefix
 
4205
 
 
4206
* Added conditional layouts like <tt>layout "weblog_standard", :except => :rss</tt> #452 [Marcel Molina Jr.]
 
4207
 
 
4208
* Fixed that MemCacheStore wasn't included by default and added default MemCache object pointing to localhost #447 [Lucas Carlson]
 
4209
 
 
4210
* Added fourth argument to render_collection_of_partials that allows you to specify local_assigns -- just like render_partial #432 [Ryan Davis]
 
4211
 
 
4212
* Fixed that host would choke when cgi.host returned nil #432 [Tobias LĆ¼tke]
 
4213
 
 
4214
* Added that form helpers now take an index option #448 [Tim Bates]
 
4215
 
 
4216
  Example:
 
4217
    text_field "person", "name", "index" => 3
 
4218
 
 
4219
  Becomes:
 
4220
    <input type="text" name="person[3][name]" id="person_3_name" value="<%= @person.name %>" />
 
4221
 
 
4222
* Fixed three issues with retrying breakpoints #417 [Florian Gross]
 
4223
 
 
4224
  1. Don't screw up pages that use multiple values for the same parameter (?foo=bar&foo=qux was converted to ?foo=barqux) 
 
4225
  2. Don't screw up all forms when you click the "Retry with Breakpoint" link multiple times instead of reloading 
 
4226
     (This caused the parameters to be added multiple times for GET forms leading to trouble.) 
 
4227
  3. Don't add ?BP-RETRY=1 multiple times
 
4228
 
 
4229
* Added that all renders and redirects now return false, so they can be used as the last line in before_filters to stop execution.
 
4230
 
 
4231
  Before:
 
4232
    def authenticate
 
4233
      unless @session[:authenticated]
 
4234
        redirect_to :controller => "account", :action => "login"
 
4235
        return false
 
4236
      end
 
4237
    end
 
4238
  
 
4239
  After:
 
4240
    def authenticate
 
4241
      redirect_to(:controller => "account", :action => "login") unless @session[:authenticated]
 
4242
    end
 
4243
 
 
4244
* Added conditional filters #431 [Marcel Molina Jr.]. Example:
 
4245
 
 
4246
    class JournalController < ActionController::Base
 
4247
      # only require authentication if the current action is edit or delete
 
4248
      before_filter :authorize, :only_on => [ :edit, :delete ]
 
4249
    
 
4250
      private
 
4251
        def authorize
 
4252
          # redirect to login unless authenticated
 
4253
        end
 
4254
    end
 
4255
 
 
4256
* Added Base#render_nothing as a cleaner way of doing render_text "" when you're not interested in returning anything but an empty response.
 
4257
 
 
4258
* Added the possibility of passing nil to UrlHelper#link_to to use the link itself as the name
 
4259
 
 
4260
 
 
4261
*1.2.0* (January 4th, 2005)
 
4262
 
 
4263
* Added MemCacheStore for storing session data in Danga's MemCache system [Bob Cottrell]
 
4264
  Depends on: MemCached server (http://www.danga.com/memcached/), MemCache client (http://raa.ruby-lang.org/project/memcache/)
 
4265
 
 
4266
* Added thread-safety to the DRbStore #66, #389 [Ben Stiglitz]
 
4267
 
 
4268
* Added DateHelper#select_time and DateHelper#select_second #373 [Scott Baron]
 
4269
 
 
4270
* Added :host and :protocol options to url_for and friends to redirect to another host and protocol than the current.
 
4271
 
 
4272
* Added class declaration for the MissingFile exception #388 [Kent Sibilev]
 
4273
 
 
4274
* Added "short hypertext note with a hyperlink to the new URI(s)" to redirects to fulfill compliance with RFC 2616 (HTTP/1.1) section 10.3.3 #397 [Tim Bates]
 
4275
 
 
4276
* Added second boolean parameter to Base.redirect_to_url and Response#redirect to control whether the redirect is permanent or not (301 vs 302) #375 [Hodel]
 
4277
 
 
4278
* Fixed redirects when the controller and action is named the same. Still haven't fixed same controller, module, and action, though #201 [Josh Peek]
 
4279
 
 
4280
* Fixed problems with running multiple functional tests in Rails under 1.8.2 by including hack for test/unit weirdness
 
4281
 
 
4282
* Fixed that @request.remote_ip didn't work in the test environment #369 [Bruno Mattarollo]
 
4283
 
 
4284
 
 
4285
*1.1.0*
 
4286
 
 
4287
* Added search through session to clear out association caches at the end of each request. This makes it possible to place Active Record objects
 
4288
  in the session without worrying about stale data in the associations (the main object is still subject to caching, naturally) #347 [Tobias LĆ¼tke]
 
4289
 
 
4290
* Added more informative exception when using helper :some_helper and the helper requires another file that fails, you'll get an
 
4291
  error message tells you what file actually failed to load, rather than falling back on assuming it was the helper file itself #346 [dblack]
 
4292
 
 
4293
* Added use of *_before_type_cast for all input and text fields. This is helpful for getting "100,000" back on a integer-based 
 
4294
  validation where the value would normally be "100".
 
4295
 
 
4296
* Added Request#port_string to get something like ":8080" back on 8080 and "" on 80 (or 443 with https).
 
4297
 
 
4298
* Added Request#domain (returns string) and Request#subdomains (returns array).
 
4299
 
 
4300
* Added POST support for the breakpoint retries, so form processing that raises an exception can be retried with the original request [Florian Gross]
 
4301
 
 
4302
* Fixed regression with Base#reset_session that wouldn't use the DEFAULT_SESSION_OPTIONS [adam@the-kramers.net]
 
4303
 
 
4304
* Fixed error rendering of rxml documents to not just swallow the exception and return 0 (still not guessing the right line, but hey)
 
4305
 
 
4306
* Fixed that textilize and markdown would instantiate their engines even on empty strings. This also fixes #333 [Ulysses]
 
4307
 
 
4308
* Fixed UrlHelper#link_to_unless so it doesn't care if the id is a string or fixnum [Ryan Davis]
 
4309
 
 
4310
 
 
4311
*1.0.1*
 
4312
 
 
4313
* Fixed a bug that would cause an ApplicationController to require itself three times and hence cause filters to be run three times [evl]
 
4314
 
 
4315
 
 
4316
*1.0*
 
4317
 
 
4318
* Added that controllers will now attempt to require a model dependency with their name and in a singular attempt for their name.
 
4319
  So both PostController and PostsController will automatically have the post.rb model required. If no model is found, no error is raised,
 
4320
  as it is then expected that no match is available and the programmer will have included his own models.
 
4321
 
 
4322
* Fixed DateHelper#date_select so that you can pass include_blank as an option even if you don't use start_year and end_year #59 [what-a-day]
 
4323
 
 
4324
* Added that controllers will now search for a layout in $template_root/layouts/$controller_name.r(html|xml), so PostsController will look
 
4325
  for layouts/posts.rhtml or layouts/posts.rxml and automatically configure this layout if found #307 [Marcel Molina Jr.]
 
4326
 
 
4327
* Added FormHelper#radio_button to work with radio buttons like its already possible with check boxes [Michael Koziarski]
 
4328
 
 
4329
* Added TemplateError#backtrace that makes it much easier to debug template errors from unit and functional tests
 
4330
 
 
4331
* Added display of error messages with scaffolded form pages
 
4332
 
 
4333
* Added option to ERB templates to swallow newlines by using <% if something -%> instead of just <% if something %>. Example:
 
4334
 
 
4335
    class SomeController < ApplicationController
 
4336
    <% if options[:scaffold] %>
 
4337
      scaffold :<%= singular_name %>
 
4338
    <% end %>
 
4339
      helper :post
 
4340
  
 
4341
  ...produces this on post as singular_name:
 
4342
 
 
4343
    class SomeController < ApplicationController
 
4344
    
 
4345
      scaffold :post
 
4346
    
 
4347
      helper :post
 
4348
  
 
4349
  ...where as:
 
4350
 
 
4351
    class SomeController < ApplicationController
 
4352
    <% if options[:scaffold] -%>
 
4353
      scaffold :<%= singular_name %>
 
4354
    <% end -%>
 
4355
      helper :post
 
4356
  
 
4357
  ...produces:
 
4358
 
 
4359
    class SomeController < ApplicationController
 
4360
      scaffold :post
 
4361
      helper :post
 
4362
  
 
4363
  [This undocumented gem for ERb was uncovered by bitsweat]
 
4364
 
 
4365
* Fixed CgiRequest so that it'll now accept session options with Symbols as keys (as the documentation points out) [Suggested by Andreas]
 
4366
 
 
4367
* Added that render_partial will always by default include a counter with value 1 unless there is a counter passed in via the 
 
4368
  local_assigns hash that overrides it. As a result, render_collection_of_partials can still be written in terms of render_partial
 
4369
  and partials that make use of a counter can be called without problems from both render_collection_of_partials as well as
 
4370
  render_partial #295 [Marcel Molina Jr.]
 
4371
 
 
4372
* Fixed CgiRequest#out to fall back to #write if $stdout doesn't have #syswrite [Jeremy Kemper]
 
4373
 
 
4374
* Fixed all helpers so that they use XHTML compliant double quotes for values instead of single quotes [htonl/Jeremy Kemper]
 
4375
 
 
4376
* Added link_to_image(src, options = {}, html_options = {}). Documentation:
 
4377
 
 
4378
    Creates a link tag to the image residing at the +src+ using an URL created by the set of +options+. See the valid options in
 
4379
    link:classes/ActionController/Base.html#M000021. It's also possible to pass a string instead of an options hash to
 
4380
    get a link tag that just points without consideration. The <tt>html_options</tt> works jointly for the image and ahref tag by
 
4381
    letting the following special values enter the options on the image and the rest goes to the ahref:
 
4382
    
 
4383
    ::alt: If no alt text is given, the file name part of the +src+ is used (capitalized and without the extension)
 
4384
    ::size: Supplied as "XxY", so "30x45" becomes width="30" and height="45"
 
4385
    ::align: Sets the alignment, no special features
 
4386
    
 
4387
    The +src+ can be supplied as a... 
 
4388
    * full path, like "/my_images/image.gif"
 
4389
    * file name, like "rss.gif", that gets expanded to "/images/rss.gif"
 
4390
    * file name without extension, like "logo", that gets expanded to "/images/logo.png"
 
4391
 
 
4392
* Fixed to_input_field_tag so it no longer explicitly uses InstanceTag.value if value was specified in the options hash [evl]
 
4393
 
 
4394
* Added the possibility of having validate be protected for assert_(in)valid_column #263 [Tobias LĆ¼tke]
 
4395
 
 
4396
* Added that ActiveRecordHelper#form now calls url_for on the :action option.
 
4397
 
 
4398
* Added all the HTTP methods as alternatives to the generic "process" for functional testing #276 [Tobias LĆ¼tke]. Examples:
 
4399
 
 
4400
    # Calls Controller#miletone with a GET request
 
4401
    process :milestone
 
4402
    
 
4403
    # Calls Controller#miletone with a POST request that has parameters
 
4404
    post :milestone, { "name" => "David" }
 
4405
    
 
4406
    # Calls Controller#milestone with a HEAD request that has both parameters and session data
 
4407
    head :milestone, { "id" => 1 }, { "user_id" => 23 }
 
4408
 
 
4409
  This is especially useful for testing idiomatic REST web services.
 
4410
 
 
4411
* Added proper handling of HEAD requests, so that content isn't returned (Request#head? added as well) #277 [Eric Hodel]
 
4412
 
 
4413
* Added indifference to whether @headers["Content-Type"], @headers["Content-type"], or @headers["content-type"] is used.
 
4414
 
 
4415
* Added TestSession#session_id that returns an empty string to make it easier to functional test applications that doesn't use 
 
4416
  cookie-based sessions #275 [jcf]
 
4417
 
 
4418
* Fixed that cached template loading would still check the file system to see if the file existed #258 [Andreas Schwarz]
 
4419
 
 
4420
* Added options to tailor header tag, div id, and div class on ActiveRecordHelper#error_messages_for [Josh Peek]
 
4421
 
 
4422
* Added graceful handling of non-alphanumeric names and misplaced brackets in input parameters [Jeremy Kemper]
 
4423
 
 
4424
* Added a new container for cookies that makes them more intuative to use. The old methods of cookie and @cookies have been deprecated.
 
4425
 
 
4426
  Examples for writing:
 
4427
 
 
4428
    cookies["user_name"] = "david" # => Will set a simple session cookie
 
4429
    cookies["login"] = { "value" => "XJ-122", "expires" => Time.now + 360} # => Will set a cookie that expires in 1 hour
 
4430
    
 
4431
  Examples for reading:
 
4432
  
 
4433
    cookies["user_name"] # => "david"
 
4434
    cookies.size         # => 2
 
4435
 
 
4436
  Read more in ActionController::Cookies
 
4437
 
 
4438
  NOTE: If you were using the old accessor (cookies instead of @cookies), this could potentially break your code -- if you expect a full cookie object!
 
4439
 
 
4440
* Added the opportunity to defined method_missing on a controller which will handle all requests for actions not otherwise defined #223 [timb]
 
4441
 
 
4442
* Fixed AbstractRequest#remote_ip for users going through proxies - Patch #228 [Eric Hodel]
 
4443
 
 
4444
* Added Request#ssl? which is shorthand for @request.protocol == "https://"
 
4445
 
 
4446
* Added the choice to call form_tag with no arguments (resulting in a form posting to current action) [Jeremy Kemper]
 
4447
 
 
4448
* Upgraded to Builder 1.2.1
 
4449
 
 
4450
* Added :module as an alias for :controller_prefix to url_for and friends, so you can do redirect_to(:module => "shop", :controller => "purchases")
 
4451
  and go to /shop/purchases/
 
4452
 
 
4453
* Added support for controllers in modules through @params["module"].
 
4454
 
 
4455
* Added reloading for dependencies under cached environments like FastCGI and mod_ruby. This makes it possible to use those environments for development.
 
4456
  This is turned on by default, but can be turned off with ActionController::Base.reload_dependencies = false in production environments.
 
4457
 
 
4458
  NOTE: This will only have an effect if you use the new model, service, and observer class methods to mark dependencies. All libraries loaded through
 
4459
  require will be "forever" cached. You can, however, use ActionController::Base.load_or_require("library") to get this behavior outside of the new
 
4460
  dependency style.
 
4461
 
 
4462
* Added that controllers will automatically require their own helper if possible. So instead of doing:
 
4463
 
 
4464
    class MsgController < ApplicationController
 
4465
      helper :msg
 
4466
    end
 
4467
    
 
4468
  ...you can just do:
 
4469
  
 
4470
    class MsgController < ApplicationController
 
4471
    end
 
4472
 
 
4473
* Added dependencies_on(layer) to query the dependencies of a controller. Examples:
 
4474
  
 
4475
    MsgController.dependencies_on(:model)    # => [ :post, :comment, :attachment ]
 
4476
    MsgController.dependencies_on(:service)  # => [ :notification_service ]
 
4477
    MsgController.dependencies_on(:observer) # => [ :comment_observer ]
 
4478
 
 
4479
* Added a new dependency model with the class methods model, service, and observer. Example:
 
4480
 
 
4481
    class MsgController < ApplicationController
 
4482
      model    :post, :comment, :attachment
 
4483
      service  :notification_service
 
4484
      observer :comment_observer
 
4485
    end
 
4486
 
 
4487
  These new "keywords" remove the need for explicitly calling 'require' in most cases. The observer method even instantiates the
 
4488
  observer as well as requiring it.
 
4489
 
 
4490
* Fixed that link_to would escape & in the url again after url_for already had done so
 
4491
 
 
4492
 
 
4493
*0.9.5* (28)
 
4494
 
 
4495
* Added helper_method to designate that a given private or protected method you should available as a helper in the view. [Jeremy Kemper]
 
4496
 
 
4497
* Fixed assert_rendered_file so it actually verifies if that was the rendered file [htonl]
 
4498
 
 
4499
* Added the option for sharing partial spacer templates just like partials themselves [radsaq]
 
4500
 
 
4501
* Fixed that Russia was named twice in country_select [alexey]
 
4502
 
 
4503
* Fixed request_origin to use remote_ip instead of remote_addr [Jeremy Kemper]
 
4504
 
 
4505
* Fixed link_to breakage when nil was passed for html_options [alexey]
 
4506
 
 
4507
* Fixed redirect_to on a virtual server setup with apache with a port other than the default where it would forget the port number [seanohalpin]
 
4508
 
 
4509
* Fixed that auto-loading webrick on Windows would cause file uploads to fail [Jeremy Kemper]
 
4510
 
 
4511
* Fixed issues with sending files on WEBrick by setting the proper binmode [Jeremy Kemper]
 
4512
 
 
4513
* Added send_data as an alternative to send_file when the stream is not read off the filesystem but from a database or generated live [Jeremy Kemper]
 
4514
 
 
4515
* Added a new way to include helpers that doesn't require the include hack and can go without the explicit require. [Jeremy Kemper]
 
4516
 
 
4517
  Before:
 
4518
 
 
4519
    module WeblogHelper
 
4520
      def self.included(controller) #:nodoc:
 
4521
        controller.ancestors.include?(ActionController::Base) ? controller.add_template_helper(self) : super
 
4522
      end
 
4523
    end
 
4524
 
 
4525
    require 'weblog_helper'
 
4526
    class WeblogController < ActionController::Base
 
4527
      include WeblogHelper
 
4528
    end
 
4529
    
 
4530
  After:
 
4531
 
 
4532
    module WeblogHelper
 
4533
    end
 
4534
 
 
4535
    class WeblogController < ActionController::Base
 
4536
      helper :weblog
 
4537
    end
 
4538
 
 
4539
* Added a default content-type of "text/xml" to .rxml renders [Ryan Platte]
 
4540
 
 
4541
* Fixed that when /controller/index was requested by the browser, url_for would generates wrong URLs [Ryan Platte]
 
4542
 
 
4543
* Fixed a bug that would share cookies between users when using FastCGI and mod_ruby [The Robot Co-op]
 
4544
 
 
4545
* Added an optional third hash parameter to the process method in functional tests that takes the session data to be used [alexey]
 
4546
 
 
4547
* Added UrlHelper#mail_to to make it easier to create mailto: style ahrefs
 
4548
 
 
4549
* Added better error messages for layouts declared with the .rhtml extension (which they shouldn't) [geech]
 
4550
 
 
4551
* Added another case to DateHelper#distance_in_minutes to return "less than a minute" instead of "0 minutes" and "1 minute" instead of "1 minutes"
 
4552
 
 
4553
* Added a hidden field to checkboxes generated with FormHelper#check_box that will make sure that the unchecked value (usually 0)
 
4554
  is sent even if the checkbox is not checked. This relieves the controller from doing custom checking if the checkbox wasn't
 
4555
  checked. BEWARE: This might conflict with your run-on-the-mill work-around code. [Tobias LĆ¼tke]
 
4556
 
 
4557
* Fixed error_message_on to just use the first if more than one error had been added [Marcel Molina Jr.]
 
4558
 
 
4559
* Fixed that URL rewriting with /controller/ was working but /controller was not and that you couldn't use :id on index [geech]
 
4560
 
 
4561
* Fixed a bug with link_to where the :confirm option wouldn't be picked up if the link was a straight url instead of an option hash
 
4562
 
 
4563
* Changed scaffolding of forms to use <label> tags instead of <b> to please W3C [evl]
 
4564
 
 
4565
* Added DateHelper#distance_of_time_in_words_to_now(from_time) that works like distance_of_time_in_words, 
 
4566
  but where <tt>to_time</tt> is fixed to <tt>Time.now</tt>.
 
4567
 
 
4568
* Added assert_flash_equal(expected, key, message), assert_session_equal(expected, key, message), 
 
4569
  assert_assigned_equal(expected, key, message) to test the contents of flash, session, and template assigns.
 
4570
 
 
4571
* Improved the failure report on assert_success when the action triggered a redirection [alexey].
 
4572
 
 
4573
* Added "markdown" to accompany "textilize" as a TextHelper method for converting text to HTML using the Markdown syntax.
 
4574
  BlueCloth must be installed in order for this method to become available.
 
4575
 
 
4576
* Made sure that an active session exists before we attempt to delete it [Samuel]
 
4577
 
 
4578
* Changed link_to with Javascript confirmation to use onclick instead of onClick for XHTML validity [Scott Barron]
 
4579
 
 
4580
 
 
4581
*0.9.0 (43)*
 
4582
 
 
4583
* Added support for Builder-based templates for files with the .rxml extension. These new templates are an alternative to ERb that
 
4584
  are especially useful for generating XML content, such as this RSS example from Basecamp:
 
4585
 
 
4586
    xml.rss("version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/") do
 
4587
      xml.channel do
 
4588
        xml.title(@feed_title)
 
4589
        xml.link(@url)
 
4590
        xml.description "Basecamp: Recent items"
 
4591
        xml.language "en-us"
 
4592
        xml.ttl "40"
 
4593
    
 
4594
        for item in @recent_items
 
4595
          xml.item do
 
4596
            xml.title(item_title(item))
 
4597
            xml.description(item_description(item)) if item_description(item)
 
4598
            xml.pubDate(item_pubDate(item))
 
4599
            xml.guid(@person.firm.account.url + @recent_items.url(item))
 
4600
            xml.link(@person.firm.account.url + @recent_items.url(item))
 
4601
        
 
4602
            xml.tag!("dc:creator", item.author_name) if item_has_creator?(item)
 
4603
          end
 
4604
        end
 
4605
      end
 
4606
    end
 
4607
 
 
4608
    ...which will generate something like:
 
4609
 
 
4610
    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
 
4611
      <channel>
 
4612
        <title>Web Site Redesign</title>
 
4613
        <link>http://www.basecamphq.com/clients/travelcenter/1/</link>
 
4614
        <description>Basecamp: Recent items</description>
 
4615
        <language>en-us</language>
 
4616
        <ttl>40</ttl>
 
4617
        <item>
 
4618
          <title>Post: don't you know</title>
 
4619
          <description>&amp;lt;p&amp;gt;deeper and down&amp;lt;/p&amp;gt;</description>
 
4620
          <pubDate>Fri, 20 Aug 2004 21:13:50 CEST</pubDate>
 
4621
          <guid>http://www.basecamphq.com/clients/travelcenter/1/msg/assets/96976/comments</guid>
 
4622
          <link>http://www.basecamphq.com/clients/travelcenter/1/msg/assets/96976/comments</link>
 
4623
          <dc:creator>David H. Heinemeier</dc:creator>
 
4624
        </item>
 
4625
        <item>
 
4626
          <title>Milestone completed: Design Comp 2</title>
 
4627
          <pubDate>Mon,  9 Aug 2004 14:42:06 CEST</pubDate>
 
4628
          <guid>http://www.basecamphq.com/clients/travelcenter/1/milestones/#49</guid>
 
4629
          <link>http://www.basecamphq.com/clients/travelcenter/1/milestones/#49</link>
 
4630
        </item>
 
4631
      </channel>
 
4632
    </rss>
 
4633
 
 
4634
  The "xml" local variable is automatically available in .rxml templates. You construct the template by calling a method with the name
 
4635
  of the tag you want. Options for the tag can be specified as a hash parameter to that method.
 
4636
 
 
4637
  Builder-based templates can be mixed and matched with the regular ERb ones. The only thing that differentiates them is the extension.
 
4638
  No new methods have been added to the public interface to handle them. 
 
4639
  
 
4640
  Action Pack ships with a version of Builder, but it will use the RubyGems version if you have one installed.
 
4641
  
 
4642
  Read more about Builder on: http://onestepback.org/index.cgi/Tech/Ruby/StayingSimple.rdoc
 
4643
  
 
4644
  [Builder is created by Jim Weirich]
 
4645
 
 
4646
* Added much improved support for functional testing [what-a-day].
 
4647
 
 
4648
    # Old style
 
4649
    def test_failing_authenticate
 
4650
      @request.request_uri = "/login/authenticate"
 
4651
      @request.action = "authenticate"
 
4652
      @request.request_parameters["user_name"] = "nop"
 
4653
      @request.request_parameters["password"]  = ""
 
4654
  
 
4655
      response = LoginController.process_test(@request)
 
4656
  
 
4657
      assert_equal "The username and/or password you entered is invalid.", response.session["flash"]["alert"]
 
4658
      assert_equal "http://37signals.basecamp.com/login/", response.headers["location"]
 
4659
    end
 
4660
 
 
4661
    # New style
 
4662
    def test_failing_authenticate
 
4663
      process :authenticate, "user_name" => "nop", "password" => ""
 
4664
      assert_flash_has 'alert'
 
4665
      assert_redirected_to :action => "index"
 
4666
    end
 
4667
 
 
4668
  See a full example on http://codepaste.org/view/paste/334
 
4669
 
 
4670
* Increased performance by up to 100% with a revised cookie class that fixes the performance problems with the 
 
4671
  default one that ships with 1.8.1 and below. It replaces the inheritance on SimpleDelegator with DelegateClass(Array)
 
4672
  following the suggestion from Matz on:
 
4673
  http://groups.google.com/groups?th=e3a4e68ba042f842&seekm=c3sioe%241qvm%241%40news.cybercity.dk#link14
 
4674
 
 
4675
* Added caching for compiled ERb templates. On Basecamp, it gave between 8.5% and 71% increase in performance [Andreas Schwarz].
 
4676
 
 
4677
* Added implicit counter variable to render_collection_of_partials [Marcel Molina Jr.]. From the docs:
 
4678
 
 
4679
    <%= render_collection_of_partials "ad", @advertisements %>
 
4680
    
 
4681
    This will render "advertiser/_ad.rhtml" and pass the local variable +ad+ to the template for display. An iteration counter
 
4682
    will automatically be made available to the template with a name of the form +partial_name_counter+. In the case of the 
 
4683
    example above, the template would be fed +ad_counter+.
 
4684
 
 
4685
* Fixed problems with two sessions being maintained on reset_session that would particularly screw up ActiveRecordStore.
 
4686
 
 
4687
* Fixed reset_session to start an entirely new session instead of merely deleting the old. So you can now safely access @session
 
4688
  after calling reset_ression and expect it to work.
 
4689
 
 
4690
* Added @request.get?, @request.post?, @request.put?, @request.delete? as convenience query methods for @request.method [geech]
 
4691
 
 
4692
* Added @request.method that'll return a symbol representing the HTTP method, such as :get, :post, :put, :delete [geech]
 
4693
 
 
4694
* Changed @request.remote_ip and @request.host to work properly even when a proxy is in front of the application [geech]
 
4695
 
 
4696
* Added JavaScript confirm feature to link_to. Documentation:
 
4697
 
 
4698
    The html_options have a special feature for creating javascript confirm alerts where if you pass 
 
4699
    :confirm => 'Are you sure?', the link will be guarded with a JS popup asking that question.
 
4700
    If the user accepts, the link is processed, otherwise not.
 
4701
 
 
4702
* Added link_to_unless_current as a UrlHelper method [Sam Stephenson]. Documentation:
 
4703
 
 
4704
    Creates a link tag of the given +name+ using an URL created by the set of +options+, unless the current 
 
4705
    controller, action, and id are the same as the link's, in which case only the name is returned (or the
 
4706
    given block is yielded, if one exists). This is useful for creating link bars where you don't want to link 
 
4707
    to the page currently being viewed.
 
4708
 
 
4709
* Fixed that UrlRewriter (the driver for url_for, link_to, etc) would blow up when the anchor was an integer [alexey]
 
4710
 
 
4711
* Added that layouts defined with no directory defaults to layouts. So layout "weblog/standard" will use
 
4712
  weblog/standard (as always), but layout "standard" will use layouts/standard.
 
4713
 
 
4714
* Fixed that partials (or any template starting with an underscore) was publically viewable [Marten]
 
4715
 
 
4716
* Added HTML escaping to text_area helper.
 
4717
 
 
4718
* Added :overwrite_params to url_for and friends to keep the parameters as they were passed to the current action and only overwrite a subset.
 
4719
  The regular :params will clear the slate so you need to manually add in existing parameters if you want to reuse them. [raphinou]
 
4720
 
 
4721
* Fixed scaffolding problem with composite named objects [Moo Jester]
 
4722
 
 
4723
* Added the possibility for shared partials. Example:
 
4724
 
 
4725
    <%= render_partial "advertisement/ad", ad %>
 
4726
  
 
4727
  This will render the partial "advertisement/_ad.rhtml" regardless of which controller this is being called from.
 
4728
  
 
4729
  [Jacob Fugal]
 
4730
 
 
4731
* Fixed crash when encountering forms that have empty-named fields [James Prudente]
 
4732
 
 
4733
* Added check_box form helper method now accepts true/false as well as 1/0 [what-a-day]
 
4734
 
 
4735
* Fixed the lacking creation of all directories with install.rb [Dave Steinberg]
 
4736
 
 
4737
* Fixed that date_select returns valid XHTML selected options [Andreas Schwarz]
 
4738
 
 
4739
* Fixed referencing an action with the same name as a controller in url_for [what-a-day]
 
4740
 
 
4741
* Fixed the destructive nature of Base#attributes= on the argument [Kevin Watt]
 
4742
 
 
4743
* Changed ActionControllerError to decent from StandardError instead of Exception. It can now be caught by a generic rescue.
 
4744
 
 
4745
* Added SessionRestoreError that is raised when a session being restored holds objects where there is no class available.
 
4746
 
 
4747
* Added block as option for inline filters. So what used to be written as:
 
4748
 
 
4749
    before_filter Proc { |controller| return false if controller.params["stop_action"] }
 
4750
 
 
4751
  ...can now be as:
 
4752
 
 
4753
    before_filter { |controller| return false if controller.params["stop_action"] }
 
4754
  
 
4755
  [Jeremy Kemper]
 
4756
 
 
4757
* Made the following methods public (was protected): url_for, controller_class_name, controller_name, action_name
 
4758
  This makes it easier to write filters without cheating around the encapsulation with send.
 
4759
 
 
4760
* ActionController::Base#reset_session now sticks even if you access @session afterwards [Kent Sibilev]
 
4761
 
 
4762
* Improved the exception logging so the log file gets almost as much as in-browser debugging.
 
4763
 
 
4764
* Changed base class setup from AbstractTemplate/ERbTemplate to ActionView::Base. This change should be harmless unless you were
 
4765
  accessing Action View directly in which case you now need to reference the Base class.\
 
4766
 
 
4767
* Added that render_collection_of_partials returns nil if the collection is empty. This makes showing a ā€œno itemsā€ message easier. 
 
4768
  For example: <%= render_collection_of_partials("message", @messages) || "No messages found." %> [Sam Stephenson]
 
4769
 
 
4770
* Added :month_before_year as an option to date_select to get the month select before the year. Especially useful for credit card forms.
 
4771
 
 
4772
* Added :add_month_numbers to select_month to get options like "3 - March".
 
4773
 
 
4774
* Removed Base.has_active_layout? as it couldn't answer the question without the instance. Use Base#active_layout instead.
 
4775
 
 
4776
* Removed redundant call to update on ActionController::Base#close_session [Andreas Schwarz]
 
4777
 
 
4778
* Fixed that DRb Store accidently started its own server (instead of just client) [Andreas]
 
4779
 
 
4780
* Fixed strip_links so it now works across multiple lines [Chad Fowler]
 
4781
 
 
4782
* Fixed the TemplateError exception to show the proper trace on to_s (useful for unit test debugging)
 
4783
 
 
4784
* Implemented class inheritable attributes without eval [Caio Chassot]
 
4785
 
 
4786
* Made TextHelper#concat accept binding as it would otherwise not work
 
4787
 
 
4788
* The FormOptionsHelper will now call to_s on the keys and values used to generate options
 
4789
 
 
4790
 
 
4791
*0.8.5*
 
4792
 
 
4793
* Introduced passing of locally scoped variables between templates:
 
4794
 
 
4795
    You can pass local variables to sub templates by using a hash of with the variable 
 
4796
    names as keys and the objects as values:
 
4797
    
 
4798
      <%= render "shared/header", { "headline" => "Welcome", "person" => person } %>
 
4799
    
 
4800
    These can now be accessed in shared/header with:
 
4801
    
 
4802
      Headline: <%= headline %>
 
4803
      First name: <%= person.first_name %>
 
4804
    
 
4805
* Introduced the concept of partials as a certain type of sub templates:
 
4806
 
 
4807
    There's also a convenience method for rendering sub templates within the current 
 
4808
    controller that depends on a single object (we call this kind of sub templates for 
 
4809
    partials). It relies on the fact that partials should follow the naming convention
 
4810
    of being prefixed with an underscore -- as to separate them from regular templates
 
4811
    that could be rendered on their own. In the template for Advertiser#buy, we could have:
 
4812
    
 
4813
      <% for ad in @advertisements %>
 
4814
        <%= render_partial "ad", ad %>
 
4815
      <% end %>
 
4816
    
 
4817
    This would render "advertiser/_ad.rhtml" and pass the local variable +ad+ 
 
4818
    for the template to display.
 
4819
    
 
4820
    == Rendering a collection of partials
 
4821
    
 
4822
    The example of partial use describes a familar pattern where a template needs
 
4823
    to iterate over a array and render a sub template for each of the elements. 
 
4824
    This pattern has been implemented as a single method that accepts an array and 
 
4825
    renders a partial by the same name of as the elements contained within. So the 
 
4826
    three-lined example in "Using partials" can be rewritten with a single line:
 
4827
    
 
4828
      <%= render_collection_of_partials "ad", @advertisements %>
 
4829
    
 
4830
    So this will render "advertiser/_ad.rhtml" and pass the local variable +ad+ for 
 
4831
    the template to display.
 
4832
 
 
4833
* Improved send_file by allowing a wide range of options to be applied [Jeremy Kemper]:
 
4834
 
 
4835
    Sends the file by streaming it 4096 bytes at a time. This way the
 
4836
    whole file doesn't need to be read into memory at once.  This makes
 
4837
    it feasible to send even large files.
 
4838
    
 
4839
    Be careful to sanitize the path parameter if it coming from a web
 
4840
    page.  send_file(@params['path'] allows a malicious user to
 
4841
    download any file on your server.
 
4842
    
 
4843
    Options:
 
4844
    * <tt>:filename</tt> - specifies the filename the browser will see.  
 
4845
      Defaults to File.basename(path).
 
4846
    * <tt>:type</tt> - specifies an HTTP content type.  
 
4847
      Defaults to 'application/octet-stream'.
 
4848
    * <tt>:disposition</tt> - specifies whether the file will be shown inline or downloaded.  
 
4849
      Valid values are 'inline' and 'attachment' (default).
 
4850
    * <tt>:buffer_size</tt> - specifies size (in bytes) of the buffer used to stream
 
4851
      the file.  Defaults to 4096.
 
4852
    
 
4853
    The default Content-Type and Content-Disposition headers are
 
4854
    set to download arbitrary binary files in as many browsers as
 
4855
    possible.  IE versions 4, 5, 5.5, and 6 are all known to have
 
4856
    a variety of quirks (especially when downloading over SSL).
 
4857
    
 
4858
    Simple download:
 
4859
      send_file '/path/to.zip'
 
4860
    
 
4861
    Show a JPEG in browser:
 
4862
      send_file '/path/to.jpeg', :type => 'image/jpeg', :disposition => 'inline'
 
4863
    
 
4864
    Read about the other Content-* HTTP headers if you'd like to
 
4865
    provide the user with more information (such as Content-Description).
 
4866
    http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11
 
4867
    
 
4868
    Also be aware that the document may be cached by proxies and browsers.
 
4869
    The Pragma and Cache-Control headers declare how the file may be cached
 
4870
    by intermediaries.  They default to require clients to validate with
 
4871
    the server before releasing cached responses.  See
 
4872
    http://www.mnot.net/cache_docs/ for an overview of web caching and
 
4873
    http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
 
4874
    for the Cache-Control header spec.
 
4875
 
 
4876
* Added pluralize method to the TextHelper that makes it easy to get strings like "1 message", "3 messages"
 
4877
 
 
4878
* Added proper escaping for the rescues [Andreas Schwarz]
 
4879
 
 
4880
* Added proper escaping for the option and collection tags [Andreas Schwarz]
 
4881
 
 
4882
* Fixed NaN errors on benchmarking [Jim Weirich]
 
4883
 
 
4884
* Fixed query string parsing for URLs that use the escaped versions of & or ; as part of a key or value
 
4885
 
 
4886
* Fixed bug with custom Content-Type headers being in addition to rather than instead of the default header.
 
4887
  (This bug didn't matter with neither CGI or mod_ruby, but FCGI exploded on it) [With help from Ara T. Howard]
 
4888
 
 
4889
 
 
4890
*0.8.0*
 
4891
 
 
4892
* Added select, collection_select, and country_select to make it easier for Active Records to set attributes through
 
4893
  drop-down lists of options. Example:
 
4894
  
 
4895
    <%= select "person", "gender", %w( Male Female ) %>
 
4896
    
 
4897
  ...would give the following:
 
4898
  
 
4899
    <select name="person[gender]" id="person_gender"><option>Male</option><option>Female</option></select>
 
4900
 
 
4901
* Added an option for getting multiple values on a single form name into an array instead of having the last one overwrite.
 
4902
  This is especially useful for groups of checkboxes, which can now be written as:
 
4903
  
 
4904
    <input type="checkbox" name="rights[]" value="CREATE" />
 
4905
    <input type="checkbox" name="rights[]" value="UPDATE" />
 
4906
    <input type="checkbox" name="rights[]" value="DELETE" />
 
4907
  
 
4908
  ...and retrieved in the controller action with:
 
4909
  
 
4910
    @params["rights"] # => [ "CREATE", "UPDATE", "DELETE" ]
 
4911
  
 
4912
  The old behavior (where the last one wins, "DELETE" in the example) is still available. Just don't add "[]" to the 
 
4913
  end of the name. [Scott Baron]
 
4914
  
 
4915
* Added send_file which uses the new render_text block acceptance to make it feasible to send large files.
 
4916
  The files is sent with a bunch of voodoo HTTP headers required to get arbitrary files to download as 
 
4917
  expected in as many browsers as possible (eg, IE hacks). Example:
 
4918
  
 
4919
  def play_movie
 
4920
    send_file "/movies/that_movie.avi"
 
4921
  end
 
4922
  
 
4923
  [Jeremy Kemper]
 
4924
 
 
4925
* render_text now accepts a block for deferred rendering. Useful for streaming large files, displaying 
 
4926
  a ā€œplease waitā€ message during a complex search, etc. Streaming example:
 
4927
  
 
4928
    render_text do |response|
 
4929
      File.open(path, 'rb') do |file|
 
4930
        while buf = file.read(1024)
 
4931
          print buf 
 
4932
        end 
 
4933
      end
 
4934
    end
 
4935
  
 
4936
  [Jeremy Kemper]
 
4937
 
 
4938
* Added a new Tag Helper that can generate generic tags programmatically insted of through HTML. Example:
 
4939
    
 
4940
    tag("br", "clear" => "all") => <br clear="all" />
 
4941
  
 
4942
  ...that's usually not terribly interesting (unless you have a lot of options already in a hash), but it 
 
4943
  gives way for more specific tags, like the new form tag:
 
4944
  
 
4945
    form_tag({ :controller => "weblog", :action => "update" }, { :multipart => "true", "style" => "width: 200px"}) =>
 
4946
      <form action="/weblog/update" enctype="multipart/formdata" style="width: 200px">
 
4947
    
 
4948
  There's even a "pretty" version for people who don't like to open tags in code and close them in HTML:
 
4949
  
 
4950
    <%= start_form_tag :action => "update" %>
 
4951
      # all the input fields
 
4952
    <%= end_form_tag %>
 
4953
  
 
4954
  (end_form_tag just returns "</form>")
 
4955
 
 
4956
* The selected parameter in options_for_select may now also an array of values to be selected when 
 
4957
  using a multiple select. Example:
 
4958
 
 
4959
    options_for_select([ "VISA", "Mastercard", "Discover" ], ["VISA", "Discover"]) =>
 
4960
      <option selected>VISA</option>\n<option>Mastercard</option>\n<option selected>Discover</option>
 
4961
      
 
4962
  [Scott Baron]
 
4963
 
 
4964
* Changed the URL rewriter so controller_prefix and action_prefix can be used in isolation. You can now do:
 
4965
 
 
4966
    url_for(:controller_prefix => "clients")
 
4967
 
 
4968
  ...or:
 
4969
  
 
4970
    url_for(:action_prefix => "category/messages")
 
4971
 
 
4972
  Neither would have worked in isolation before (:controller_prefix required a :controller and :action_prefix required an :action)
 
4973
 
 
4974
* Started process of a cleaner separation between Action Controller and ERb-based Action Views by introducing an
 
4975
  abstract base class for views. And Amita adapter could be fitted in more easily now.
 
4976
 
 
4977
* The date helper methods date_select and datetime_select now also use the field error wrapping 
 
4978
  (div with class fieldWithErrors by default).
 
4979
 
 
4980
* The date helper methods date_select and datetime_select can now discard selects
 
4981
 
 
4982
* Added option on AbstractTemplate to specify a different field error wrapping. Example:
 
4983
 
 
4984
    ActionView::AbstractTemplate.field_error_proc = Proc.new do |html, instance|
 
4985
      "<p>#{instance.method_name + instance.error_message}</p><div style='background-color: red'>#{html}</div>"
 
4986
    end
 
4987
 
 
4988
  ...would give the following on a Post#title (text field) error:
 
4989
  
 
4990
    <p>Title can't be empty</p>
 
4991
    <div style='background-color: red'>
 
4992
      <input id="post_title" name="post[title]" size="30" type="text" value="Hello World" />
 
4993
    </div>
 
4994
 
 
4995
* The UrlHelper methods url_for and link_to will now by default only return paths, not complete URIs.
 
4996
  That should make it easier to fit a Rails application behind a proxy or load-balancer.
 
4997
  You can overwrite this by passing :only_path => false as part of the options. [Suggested by U235]
 
4998
 
 
4999
* Fixed bug with having your own layout for use with scaffolding [Kevin Radloff]
 
5000
 
 
5001
* Fixed bug where redirect_to_path didn't append the port on non-standard ports [dhawkins]
 
5002
 
 
5003
* Scaffolding plays nicely with single-table inheritance (LoadErrors are caught) [Jeremy Kemper]
 
5004
 
 
5005
* Scaffolding plays nice with plural models like Category/categories [Jeremy Kemper]
 
5006
 
 
5007
* Fixed missing suffix appending in scaffolding [Kevin Radloff]
 
5008
 
 
5009
 
 
5010
*0.7.9*
 
5011
 
 
5012
* The "form" method now present boolean fields from PostgreSQL as drop-down menu. [Scott]
 
5013
 
 
5014
* Scaffolding now automatically attempts to require the class that's being scaffolded.
 
5015
 
 
5016
* Scaffolding will use the current active layout, instead of its own, if one has been specified. Example:
 
5017
 
 
5018
    class WeblogController < ActionController::Base
 
5019
      layout "layouts/weblog"
 
5020
      scaffold :post
 
5021
    end
 
5022
  
 
5023
  [Suggested by Scott]
 
5024
 
 
5025
* Changed url_for (and all the that drives, like redirect_to, link_to, link_for) so you can pass it a symbol instead of a hash.
 
5026
  This symbol is a method reference which is then called to calculate the url. Example:
 
5027
  
 
5028
    class WeblogController < ActionController::Base
 
5029
      def update
 
5030
        # do some update
 
5031
        redirect_to :dashboard_url
 
5032
      end
 
5033
      
 
5034
      protected
 
5035
        def dashboard_url
 
5036
          if @project.active?
 
5037
            url_for :controller => "project", :action => "dashboard"
 
5038
          else
 
5039
            url_for :controller => "account", :action => "dashboard"
 
5040
          end
 
5041
        end
 
5042
    end
 
5043
      
 
5044
* Added default_url_options to specialize behavior for all url_for (and friends) calls:
 
5045
 
 
5046
    Overwrite to implement a number of default options that all url_for-based methods will use. 
 
5047
    The default options should come in form of a hash, just like the one you would use for 
 
5048
    url_for directly. Example:
 
5049
    
 
5050
      def default_url_options(options)
 
5051
        { :controller_prefix => @project.active? ? "projects/" : "accounts/" }
 
5052
      end
 
5053
    
 
5054
    As you can infer from the example, this is mostly useful for situations where you want to 
 
5055
    centralize dynamic dissions about the urls as they stem from the business domain. Please note
 
5056
    that any individual url_for call can always override the defaults set by this method.
 
5057
    
 
5058
 
 
5059
* Changed url_for so that an "id" passed in the :params is not treated special. You need to use the dedicated :id to get 
 
5060
  the special auto path-params treatment. Considering the url http://localhost:81/friends/list
 
5061
 
 
5062
    url_for(:action => "show", :params => { "id" => 5 })
 
5063
      ...used to give http://localhost:81/friends/show/5
 
5064
      ......now gives http://localhost:81/friends/show?id=5
 
5065
 
 
5066
    If you want the automated id behavior, do:
 
5067
 
 
5068
    url_for(:action => "show", :id => 5 )
 
5069
      ....which gives http://localhost:81/friends/show/5
 
5070
 
 
5071
 
 
5072
* Fixed problem with anchor being inserted before path parameters with url_for (and friends)
 
5073
 
 
5074
 
 
5075
*0.7.8*
 
5076
 
 
5077
* Fixed session bug where you couldn't store any objects that didn't exist in the standard library 
 
5078
  (such as Active Record objects).
 
5079
 
 
5080
* Added reset_session method for Action Controller objects to clear out all objects in the session.
 
5081
 
 
5082
* Fixed that exceptions raised during filters are now also caught by the default rescues
 
5083
 
 
5084
* Added new around_filter for doing before and after filtering with a single object [Florian Weber]:
 
5085
 
 
5086
    class WeblogController < ActionController::Base
 
5087
      around_filter BenchmarkingFilter.new
 
5088
      
 
5089
      # Before this action is performed, BenchmarkingFilter#before(controller) is executed
 
5090
      def index
 
5091
      end
 
5092
      # After this action has been performed, BenchmarkingFilter#after(controller) is executed
 
5093
    end
 
5094
    
 
5095
    class BenchmarkingFilter
 
5096
      def initialize
 
5097
        @runtime
 
5098
      end
 
5099
      
 
5100
      def before
 
5101
        start_timer
 
5102
      end
 
5103
      
 
5104
      def after
 
5105
        stop_timer
 
5106
        report_result
 
5107
      end
 
5108
    end
 
5109
 
 
5110
* Added the options for specifying a different name and id for the form helper methods than what is guessed [Florian Weber]:
 
5111
 
 
5112
    text_field "post", "title"
 
5113
      ...just gives: <input id="post_title" name="post[title]" size="30" type="text" value="" />
 
5114
      
 
5115
    text_field "post", "title", "id" => "title_for_post", "name" => "first_post_title"
 
5116
      ...can now give: <input id="title_for_post" name="first_post_title" size="30" type="text" value="" />
 
5117
 
 
5118
* Added DebugHelper with a single "debug" method for doing pretty dumps of objects in the view
 
5119
  (now used in the default rescues to better present the contents of session and template variables)
 
5120
 
 
5121
* Added note to log about the templates rendered within layouts (before just the layout was shown)
 
5122
 
 
5123
* Fixed redirects on https setups [Andreas]
 
5124
 
 
5125
* Fixed scaffolding problem on the edit action when using :suffix => true [Scott]
 
5126
 
 
5127
* Fixed scaffolding problem where implementing list.rhtml wouldn't work for the index action
 
5128
 
 
5129
* URLs generated now uses &amp; instead of just & so pages using it can validate with W3C [Spotted by Andreas]
 
5130
 
 
5131
 
 
5132
*0.7.7*
 
5133
 
 
5134
* Fixed bug in CGI extension that prevented multipart forms from working
 
5135
 
 
5136
 
 
5137
*0.7.6*
 
5138
 
 
5139
* Included ERB::Util so all templates can easily escape HTML content with <%=h @person.content %>
 
5140
 
 
5141
* All requests are now considered local by default, so everyone will be exposed to detailed debugging screens on errors.
 
5142
  When the application is ready to go public, set ActionController::Base.consider_all_requests_local to false, 
 
5143
  and implement the protected method local_request? in the controller to determine when debugging screens should be shown.
 
5144
 
 
5145
* Fixed three bugs with the url_for/redirect_to/link_to handling. Considering the url http://localhost:81/friends/show/1
 
5146
 
 
5147
    url_for(:action => "list")
 
5148
      ...used to give http://localhost:81/friends/list/1
 
5149
      ......now gives http://localhost:81/friends/list
 
5150
    
 
5151
    url_for(:controller => "friends", :action => "destroy", :id => 5)
 
5152
      ...used to give http://localhost:81/friends/destroy
 
5153
      ......now gives http://localhost:81/friends/destroy/5
 
5154
 
 
5155
  Considering the url http://localhost:81/teachers/show/t
 
5156
 
 
5157
    url_for(:action => "list", :id => 5)
 
5158
      ...used to give http://localhost:81/5eachers/list/t
 
5159
      ......now gives http://localhost:81/teachers/list/5
 
5160
  
 
5161
  [Reported by David Morton & Radsaq]
 
5162
 
 
5163
* Logs exception to logfile in addition to showing them for local requests
 
5164
 
 
5165
* Protects the eruby load behind a begin/rescue block. eRuby is not required to run ActionController.
 
5166
 
 
5167
* Fixed install.rb to also install clean_logger and the templates
 
5168
 
 
5169
* Added ActiveRecordStore as a session option. Read more in lib/action_controller/session/active_record_store.rb [Tim Bates]
 
5170
 
 
5171
* Change license to MIT License (and included license file in package)
 
5172
 
 
5173
* Application error page now returns status code 500 instead of 200
 
5174
 
 
5175
* Fixed using Procs as layout handlers [Florian Weber]
 
5176
 
 
5177
* Fixed bug with using redirects ports other than 80
 
5178
 
 
5179
* Added index method that calls list on scaffolding
 
5180
 
 
5181
 
 
5182
*0.7.5*
 
5183
 
 
5184
* First public release