Skip to content

Commit

Permalink
Merge branch 'master' of github.com:rails/docrails
Browse files Browse the repository at this point in the history
  • Loading branch information
vijaydev committed Sep 28, 2013
2 parents fa91546 + e2a7dbf commit 33434f6
Show file tree
Hide file tree
Showing 10 changed files with 27 additions and 60 deletions.
4 changes: 1 addition & 3 deletions actionmailer/README.rdoc
Expand Up @@ -61,9 +61,7 @@ generated would look like this:

Thank you for signing up!

In previous versions of Rails you would call <tt>create_method_name</tt> and
<tt>deliver_method_name</tt>. Rails 3.0 has a much simpler interface - you
simply call the method and optionally call +deliver+ on the return value.
In order to send mails, you simply call the method and then call +deliver+ on the return value.

Calling the method returns a Mail Message object:

Expand Down
2 changes: 1 addition & 1 deletion actionpack/lib/action_dispatch/routing/url_for.rb
Expand Up @@ -20,7 +20,7 @@ module Routing
#
# <%= link_to('Click here', controller: 'users',
# action: 'new', message: 'Welcome!') %>
# # => "/users/new?message=Welcome%21"
# # => <a href="/users/new?message=Welcome%21">Click here</a>
#
# link_to, and all other functions that require URL generation functionality,
# actually use ActionController::UrlFor under the hood. And in particular,
Expand Down
2 changes: 1 addition & 1 deletion activerecord/lib/active_record/relation/batches.rb
Expand Up @@ -34,7 +34,7 @@ module Batches
# between id 0 and 10,000 and worker 2 handle from 10,000 and beyond
# (by setting the +:start+ option on that worker).
#
# # Let's process for a batch of 2000 records, skiping the first 2000 rows
# # Let's process for a batch of 2000 records, skipping the first 2000 rows
# Person.find_each(start: 2000, batch_size: 2000) do |person|
# person.party_all_night!
# end
Expand Down
2 changes: 1 addition & 1 deletion guides/source/active_record_querying.md
Expand Up @@ -1189,7 +1189,7 @@ class Post < ActiveRecord::Base
end
```

This may then be called using this:
Call the scope as if it were a class method:

```ruby
Post.created_before(Time.zone.now)
Expand Down
59 changes: 11 additions & 48 deletions guides/source/active_support_core_extensions.md
Expand Up @@ -96,12 +96,13 @@ INFO: The predicate for strings uses the Unicode-aware character class `[:space:

WARNING: Note that numbers are not mentioned. In particular, 0 and 0.0 are **not** blank.

For example, this method from `ActionDispatch::Session::AbstractStore` uses `blank?` for checking whether a session key is present:
For example, this method from `ActionController::HttpAuthentication::Token::ControllerMethods` uses `blank?` for checking whether a token is present:

```ruby
def ensure_session_key!
if @key.blank?
raise ArgumentError, 'A key is required...'
def authenticate(controller, &login_procedure)
token, options = token_and_options(controller.request)
unless token.blank?
login_procedure.call(token, options)
end
end
```
Expand Down Expand Up @@ -1999,7 +2000,7 @@ Produce a string representation of a number in human-readable words:
1234567890123456.to_s(:human) # => "1.23 Quadrillion"
```

NOTE: Defined in `active_support/core_ext/numeric/formatting.rb`.
NOTE: Defined in `active_support/core_ext/numeric/conversions.rb`.

Extensions to `Integer`
-----------------------
Expand Down Expand Up @@ -2444,7 +2445,7 @@ dup[1][2] = 4
array[1][2] == nil # => true
```

NOTE: Defined in `active_support/core_ext/array/deep_dup.rb`.
NOTE: Defined in `active_support/core_ext/object/deep_dup.rb`.

### Grouping

Expand Down Expand Up @@ -2670,45 +2671,7 @@ hash[:b][:e] == nil # => true
hash[:b][:d] == [3, 4] # => true
```

NOTE: Defined in `active_support/core_ext/hash/deep_dup.rb`.

### Diffing

The method `diff` returns a hash that represents a diff of the receiver and the argument with the following logic:

* Pairs `key`, `value` that exist in both hashes do not belong to the diff hash.

* If both hashes have `key`, but with different values, the pair in the receiver wins.

* The rest is just merged.

```ruby
{a: 1}.diff(a: 1)
# => {}, first rule

{a: 1}.diff(a: 2)
# => {:a=>1}, second rule

{a: 1}.diff(b: 2)
# => {:a=>1, :b=>2}, third rule

{a: 1, b: 2, c: 3}.diff(b: 1, c: 3, d: 4)
# => {:a=>1, :b=>2, :d=>4}, all rules

{}.diff({}) # => {}
{a: 1}.diff({}) # => {:a=>1}
{}.diff(a: 1) # => {:a=>1}
```

An important property of this diff hash is that you can retrieve the original hash by applying `diff` twice:

```ruby
hash.diff(hash2).diff(hash2) == hash
```

Diffing hashes may be useful for error messages related to expected option hashes for example.

NOTE: Defined in `active_support/core_ext/hash/diff.rb`.
NOTE: Defined in `active_support/core_ext/object/deep_dup.rb`.

### Working with Keys

Expand Down Expand Up @@ -3843,13 +3806,13 @@ def default_helper_module!
module_path = module_name.underscore
helper module_path
rescue MissingSourceFile => e
raise e unless e.is_missing? "#{module_path}_helper"
raise e unless e.is_missing? "helpers/#{module_path}_helper"
rescue NameError => e
raise e unless e.missing_name? "#{module_name}Helper"
end
```

NOTE: Defined in `active_support/core_ext/name_error.rb`.
NOTE: Defined in `actionpack/lib/abstract_controller/helpers.rb`.

Extensions to `LoadError`
-------------------------
Expand All @@ -3872,4 +3835,4 @@ rescue NameError => e
end
```

NOTE: Defined in `active_support/core_ext/load_error.rb`.
NOTE: Defined in `actionpack/lib/abstract_controller/helpers.rb`.
2 changes: 1 addition & 1 deletion guides/source/command_line.md
Expand Up @@ -385,7 +385,7 @@ Active Record version 4.0.0
Action Pack version 4.0.0
Action Mailer version 4.0.0
Active Support version 4.0.0
Middleware Rack::Sendfile, ActionDispatch::Static, Rack::Lock, #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007ffd131a7c88>, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, Rails::Rack::Logger, ActionDispatch::ShowExceptions, ActionDispatch::DebugExceptions, ActionDispatch::RemoteIp, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActiveRecord::ConnectionAdapters::ConnectionManagement, ActiveRecord::QueryCache, ActionDispatch::Cookies, ActionDispatch::Session::EncryptedCookieStore, ActionDispatch::Flash, ActionDispatch::ParamsParser, Rack::Head, Rack::ConditionalGet, Rack::ETag
Middleware Rack::Sendfile, ActionDispatch::Static, Rack::Lock, #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007ffd131a7c88>, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, Rails::Rack::Logger, ActionDispatch::ShowExceptions, ActionDispatch::DebugExceptions, ActionDispatch::RemoteIp, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActiveRecord::ConnectionAdapters::ConnectionManagement, ActiveRecord::QueryCache, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ParamsParser, Rack::Head, Rack::ConditionalGet, Rack::ETag
Application root /home/foobar/commandsapp
Environment development
Database adapter sqlite3
Expand Down
6 changes: 6 additions & 0 deletions guides/source/configuring.md
Expand Up @@ -273,6 +273,12 @@ config.middleware.delete "Rack::MethodOverride"

* `config.active_record.cache_timestamp_format` controls the format of the timestamp value in the cache key. Default is `:number`.

* `config.active_record.record_timestamps` is a boolean value which controls whether or not timestamping of `create` and `update` operations on a model occur. The default value is `true`.

* `config.active_record.partial_writes` is a boolean value and controls whether or not partial writes are used (i.e. whether updates only set attributes that are dirty). Note that when using partial writes, you should also use optimistic locking `config.active_record.lock_optimistically` since concurrent updates may write attributes based on a possibly stale read state. The default value is `true`.

* `config.active_record.attribute_types_cached_by_default` sets the attribute types that `ActiveRecord::AttributeMethods` will cache by default on reads. The default is `[:datetime, :timestamp, :time, :date]`.

The MySQL adapter adds one additional configuration option:

* `ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleans` controls whether Active Record will consider all `tinyint(1)` columns in a MySQL database to be booleans and is true by default.
Expand Down
2 changes: 1 addition & 1 deletion guides/source/getting_started.md
Expand Up @@ -1134,7 +1134,7 @@ appear next to the "Show" link:
<tr>
<td><%= post.title %></td>
<td><%= post.text %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Show', post_path(post) %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
</tr>
<% end %>
Expand Down
6 changes: 3 additions & 3 deletions guides/source/security.md
Expand Up @@ -290,7 +290,7 @@ NOTE: _Make sure file uploads don't overwrite important files, and process media

Many web applications allow users to upload files. _File names, which the user may choose (partly), should always be filtered_ as an attacker could use a malicious file name to overwrite any file on the server. If you store file uploads at /var/www/uploads, and the user enters a file name like "../../../etc/passwd", it may overwrite an important file. Of course, the Ruby interpreter would need the appropriate permissions to do so - one more reason to run web servers, database servers and other programs as a less privileged Unix user.

When filtering user input file names, _don't try to remove malicious parts_. Think of a situation where the web application removes all "../" in a file name and an attacker uses a string such as "....//" - the result will be "../". It is best to use a whitelist approach, which _checks for the validity of a file name with a set of accepted characters_. This is opposed to a blacklist approach which attempts to remove not allowed characters. In case it isn't a valid file name, reject it (or replace not accepted characters), but don't remove them. Here is the file name sanitizer from the [attachment_fu plugin](https://github.com/technoweenie/attachment_fu/tree/master:)
When filtering user input file names, _don't try to remove malicious parts_. Think of a situation where the web application removes all "../" in a file name and an attacker uses a string such as "....//" - the result will be "../". It is best to use a whitelist approach, which _checks for the validity of a file name with a set of accepted characters_. This is opposed to a blacklist approach which attempts to remove not allowed characters. In case it isn't a valid file name, reject it (or replace not accepted characters), but don't remove them. Here is the file name sanitizer from the [attachment_fu plugin](https://github.com/technoweenie/attachment_fu/tree/master):

```ruby
def sanitize_filename(filename)
Expand Down Expand Up @@ -447,7 +447,7 @@ Here are some ideas how to hide honeypot fields by JavaScript and/or CSS:

The most simple negative CAPTCHA is one hidden honeypot field. On the server side, you will check the value of the field: If it contains any text, it must be a bot. Then, you can either ignore the post or return a positive result, but not saving the post to the database. This way the bot will be satisfied and moves on. You can do this with annoying users, too.

You can find more sophisticated negative CAPTCHAs in Ned Batchelder's [blog post](http://nedbatchelder.com/text/stopbots.html:)
You can find more sophisticated negative CAPTCHAs in Ned Batchelder's [blog post](http://nedbatchelder.com/text/stopbots.html):

* Include a field with the current UTC time-stamp in it and check it on the server. If it is too far in the past, or if it is in the future, the form is invalid.
* Randomize the field names
Expand Down Expand Up @@ -760,7 +760,7 @@ The following is an excerpt from the [Js.Yamanner@m](http://www.symantec.com/sec

The worms exploits a hole in Yahoo's HTML/JavaScript filter, which usually filters all target and onload attributes from tags (because there can be JavaScript). The filter is applied only once, however, so the onload attribute with the worm code stays in place. This is a good example why blacklist filters are never complete and why it is hard to allow HTML/JavaScript in a web application.

Another proof-of-concept webmail worm is Nduja, a cross-domain worm for four Italian webmail services. Find more details on [Rosario Valotta's paper](http://www.xssed.com/article/9/Paper_A_PoC_of_a_cross_webmail_worm_XWW_called_Njuda_connection/). Both webmail worms have the goal to harvest email addresses, something a criminal hacker could make money with.
Another proof-of-concept webmail worm is Nduja, a cross-domain worm for four Italian webmail services. Find more details on [Rosario Valotta's paper](http://www.xssed.com/news/37/Nduja_Connection_A_cross_webmail_worm_XWW/). Both webmail worms have the goal to harvest email addresses, something a criminal hacker could make money with.

In December 2006, 34,000 actual user names and passwords were stolen in a [MySpace phishing attack](http://news.netcraft.com/archives/2006/10/27/myspace_accounts_compromised_by_phishers.html). The idea of the attack was to create a profile page named "login_home_index_html", so the URL looked very convincing. Specially-crafted HTML and CSS was used to hide the genuine MySpace content from the page and instead display its own login form.

Expand Down
2 changes: 1 addition & 1 deletion guides/source/upgrading_ruby_on_rails.md
Expand Up @@ -339,7 +339,7 @@ config.assets.js_compressor = :uglifier

### sass-rails

* `asset_url` with two arguments is deprecated. For example: `asset-url("rails.png", image)` becomes `asset-url("rails.png")`
* `asset-url` with two arguments is deprecated. For example: `asset-url("rails.png", image)` becomes `asset-url("rails.png")`

Upgrading from Rails 3.1 to Rails 3.2
-------------------------------------
Expand Down

0 comments on commit 33434f6

Please sign in to comment.