aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2013-04-29 13:06:45 -0300
committerRafael Mendonça França <rafaelmfranca@gmail.com>2013-04-29 13:15:24 -0300
commitfeb44b9213c91db22648ca0bb91bb6658c531df5 (patch)
tree20c826c1705db7f96248e10b29e5ce3a14e7bba7
parent1ec64297f9347986a11ce38af2cc3434d99c66c2 (diff)
downloadrails-feb44b9213c91db22648ca0bb91bb6658c531df5.tar.gz
rails-feb44b9213c91db22648ca0bb91bb6658c531df5.tar.bz2
rails-feb44b9213c91db22648ca0bb91bb6658c531df5.zip
rails/master is now 4.1.0.beta
-rw-r--r--RAILS_VERSION2
-rw-r--r--actionmailer/CHANGELOG.md63
-rw-r--r--actionmailer/lib/action_mailer/version.rb2
-rw-r--r--actionpack/CHANGELOG.md1194
-rw-r--r--actionpack/lib/action_pack/version.rb2
-rw-r--r--activemodel/CHANGELOG.md214
-rw-r--r--activemodel/lib/active_model/version.rb2
-rw-r--r--activerecord/CHANGELOG.md2045
-rw-r--r--activerecord/lib/active_record/version.rb2
-rw-r--r--activesupport/CHANGELOG.md511
-rw-r--r--activesupport/lib/active_support/version.rb2
-rw-r--r--guides/CHANGELOG.md13
-rw-r--r--railties/CHANGELOG.md376
-rw-r--r--version.rb4
14 files changed, 22 insertions, 4410 deletions
diff --git a/RAILS_VERSION b/RAILS_VERSION
index 0db186f5d2..14b6456d31 100644
--- a/RAILS_VERSION
+++ b/RAILS_VERSION
@@ -1 +1 @@
-4.0.0.rc1
+4.1.0.beta
diff --git a/actionmailer/CHANGELOG.md b/actionmailer/CHANGELOG.md
index 975f61fa58..9e9d07b386 100644
--- a/actionmailer/CHANGELOG.md
+++ b/actionmailer/CHANGELOG.md
@@ -1,62 +1,3 @@
-## Rails 4.0.0 (unreleased) ##
+* No changes.
-
-## Rails 4.0.0.beta1 (February 25, 2013) ##
-
-* Allow passing interpolations to `#default_i18n_subject`, e.g.:
-
- # config/locales/en.yml
- en:
- user_mailer:
- welcome:
- subject: 'Hello, %{username}'
-
- # app/mailers/user_mailer.rb
- class UserMailer < ActionMailer::Base
- def welcome(user)
- mail(subject: default_i18n_subject(username: user.name))
- end
- end
-
- *Olek Janiszewski*
-
-* Eager loading made to use relation's `in_clause_length` instead of host's one.
- Fixes #8474.
-
- *Boris Staal*
-
-* Explicit multipart messages no longer set the order of the MIME parts.
-
- *Nate Berkopec*
-
-* Do not render views when `mail` isn't called. Fixes #7761.
-
- *Yves Senn*
-
-* Allow delivery method options to be set per mail instance.
-
- If your SMTP delivery settings are dynamic, you can now override settings
- per mail instance for e.g.
-
- def my_mailer(user, company)
- mail to: user.email, subject: "Welcome!",
- delivery_method_options: { user_name: company.smtp_user,
- password: company.smtp_password }
- end
-
- This will ensure that your default SMTP settings will be overridden
- by the company specific ones. You only have to override the settings
- that are dynamic and leave the static setting in your environment
- configuration file (e.g. `config/environments/production.rb`).
-
- *Aditya Sanghi*
-
-* Allow to set default Action Mailer options via `config.action_mailer.default_options=`. *Robert Pankowecki*
-
-* Raise an `ActionView::MissingTemplate` exception when no implicit template could be found. *Damien Mathieu*
-
-* Allow callbacks to be defined in mailers similar to `ActionController::Base`. You can configure default
- settings, headers, attachments, delivery settings or change delivery using
- `before_filter`, `after_filter`, etc. *Justin S. Leitgeb*
-
-Please check [3-2-stable](https://github.com/rails/rails/blob/3-2-stable/actionmailer/CHANGELOG.md) for previous changes.
+Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/actionmailer/CHANGELOG.md) for previous changes.
diff --git a/actionmailer/lib/action_mailer/version.rb b/actionmailer/lib/action_mailer/version.rb
index ab67f62929..9d00091972 100644
--- a/actionmailer/lib/action_mailer/version.rb
+++ b/actionmailer/lib/action_mailer/version.rb
@@ -1,7 +1,7 @@
module ActionMailer
# Returns the version of the currently loaded ActionMailer as a Gem::Version
def self.version
- Gem::Version.new "4.0.0.rc1"
+ Gem::Version.new "4.1.0.beta"
end
module VERSION #:nodoc:
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md
index e30029fb6d..ffafa7412d 100644
--- a/actionpack/CHANGELOG.md
+++ b/actionpack/CHANGELOG.md
@@ -1,1193 +1,3 @@
-## Rails 4.0.0 (unreleased) ##
+* No changes.
-* Add support for passing custom url options other than `:host` and custom
- status and flash options to `force_ssl`.
-
- *Andrew White*
-
-* The `force_ssl` command now builds the redirect url from `request.fullpath`.
- This ensures that the format is maintained and it doesn't redirect to a route
- that has the same parameters but is defined earlier in `routes.rb`. Also any
- optional segments are maintained.
-
- Fixes #7528, #9061, #10305.
-
- *Andrew White*
-
-* Return a 405 Method Not Allowed response when a request contains an unknown
- HTTP method.
-
- *Lewis Marshall*
-
-* Add support for extracting the port from the `:host` option passed to `url_for`.
-
- *Andrew White*
-
-* Add support for removing the subdomain from a url by passing `nil`, `false` or `''`.
- Fixes #10180.
-
- *Derek Watson + Andrew White*
-
-* Element of the collection for `options_from_collection_for_select` helper can
- optionally contain html attributes as the last element of the array as
- `options_for_select` helper.
-
- *Vasiliy Ermolovich*
-
-* Fix explicit names on multiple file fields. If a file field tag has
- the multiple option, it is turned into an array field (appending `[]`),
- but if an explicit name is passed to `file_field` the `[]` is not
- appended.
- Fixes #9830.
-
- *Ryan McGeary*
-
-* Add block support for the `mail_to` helper, similar to the `link_to` helper.
-
- *Sam Pohlenz*
-
-* Automatically configure cookie-based sessions to be encrypted if
- `secret_key_base` is set, falling back to signed if only `secret_token`
- is set. Automatically upgrade existing signed cookie-based sessions from
- Rails 3.x to be encrypted if both `secret_key_base` and `secret_token`
- are set, or signed with the new key generator if only `secret_token` is
- set. This leaves only the `config.session_store :cookie_store` option and
- removes the two new options introduced in 4.0.0.beta1:
- `encrypted_cookie_store` and `upgrade_signature_to_encryption_cookie_store`.
-
- *Trevor Turk*
-
-* Ensure consistent fallback to the default layout lookup for layouts set
- using symbols or procs that return `nil`.
-
- All of the following layouts will result in the default layout lookup:
-
- layout nil
-
- layout proc { nil }
-
- layout :returns_nil
- def returns_nil
- nil
- end
-
- Previously symbols and procs which returned `nil` resulted in no layout which
- differed from the `layout nil` behavior. To get the "no layout" behavior just
- return `false` instead of `nil` for `layout`.
-
- *Chris Nicola*
-
-* Create `UpgradeLegacySignedCookieJar` to transparently upgrade existing signed
- cookies generated by Rails 3.x to avoid invalidating them when upgrading to Rails 4.x.
-
- *Trevor Turk + Neeraj Singh*
-
-* Raise an `ArgumentError` when a clashing named route is defined.
-
- *Trevor Turk*
-
-* Allow default url options to accept host with protocol such as `http://`
-
- config.action_mailer.default_url_options = { host: "http://mydomain.com" }
-
- *Richard Schneeman*
-
-* Ensure that digest authentication responds with a 401 status when a basic
- header is received.
-
- *Brad Dunbar*
-
-* Include I18n locale fallbacks in view lookup.
- Fixes #3512.
-
- *Juan Barreneche*
-
-* Integration and functional tests allow headers and rack env
- variables to be passed when performing requests.
- Fixes #6513.
-
- Example:
-
- # integration test
- get "/success", {}, "HTTP_REFERER" => "http://test.com/",
- "Accepts" => "text/plain, text/html"
-
- # functional test
- @request.headers["Accepts"] = "text/plain, text/html"
-
- *Yves Senn*
-
-* Http::Headers respects headers that are not prefixed with HTTP_
-
- *Yves Senn*
-
-* Fix incorrectly appended square brackets to a multiple select box
- if an explicit name has been given and it already ends with "[]"
-
- Before:
-
- select(:category, [], {}, multiple: true, name: "post[category][]")
- # => <select name="post[category][][]" ...>
-
- After:
-
- select(:category, [], {}, multiple: true, name: "post[category][]")
- # => <select name="post[category][]" ...>
-
- *Olek Janiszewski*
-
-* Fixed regression when using `assert_template` to verify files sent using
- `render file: 'README.md'`.
- Fixes #9464.
-
- *Justin Coyne*
-
-* Fixed `ActionView::Helpers::CaptureHelper#content_for` regression when trying to use it in
- a boolean statement.
- Fixes #9360.
-
- *Nikolay Shebanov*
-
-* `format: true` does not override existing format constraints.
- Fixes #9466.
-
- Example:
-
- # This will force the .json extension.
- get '/json_only', to: ok, format: true, constraints: { format: /json/ }
-
- *Yves Senn*
-
-* Skip valid encoding checks for non-String parameters that come
- from the matched route's defaults.
- Fixes #9435.
-
- Example:
-
- root to: 'main#posts', page: 1
-
- *Yves Senn*
-
-* Don't verify Regexp requirements for non-Regexp `:constraints`.
- Fixes #9432.
-
- Example:
-
- get '/photos.:format' => 'feeds#photos', constraints: {format: 'xml'}
-
- *Yves Senn*
-
-* Make `ActionDispatch::Journey::Path::Pattern#new` raise more meaningful exception message.
-
- *Thierry Zires*
-
-
-## Rails 4.0.0.beta1 (February 25, 2013) ##
-
-* Fix `respond_to` not using formats that have no block if all is present. *Michael Grosser*
-
-* New applications use an encrypted session store by default.
-
- *Santiago Pastorino*
-
-* Determine the controller#action from only the matched path when using the
- shorthand syntax. Previously the complete path was used, which led
- to problems with nesting (scopes and namespaces).
- Fixes #7554.
-
- Example:
-
- # This will route to questions#new.
- scope ':locale' do
- get 'questions/new'
- end
-
- *Yves Senn*
-
-* Remove support for parsing XML parameters from request. If you still want to parse XML
- parameters, please install `actionpack-xml_parser' gem.
-
- *Prem Sichanugrist*
-
-* Remove support for parsing YAML parameters from request.
-
- *Aaron Patterson*
-
-* Add a message when you have no routes defined to both `rake routes` and
- GET "/rails/info/routes" that lets you know you have none defined and links
- to the Rails guide on the topic.
-
- *Steve Klabnik*
-
-* Change `image_alt` method to replace underscores/hyphens to spaces in filenames.
-
- Previously, underscored filenames became `alt="A_long_file_name_with_underscores"`
- in HTML, which is poor for accessibility. For instance, Apple's VoiceOver Utility
- pronounces each underscore. `A_long_file_name` thus would be read as `A underscore
- long underscore file underscore name.` Now underscored or hyphenated filenames
- (both of which are very popular naming conventions) read more naturally in
- screen readers by converting both hyphens and underscores to spaces.
-
- Before:
-
- image_tag('underscored_file_name.png')
- # => <img alt="Underscored_file_name" src="/assets/underscored_file_name.png" />
-
- After:
-
- image_tag('underscored_file_name.png')
- # => <img alt="Underscored file name" src="/assets/underscored_file_name.png" />
-
- *Nick Cox*
-
-* We don't support Ruby constant notation in the `:controller` option for route
- definitions. So, this raises an `ArgumentError` now:
-
- resources :posts, controller: "Admin::Posts" # WRONG
-
- Use path notation instead:
-
- resources :posts, controller: "admin/posts" # RIGHT
-
- *Yves Senn*
-
-* `assert_template` can be used to verify the locals of partials,
- which live inside a directory.
-
- # Prefixed partials inside directories worked and still work.
- assert_template partial: 'directory/_partial', locals: {name: 'John'}
-
- # This did not work but does now.
- assert_template partial: 'directory/partial', locals: {name: 'John'}
-
- Fixes #8516.
-
- *Yves Senn*
-
-* Fix `content_tag_for` with array HTML option.
- It would embed array as string instead of joining it like `content_tag` does:
-
- content_tag(:td, class: ["foo", "bar"]){}
- # => <td class="foo bar"></td>
-
- Before:
-
- content_tag_for(:td, item, class: ["foo", "bar"])
- # => <td class="item [&quot;foo&quot;, &quot;bar&quot;]" id="item_1"></td>
-
- After:
-
- content_tag_for(:td, item, class: ["foo", "bar"])
- # => <td class="item foo bar" id="item_1"></td>
-
- *Semyon Perepelitsa*
-
-* Remove `BestStandardsSupport` middleware, !DOCTYPE html already triggers
- standards mode per http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx
- and ChromeFrame header has been moved to `config.action_dispatch.default_headers`
-
- *Guillermo Iguaran*
-
-* Fix CSRF protection and `current_url?` helper to work with HEAD requests
- now that `ActionDispatch::Head` has been removed in favor of `Rack::Head`.
-
- *Michiel Sikkes*
-
-* Change `asset_path` to not include `SCRIPT_NAME` when it's used
- from a mounted engine. Fixes #8119.
-
- *Piotr Sarnacki*
-
-* Add JavaScript based routing path matcher to `/rails/info/routes`.
- Routes can now be filtered by whether or not they match a path.
-
- *Richard Schneeman*
-
-* Change the behavior of route defaults so that explicit defaults are no longer
- required where the key is not part of the path. For example:
-
- resources :posts, bucket_type: 'posts'
-
- will be required whenever constructing the url from a hash such as a functional
- test or using `url_for` directly. However using the explicit form alters the
- behavior so it's not required:
-
- resources :projects, defaults: { bucket_type: 'projects' }
-
- This changes existing behavior slightly in that any routes which only differ
- in their defaults will match the first route rather than the closest match.
-
- *Andrew White*
-
-* Add support for routing constraints other than Regexp and String.
- For example this now allows the use of arrays like this:
-
- get '/foo/:action', to: 'foo', constraints: { subdomain: %w[www admin] }
-
- or constraints where the request method returns an Fixnum like this:
-
- get '/foo', to: 'foo#index', constraints: { port: 8080 }
-
- Note that this only applies to constraints on the request - path constraints
- still need to be specified as Regexps as the various constraints are compiled
- into a single Regexp.
-
- *Andrew White*
-
-* Fix a bug in integration tests where setting the port via a url passed to
- the process method was ignored when constructing the request environment.
-
- *Andrew White*
-
-* Allow `:selected` to be set on `date_select` tag helper.
-
- *Colin Burn-Murdoch*
-
-* Fixed JSON params parsing regression for non-object JSON content.
-
- *Dylan Smith*
-
-* Extract `ActionDispatch::PerformanceTest` into https://github.com/rails/rails-perftest
- You can add the gem to your Gemfile to keep using performance tests.
-
- gem 'rails-perftest'
-
- *Yves Senn*
-
-* Added view_cache_dependency API for declaring dependencies that affect
- cache digest computation.
-
- *Jamis Buck*
-
-* `image_submit_tag` will set `alt` attribute from image source if not
- specified.
-
- *Nihad Abbasov*
-
-* Do not generate local variables for partials without object or collection.
- Previously rendering a partial without giving `:object` or `:collection`
- would generate a local variable with the partial name by default.
-
- *Carlos Antonio da Silva*
-
-* Return the last valid, non-private IP address from the X-Forwarded-For,
- Client-IP and Remote-Addr headers, in that order. Document the rationale
- for that decision, and describe the options that can be passed to the
- RemoteIp middleware to change it.
- Fixes #7979.
-
- *André Arko*, *Steve Klabnik*, *Alexey Gaziev*
-
-* Do not append second slash to `root_url` when using `trailing_slash: true`
- Fixes #8700.
-
- Before:
-
- root_url(trailing_slash: true) # => http://test.host//
-
- After:
-
- root_url(trailing_slash: true) # => http://test.host/
-
- *Yves Senn*
-
-* Allow to toggle dumps on error pages.
-
- *Gosha Arinich*
-
-* Fix a bug in `content_tag_for` that prevents it from working without a block.
-
- *Jasl*
-
-* Change the stylesheet of exception pages for development mode.
- Additionally display also the line of code and fragment that raised
- the exception in all exceptions pages.
-
- *Guillermo Iguaran + Jorge Cuadrado*
-
-* Do not append `charset=` parameter when `head` is called with a
- `:content_type` option.
- Fixes #8661.
-
- *Yves Senn*
-
-* Added `Mime::NullType` class. This allows to use `html?`, `xml?`, `json?`, etc.
- when the format of the request is unknown, without raising an exception.
-
- *Angelo Capilleri*
-
-* Integrate the Journey gem into Action Dispatch so that the global namespace
- is not polluted with names that may be used as models.
-
- *Andrew White*
-
-* Extract support for email address obfuscation via `:encode`, `:replace_at`, and `replace_dot`
- options from the `mail_to` helper into the `actionview-encoded_mail_to` gem.
-
- *Nick Reed + DHH*
-
-* Handle `:protocol` option in `stylesheet_link_tag` and `javascript_include_tag`
-
- *Vasiliy Ermolovich*
-
-* Clear url helper methods when routes are reloaded. *Andrew White*
-
-* Fix a bug in `ActionDispatch::Request#raw_post` that caused `env['rack.input']`
- to be read but not rewound.
-
- *Matt Venables*
-
-* Prevent raising `EOFError` on multipart GET request (IE issue). *Adam Stankiewicz*
-
-* Rename all action callbacks from *_filter to *_action to avoid the misconception that these
- callbacks are only suited for transforming or halting the response. With the new style,
- it's more inviting to use them as they were intended, like setting shared ivars for views.
-
- Example:
-
- class PeopleController < ActionController::Base
- before_action :set_person, except: [:index, :new, :create]
- before_action :ensure_permission, only: [:edit, :update]
-
- ...
-
- private
- def set_person
- @person = current_account.people.find(params[:id])
- end
-
- def ensure_permission
- current_person.can_change?(@person)
- end
- end
-
- The old *_filter methods still work with no deprecation notice.
-
- *DHH*
-
-* Add `cache_if` and `cache_unless` for conditional fragment caching:
-
- Example:
-
- <%= cache_if condition, project do %>
- <b>All the topics on this project</b>
- <%= render project.topics %>
- <% end %>
-
- # and
-
- <%= cache_unless condition, project do %>
- <b>All the topics on this project</b>
- <%= render project.topics %>
- <% end %>
-
- *Stephen Ausman + Fabrizio Regini + Angelo Capilleri*
-
-* Add logging filter capability for redirect URLs:
-
- config.filter_redirect << 'http://please.hide.it/'
-
- *Fabrizio Regini*
-
-* Fixed a bug that ignores constraints on a glob route. This was caused because the constraint
- regular expression is overwritten when the `routes.rb` file is processed. Fixes #7924
-
- *Maura Fitzgerald*
-
-* More descriptive error messages when calling `render :partial` with
- an invalid `:layout` argument.
-
- Fixes #8376.
-
- render partial: 'partial', layout: true
-
- # results in ActionView::MissingTemplate: Missing partial /true
-
- *Yves Senn*
-
-* Sweepers was extracted from Action Controller as `rails-observers` gem.
-
- *Rafael Mendonça França*
-
-* Add option flag to `CacheHelper#cache` to manually bypass automatic template digests:
-
- <% cache project, skip_digest: true do %>
- ...
- <% end %>
-
- *Drew Ulmer*
-
-* Do not sort Hash options in `grouped_options_for_select`. *Sergey Kojin*
-
-* Accept symbols as `send_data :disposition` value *Elia Schito*
-
-* Add i18n scope to `distance_of_time_in_words`. *Steve Klabnik*
-
-* `assert_template`:
- - is no more passing with empty string.
- - is now validating option keys. It accepts: `:layout`, `:partial`, `:locals` and `:count`.
-
- *Roberto Soares*
-
-* Allow setting a symbol as path in scope on routes. This is now allowed:
-
- scope :api do
- resources :users
- end
-
- It is also possible to pass multiple symbols to scope to shorten multiple nested scopes:
-
- scope :api do
- scope :v1 do
- resources :users
- end
- end
-
- can be rewritten as:
-
- scope :api, :v1 do
- resources :users
- end
-
- *Guillermo Iguaran + Amparo Luna*
-
-* Fix error when using a non-hash query argument named "params" in `url_for`.
-
- Before:
-
- url_for(params: "") # => undefined method `reject!' for "":String
-
- After:
-
- url_for(params: "") # => http://www.example.com?params=
-
- *tumayun + Carlos Antonio da Silva*
-
-* Render every partial with a new `ActionView::PartialRenderer`. This resolves
- issues when rendering nested partials.
- Fixes #8197.
-
- *Yves Senn*
-
-* Introduce `ActionView::Template::Handlers::ERB.escape_whitelist`. This is a list
- of mime types where template text is not html escaped by default. It prevents `Jack & Joe`
- from rendering as `Jack &amp; Joe` for the whitelisted mime types. The default whitelist
- contains `text/plain`.
- Fixes #7976.
-
- *Joost Baaij*
-
-* Fix input name when `multiple: true` and `:index` are set.
-
- Before:
-
- check_box("post", "comment_ids", { multiple: true, index: "foo" }, 1)
- # => <input name=\"post[foo][comment_ids]\" type=\"hidden\" value=\"0\" /><input id=\"post_foo_comment_ids_1\" name=\"post[foo][comment_ids]\" type=\"checkbox\" value=\"1\" />
-
- After:
-
- check_box("post", "comment_ids", { multiple: true, index: "foo" }, 1)
- # => <input name=\"post[foo][comment_ids][]\" type=\"hidden\" value=\"0\" /><input id=\"post_foo_comment_ids_1\" name=\"post[foo][comment_ids][]\" type=\"checkbox\" value=\"1\" />
-
- Fixes #8108.
-
- *Daniel Fox, Grant Hutchins & Trace Wax*
-
-* `date_select` helper accepts `with_css_classes: true` to add css classes similar with type
- of generated select tags.
-
- *Pavel Nikitin*
-
-* Only non-js/css under `app/assets` path will be included in default `config.assets.precompile`.
-
- *Josh Peek*
-
-* Remove support for the `RAILS_ASSET_ID` environment configuration
- (no longer needed now that we have the asset pipeline).
-
- *Josh Peek*
-
-* Remove old `asset_path` configuration (no longer needed now that we have the asset pipeline).
-
- *Josh Peek*
-
-* `assert_template` can be used to assert on the same template with different locals
- Fixes #3675.
-
- *Yves Senn*
-
-* Remove old asset tag concatenation (no longer needed now that we have the asset pipeline).
-
- *Josh Peek*
-
-* Accept `:remote` as symbolic option for `link_to` helper. *Riley Lynch*
-
-* Warn when the `:locals` option is passed to `assert_template` outside of a view test case
- Fixes #3415.
-
- *Yves Senn*
-
-* The `Rack::Cache` middleware is now disabled by default. To enable it,
- set `config.action_dispatch.rack_cache = true` and add `gem rack-cache` to your Gemfile.
-
- *Guillermo Iguaran*
-
-* `ActionController::Base.page_cache_extension` option is deprecated
- in favour of `ActionController::Base.default_static_extension`.
-
- *Francesco Rodriguez*
-
-* Action and Page caching has been extracted from Action Dispatch
- as `actionpack-action_caching` and `actionpack-page_caching` gems.
- Please read the `README.md` file on both gems for the usage.
-
- *Francesco Rodriguez*
-
-* Failsafe exception returns `text/plain`. *Steve Klabnik*
-
-* Rename internal variables on `ActionController::TemplateAssertions` to prevent
- naming collisions. `@partials`, `@templates` and `@layouts` are now prefixed with an underscore.
- Fixes #7459.
-
- *Yves Senn*
-
-* `resource` and `resources` don't modify the passed options hash.
- Fixes #7777.
-
- *Yves Senn*
-
-* Precompiled assets include aliases from `foo.js` to `foo/index.js` and vice versa.
-
- # Precompiles phone-<digest>.css and aliases phone/index.css to phone.css.
- config.assets.precompile = [ 'phone.css' ]
-
- # Precompiles phone/index-<digest>.css and aliases phone.css to phone/index.css.
- config.assets.precompile = [ 'phone/index.css' ]
-
- # Both of these work with either precompile thanks to their aliases.
- <%= stylesheet_link_tag 'phone', media: 'all' %>
- <%= stylesheet_link_tag 'phone/index', media: 'all' %>
-
- *Jeremy Kemper*
-
-* `assert_template` is no more passing with what ever string that matches
- with the template name.
-
- Before when we have a template `/layout/hello.html.erb`, `assert_template`
- was passing with any string that matches. This behavior allowed false
- positive like:
-
- assert_template "layout"
- assert_template "out/hello"
-
- Now it only passes with:
-
- assert_template "layout/hello"
- assert_template "hello"
-
- Fixes #3849.
-
- *Hugolnx*
-
-* `image_tag` will set the same width and height for image if numerical value
- passed to `size` option.
-
- *Nihad Abbasov*
-
-* Deprecate `Mime::Type#verify_request?` and `Mime::Type.browser_generated_types`,
- since they are no longer used inside of Rails, they will be removed in Rails 4.1.
-
- *Michael Grosser*
-
-* `ActionDispatch::Http::UploadedFile` now delegates `close` to its tempfile. *Sergio Gil*
-
-* Add `ActionController::StrongParameters`, this module converts `params` hash into
- an instance of ActionController::Parameters that allows whitelisting of permitted
- parameters. Non-permitted parameters are forbidden to be used in Active Model by default
- For more details check the documentation of the module or the
- [strong_parameters gem](https://github.com/rails/strong_parameters)
-
- *DHH + Guillermo Iguaran*
-
-* Remove Integration between `attr_accessible`/`attr_protected` and
- `ActionController::ParamsWrapper`. ParamWrapper now wraps all the parameters returned
- by the class method `attribute_names`.
-
- *Guillermo Iguaran*
-
-* Log now displays the correct status code when an exception is raised.
- Fixes #7646.
-
- *Yves Senn*
-
-* Allow pass couple extensions to `ActionView::Template.register_template_handler` call.
-
- *Tima Maslyuchenko*
-
-* Sprockets integration has been extracted from Action Pack to the `sprockets-rails`
- gem. `rails` gem is depending on `sprockets-rails` by default.
-
- *Guillermo Iguaran*
-
-* `ActionDispatch::Session::MemCacheStore` now uses `dalli` instead of the deprecated
- `memcache-client` gem.
-
- *Arun Agrawal + Guillermo Iguaran*
-
-* Support multiple etags in If-None-Match header. *Travis Warlick*
-
-* Allow to configure how unverified request will be handled using `:with`
- option in `protect_from_forgery` method.
-
- Valid unverified request handling methods are:
-
- - `:exception` - Raises ActionController::InvalidAuthenticityToken exception.
- - `:reset_session` - Resets the session.
- - `:null_session` - Provides an empty session during request but doesn't
- reset it completely. Used as default if `:with` option is not specified.
-
- New applications are generated with:
-
- protect_from_forgery with: :exception
-
- *Sergey Nartimov*
-
-* Add `.ruby` template handler, this handler simply allows arbitrary Ruby code as a template. *Guillermo Iguaran*
-
-* Add `separator` option for `ActionView::Helpers::TextHelper#excerpt`:
-
- excerpt('This is a very beautiful morning', 'very', separator: ' ', radius: 1)
- # => ...a very beautiful...
-
- *Guirec Corbel*
-
-* Added controller-level etag additions that will be part of the action etag computation *Jeremy Kemper/DHH*
-
- class InvoicesController < ApplicationController
- etag { current_user.try :id }
-
- def show
- # Etag will differ even for the same invoice when it's viewed by a different current_user
- @invoice = Invoice.find(params[:id])
- fresh_when(@invoice)
- end
- end
-
-* Add automatic template digests to all `CacheHelper#cache` calls (originally spiked in the `cache_digests` plugin) *DHH*
-
-* When building a URL fails, add missing keys provided by Journey. Failed URL
- generation now returns a 500 status instead of a 404.
-
- *Richard Schneeman*
-
-* Deprecate availability of `ActionView::RecordIdentifier` in controllers by default.
- It's view specific and can be easily included in controllers manually if someone
- really needs it. Also deprecate calling `ActionController::RecordIdentifier.dom_id` and
- `dom_class` directly, in favor of `ActionView::RecordIdentifier.dom_id` and `dom_class`.
- `RecordIdentifier` will be removed from `ActionController::Base` in Rails 4.1.
-
- *Piotr Sarnacki*
-
-* Fix `ActionView::RecordIdentifier` to work as a singleton. *Piotr Sarnacki*
-
-* Deprecate `Template#mime_type`, it will be removed in Rails 4.1 in favor of `#type`.
- *Piotr Sarnacki*
-
-* Move vendored html-scanner from `action_controller` to `action_view` directory. If you
- require it directly, please use 'action_view/vendor/html-scanner', reference to
- 'action_controller/vendor/html-scanner' will be removed in Rails 4.1. *Piot Sarnacki*
-
-* Fix handling of date selects when using both disabled and discard options.
- Fixes #7431.
-
- *Vasiliy Ermolovich*
-
-* `ActiveRecord::SessionStore` is extracted out of Rails into a gem `activerecord-session_store`.
- Setting `config.session_store` to `:active_record_store` will no longer work and will break
- if the `activerecord-session_store` gem isn't available. *Prem Sichanugrist*
-
-* Fix `select_tag` when `option_tags` is nil.
- Fixes #7404.
-
- *Sandeep Ravichandran*
-
-* Add `Request#formats=(extensions)` that lets you set multiple formats directly in a prioritized order.
-
- Example of using this for custom iphone views with an HTML fallback:
-
- class ApplicationController < ActionController::Base
- before_filter :adjust_format_for_iphone_with_html_fallback
-
- private
- def adjust_format_for_iphone_with_html_fallback
- request.formats = [ :iphone, :html ] if request.env["HTTP_USER_AGENT"][/iPhone/]
- end
- end
-
- *DHH*
-
-* Add Routing Concerns to declare common routes that can be reused inside
- others resources and routes.
-
- Code before:
-
- resources :messages do
- resources :comments
- end
-
- resources :posts do
- resources :comments
- resources :images, only: :index
- end
-
- Code after:
-
- concern :commentable do
- resources :comments
- end
-
- concern :image_attachable do
- resources :images, only: :index
- end
-
- resources :messages, concerns: :commentable
-
- resources :posts, concerns: [:commentable, :image_attachable]
-
- *DHH + Rafael Mendonça França*
-
-* Add `start_hour` and `end_hour` options to the `select_hour` helper. *Evan Tann*
-
-* Raises an `ArgumentError` when the first argument in `form_for` contain `nil`
- or is empty.
-
- *Richard Schneeman*
-
-* Add 'X-Frame-Options' => 'SAMEORIGIN'
- 'X-XSS-Protection' => '1; mode=block' and
- 'X-Content-Type-Options' => 'nosniff'
- as default headers.
-
- *Egor Homakov*
-
-* Allow data attributes to be set as a first-level option for `form_for`, so you can write `form_for @record, data: { behavior: 'autosave' }` instead of `form_for @record, html: { data: { behavior: 'autosave' } }` *DHH*
-
-* Deprecate `button_to_function` and `link_to_function` helpers.
-
- We recommend the use of Unobtrusive JavaScript instead. For example:
-
- link_to "Greeting", "#", class: "nav_link"
-
- $(function() {
- $('.nav_link').click(function() {
- // Some complex code
-
- return false;
- });
- });
-
- or
-
- link_to "Greeting", '#', onclick: "alert('Hello world!'); return false", class: "nav_link"
-
- for simple cases.
-
- *Rafael Mendonça França*
-
-* `javascript_include_tag :all` will now not include `application.js` if the file does not exists. *Prem Sichanugrist*
-
-* Send an empty response body when call `head` with status between 100 and 199, 204, 205 or 304.
-
- *Armand du Plessis*
-
-* Fixed issue with where digest authentication would not work behind a proxy. *Arthur Smith*
-
-* Added `ActionController::Live`. Mix it in to your controller and you can
- stream data to the client live. For example:
-
- class FooController < ActionController::Base
- include ActionController::Live
-
- def index
- 100.times {
- # Client will see this as it's written
- response.stream.write "hello world\n"
- sleep 1
- }
- response.stream.close
- end
- end
-
- *Aaron Patterson*
-
-* Remove `ActionDispatch::Head` middleware in favor of `Rack::Head`. *Santiago Pastorino*
-
-* Deprecate `:confirm` in favor of `data: { confirm: "Text" }` option for `button_to`, `button_tag`, `image_submit_tag`, `link_to` and `submit_tag` helpers.
-
- *Carlos Galdino + Rafael Mendonça França*
-
-* Show routes in exception page while debugging a `RoutingError` in development.
-
- *Richard Schneeman + Mattt Thompson + Yves Senn*
-
-* Add `ActionController::Flash.add_flash_types` method to allow people to register their own flash types. e.g.:
-
- class ApplicationController
- add_flash_types :error, :warning
- end
-
- If you add the above code, you can use `<%= error %>` in an erb, and `redirect_to /foo, error: 'message'` in a controller.
-
- *kennyj*
-
-* Remove Active Model dependency from Action Pack. *Guillermo Iguaran*
-
-* Support unicode characters in routes. Route will be automatically escaped, so instead of manually escaping:
-
- get Rack::Utils.escape('こんにちは') => 'home#index'
-
- You just have to write the unicode route:
-
- get 'こんにちは' => 'home#index'
-
- *kennyj*
-
-* Return proper format on exceptions. *Santiago Pastorino*
-
-* Allow to use `mounted_helpers` (helpers for accessing mounted engines) in `ActionView::TestCase`. *Piotr Sarnacki*
-
-* Include `mounted_helpers` (helpers for accessing mounted engines) in `ActionDispatch::IntegrationTest` by default. *Piotr Sarnacki*
-
-* Extracted redirect logic from `ActionController::ForceSSL::ClassMethods.force_ssl` into `ActionController::ForceSSL#force_ssl_redirect`
-
- *Jeremy Friesen*
-
-* Make possible to use a block in `button_to` if the button text is hard
- to fit into the name parameter, e.g.:
-
- <%= button_to [:make_happy, @user] do %>
- Make happy <strong><%= @user.name %></strong>
- <% end %>
- # => "<form method="post" action="/users/1/make_happy" class="button_to">
- # <div>
- # <button type="submit">
- # Make happy <strong>Name</strong>
- # </button>
- # </div>
- # </form>"
-
- *Sergey Nartimov*
-
-* Change a way of ordering helpers from several directories. Previously,
- when loading helpers from multiple paths, all of the helpers files were
- gathered into one array an then they were sorted. Helpers from different
- directories should not be mixed before loading them to make loading more
- predictable. The most common use case for such behavior is loading helpers
- from engines. When you load helpers from application and engine Foo, in
- that order, first rails will load all of the helpers from application,
- sorted alphabetically and then it will do the same for Foo engine.
-
- *Piotr Sarnacki*
-
-* `truncate` now always returns an escaped HTML-safe string. The option `:escape` can be used as
- false to not escape the result.
-
- *Li Ellis Gallardo + Rafael Mendonça França*
-
-* `truncate` now accepts a block to show extra content when the text is truncated. *Li Ellis Gallardo*
-
-* Add `week_field`, `week_field_tag`, `month_field`, `month_field_tag`, `datetime_local_field`,
- `datetime_local_field_tag`, `datetime_field` and `datetime_field_tag` helpers. *Carlos Galdino*
-
-* Add `color_field` and `color_field_tag` helpers. *Carlos Galdino*
-
-* `assert_generates`, `assert_recognizes`, and `assert_routing` all raise
- `Assertion` instead of `RoutingError` *David Chelimsky*
-
-* URL path parameters with invalid encoding now raise `ActionController::BadRequest`. *Andrew White*
-
-* Malformed query and request parameter hashes now raise `ActionController::BadRequest`. *Andrew White*
-
-* Add `divider` option to `grouped_options_for_select` to generate a separator
- `optgroup` automatically, and deprecate `prompt` as third argument, in favor
- of using an options hash. *Nicholas Greenfield*
-
-* Add `time_field` and `time_field_tag` helpers which render an `input[type="time"]` tag. *Alex Soulim*
-
-* Removed old text helper apis from `highlight`, `excerpt` and `word_wrap`. *Jeremy Walker*
-
-* Templates without a handler extension now raises a deprecation warning but still
- defaults to ERB. In future releases, it will simply return the template contents. *Steve Klabnik*
-
-* Deprecate `:disable_with` in favor of `data: { disable_with: "Text" }` option from `submit_tag`, `button_tag` and `button_to` helpers.
-
- *Carlos Galdino + Rafael Mendonça França*
-
-* Remove `:mouseover` option from `image_tag` helper. *Rafael Mendonça França*
-
-* The `select` method (select tag) forces `:include_blank` if `required` is true and
- `display size` is one and `multiple` is not true. *Angelo Capilleri*
-
-* Copy literal route constraints to defaults so that url generation know about them.
- The copied constraints are `:protocol`, `:subdomain`, `:domain`, `:host` and `:port`.
-
- *Andrew White*
-
-* `respond_to` and `respond_with` now raise `ActionController::UnknownFormat` instead
- of directly returning head 406. The exception is rescued and converted to 406
- in the exception handling middleware. *Steven Soroka*
-
-* Allows `assert_redirected_to` to match against a regular expression. *Andy Lindeman*
-
-* Add backtrace to development routing error page. *Richard Schneeman*
-
-* Replace `include_seconds` boolean argument with `include_seconds: true` option
- in `distance_of_time_in_words` and `time_ago_in_words` signature. *Dmitriy Kiriyenko*
-
-* Make current object and counter (when it applies) variables accessible when
- rendering templates with :object / :collection. *Carlos Antonio da Silva*
-
-* JSONP now uses mimetype `text/javascript` instead of `application/json`. *omjokine*
-
-* Allow to lazy load `default_form_builder` by passing a `String` instead of a constant. *Piotr Sarnacki*
-
-* Session arguments passed to `process` calls in functional tests are now merged into
- the existing session, whereas previously they would replace the existing session.
- This change may break some existing tests if they are asserting the exact contents of
- the session but should not break existing tests that only assert individual keys.
-
- *Andrew White*
-
-* Add `index` method to FormBuilder class. *Jorge Bejar*
-
-* Remove the leading \n added by textarea on `assert_select`. *Santiago Pastorino*
-
-* Changed default value for `config.action_view.embed_authenticity_token_in_remote_forms`
- to `false`. This change breaks remote forms that need to work also without JavaScript,
- so if you need such behavior, you can either set it to `true` or explicitly pass
- `authenticity_token: true` in form options.
-
-* Added `ActionDispatch::SSL` middleware that when included force all the requests to be under HTTPS protocol. *Rafael Mendonça França*
-
-* Add `include_hidden` option to select tag. With `include_hidden: false` select with `multiple` attribute doesn't generate hidden input with blank value. *Vasiliy Ermolovich*
-
-* Removed default `size` option from the `text_field`, `search_field`, `telephone_field`, `url_field`, `email_field` helpers. *Philip Arndt*
-
-* Removed default `cols` and `rows` options from the `text_area` helper. *Philip Arndt*
-
-* Adds support for layouts when rendering a partial with a given collection. *serabe*
-
-* Allows the route helper `root` to take a string argument. For example, `root 'pages#main'`. *bcardarella*
-
-* Forms of persisted records use always PATCH (via the `_method` hack). *fxn*
-
-* For resources, both PATCH and PUT are routed to the `update` action. *fxn*
-
-* Don't ignore `force_ssl` in development. This is a change of behavior - use a `:if` condition to recreate the old behavior.
-
- class AccountsController < ApplicationController
- force_ssl if: :ssl_configured?
-
- def ssl_configured?
- !Rails.env.development?
- end
- end
-
- *Pat Allan*
-
-* Adds support for the PATCH verb:
- * Request objects respond to `patch?`.
- * Routes have a new `patch` method, and understand `:patch` in the
- existing places where a verb is configured, like `:via`.
- * New method `patch` available in functional tests.
- * If `:patch` is the default verb for updates, edits are
- tunneled as PATCH rather than as PUT, and routing acts accordingly.
- * New method `patch_via_redirect` available in integration tests.
-
- *dlee*
-
-* Integration tests support the `OPTIONS` method. *Jeremy Kemper*
-
-* `expires_in` accepts a `must_revalidate` flag. If true, "must-revalidate"
- is added to the Cache-Control header. *fxn*
-
-* Add `date_field` and `date_field_tag` helpers which render an `input[type="date"]` tag *Olek Janiszewski*
-
-* Adds `image_url`, `javascript_url`, `stylesheet_url`, `audio_url`, `video_url`, and `font_url`
- to assets tag helper. These URL helpers will return the full path to your assets. This is useful
- when you are going to reference this asset from external host. *Prem Sichanugrist*
-
-* Default responder will now always use your overridden block in `respond_with` to render your response. *Prem Sichanugrist*
-
-* Allow `value_method` and `text_method` arguments from `collection_select` and
- `options_from_collection_for_select` to receive an object that responds to `:call`,
- such as a `proc`, to evaluate the option in the current element context. This works
- the same way with `collection_radio_buttons` and `collection_check_boxes`.
-
- *Carlos Antonio da Silva + Rafael Mendonça França*
-
-* Add `collection_check_boxes` form helper, similar to `collection_select`:
- Example:
-
- collection_check_boxes :post, :author_ids, Author.all, :id, :name
- # Outputs something like:
- <input id="post_author_ids_1" name="post[author_ids][]" type="checkbox" value="1" />
- <label for="post_author_ids_1">D. Heinemeier Hansson</label>
- <input id="post_author_ids_2" name="post[author_ids][]" type="checkbox" value="2" />
- <label for="post_author_ids_2">D. Thomas</label>
- <input name="post[author_ids][]" type="hidden" value="" />
-
- The label/check_box pairs can be customized with a block.
-
- *Carlos Antonio da Silva + Rafael Mendonça França*
-
-* Add `collection_radio_buttons` form helper, similar to `collection_select`:
- Example:
-
- collection_radio_buttons :post, :author_id, Author.all, :id, :name
- # Outputs something like:
- <input id="post_author_id_1" name="post[author_id]" type="radio" value="1" />
- <label for="post_author_id_1">D. Heinemeier Hansson</label>
- <input id="post_author_id_2" name="post[author_id]" type="radio" value="2" />
- <label for="post_author_id_2">D. Thomas</label>
-
- The label/radio_button pairs can be customized with a block.
-
- *Carlos Antonio da Silva + Rafael Mendonça França*
-
-* `check_box` with `:form` html5 attribute will now replicate the `:form`
- attribute to the hidden field as well. *Carlos Antonio da Silva*
-
-* `label` form helper accepts `for: nil` to not generate the attribute. *Carlos Antonio da Silva*
-
-* Add `:format` option to `number_to_percentage`. *Rodrigo Flores*
-
-* Add `config.action_view.logger` to configure logger for Action View. *Rafael Mendonça França*
-
-* Deprecated `ActionController::Integration` in favour of `ActionDispatch::Integration`.
-
-* Deprecated `ActionController::IntegrationTest` in favour of `ActionDispatch::IntegrationTest`.
-
-* Deprecated `ActionController::PerformanceTest` in favour of `ActionDispatch::PerformanceTest`.
-
-* Deprecated `ActionController::AbstractRequest` in favour of `ActionDispatch::Request`.
-
-* Deprecated `ActionController::Request` in favour of `ActionDispatch::Request`.
-
-* Deprecated `ActionController::AbstractResponse` in favour of `ActionDispatch::Response`.
-
-* Deprecated `ActionController::Response` in favour of `ActionDispatch::Response`.
-
-* Deprecated `ActionController::Routing` in favour of `ActionDispatch::Routing`.
-
-* `check_box helper` with `disabled: true` will generate a disabled
- hidden field to conform with the HTML convention where disabled fields are
- not submitted with the form. This is a behavior change, previously the hidden
- tag had a value of the disabled checkbox. *Tadas Tamosauskas*
-
-* `favicon_link_tag` helper will now use the favicon in app/assets by default. *Lucas Caton*
-
-* `ActionView::Helpers::TextHelper#highlight` now defaults to the
- HTML5 `mark` element. *Brian Cardarella*
-
-Please check [3-2-stable](https://github.com/rails/rails/blob/3-2-stable/actionpack/CHANGELOG.md) for previous changes.
+Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/actionpack/CHANGELOG.md) for previous changes.
diff --git a/actionpack/lib/action_pack/version.rb b/actionpack/lib/action_pack/version.rb
index b16dbd4f15..fd08f392aa 100644
--- a/actionpack/lib/action_pack/version.rb
+++ b/actionpack/lib/action_pack/version.rb
@@ -1,7 +1,7 @@
module ActionPack
# Returns the version of the currently loaded ActionPack as a Gem::Version
def self.version
- Gem::Version.new "4.0.0.rc1"
+ Gem::Version.new "4.1.0.beta"
end
module VERSION #:nodoc:
diff --git a/activemodel/CHANGELOG.md b/activemodel/CHANGELOG.md
index a1f3d081db..eb54b58888 100644
--- a/activemodel/CHANGELOG.md
+++ b/activemodel/CHANGELOG.md
@@ -1,213 +1,3 @@
-## Rails 4.0.0 (unreleased) ##
+* No changes.
-* Add `ActiveModel::Errors#full_messages_for`, to return all the error messages
- for a given attribute.
-
- Example:
-
- class Person
- include ActiveModel::Validations
-
- attr_reader :name, :email
- validates_presence_of :name, :email
- end
-
- person = Person.new
- person.valid? # => false
- person.errors.full_messages_for(:name) # => ["Name can't be blank"]
-
- *Volodymyr Shatsky*
-
-* Added a method so that validations can be easily cleared on a model.
- For example:
-
- class Person
- include ActiveModel::Validations
-
- validates_uniqueness_of :first_name
- validate :cannot_be_robot
-
- def cannot_be_robot
- errors.add(:base, 'A person cannot be a robot') if person_is_robot
- end
- end
-
- Now, if someone runs `Person.clear_validators!`, then the following occurs:
-
- Person.validators # => []
- Person._validate_callbacks.empty? # => true
-
- *John Wang*
-
-* `has_secure_password` does not fail the confirmation validation
- when assigning empty String to `password` and `password_confirmation`.
- Fixes #9535.
-
- Example:
-
- # Given User has_secure_password.
- @user.password = ""
- @user.password_confirmation = ""
- @user.valid?(:update) # used to be false
-
- *Yves Senn*
-
-* `validates_confirmation_of` does not override writer methods for
- the confirmation attribute if no reader is defined.
-
- Example:
-
- class Blog
- def title=(new_title)
- @title = new_title.downcase
- end
-
- # previously this would override the setter above.
- validates_confirmation_of :title
- end
-
- *Yves Senn*
-
-## Rails 4.0.0.beta1 (February 25, 2013) ##
-
-* Add `ActiveModel::Validations::AbsenceValidator`, a validator to check the
- absence of attributes.
-
- class Person
- include ActiveModel::Validations
-
- attr_accessor :first_name
- validates_absence_of :first_name
- end
-
- person = Person.new
- person.first_name = "John"
- person.valid?
- # => false
- person.errors.messages
- # => {:first_name=>["must be blank"]}
-
- *Roberto Vasquez Angel*
-
-* `[attribute]_changed?` now returns `false` after a call to `reset_[attribute]!`.
-
- *Renato Mascarenhas*
-
-* Observers was extracted from Active Model as `rails-observers` gem.
-
- *Rafael Mendonça França*
-
-* Specify type of singular association during serialization.
-
- *Steve Klabnik*
-
-* Fixed length validator to correctly handle `nil`. Fixes #7180.
-
- *Michal Zima*
-
-* Removed dispensable `require` statements. Make sure to require `active_model` before requiring
- individual parts of the framework.
-
- *Yves Senn*
-
-* Use BCrypt's `MIN_COST` in the test environment for speedier tests when using `has_secure_password`.
-
- *Brian Cardarella + Jeremy Kemper + Trevor Turk*
-
-* Add `ActiveModel::ForbiddenAttributesProtection`, a simple module to
- protect attributes from mass assignment when non-permitted attributes are passed.
-
- *DHH + Guillermo Iguaran*
-
-* `ActiveModel::MassAssignmentSecurity` has been extracted from Active Model and the
- `protected_attributes` gem should be added to Gemfile in order to use
- `attr_accessible` and `attr_protected` macros in your models.
-
- *Guillermo Iguaran*
-
-* Due to a change in builder, `nil` and empty strings now generate
- closed tags, so instead of this:
-
- <pseudonyms nil=\"true\"></pseudonyms>
-
- it generates this:
-
- <pseudonyms nil=\"true\"/>
-
- *Carlos Antonio da Silva*
-
-* Inclusion/exclusion validators accept a method name passed as a symbol to the
- `:in` option.
-
- This allows to use dynamic inclusion/exclusion values using methods, besides
- the current lambda/proc support.
-
- *Gabriel Sobrinho*
-
-* `ActiveModel::Validation#validates` ability to pass custom exception to the
- `:strict` option.
-
- *Bogdan Gusiev*
-
-* Changed `ActiveModel::Serializers::Xml::Serializer#add_associations` to by default
- propagate `:skip_types, :dasherize, :camelize` keys to included associations.
- It can be overridden on each association by explicitly specifying the option on one
- or more associations
-
- *Anthony Alberto*
-
-* Changed `ActiveModel::Serializers::JSON.include_root_in_json` default value to false.
- Now, AM Serializers and AR objects have the same default behaviour. Fixes #6578.
-
- class User < ActiveRecord::Base; end
-
- class Person
- include ActiveModel::Model
- include ActiveModel::AttributeMethods
- include ActiveModel::Serializers::JSON
-
- attr_accessor :name, :age
-
- def attributes
- instance_values
- end
- end
-
- user.as_json
- => {"id"=>1, "name"=>"Konata Izumi", "age"=>16, "awesome"=>true}
- # root is not included
-
- person.as_json
- => {"name"=>"Francesco", "age"=>22}
- # root is not included
-
- *Francesco Rodriguez*
-
-* Passing false hash values to `validates` will no longer enable the corresponding validators.
-
- *Steve Purcell*
-
-* `ConfirmationValidator` error messages will attach to `:#{attribute}_confirmation` instead of `attribute`.
-
- *Brian Cardarella*
-
-* Added `ActiveModel::Model`, a mixin to make Ruby objects work with AP out of box.
-
- *Guillermo Iguaran*
-
-* `AM::Errors#to_json`: support `:full_messages` parameter.
-
- *Bogdan Gusiev*
-
-* Trim down Active Model API by removing `valid?` and `errors.full_messages`.
-
- *José Valim*
-
-* When `^` or `$` are used in the regular expression provided to `validates_format_of`
- and the `:multiline` option is not set to true, an exception will be raised. This is
- to prevent security vulnerabilities when using `validates_format_of`. The problem is
- described in detail in the Rails security guide.
-
- *Jan Berdajs + Egor Homakov*
-
-Please check [3-2-stable](https://github.com/rails/rails/blob/3-2-stable/activemodel/CHANGELOG.md) for previous changes.
+Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/activemodel/CHANGELOG.md) for previous changes.
diff --git a/activemodel/lib/active_model/version.rb b/activemodel/lib/active_model/version.rb
index b0afb7513d..86340bba37 100644
--- a/activemodel/lib/active_model/version.rb
+++ b/activemodel/lib/active_model/version.rb
@@ -1,7 +1,7 @@
module ActiveModel
# Returns the version of the currently loaded ActiveModel as a Gem::Version
def self.version
- Gem::Version.new "4.0.0.rc1"
+ Gem::Version.new "4.1.0.beta"
end
module VERSION #:nodoc:
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md
index 5ba7a6fa75..ec42b63c2b 100644
--- a/activerecord/CHANGELOG.md
+++ b/activerecord/CHANGELOG.md
@@ -1,2044 +1,3 @@
-## Rails 4.0.0 (unreleased) ##
+* No changes.
-* Allow to use databases.rake tasks without having `Rails.application`.
-
- *Piotr Sarnacki*
-
-* Fix a `SystemStackError` problem when using time zone aware or serialized attributes.
- In current implementation, we reuse `column_types` argument when initiating an instance.
- If an instance has serialized or time zone aware attributes, `column_types` is
- wrapped multiple times in `decorate_columns` method. Thus the above error occurs.
-
- *Dan Erikson & kennyj*
-
-* Fix for a regression bug in which counter cache columns were not being updated
- when record was pushed into a has_many association. For example:
-
- Post.first.comments << Comment.create
-
- Fixes #3891.
-
- *Matthew Robertson*
-
-* If a model was instantiated from the database using `select`, `respond_to?`
- returns false for non-selected attributes. For example:
-
- post = Post.select(:title).first
- post.respond_to?(:body) # => false
-
- post = Post.select('title as post_title').first
- post.respond_to?(:title) # => false
-
- Fixes #4208.
-
- *Neeraj Singh*
-
-* Run `rake migrate:down` & `rake migrate:up` in transaction if database supports.
-
- *Alexander Bondarev*
-
-* `0x` prefix must be added when assigning hexadecimal string into `bit` column in PostgreSQL.
-
- *kennyj*
-
-* Added Statement Cache to allow the caching of a single statement. The cache works by
- duping the relation returned from yielding a statement, which allows skipping the AST
- building phase for following executes. The cache returns results in array format.
-
- Example:
-
- cache = ActiveRecord::StatementCache.new do
- Book.where(name: "my book").limit(100)
- end
-
- books = cache.execute
-
- The solution attempts to get closer to the speed of `find_by_sql` but still maintaining
- the expressiveness of the Active Record queries.
-
- *Olli Rissanen*
-
-* Preserve context while merging relations with join information.
-
- class Comment < ActiveRecord::Base
- belongs_to :post
- end
-
- class Author < ActiveRecord::Base
- has_many :posts
- end
-
- class Post < ActiveRecord::Base
- belongs_to :author
- has_many :comments
- end
-
- `Comment.joins(:post).merge(Post.joins(:author).merge(Author.where(:name => "Joe Blogs"))).all`
- would fail with
- `ActiveRecord::ConfigurationError: Association named 'author' was not found on Comment`.
-
- It is failing because `all` is being called on relation which looks like this after all
- the merging: `{:joins=>[:post, :author], :where=>[#<Arel::Nodes::Equality: ....}`. In this
- relation all the context that `Post` was joined with `Author` is lost and hence the error
- that `author` was not found on `Comment`.
-
- The solution is to build `JoinAssociation` when two relations with join information are being
- merged. And later while building the Arel use the previously built `JoinAssociation` record
- in `JoinDependency#graft` to build the right from clause.
- Fixes #3002.
-
- *Jared Armstrong and Neeraj Singh*
-
-* `default_scopes?` is deprecated. Check for `default_scopes.empty?` instead.
-
- *Agis Anastasopoulos*
-
-* Default values for PostgreSQL bigint types now get parsed and dumped to the
- schema correctly.
-
- *Erik Peterson*
-
-* Fix associations with `:inverse_of` option when building association
- with a block. Inside the block the parent object was different then
- after the block.
-
- Example:
-
- parent.association.build do |child|
- child.parent.equal?(parent) # false
- end
-
- # vs
-
- child = parent.association.build
- child.parent.equal?(parent) # true
-
- *Michal Cichra*
-
-* `has_many` using `:through` now obeys the order clause mentioned in
- through association.
- Fixes #10016.
-
- *Neeraj Singh*
-
-* `belongs_to :touch` behavior now touches old association when
- transitioning to new association.
-
- class Passenger < ActiveRecord::Base
- belongs_to :car, touch: true
- end
-
- car_1 = Car.create
- car_2 = Car.create
-
- passenger = Passenger.create car: car_1
-
- passenger.car = car_2
- passenger.save
-
- Previously only car_2 would be touched. Now both car_1 and car_2
- will be touched.
-
- *Adam Gamble*
-
-* Extract and deprecate Firebird / Sqlserver / Oracle database tasks, because
- These tasks should be supported by 3rd-party adapter.
-
- *kennyj*
-
-* Allow `ActiveRecord::Base.connection_handler` to have thread affinity and be
- settable, this effectively allows Active Record to be used in a multithreaded
- setup with multiple connections to multiple databases.
-
- *Sam Saffron*
-
-* `rename_column` preserves `auto_increment` in MySQL migrations.
- Fixes #3493.
-
- *Vipul A M*
-
-* PostgreSQL geometric type point is now supported by Active Record. Fixes #7324.
-
- *Martin Schuerrer*
-
-* Add support for concurrent indexing in PostgreSQL adapter via the
- `algorithm: :concurrently` option.
-
- add_index(:people, :last_name, algorithm: :concurrently)
-
- Also add support for MySQL index algorithms (`COPY`, `INPLACE`,
- `DEFAULT`) via the `:algorithm` option.
-
- add_index(:people, :last_name, algorithm: :copy) # or :inplace/:default
-
- *Dan McClain*
-
-* Add support for fulltext and spatial indexes on MySQL tables with MyISAM database
- engine via the `type: 'FULLTEXT'` / `type: 'SPATIAL'` option.
-
- add_index(:people, :last_name, type: 'FULLTEXT')
- add_index(:people, :last_name, type: 'SPATIAL')
-
- *Ken Mazaika*
-
-* Add an `add_index` override in PostgreSQL adapter and MySQL adapter
- to allow custom index type support.
- Fixes #6101.
-
- add_index(:wikis, :body, :using => 'gin')
-
- *Stefan Huber* and *Doabit*
-
-* After extraction of mass-assignment attributes (which protects [id, type]
- by default) we can pass id to `update_attributes` and it will update
- another record because id will be used in where statement. We never have
- to change id in where statement because we try to set/replace fields for
- already loaded record but we have to try to set new id for that record.
-
- *Dmitry Vorotilin*
-
-* Models with multiple counter cache associations now update correctly on destroy.
- See #7706.
-
- *Ian Young*
-
-* If `:inverse_of` is true on an association, then when one calls `find()` on
- the association, Active Record will first look through the in-memory objects
- in the association for a particular id. Then, it will go to the DB if it
- is not found. This is accomplished by calling `find_by_scan` in
- collection associations whenever `options[:inverse_of]` is not nil.
- Fixes #9470.
-
- *John Wang*
-
-* `rake db:create` does not change permissions of the MySQL root user.
- Fixes #8079.
-
- *Yves Senn*
-
-* The length of the `version` column in the `schema_migrations` table
- created by the `mysql2` adapter is 191 if the encoding is "utf8mb4".
-
- The "utf8" encoding in MySQL has support for a maximum of 3 bytes per character,
- and only contains characters from the BMP. The recently added
- [utf8mb4](http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html)
- encoding extends the support to four bytes. As of this writing, said encoding
- is supported in the betas of the `mysql2` gem.
-
- Setting the encoding to "utf8mb4" has
- [a few implications](http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-upgrading.html).
- This change addresses the max length for indexes, which is 191 instead of 255.
-
- *Xavier Noria*
-
-* Counter caches on associations will now stay valid when attributes are
- updated (not just when records are created or destroyed), for example,
- when calling `update_attributes`. The following code now works:
-
- class Comment < ActiveRecord::Base
- belongs_to :post, counter_cache: true
- end
-
- class Post < ActiveRecord::Base
- has_many :comments
- end
-
- post = Post.create
- comment = Comment.create
-
- post.comments << comment
- post.save.reload.comments_count # => 1
- comment.update_attributes(post_id: nil)
-
- post.save.reload.comments_count # => 0
-
- Updating the id of a `belongs_to` object with the id of a new object will
- also keep the count accurate.
-
- *John Wang*
-
-* Referencing join tables implicitly was deprecated. There is a
- possibility that these deprecation warnings are shown even if you
- don't make use of that feature. You can now disable the feature entirely.
- Fixes #9712.
-
- Example:
-
- # in your configuration
- config.active_record.disable_implicit_join_references = true
-
- # or directly
- ActiveRecord::Base.disable_implicit_join_references = true
-
- *Yves Senn*
-
-* The `:distinct` option for `Relation#count` is deprecated. You
- should use `Relation#distinct` instead.
-
- Example:
-
- # Before
- Post.select(:author_name).count(distinct: true)
-
- # After
- Post.select(:author_name).distinct.count
-
- *Yves Senn*
-
-* Rename `Relation#uniq` to `Relation#distinct`. `#uniq` is still
- available as an alias but we encourage to use `#distinct` instead.
- Also `Relation#uniq_value` is aliased to `Relation#distinct_value`,
- this is a temporary solution and you should migrate to `distinct_value`.
-
- *Yves Senn*
-
-* Fix quoting for sqlite migrations using `copy_table_contents` with binary
- columns.
-
- These would fail with "SQLite3::SQLException: unrecognized token" because
- the column was not being passed to `quote` so the data was not quoted
- correctly.
-
- *Matthew M. Boedicker*
-
-* Promotes `change_column_null` to the migrations API. This macro sets/removes
- `NOT NULL` constraints, and accepts an optional argument to replace existing
- `NULL`s if needed. The adapters for SQLite, MySQL, PostgreSQL, and (at least)
- Oracle, already implement this method.
-
- *Xavier Noria*
-
-* Uniqueness validation allows you to pass `:conditions` to limit
- the constraint lookup.
-
- Example:
-
- validates_uniqueness_of :title, conditions: -> { where('approved = ?', true) }
-
- *Mattias Pfeiffer + Yves Senn*
-
-* `connection` is deprecated as an instance method.
- This allows end-users to have a `connection` method on their models
- without clashing with Active Record internals.
-
- *Ben Moss*
-
-* When copying migrations, preserve their magic comments and content encoding.
-
- *OZAWA Sakuro*
-
-* Fix `subclass_from_attrs` when `eager_load` is false. It cannot find
- subclass because all classes are loaded automatically when it needs.
-
- *Dmitry Vorotilin*
-
-* When `:name` option is provided to `remove_index`, use it if there is no
- index by the conventional name.
-
- For example, previously if an index was removed like so
- `remove_index :values, column: :value, name: 'a_different_name'`
- the generated SQL would not contain the specified index name,
- and hence the migration would fail.
- Fixes #8858.
-
- *Ezekiel Smithburg*
-
-* Created block to by-pass the prepared statement bindings.
- This will allow to compose fragments of large SQL statements to
- avoid multiple round-trips between Ruby and the DB.
-
- Example:
-
- sql = Post.connection.unprepared_statement do
- Post.first.comments.to_sql
- end
-
- *Cédric Fabianski*
-
-* Change the semantics of combining scopes to be the same as combining
- class methods which return scopes. For example:
-
- class User < ActiveRecord::Base
- scope :active, -> { where state: 'active' }
- scope :inactive, -> { where state: 'inactive' }
- end
-
- class Post < ActiveRecord::Base
- def self.active
- where state: 'active'
- end
-
- def self.inactive
- where state: 'inactive'
- end
- end
-
- ### BEFORE ###
-
- User.where(state: 'active').where(state: 'inactive')
- # => SELECT * FROM users WHERE state = 'active' AND state = 'inactive'
-
- User.active.inactive
- # => SELECT * FROM users WHERE state = 'inactive'
-
- Post.active.inactive
- # => SELECT * FROM posts WHERE state = 'active' AND state = 'inactive'
-
- ### AFTER ###
-
- User.active.inactive
- # => SELECT * FROM posts WHERE state = 'active' AND state = 'inactive'
-
- Before this change, invoking a scope would merge it into the current
- scope and return the result. `Relation#merge` applies "last where
- wins" logic to de-duplicate the conditions, but this lead to
- confusing and inconsistent behaviour. This fixes that.
-
- If you really do want the "last where wins" logic, you can opt-in to
- it like so:
-
- User.active.merge(User.inactive)
-
- Fixes #7365.
-
- *Neeraj Singh* and *Jon Leighton*
-
-* Expand `#cache_key` to consult all relevant updated timestamps.
-
- Previously only `updated_at` column was checked, now it will
- consult other columns that received updated timestamps on save,
- such as `updated_on`. When multiple columns are present it will
- use the most recent timestamp.
- Fixes #9033.
-
- *Brendon Murphy*
-
-* Throw `NotImplementedError` when trying to instantiate `ActiveRecord::Base` or an abstract class.
-
- *Aaron Weiner*
-
-* Warn when `rake db:structure:dump` with a MySQL database and
- `mysqldump` is not in the PATH or fails.
- Fixes #9518.
-
- *Yves Senn*
-
-* Remove `connection#structure_dump`, which is no longer used. *Yves Senn*
-
-* Make it possible to execute migrations without a transaction even
- if the database adapter supports DDL transactions.
- Fixes #9483.
-
- Example:
-
- class ChangeEnum < ActiveRecord::Migration
- disable_ddl_transaction!
-
- def up
- execute "ALTER TYPE model_size ADD VALUE 'new_value'"
- end
- end
-
- *Yves Senn*
-
-* Assigning "0.0" to a nullable numeric column does not make it dirty.
- Fixes #9034.
-
- Example:
-
- product = Product.create price: 0.0
- product.price = '0.0'
- product.changed? # => false (this used to return true)
- product.changes # => {} (this used to return { price: [0.0, 0.0] })
-
- *Yves Senn*
-
-* Added functionality to unscope relations in a relations chain. For
- instance, if you are passed in a chain of relations as follows:
-
- User.where(name: "John").order('id DESC')
-
- but you want to get rid of order, then this feature allows you to do:
-
- User.where(name: "John").order('id DESC').unscope(:order)
- == User.where(name: "John")
-
- The .unscope() function is more general than the .except() method because
- .except() only works on the relation it is acting on. However, .unscope()
- works for any relation in the entire relation chain.
-
- *John Wang*
-
-* PostgreSQL timestamp with time zone (timestamptz) datatype now returns a
- ActiveSupport::TimeWithZone instance instead of a string
-
- *Troy Kruthoff*
-
-* The `#append` method for collection associations behaves like`<<`.
- `#prepend` is not defined and `<<` or `#append` should be used.
- Fixes #7364.
-
- *Yves Senn*
-
-* Added support for creating a table via Rails migration generator.
- For example,
-
- rails g migration create_books title:string content:text
-
- will generate a migration that creates a table called books with
- the listed attributes, without creating a model.
-
- *Sammy Larbi*
-
-* Fix bug that raises the wrong exception when the exception handled by PostgreSQL adapter
- doesn't respond to `#result`.
- Fixes #8617.
-
- *kennyj*
-
-* Support PostgreSQL specific column types when using `change_table`.
- Fixes #9480.
-
- Example:
-
- change_table :authors do |t|
- t.hstore :books
- t.json :metadata
- end
-
- *Yves Senn*
-
-* Revert 408227d9c5ed7d, 'quote numeric'. This introduced some regressions.
-
- *Steve Klabnik*
-
-* Fix calculation of `db_runtime` property in
- `ActiveRecord::Railties::ControllerRuntime#cleanup_view_runtime`.
- Previously, after raising `ActionView::MissingTemplate`, `db_runtime` was
- not populated.
- Fixes #9215.
-
- *Igor Fedoronchuk*
-
-* Do not try to touch invalid (and thus not persisted) parent record
- for a `belongs_to :parent, touch: true` association
-
- *Olek Janiszewski*
-
-* Fix when performing an ordered join query. The bug only
- affected queries where the order was given with a symbol.
- Fixes #9275.
-
- Example:
-
- # This will expand the order :name to "authors".name.
- Author.joins(:books).where('books.published = 1').order(:name)
-
-
-## Rails 4.0.0.beta1 (February 25, 2013) ##
-
-* Fix overriding of attributes by `default_scope` on `ActiveRecord::Base#dup`.
-
- *Hiroshige UMINO*
-
-* Update queries now use prepared statements.
-
- *Olli Rissanen*
-
-* Fixing issue #8345. Now throwing an error when one attempts to touch a
- new object that has not yet been persisted. For instance:
-
- Example:
-
- ball = Ball.new
- ball.touch :updated_at # => raises error
-
- It is not until the ball object has been persisted that it can be touched.
- This follows the behavior of update_column.
-
- *John Wang*
-
-* Preloading ordered `has_many :through` associations no longer applies
- invalid ordering to the `:through` association.
- Fixes #8663.
-
- *Yves Senn*
-
-* The auto explain feature has been removed. This feature was
- activated by configuring `config.active_record.auto_explain_threshold_in_seconds`.
- The configuration option was deprecated and has no more effect.
-
- You can still use `ActiveRecord::Relation#explain` to see the EXPLAIN output for
- any given relation.
-
- *Yves Senn*
-
-* The `:on` option for `after_commit` and `after_rollback` now
- accepts an Array of actions.
- Fixes #988.
-
- Example:
-
- after_commit :update_cache on: [:create, :update]
-
- *Yves Senn*
-
-* Rename related indexes on `rename_table` and `rename_column`. This
- does not affect indexes with custom names.
-
- *Yves Senn*
-
-* Prevent the creation of indices with too long names, which cause
- internal operations to fail (sqlite3 adapter only). The method
- `allowed_index_name_length` defines the length limit enforced by
- rails. It's value defaults to `index_name_length` but can vary per adapter.
- Fixes #8264.
-
- *Yves Senn*
-
-* Fixing issue #776.
-
- Memory bloat in transactions is handled by having the transaction hold only
- the AR objects which it absolutely needs to know about. These are the AR
- objects with callbacks (they need to be updated as soon as something in the
- transaction occurs).
-
- All other AR objects can be updated lazily by keeping a reference to a
- TransactionState object. If an AR object gets inside a transaction, then
- the transaction will add its TransactionState to the AR object. When the
- user makes a call to some attribute on an AR object (which has no
- callbacks) associated with a transaction, the AR object will call the
- sync_with_transaction_state method and make sure it is up to date with the
- transaction. After it has synced with the transaction state, the AR object
- will return the attribute that was requested.
-
- Most of the logic in the changes are used to handle multiple transactions,
- in which case the AR object has to recursively follow parent pointers of
- TransactionState objects.
-
- *John Wang*
-
-* Descriptive error message when the necessary AR adapter gem was not found.
- Fixes #7313.
-
- *Yves Senn*
-
-* Active Record now raises an error when blank arguments are passed to query
- methods for which blank arguments do not make sense.
-
- Example:
-
- Post.includes() # => raises error
-
- *John Wang*
-
-* Simplified type casting code for timezone aware attributes to use the
- `in_time_zone` method if it is available. This introduces a subtle change
- of behavior when using `Date` instances as they are directly converted to
- `ActiveSupport::TimeWithZone` instances without first being converted to
- `Time` instances. For example:
-
- # Rails 3.2 behavior
- >> Date.today.to_time.in_time_zone
- => Wed, 13 Feb 2013 07:00:00 UTC +00:00
-
- # Rails 4.0 behavior
- >> Date.today.in_time_zone
- => Wed, 13 Feb 2013 00:00:00 UTC +00:00
-
- On the plus side it now behaves the same whether you pass a `String` date
- or an actual `Date` instance. For example:
-
- # Rails 3.2 behavior
- >> Date.civil(2013, 2, 13).to_time.in_time_zone
- => Wed, 13 Feb 2013 07:00:00 UTC +00:00
- >> Time.zone.parse("2013-02-13")
- => Wed, 13 Feb 2013 00:00:00 UTC +00:00
-
- # Rails 4.0 behavior
- >> Date.civil(2013, 2, 13).in_time_zone
- => Wed, 13 Feb 2013 00:00:00 UTC +00:00
- >> "2013-02-13".in_time_zone
- => Wed, 13 Feb 2013 00:00:00 UTC +00:00
-
- If you need the old behavior you can convert the dates to times manually.
- For example:
-
- >> Post.new(created_at: Date.today).created_at
- => Wed, 13 Feb 2013 00:00:00 UTC +00:00
-
- >> Post.new(created_at: Date.today.to_time).created_at
- => Wed, 13 Feb 2013 07:00:00 UTC +00:00
-
- *Andrew White*
-
-* Preloading `has_many :through` associations with conditions won't
- cache the `:through` association. This will prevent invalid
- subsets to be cached.
- Fixes #8423.
-
- Example:
-
- class User
- has_many :posts
- has_many :recent_comments, -> { where('created_at > ?', 1.week.ago) }, :through => :posts
- end
-
- a_user = User.includes(:recent_comments).first
-
- # This is preloaded.
- a_user.recent_comments
-
- # This is not preloaded, fetched now.
- a_user.posts
-
- *Yves Senn*
-
-* Don't run `after_commit` callbacks when creating through an association
- if saving the record fails.
-
- *James Miller*
-
-* Allow store accessors to be overridden like other attribute methods, e.g.:
-
- class User < ActiveRecord::Base
- store :settings, accessors: [ :color, :homepage ], coder: JSON
-
- def color
- super || 'red'
- end
- end
-
- *Sergey Nartimov*
-
-* Quote numeric values being compared to non-numeric columns. Otherwise,
- in some database, the string column values will be coerced to a numeric
- allowing 0, 0.0 or false to match any string starting with a non-digit.
-
- Example:
-
- App.where(apikey: 0) # => SELECT * FROM users WHERE apikey = '0'
-
- *Dylan Smith*
-
-* Schema dumper supports dumping the enabled database extensions to `schema.rb`
- (currently only supported by PostgreSQL).
-
- *Justin George*
-
-* The database adapters now converts the options passed thought `DATABASE_URL`
- environment variable to the proper Ruby types before using. For example, SQLite requires
- that the timeout value is an integer, and PostgreSQL requires that the
- prepared_statements option is a boolean. These now work as expected:
-
- Example:
-
- DATABASE_URL=sqlite3://localhost/test_db?timeout=500
- DATABASE_URL=postgresql://localhost/test_db?prepared_statements=false
-
- *Aaron Stone + Rafael Mendonça França*
-
-* `Relation#merge` now only overwrites where values on the LHS of the
- merge. Consider:
-
- left = Person.where(age: [13, 14, 15])
- right = Person.where(age: [13, 14]).where(age: [14, 15])
-
- `left` results in the following SQL:
-
- WHERE age IN (13, 14, 15)
-
- `right` results in the following SQL:
-
- WHERE age IN (13, 14) AND age IN (14, 15)
-
- Previously, `left.merge(right)` would result in all but the last
- condition being removed:
-
- WHERE age IN (14, 15)
-
- Now it results in the LHS condition(s) for `age` being removed, but
- the RHS remains as it is:
-
- WHERE age IN (13, 14) AND age IN (14, 15)
-
- *Jon Leighton*
-
-* Fix handling of dirty time zone aware attributes
-
- Previously, when `time_zone_aware_attributes` were enabled, after
- changing a datetime or timestamp attribute and then changing it back
- to the original value, `changed_attributes` still tracked the
- attribute as changed. This caused `[attribute]_changed?` and
- `changed?` methods to return true incorrectly.
-
- Example:
-
- in_time_zone 'Paris' do
- order = Order.new
- original_time = Time.local(2012, 10, 10)
- order.shipped_at = original_time
- order.save
- order.changed? # => false
-
- # changing value
- order.shipped_at = Time.local(2013, 1, 1)
- order.changed? # => true
-
- # reverting to original value
- order.shipped_at = original_time
- order.changed? # => false, used to return true
- end
-
- *Lilibeth De La Cruz*
-
-* When `#count` is used in conjunction with `#uniq` we perform `count(:distinct => true)`.
- Fixes #6865.
-
- Example:
-
- relation.uniq.count # => SELECT COUNT(DISTINCT *)
-
- *Yves Senn + Kaspar Schiess*
-
-* PostgreSQL ranges type support. Includes: int4range, int8range,
- numrange, tsrange, tstzrange, daterange
-
- Ranges can be created with inclusive and exclusive bounds.
-
- Example:
-
- create_table :Room do |t|
- t.daterange :availability
- end
-
- Room.create(availability: (Date.today..Float::INFINITY))
- Room.first.availability # => Wed, 19 Sep 2012..Infinity
-
- One thing to note: Range class does not support exclusive lower
- bound.
-
- *Alexander Grebennik*
-
-* Added a state instance variable to each transaction. Will allow other objects
- to know whether a transaction has been committed or rolled back.
-
- *John Wang*
-
-* Collection associations `#empty?` always respects built records.
- Fixes #8879.
-
- Example:
-
- widget = Widget.new
- widget.things.build
- widget.things.empty? # => false
-
- *Yves Senn*
-
-* Support for PostgreSQL's `ltree` data type.
-
- *Rob Worley*
-
-* Fix undefined method `to_i` when calling `new` on a scope that uses an
- Array; Fix FloatDomainError when setting integer column to NaN.
- Fixes #8718, #8734, #8757.
-
- *Jason Stirk + Tristan Harward*
-
-* Rename `update_attributes` to `update`, keep `update_attributes` as an alias for `update` method.
- This is a soft-deprecation for `update_attributes`, although it will still work without any
- deprecation message in 4.0 is recommended to start using `update` since `update_attributes` will be
- deprecated and removed in future versions of Rails.
-
- *Amparo Luna + Guillermo Iguaran*
-
-* `after_commit` and `after_rollback` now validate the `:on` option and raise an `ArgumentError`
- if it is not one of `:create`, `:destroy` or `:update`
-
- *Pascal Friederich*
-
-* Improve ways to write `change` migrations, making the old `up` & `down` methods no longer necessary.
-
- * The methods `drop_table` and `remove_column` are now reversible, as long as the necessary information is given.
- The method `remove_column` used to accept multiple column names; instead use `remove_columns` (which is not reversible).
- The method `change_table` is also reversible, as long as its block doesn't call `remove`, `change` or `change_default`
-
- * New method `reversible` makes it possible to specify code to be run when migrating up or down.
- See the [Guide on Migration](https://github.com/rails/rails/blob/master/guides/source/migrations.md#using-the-reversible-method)
-
- * New method `revert` will revert a whole migration or the given block.
- If migrating down, the given migration / block is run normally.
- See the [Guide on Migration](https://github.com/rails/rails/blob/master/guides/source/migrations.md#reverting-previous-migrations)
-
- Attempting to revert the methods `execute`, `remove_columns` and `change_column` will now
- raise an `IrreversibleMigration` instead of actually executing them without any output.
-
- *Marc-André Lafortune*
-
-* Serialized attributes can be serialized in integer columns.
- Fixes #8575.
-
- *Rafael Mendonça França*
-
-* Keep index names when using `alter_table` with sqlite3.
- Fixes #3489.
-
- *Yves Senn*
-
-* Add ability for PostgreSQL adapter to disable user triggers in `disable_referential_integrity`.
- Fixes #5523.
-
- *Gary S. Weaver*
-
-* Added support for `validates_uniqueness_of` in PostgreSQL array columns.
- Fixes #8075.
-
- *Pedro Padron*
-
-* Allow int4range and int8range columns to be created in PostgreSQL and properly convert to/from database.
-
- *Alexey Vasiliev aka leopard*
-
-* Do not log the binding values for binary columns.
-
- *Matthew M. Boedicker*
-
-* Fix counter cache columns not updated when replacing `has_many :through`
- associations.
-
- *Matthew Robertson*
-
-* Recognize migrations placed in directories containing numbers and 'rb'.
- Fixes #8492.
-
- *Yves Senn*
-
-* Add `ActiveRecord::Base.cache_timestamp_format` class attribute to control
- the format of the timestamp value in the cache key. Defaults to `:nsec`.
- Fixes #8195.
-
- *Rafael Mendonça França*
-
-* Session variables can be set for the `mysql`, `mysql2`, and `postgresql` adapters
- in the `variables: <hash>` parameter in `config/database.yml`. The key-value pairs of this
- hash will be sent in a `SET key = value` query on new database connections. See also:
- http://dev.mysql.com/doc/refman/5.0/en/set-statement.html
- http://www.postgresql.org/docs/8.3/static/sql-set.html
-
- *Aaron Stone*
-
-* Allow `Relation#where` with no arguments to be chained with new `not` query method.
-
- Example:
-
- Developer.where.not(name: 'Aaron')
-
- *Akira Matsuda*
-
-* Unscope `update_column(s)` query to ignore default scope.
-
- When applying `default_scope` to a class with a where clause, using
- `update_column(s)` could generate a query that would not properly update
- the record due to the where clause from the `default_scope` being applied
- to the update query.
-
- class User < ActiveRecord::Base
- default_scope -> { where(active: true) }
- end
-
- user = User.first
- user.active = false
- user.save!
-
- user.update_column(:active, true) # => false
-
- In this situation we want to skip the default_scope clause and just
- update the record based on the primary key. With this change:
-
- user.update_column(:active, true) # => true
-
- Fixes #8436.
-
- *Carlos Antonio da Silva*
-
-* SQLite adapter no longer corrupts binary data if the data contains `%00`.
-
- *Chris Feist*
-
-* Fix performance problem with `primary_key` method in PostgreSQL adapter when having many schemas.
- Uses `pg_constraint` table instead of `pg_depend` table which has many records in general.
- Fixes #8414.
-
- *kennyj*
-
-* Do not instantiate intermediate Active Record objects when eager loading.
- These records caused `after_find` to run more than expected.
- Fixes #3313.
-
- *Yves Senn*
-
-* Add STI support to init and building associations.
- Allows you to do `BaseClass.new(type: "SubClass")` as well as
- `parent.children.build(type: "SubClass")` or `parent.build_child`
- to initialize an STI subclass. Ensures that the class name is a
- valid class and that it is in the ancestors of the super class
- that the association is expecting.
-
- *Jason Rush*
-
-* Observers was extracted from Active Record as `rails-observers` gem.
-
- *Rafael Mendonça França*
-
-* Ensure that associations take a symbol argument. *Steve Klabnik*
-
-* Fix dirty attribute checks for `TimeZoneConversion` with nil and blank
- datetime attributes. Setting a nil datetime to a blank string should not
- result in a change being flagged.
- Fixes #8310.
-
- *Alisdair McDiarmid*
-
-* Prevent mass assignment to the type column of polymorphic associations when using `build`
- Fixes #8265.
-
- *Yves Senn*
-
-* Deprecate calling `Relation#sum` with a block. To perform a calculation over
- the array result of the relation, use `to_a.sum(&block)`.
-
- *Carlos Antonio da Silva*
-
-* Fix PostgreSQL adapter to handle BC timestamps correctly
-
- HistoryEvent.create!(name: "something", occured_at: Date.new(0) - 5.years)
-
- *Bogdan Gusiev*
-
-* When running migrations on PostgreSQL, the `:limit` option for `binary` and `text` columns is silently dropped.
- Previously, these migrations caused sql exceptions, because PostgreSQL doesn't support limits on these types.
-
- *Victor Costan*
-
-* Don't change STI type when calling `ActiveRecord::Base#becomes`.
- Add `ActiveRecord::Base#becomes!` with the previous behavior.
-
- See #3023 for more information.
-
- *Thomas Hollstegge*
-
-* `rename_index` can be used inside a `change_table` block.
-
- change_table :accounts do |t|
- t.rename_index :user_id, :account_id
- end
-
- *Jarek Radosz*
-
-* `#pluck` can be used on a relation with `select` clause. Fix #7551
-
- Example:
-
- Topic.select([:approved, :id]).order(:id).pluck(:id)
-
- *Yves Senn*
-
-* Do not create useless database transaction when building `has_one` association.
-
- Example:
-
- User.has_one :profile
- User.new.build_profile
-
- *Bogdan Gusiev*
-
-* `:counter_cache` option for `has_many` associations to support custom named counter caches.
- Fixes #7993.
-
- *Yves Senn*
-
-* Deprecate the possibility to pass a string as third argument of `add_index`.
- Pass `unique: true` instead.
-
- add_index(:users, :organization_id, unique: true)
-
- *Rafael Mendonça França*
-
-* Raise an `ArgumentError` when passing an invalid option to `add_index`.
-
- *Rafael Mendonça França*
-
-* Fix `find_in_batches` crashing when IDs are strings and start option is not specified.
-
- *Alexis Bernard*
-
-* `AR::Base#attributes_before_type_cast` now returns unserialized values for serialized attributes.
-
- *Nikita Afanasenko*
-
-* Use query cache/uncache when using `DATABASE_URL`.
- Fixes #6951.
-
- *kennyj*
-
-* Fix bug where `update_columns` and `update_column` would not let you update the primary key column.
-
- *Henrik Nyh*
-
-* The `create_table` method raises an `ArgumentError` when the primary key column is redefined.
- Fixes #6378.
-
- *Yves Senn*
-
-* `ActiveRecord::AttributeMethods#[]` raises `ActiveModel::MissingAttributeError`
- error if the given attribute is missing. Fixes #5433.
-
- class Person < ActiveRecord::Base
- belongs_to :company
- end
-
- # Before:
- person = Person.select('id').first
- person[:name] # => nil
- person.name # => ActiveModel::MissingAttributeError: missing_attribute: name
- person[:company_id] # => nil
- person.company # => nil
-
- # After:
- person = Person.select('id').first
- person[:name] # => ActiveModel::MissingAttributeError: missing_attribute: name
- person.name # => ActiveModel::MissingAttributeError: missing_attribute: name
- person[:company_id] # => ActiveModel::MissingAttributeError: missing_attribute: company_id
- person.company # => ActiveModel::MissingAttributeError: missing_attribute: company_id
-
- *Francesco Rodriguez*
-
-* Small binary fields use the `VARBINARY` MySQL type, instead of `TINYBLOB`.
-
- *Victor Costan*
-
-* Decode URI encoded attributes on database connection URLs.
-
- *Shawn Veader*
-
-* Add `find_or_create_by`, `find_or_create_by!` and
- `find_or_initialize_by` methods to `Relation`.
-
- These are similar to the `first_or_create` family of methods, but
- the behaviour when a record is created is slightly different:
-
- User.where(first_name: 'Penélope').first_or_create
-
- will execute:
-
- User.where(first_name: 'Penélope').create
-
- Causing all the `create` callbacks to execute within the context of
- the scope. This could affect queries that occur within callbacks.
-
- User.find_or_create_by(first_name: 'Penélope')
-
- will execute:
-
- User.create(first_name: 'Penélope')
-
- Which obviously does not affect the scoping of queries within
- callbacks.
-
- The `find_or_create_by` version also reads better, frankly.
-
- If you need to add extra attributes during create, you can do one of:
-
- User.create_with(active: true).find_or_create_by(first_name: 'Jon')
- User.find_or_create_by(first_name: 'Jon') { |u| u.active = true }
-
- The `first_or_create` family of methods have been nodoc'ed in favour
- of this API. They may be deprecated in the future but their
- implementation is very small and it's probably not worth putting users
- through lots of annoying deprecation warnings.
-
- *Jon Leighton*
-
-* Fix bug with presence validation of associations. Would incorrectly add duplicated errors
- when the association was blank. Bug introduced in 1fab518c6a75dac5773654646eb724a59741bc13.
-
- *Scott Willson*
-
-* Fix bug where sum(expression) returns string '0' for no matching records.
- Fixes #7439
-
- *Tim Macfarlane*
-
-* PostgreSQL adapter correctly fetches default values when using multiple schemas and domains in a db. Fixes #7914
-
- *Arturo Pie*
-
-* Learn ActiveRecord::QueryMethods#order work with hash arguments
-
- When symbol or hash passed we convert it to Arel::Nodes::Ordering.
- If we pass invalid direction(like name: :DeSc) ActiveRecord::QueryMethods#order will raise an exception
-
- User.order(:name, email: :desc)
- # SELECT "users".* FROM "users" ORDER BY "users"."name" ASC, "users"."email" DESC
-
- *Tima Maslyuchenko*
-
-* Rename `ActiveRecord::Fixtures` class to `ActiveRecord::FixtureSet`.
- Instances of this class normally hold a collection of fixtures (records)
- loaded either from a single YAML file, or from a file and a folder
- with the same name. This change make the class name singular and makes
- the class easier to distinguish from the modules like
- `ActiveRecord::TestFixtures`, which operates on multiple fixture sets,
- or `DelegatingFixtures`, `::Fixtures`, etc.,
- and from the class `ActiveRecord::Fixture`, which corresponds to a single
- fixture.
-
- *Alexey Muranov*
-
-* The postgres adapter now supports tables with capital letters.
- Fixes #5920.
-
- *Yves Senn*
-
-* `CollectionAssociation#count` returns `0` without querying if the
- parent record is not persisted.
-
- Before:
-
- person.pets.count
- # SELECT COUNT(*) FROM "pets" WHERE "pets"."person_id" IS NULL
- # => 0
-
- After:
-
- person.pets.count
- # fires without sql query
- # => 0
-
- *Francesco Rodriguez*
-
-* Fix `reset_counters` crashing on `has_many :through` associations.
- Fixes #7822.
-
- *lulalala*
-
-* Support for partial inserts.
-
- When inserting new records, only the fields which have been changed
- from the defaults will actually be included in the INSERT statement.
- The other fields will be populated by the database.
-
- This is more efficient, and also means that it will be safe to
- remove database columns without getting subsequent errors in running
- app processes (so long as the code in those processes doesn't
- contain any references to the removed column).
-
- The `partial_updates` configuration option is now renamed to
- `partial_writes` to reflect the fact that it now impacts both inserts
- and updates.
-
- *Jon Leighton*
-
-* Allow before and after validations to take an array of lifecycle events
-
- *John Foley*
-
-* Support for specifying transaction isolation level
-
- If your database supports setting the isolation level for a transaction, you can set
- it like so:
-
- Post.transaction(isolation: :serializable) do
- # ...
- end
-
- Valid isolation levels are:
-
- * `:read_uncommitted`
- * `:read_committed`
- * `:repeatable_read`
- * `:serializable`
-
- You should consult the documentation for your database to understand the
- semantics of these different levels:
-
- * http://www.postgresql.org/docs/9.1/static/transaction-iso.html
- * https://dev.mysql.com/doc/refman/5.0/en/set-transaction.html
-
- An `ActiveRecord::TransactionIsolationError` will be raised if:
-
- * The adapter does not support setting the isolation level
- * You are joining an existing open transaction
- * You are creating a nested (savepoint) transaction
-
- The mysql, mysql2 and postgresql adapters support setting the transaction
- isolation level. However, support is disabled for mysql versions below 5,
- because they are affected by a bug (http://bugs.mysql.com/bug.php?id=39170)
- which means the isolation level gets persisted outside the transaction.
-
- *Jon Leighton*
-
-* `ActiveModel::ForbiddenAttributesProtection` is included by default
- in Active Record models. Check the docs of `ActiveModel::ForbiddenAttributesProtection`
- for more details.
-
- *Guillermo Iguaran*
-
-* Remove integration between Active Record and
- `ActiveModel::MassAssignmentSecurity`, `protected_attributes` gem
- should be added to use `attr_accessible`/`attr_protected`. Mass
- assignment options has been removed from all the AR methods that
- used it (ex. `AR::Base.new`, `AR::Base.create`, `AR::Base#update_attributes`, etc).
-
- *Guillermo Iguaran*
-
-* Fix the return of querying with an empty hash.
- Fixes #6971.
-
- User.where(token: {})
-
- Before:
-
- #=> SELECT * FROM users;
-
- After:
-
- #=> SELECT * FROM users WHERE 1=0;
-
- *Damien Mathieu*
-
-* Fix creation of through association models when using `collection=[]`
- on a `has_many :through` association from an unsaved model.
- Fixes #7661.
-
- *Ernie Miller*
-
-* Explain only normal CRUD sql (select / update / insert / delete).
- Fix problem that explains unexplainable sql.
- Fixes #7544 #6458.
-
- *kennyj*
-
-* You can now override the generated accessor methods for stored attributes
- and reuse the original behavior with `read_store_attribute` and `write_store_attribute`,
- which are counterparts to `read_attribute` and `write_attribute`.
-
- *Matt Jones*
-
-* Accept `belongs_to` (including polymorphic) association keys in queries.
-
- The following queries are now equivalent:
-
- Post.where(author: author)
- Post.where(author_id: author)
-
- PriceEstimate.where(estimate_of: treasure)
- PriceEstimate.where(estimate_of_type: 'Treasure', estimate_of_id: treasure)
-
- *Peter Brown*
-
-* Use native `mysqldump` command instead of `structure_dump` method
- when dumping the database structure to a sql file. Fixes #5547.
-
- *kennyj*
-
-* PostgreSQL inet and cidr types are converted to `IPAddr` objects.
-
- *Dan McClain*
-
-* PostgreSQL array type support. Any datatype can be used to create an
- array column, with full migration and schema dumper support.
-
- To declare an array column, use the following syntax:
-
- create_table :table_with_arrays do |t|
- t.integer :int_array, array: true
- # integer[]
- t.integer :int_array, array: true, length: 2
- # smallint[]
- t.string :string_array, array: true, length: 30
- # char varying(30)[]
- end
-
- This respects any other migration detail (limits, defaults, etc).
- Active Record will serialize and deserialize the array columns on
- their way to and from the database.
-
- One thing to note: PostgreSQL does not enforce any limits on the
- number of elements, and any array can be multi-dimensional. Any
- array that is multi-dimensional must be rectangular (each sub array
- must have the same number of elements as its siblings).
-
- If the `pg_array_parser` gem is available, it will be used when
- parsing PostgreSQL's array representation.
-
- *Dan McClain*
-
-* Attribute predicate methods, such as `article.title?`, will now raise
- `ActiveModel::MissingAttributeError` if the attribute being queried for
- truthiness was not read from the database, instead of just returning `false`.
-
- *Ernie Miller*
-
-* `ActiveRecord::SchemaDumper` uses Ruby 1.9 style hash, which means that the
- schema.rb file will be generated using this new syntax from now on.
-
- *Konstantin Shabanov*
-
-* Map interval with precision to string datatype in PostgreSQL. Fixes #7518.
-
- *Yves Senn*
-
-* Fix eagerly loading associations without primary keys. Fixes #4976.
-
- *Kelley Reynolds*
-
-* Rails now raise an exception when you're trying to run a migration that has an invalid
- file name. Only lower case letters, numbers, and '_' are allowed in migration's file name.
- Please see #7419 for more details.
-
- *Jan Bernacki*
-
-* Fix bug when calling `store_accessor` multiple times.
- Fixes #7532.
-
- *Matt Jones*
-
-* Fix store attributes that show the changes incorrectly.
- Fixes #7532.
-
- *Matt Jones*
-
-* Fix `ActiveRecord::Relation#pluck` when columns or tables are reserved words.
-
- *Ian Lesperance*
-
-* Allow JSON columns to be created in PostgreSQL and properly encoded/decoded.
- to/from database.
-
- *Dickson S. Guedes*
-
-* Fix time column type casting for invalid time string values to correctly return `nil`.
-
- *Adam Meehan*
-
-* Allow to pass Symbol or Proc into `:limit` option of #accepts_nested_attributes_for.
-
- *Mikhail Dieterle*
-
-* ActiveRecord::SessionStore has been extracted from Active Record as `activerecord-session_store`
- gem. Please read the `README.md` file on the gem for the usage.
-
- *Prem Sichanugrist*
-
-* Fix `reset_counters` when there are multiple `belongs_to` association with the
- same foreign key and one of them have a counter cache.
- Fixes #5200.
-
- *Dave Desrochers*
-
-* `serialized_attributes` and `_attr_readonly` become class method only. Instance reader methods are deprecated.
-
- *kennyj*
-
-* Round usec when comparing timestamp attributes in the dirty tracking.
- Fixes #6975.
-
- *kennyj*
-
-* Use inversed parent for first and last child of `has_many` association.
-
- *Ravil Bayramgalin*
-
-* Fix `Column.microseconds` and `Column.fast_string_to_time` to avoid converting
- timestamp seconds to a float, since it occasionally results in inaccuracies
- with microsecond-precision times. Fixes #7352.
-
- *Ari Pollak*
-
-* Fix AR#dup to nullify the validation errors in the dup'ed object. Previously the original
- and the dup'ed object shared the same errors.
-
- *Christian Seiler*
-
-* Raise `ArgumentError` if list of attributes to change is empty in `update_all`.
-
- *Roman Shatsov*
-
-* Fix AR#create to return an unsaved record when AR::RecordInvalid is
- raised. Fixes #3217.
-
- *Dave Yeu*
-
-* Fixed table name prefix that is generated in engines for namespaced models.
-
- *Wojciech Wnętrzak*
-
-* Make sure `:environment` task is executed before `db:schema:load` or `db:structure:load`.
- Fixes #4772.
-
- *Seamus Abshere*
-
-* Allow Relation#merge to take a proc.
-
- This was requested by DHH to allow creating of one's own custom
- association macros.
-
- For example:
-
- module Commentable
- def has_many_comments(extra)
- has_many :comments, -> { where(:foo).merge(extra) }
- end
- end
-
- class Post < ActiveRecord::Base
- extend Commentable
- has_many_comments -> { where(:bar) }
- end
-
- *Jon Leighton*
-
-* Add CollectionProxy#scope.
-
- This can be used to get a Relation from an association.
-
- Previously we had a #scoped method, but we're deprecating that for
- AR::Base, so it doesn't make sense to have it here.
-
- This was requested by DHH, to facilitate code like this:
-
- Project.scope.order('created_at DESC').page(current_page).tagged_with(@tag).limit(5).scoping do
- @topics = @project.topics.scope
- @todolists = @project.todolists.scope
- @attachments = @project.attachments.scope
- @documents = @project.documents.scope
- end
-
- *Jon Leighton*
-
-* Add `Relation#load`.
-
- This method explicitly loads the records and then returns `self`.
-
- Rather than deciding between "do I want an array or a relation?",
- most people are actually asking themselves "do I want to eager load
- or lazy load?" Therefore, this method provides a way to explicitly
- eager-load without having to switch from a `Relation` to an array.
-
- Example:
-
- @posts = Post.where(published: true).load
-
- *Jon Leighton*
-
-* `Relation#order`: make new order prepend old one.
-
- User.order("name asc").order("created_at desc")
- # SELECT * FROM users ORDER BY created_at desc, name asc
-
- This also affects order defined in `default_scope` or any kind of associations.
-
- *Bogdan Gusiev*
-
-* `Model.all` now returns an `ActiveRecord::Relation`, rather than an
- array of records. Use `Relation#to_a` if you really want an array.
-
- In some specific cases, this may cause breakage when upgrading.
- However in most cases the `ActiveRecord::Relation` will just act as a
- lazy-loaded array and there will be no problems.
-
- Note that calling `Model.all` with options (e.g.
- `Model.all(conditions: '...')` was already deprecated, but it will
- still return an array in order to make the transition easier.
-
- `Model.scoped` is deprecated in favour of `Model.all`.
-
- `Relation#all` still returns an array, but is deprecated (since it
- would serve no purpose if we made it return a `Relation`).
-
- *Jon Leighton*
-
-* `:finder_sql` and `:counter_sql` options on collection associations
- are deprecated. Please transition to using scopes.
-
- *Jon Leighton*
-
-* `:insert_sql` and `:delete_sql` options on `has_and_belongs_to_many`
- associations are deprecated. Please transition to using `has_many
- :through`.
-
- *Jon Leighton*
-
-* Added `#update_columns` method which updates the attributes from
- the passed-in hash without calling save, hence skipping validations and
- callbacks. `ActiveRecordError` will be raised when called on new objects
- or when at least one of the attributes is marked as read only.
-
- post.attributes # => {"id"=>2, "title"=>"My title", "body"=>"My content", "author"=>"Peter"}
- post.update_columns(title: 'New title', author: 'Sebastian') # => true
- post.attributes # => {"id"=>2, "title"=>"New title", "body"=>"My content", "author"=>"Sebastian"}
-
- *Sebastian Martinez + Rafael Mendonça França*
-
-* The migration generator now creates a join table with (commented) indexes every time
- the migration name contains the word `join_table`:
-
- rails g migration create_join_table_for_artists_and_musics artist_id:index music_id
-
- *Aleksey Magusev*
-
-* Add `add_reference` and `remove_reference` schema statements. Aliases, `add_belongs_to`
- and `remove_belongs_to` are acceptable. References are reversible.
-
- Examples:
-
- # Create a user_id column
- add_reference(:products, :user)
- # Create a supplier_id, supplier_type columns and appropriate index
- add_reference(:products, :supplier, polymorphic: true, index: true)
- # Remove polymorphic reference
- remove_reference(:products, :supplier, polymorphic: true)
-
- *Aleksey Magusev*
-
-* Add `:default` and `:null` options to `column_exists?`.
-
- column_exists?(:testings, :taggable_id, :integer, null: false)
- column_exists?(:testings, :taggable_type, :string, default: 'Photo')
-
- *Aleksey Magusev*
-
-* `ActiveRecord::Relation#inspect` now makes it clear that you are
- dealing with a `Relation` object rather than an array:.
-
- User.where(age: 30).inspect
- # => <ActiveRecord::Relation [#<User ...>, #<User ...>, ...]>
-
- User.where(age: 30).to_a.inspect
- # => [#<User ...>, #<User ...>]
-
- The number of records displayed will be limited to 10.
-
- *Brian Cardarella, Jon Leighton & Damien Mathieu*
-
-* Add `collation` and `ctype` support to PostgreSQL. These are available for PostgreSQL 8.4 or later.
- Example:
-
- development:
- adapter: postgresql
- host: localhost
- database: rails_development
- username: foo
- password: bar
- encoding: UTF8
- collation: ja_JP.UTF8
- ctype: ja_JP.UTF8
-
- *kennyj*
-
-* Changed `validates_presence_of` on an association so that children objects
- do not validate as being present if they are marked for destruction. This
- prevents you from saving the parent successfully and thus putting the parent
- in an invalid state.
-
- *Nick Monje & Brent Wheeldon*
-
-* `FinderMethods#exists?` now returns `false` with the `false` argument.
-
- *Egor Lynko*
-
-* Added support for specifying the precision of a timestamp in the PostgreSQL
- adapter. So, instead of having to incorrectly specify the precision using the
- `:limit` option, you may use `:precision`, as intended. For example, in a migration:
-
- def change
- create_table :foobars do |t|
- t.timestamps precision: 0
- end
- end
-
- *Tony Schneider*
-
-* Allow `ActiveRecord::Relation#pluck` to accept multiple columns. Returns an
- array of arrays containing the typecasted values:
-
- Person.pluck(:id, :name)
- # SELECT people.id, people.name FROM people
- # [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']]
-
- *Jeroen van Ingen & Carlos Antonio da Silva*
-
-* Improve the derivation of HABTM join table name to take account of nesting.
- It now takes the table names of the two models, sorts them lexically and
- then joins them, stripping any common prefix from the second table name.
-
- Some examples:
-
- Top level models (Category <=> Product)
- Old: categories_products
- New: categories_products
-
- Top level models with a global table_name_prefix (Category <=> Product)
- Old: site_categories_products
- New: site_categories_products
-
- Nested models in a module without a table_name_prefix method (Admin::Category <=> Admin::Product)
- Old: categories_products
- New: categories_products
-
- Nested models in a module with a table_name_prefix method (Admin::Category <=> Admin::Product)
- Old: categories_products
- New: admin_categories_products
-
- Nested models in a parent model (Catalog::Category <=> Catalog::Product)
- Old: categories_products
- New: catalog_categories_products
-
- Nested models in different parent models (Catalog::Category <=> Content::Page)
- Old: categories_pages
- New: catalog_categories_content_pages
-
- *Andrew White*
-
-* Move HABTM validity checks to `ActiveRecord::Reflection`. One side effect of
- this is to move when the exceptions are raised from the point of declaration
- to when the association is built. This is consistent with other association
- validity checks.
-
- *Andrew White*
-
-* Added `stored_attributes` hash which contains the attributes stored using
- `ActiveRecord::Store`. This allows you to retrieve the list of attributes
- you've defined.
-
- class User < ActiveRecord::Base
- store :settings, accessors: [:color, :homepage]
- end
-
- User.stored_attributes[:settings] # [:color, :homepage]
-
- *Joost Baaij & Carlos Antonio da Silva*
-
-* PostgreSQL default log level is now 'warning', to bypass the noisy notice
- messages. You can change the log level using the `min_messages` option
- available in your config/database.yml.
-
- *kennyj*
-
-* Add uuid datatype support to PostgreSQL adapter.
-
- *Konstantin Shabanov*
-
-* Added `ActiveRecord::Migration.check_pending!` that raises an error if
- migrations are pending.
-
- *Richard Schneeman*
-
-* Added `#destroy!` which acts like `#destroy` but will raise an
- `ActiveRecord::RecordNotDestroyed` exception instead of returning `false`.
-
- *Marc-André Lafortune*
-
-* Added support to `CollectionAssociation#delete` for passing `fixnum`
- or `string` values as record ids. This finds the records responding
- to the `id` and executes delete on them.
-
- class Person < ActiveRecord::Base
- has_many :pets
- end
-
- person.pets.delete("1") # => [#<Pet id: 1>]
- person.pets.delete(2, 3) # => [#<Pet id: 2>, #<Pet id: 3>]
-
- *Francesco Rodriguez*
-
-* Deprecated most of the 'dynamic finder' methods. All dynamic methods
- except for `find_by_...` and `find_by_...!` are deprecated. Here's
- how you can rewrite the code:
-
- * `find_all_by_...` can be rewritten using `where(...)`
- * `find_last_by_...` can be rewritten using `where(...).last`
- * `scoped_by_...` can be rewritten using `where(...)`
- * `find_or_initialize_by_...` can be rewritten using
- `where(...).first_or_initialize`
- * `find_or_create_by_...` can be rewritten using
- `find_or_create_by(...)` or where(...).first_or_create`
- * `find_or_create_by_...!` can be rewritten using
- `find_or_create_by!(...) or `where(...).first_or_create!`
-
- The implementation of the deprecated dynamic finders has been moved
- to the `activerecord-deprecated_finders` gem. See below for details.
-
- *Jon Leighton*
-
-* Deprecated the old-style hash based finder API. This means that
- methods which previously accepted "finder options" no longer do. For
- example this:
-
- Post.find(:all, conditions: { comments_count: 10 }, limit: 5)
-
- Should be rewritten in the new style which has existed since Rails 3:
-
- Post.where(comments_count: 10).limit(5)
-
- Note that as an interim step, it is possible to rewrite the above as:
-
- Post.all.merge(where: { comments_count: 10 }, limit: 5)
-
- This could save you a lot of work if there is a lot of old-style
- finder usage in your application.
-
- `Relation#merge` now accepts a hash of
- options, but they must be identical to the names of the equivalent
- finder method. These are mostly identical to the old-style finder
- option names, except in the following cases:
-
- * `:conditions` becomes `:where`.
- * `:include` becomes `:includes`.
-
- The code to implement the deprecated features has been moved out to the
- `activerecord-deprecated_finders` gem. This gem is a dependency of Active
- Record in Rails 4.0, so the interface works out of the box. It will no
- longer be a dependency from Rails 4.1 (you'll need to add it to the
- `Gemfile` in 4.1), and will be maintained until Rails 5.0.
-
- *Jon Leighton*
-
-* It's not possible anymore to destroy a model marked as read only.
-
- *Johannes Barre*
-
-* Added ability to ActiveRecord::Relation#from to accept other ActiveRecord::Relation objects.
-
- Record.from(subquery)
- Record.from(subquery, :a)
-
- *Radoslav Stankov*
-
-* Added custom coders support for ActiveRecord::Store. Now you can set
- your custom coder like this:
-
- store :settings, accessors: [ :color, :homepage ], coder: JSON
-
- *Andrey Voronkov*
-
-* `mysql` and `mysql2` connections will set `SQL_MODE=STRICT_ALL_TABLES` by
- default to avoid silent data loss. This can be disabled by specifying
- `strict: false` in your `database.yml`.
-
- *Michael Pearson*
-
-* Added default order to `first` to assure consistent results among
- different database engines. Introduced `take` as a replacement to
- the old behavior of `first`.
-
- *Marcelo Silveira*
-
-* Added an `:index` option to automatically create indexes for references
- and belongs_to statements in migrations.
-
- The `references` and `belongs_to` methods now support an `index`
- option that receives either a boolean value or an options hash
- that is identical to options available to the add_index method:
-
- create_table :messages do |t|
- t.references :person, index: true
- end
-
- Is the same as:
-
- create_table :messages do |t|
- t.references :person
- end
- add_index :messages, :person_id
-
- Generators have also been updated to use the new syntax.
-
- *Joshua Wood*
-
-* Added `#find_by` and `#find_by!` to mirror the functionality
- provided by dynamic finders in a way that allows dynamic input more
- easily:
-
- Post.find_by name: 'Spartacus', rating: 4
- Post.find_by "published_at < ?", 2.weeks.ago
- Post.find_by! name: 'Spartacus'
-
- *Jon Leighton*
-
-* Added ActiveRecord::Base#slice to return a hash of the given methods with
- their names as keys and returned values as values.
-
- *Guillermo Iguaran*
-
-* Deprecate eager-evaluated scopes.
-
- Don't use this:
-
- scope :red, where(color: 'red')
- default_scope where(color: 'red')
-
- Use this:
-
- scope :red, -> { where(color: 'red') }
- default_scope { where(color: 'red') }
-
- The former has numerous issues. It is a common newbie gotcha to do
- the following:
-
- scope :recent, where(published_at: Time.now - 2.weeks)
-
- Or a more subtle variant:
-
- scope :recent, -> { where(published_at: Time.now - 2.weeks) }
- scope :recent_red, recent.where(color: 'red')
-
- Eager scopes are also very complex to implement within Active
- Record, and there are still bugs. For example, the following does
- not do what you expect:
-
- scope :remove_conditions, except(:where)
- where(...).remove_conditions # => still has conditions
-
- *Jon Leighton*
-
-* Remove IdentityMap
-
- IdentityMap has never graduated to be an "enabled-by-default" feature, due
- to some inconsistencies with associations, as described in this commit:
-
- https://github.com/rails/rails/commit/302c912bf6bcd0fa200d964ec2dc4a44abe328a6
-
- Hence the removal from the codebase, until such issues are fixed.
-
- *Carlos Antonio da Silva*
-
-* Added the schema cache dump feature.
-
- `Schema cache dump` feature was implemented. This feature can dump/load internal state of `SchemaCache` instance
- because we want to boot rails more quickly when we have many models.
-
- Usage notes:
-
- 1) execute rake task.
- RAILS_ENV=production bundle exec rake db:schema:cache:dump
- => generate db/schema_cache.dump
-
- 2) add config.active_record.use_schema_cache_dump = true in config/production.rb. BTW, true is default.
-
- 3) boot rails.
- RAILS_ENV=production bundle exec rails server
- => use db/schema_cache.dump
-
- 4) If you remove clear dumped cache, execute rake task.
- RAILS_ENV=production bundle exec rake db:schema:cache:clear
- => remove db/schema_cache.dump
-
- *kennyj*
-
-* Added support for partial indices to PostgreSQL adapter.
-
- The `add_index` method now supports a `where` option that receives a
- string with the partial index criteria.
-
- add_index(:accounts, :code, where: 'active')
-
- generates
-
- CREATE INDEX index_accounts_on_code ON accounts(code) WHERE active
-
- *Marcelo Silveira*
-
-* Implemented `ActiveRecord::Relation#none` method.
-
- The `none` method returns a chainable relation with zero records
- (an instance of the NullRelation class).
-
- Any subsequent condition chained to the returned relation will continue
- generating an empty relation and will not fire any query to the database.
-
- *Juanjo Bazán*
-
-* Added the `ActiveRecord::NullRelation` class implementing the null
- object pattern for the Relation class.
-
- *Juanjo Bazán*
-
-* Added new `dependent: :restrict_with_error` option. This will add
- an error to the model, rather than raising an exception.
-
- The `:restrict` option is renamed to `:restrict_with_exception` to
- make this distinction explicit.
-
- *Manoj Kumar & Jon Leighton*
-
-* Added `create_join_table` migration helper to create HABTM join tables.
-
- create_join_table :products, :categories
- # =>
- # create_table :categories_products, id: false do |td|
- # td.integer :product_id, null: false
- # td.integer :category_id, null: false
- # end
-
- *Rafael Mendonça França*
-
-* The primary key is always initialized in the @attributes hash to `nil` (unless
- another value has been specified).
-
- *Aaron Paterson*
-
-* In previous releases, the following would generate a single query with
- an `OUTER JOIN comments`, rather than two separate queries:
-
- Post.includes(:comments)
- .where("comments.name = 'foo'")
-
- This behaviour relies on matching SQL string, which is an inherently
- flawed idea unless we write an SQL parser, which we do not wish to
- do.
-
- Therefore, it is now deprecated.
-
- To avoid deprecation warnings and for future compatibility, you must
- explicitly state which tables you reference, when using SQL snippets:
-
- Post.includes(:comments)
- .where("comments.name = 'foo'")
- .references(:comments)
-
- Note that you do not need to explicitly specify references in the
- following cases, as they can be automatically inferred:
-
- Post.includes(:comments).where(comments: { name: 'foo' })
- Post.includes(:comments).where('comments.name' => 'foo')
- Post.includes(:comments).order('comments.name')
-
- You do not need to worry about this unless you are doing eager
- loading. Basically, don't worry unless you see a deprecation warning
- or (in future releases) an SQL error due to a missing JOIN.
-
- *Jon Leighton*
-
-* Support for the `schema_info` table has been dropped. Please
- switch to `schema_migrations`.
-
- *Aaron Patterson*
-
-* Connections *must* be closed at the end of a thread. If not, your
- connection pool can fill and an exception will be raised.
-
- *Aaron Patterson*
-
-* PostgreSQL hstore records can be created.
-
- *Aaron Patterson*
-
-* PostgreSQL hstore types are automatically deserialized from the database.
-
- *Aaron Patterson*
-
-
-Please check [3-2-stable](https://github.com/rails/rails/blob/3-2-stable/activerecord/CHANGELOG.md) for previous changes.
+Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/activerecord/CHANGELOG.md) for previous changes.
diff --git a/activerecord/lib/active_record/version.rb b/activerecord/lib/active_record/version.rb
index a670e18aee..de5fd05468 100644
--- a/activerecord/lib/active_record/version.rb
+++ b/activerecord/lib/active_record/version.rb
@@ -1,7 +1,7 @@
module ActiveRecord
# Returns the version of the currently loaded ActiveRecord as a Gem::Version
def self.version
- Gem::Version.new "4.0.0.rc1"
+ Gem::Version.new "4.1.0.beta"
end
module VERSION #:nodoc:
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md
index 21add846a8..7f2e776825 100644
--- a/activesupport/CHANGELOG.md
+++ b/activesupport/CHANGELOG.md
@@ -1,510 +1,3 @@
-## Rails 4.0.0 (unreleased) ##
+* No changes.
-* Fix skipping of filters defined by objects in `ActiveSupport::Callbacks::Callback`.
-
- *Ben McRedmond*
-
-* An `ActiveSupport::Subscriber` class has been extracted from
- `ActiveSupport::LogSubscriber`, allowing you to use the event attachment
- API for other kinds of subscribers.
-
- *Daniel Schierbeck*
-
-* `Class#class_attribute` accepts an `instance_predicate` option which
- defaults to `true`. If set to `false` the predicate method will not
- be defined.
-
- *Agis Anastasopoulos*
-
-* `fast_xs` support has been removed. Use `String#encode(xml: :attr)`.
-
-* `ActiveSupport::Notifications::Instrumenter#instrument` should
- yield its payload.
-
- *stopdropandrew*
-
-* `ActiveSupport::TimeWithZone` raises `NoMethodError` in proper context.
- Fixes #9772.
-
- *Yves Senn*
-
-* Fix deletion of empty directories in `ActiveSupport::Cache::FileStore`.
-
- *Charles Jones*
-
-## Rails 4.0.0.beta1 (February 25, 2013) ##
-
-* Improve singularizing a singular for multiple cases.
- Fixes #2608 #1825 #2395.
-
- Example:
-
- # Before
- 'address'.singularize # => 'addres'
-
- # After
- 'address'.singularize # => 'address'
-
- *Mark McSpadden*
-
-* Prevent `DateTime#change` from truncating the second fraction, when seconds
- do not need to be changed.
-
- *Chris Baynes*
-
-* Added `ActiveSupport::TimeWithZone#to_r` for `Time#at` compatibility.
-
- Before this change:
-
- Time.zone = 'Tokyo'
- time = Time.zone.now
- time == Time.at(time) # => false
-
- After the change:
-
- Time.zone = 'Tokyo'
- time = Time.zone.now
- time == Time.at(time) # => true
-
- *stopdropandrew*
-
-* `ActiveSupport::NumberHelper#number_to_human` returns the number unaltered when
- the given units hash does not contain the needed key, e.g. when the number provided
- is less than the largest key provided.
- Fixes #9269.
-
- Examples:
-
- number_to_human(123, units: {}) # => 123
- number_to_human(123, units: { thousand: 'k' }) # => 123
-
- *Michael Hoffman*
-
-* Added `beginning_of_minute` support to core ext calculations for `Time` and `DateTime`.
-
- *Gagan Awhad*
-
-* Add `:nsec` date format.
-
- *Jamie Gaskins*
-
-* `ActiveSupport::Gzip.compress` allows two optional arguments for compression
- level and strategy.
-
- *Beyond*
-
-* Modify `TimeWithZone#as_json` to include 3 decimal places of sub-second accuracy
- by default, which is optional as per the ISO8601 spec, but extremely useful. Also
- the default behaviour of `Date#toJSON()` in recent versions of Chrome, Safari and
- Firefox.
-
- *James Harton*
-
-* Improve `String#squish` to handle Unicode whitespace. *Antoine Lyset*
-
-* Standardise on `to_time` returning an instance of `Time` in the local system timezone
- across `String`, `Time`, `Date`, `DateTime` and `ActiveSupport::TimeWithZone`.
-
- *Andrew White*
-
-* Extract `ActiveSupport::Testing::Performance` into https://github.com/rails/rails-perftest
- You can add the gem to your `Gemfile` to keep using performance tests.
-
- gem 'rails-perftest'
-
- *Yves Senn*
-
-* `Hash.from_xml` raises when it encounters `type="symbol"` or `type="yaml"`.
- Use `Hash.from_trusted_xml` to parse this XML.
-
- CVE-2013-0156
-
- *Jeremy Kemper*
-
-* Deprecate `assert_present` and `assert_blank` in favor of
- `assert object.blank?` and `assert object.present?`
-
- *Yves Senn*
-
-* Change `String#to_date` to use `Date.parse`. This gives more consistent error
- messages and allows the use of partial dates.
-
- "gibberish".to_date => Argument Error: invalid date
- "3rd Feb".to_date => Sun, 03 Feb 2013
-
- *Kelly Stannard*
-
-* It's now possible to compare `Date`, `DateTime`, `Time` and `TimeWithZone`
- with `Float::INFINITY`. This allows to create date/time ranges with one infinite bound.
- Example:
-
- range = Range.new(Date.today, Float::INFINITY)
-
- Also it's possible to check inclusion of date/time in range with conversion.
-
- range.include?(Time.now + 1.year) # => true
- range.include?(DateTime.now + 1.year) # => true
-
- *Alexander Grebennik*
-
-* Remove meaningless `ActiveSupport::FrozenObjectError`, which was just an alias of `RuntimeError`.
-
- *Akira Matsuda*
-
-* Introduce `assert_not` to replace warty `assert !foo`. *Jeremy Kemper*
-
-* Prevent `Callbacks#set_callback` from setting the same callback twice.
-
- before_save :foo, :bar, :foo
-
- will at first call `bar`, then `foo`. `foo` will no more be called
- twice.
-
- *Dmitriy Kiriyenko*
-
-* Add `ActiveSupport::Logger#silence` that works the same as the old `Logger#silence` extension.
-
- *DHH*
-
-* Remove surrogate unicode character encoding from `ActiveSupport::JSON.encode`
- The encoding scheme was broken for unicode characters outside the basic multilingual plane;
- since json is assumed to be UTF-8, and we already force the encoding to UTF-8,
- simply pass through the un-encoded characters.
-
- *Brett Carter*
-
-* Deprecate `Time.time_with_date_fallback`, `Time.utc_time` and `Time.local_time`.
- These methods were added to handle the limited range of Ruby's native `Time`
- implementation. Those limitations no longer apply so we are deprecating them in 4.0
- and they will be removed in 4.1.
-
- *Andrew White*
-
-* Deprecate `Date#to_time_in_current_zone` and add `Date#in_time_zone`. *Andrew White*
-
-* Add `String#in_time_zone` method to convert a string to an `ActiveSupport::TimeWithZone`. *Andrew White*
-
-* Deprecate `ActiveSupport::BasicObject` in favor of `ActiveSupport::ProxyObject`.
- This class is used for proxy classes. It avoids confusion with Ruby's `BasicObject`
- class.
-
- *Francesco Rodriguez*
-
-* Patched `Marshal#load` to work with constant autoloading. Fixes autoloading
- with cache stores that rely on `Marshal` (`MemCacheStore` and `FileStore`).
- Fixes #8167.
-
- *Uriel Katz*
-
-* Make `Time.zone.parse` to work with JavaScript format date strings. *Andrew White*
-
-* Add `DateTime#seconds_until_end_of_day` and `Time#seconds_until_end_of_day`
- as a complement for `seconds_from_midnight`; useful when setting expiration
- times for caches, e.g.:
-
- <% cache('dashboard', expires_in: Date.current.seconds_until_end_of_day) do %>
- ...
-
- *Olek Janiszewski*
-
-* No longer proxy `ActiveSupport::Multibyte#class`. *Steve Klabnik*
-
-* Deprecate `ActiveSupport::TestCase#pending` method, use `skip` from minitest instead. *Carlos Antonio da Silva*
-
-* `XmlMini.with_backend` now may be safely used with threads:
-
- Thread.new do
- XmlMini.with_backend("REXML") { rexml_power }
- end
- Thread.new do
- XmlMini.with_backend("LibXML") { libxml_power }
- end
-
- Each thread will use it's own backend.
-
- *Nikita Afanasenko*
-
-* Dependencies no longer trigger `Kernel#autoload` in `remove_constant`. Fixes #8213. *Xavier Noria*
-
-* Simplify `mocha` integration and remove monkey-patches, bumping `mocha` to 0.13.0. *James Mead*
-
-* `#as_json` isolates options when encoding a hash. Fixes #8182.
-
- *Yves Senn*
-
-* Deprecate `Hash#diff` in favor of minitest's #diff. *Steve Klabnik*
-
-* `Kernel#capture` can catch output from subprocesses. *Dmitry Vorotilin*
-
-* `to_xml` conversions now use builder's `tag!` method instead of explicit invocation of `method_missing`.
-
- *Nikita Afanasenko*
-
-* Fixed timezone mapping of the Solomon Islands. *Steve Klabnik*
-
-* Make callstack attribute optional in `ActiveSupport::Deprecation::Reporting`
- methods `warn` and `deprecation_warning`.
-
- *Alexey Gaziev*
-
-* Implement `HashWithIndifferentAccess#replace` so `key?` works correctly. *David Graham*
-
-* Handle the possible permission denied errors `atomic.rb` might trigger due to its `chown`
- and `chmod` calls.
-
- *Daniele Sluijters*
-
-* `Hash#extract!` returns only those keys that present in the receiver.
-
- {a: 1, b: 2}.extract!(:a, :x) # => {:a => 1}
-
- *Mikhail Dieterle*
-
-* `Hash#extract!` returns the same subclass, that the receiver is. I.e.
- `HashWithIndifferentAccess#extract!` returns a `HashWithIndifferentAccess` instance.
-
- *Mikhail Dieterle*
-
-* Optimize `ActiveSupport::Cache::Entry` to reduce memory and processing overhead. *Brian Durand*
-
-* Tests tag the Rails log with the current test class and test case:
-
- [SessionsControllerTest] [test_0002_sign in] Processing by SessionsController#create as HTML
- [SessionsControllerTest] [test_0002_sign in] ...
-
- *Jeremy Kemper*
-
-* Add `logger.push_tags` and `.pop_tags` to complement `logger.tagged`:
-
- class Job
- def before
- Rails.logger.push_tags :jobs, self.class.name
- end
-
- def after
- Rails.logger.pop_tags 2
- end
- end
-
- *Jeremy Kemper*
-
-* Allow delegation to the class using the `:class` keyword, replacing
- `self.class` usage:
-
- class User
- def self.hello
- "world"
- end
-
- delegate :hello, to: :class
- end
-
- *Marc-Andre Lafortune*
-
-* `Date.beginning_of_week` thread local and `beginning_of_week` application
- config option added (default is Monday).
-
- *Innokenty Mikhailov*
-
-* An optional block can be passed to `config_accessor` to set its default value
-
- class User
- include ActiveSupport::Configurable
-
- config_accessor :hair_colors do
- [:brown, :black, :blonde, :red]
- end
- end
-
- User.hair_colors # => [:brown, :black, :blonde, :red]
-
- *Larry Lv*
-
-* `ActiveSupport::Benchmarkable#silence` has been deprecated due to its lack of
- thread safety. It will be removed without replacement in Rails 4.1.
-
- *Steve Klabnik*
-
-* An optional block can be passed to `Hash#deep_merge`. The block will be invoked
- for each duplicated key and used to resolve the conflict.
-
- *Pranas Kiziela*
-
-* `ActiveSupport::Deprecation` is now a class. It is possible to create an instance
- of deprecator. Backwards compatibility has been preserved.
-
- You can choose which instance of the deprecator will be used.
-
- deprecate :method_name, deprecator: deprecator_instance
-
- You can use `ActiveSupport::Deprecation` in your gem.
-
- require 'active_support/deprecation'
- require 'active_support/core_ext/module/deprecation'
-
- class MyGem
- def self.deprecator
- ActiveSupport::Deprecation.new('2.0', 'MyGem')
- end
-
- def old_method
- end
-
- def new_method
- end
-
- deprecate old_method: :new_method, deprecator: deprecator
- end
-
- MyGem.new.old_method
- # => DEPRECATION WARNING: old_method is deprecated and will be removed from MyGem 2.0 (use new_method instead). (called from <main> at file.rb:18)
-
- *Piotr Niełacny & Robert Pankowecki*
-
-* `ERB::Util.html_escape` encodes single quote as `#39`. Decimal form has better support in old browsers. *Kalys Osmonov*
-
-* `ActiveSupport::Callbacks`: deprecate monkey patch of object callbacks.
- Using the `filter` method like this:
-
- before_filter MyFilter.new
-
- class MyFilter
- def filter(controller)
- end
- end
-
- Is now deprecated with recommendation to use the corresponding filter type
- (`#before`, `#after` or `#around`):
-
- before_filter MyFilter.new
-
- class MyFilter
- def before(controller)
- end
- end
-
- *Bogdan Gusiev*
-
-* An optional block can be passed to `HashWithIndifferentAccess#update` and `#merge`.
- The block will be invoked for each duplicated key, and used to resolve the conflict,
- thus replicating the behaviour of the corresponding methods on the `Hash` class.
-
- *Leo Cassarani*
-
-* Remove `j` alias for `ERB::Util#json_escape`.
- The `j` alias is already used for `ActionView::Helpers::JavaScriptHelper#escape_javascript`
- and both modules are included in the view context that would confuse the developers.
-
- *Akira Matsuda*
-
-* Replace deprecated `memcache-client` gem with `dalli` in `ActiveSupport::Cache::MemCacheStore`.
-
- *Guillermo Iguaran*
-
-* Add default values to all `ActiveSupport::NumberHelper` methods, to avoid
- errors with empty locales or missing values.
-
- *Carlos Antonio da Silva*
-
-* `ActiveSupport::JSON::Variable` is deprecated. Define your own `#as_json` and
- `#encode_json` methods for custom JSON string literals.
-
- *Erich Menge*
-
-* Add `String#indent`. *fxn & Ace Suares*
-
-* Inflections can now be defined per locale. `singularize` and `pluralize`
- accept locale as an extra argument.
-
- *David Celis*
-
-* `Object#try` will now return `nil` instead of raise a `NoMethodError` if the
- receiving object does not implement the method, but you can still get the
- old behavior by using the new `Object#try!`.
-
- *DHH*
-
-* `ERB::Util.html_escape` now escapes single quotes. *Santiago Pastorino*
-
-* `Time#change` now works with time values with offsets other than UTC or the local time zone. *Andrew White*
-
-* `ActiveSupport::Callbacks`: deprecate usage of filter object with `#before` and `#after` methods as `around` callback. *Bogdan Gusiev*
-
-* Add `Time#prev_quarter` and `Time#next_quarter` short-hands for `months_ago(3)` and `months_since(3)`. *SungHee Kang*
-
-* Remove obsolete and unused `require_association` method from dependencies. *fxn*
-
-* Add `:instance_accessor` option for `config_accessor`.
-
- class User
- include ActiveSupport::Configurable
- config_accessor :allowed_access, instance_accessor: false
- end
-
- User.new.allowed_access = true # => NoMethodError
- User.new.allowed_access # => NoMethodError
-
- *Francesco Rodriguez*
-
-* `ActionView::Helpers::NumberHelper` methods have been moved to `ActiveSupport::NumberHelper` and are now available via
- `Numeric#to_s`. `Numeric#to_s` now accepts the formatting options `:phone`, `:currency`, `:percentage`, `:delimited`,
- `:rounded`, `:human`, and `:human_size`.
-
- *Andrew Mutz*
-
-* Add `Hash#transform_keys`, `Hash#transform_keys!`, `Hash#deep_transform_keys`, and `Hash#deep_transform_keys!`. *Mark McSpadden*
-
-* Changed XML type `datetime` to `dateTime` (with upper case letter `T`). *Angelo Capilleri*
-
-* Add `:instance_accessor` option for `class_attribute`. *Alexey Vakhov*
-
-* `constantize` now looks in the ancestor chain. *Marc-Andre Lafortune & Andrew White*
-
-* Adds `Hash#deep_stringify_keys` and `Hash#deep_stringify_keys!` to convert all keys from a `Hash` instance into strings. *Lucas Húngaro*
-
-* Adds `Hash#deep_symbolize_keys` and `Hash#deep_symbolize_keys!` to convert all keys from a `Hash` instance into symbols. *Lucas Húngaro*
-
-* `Object#try` can't call private methods. *Vasiliy Ermolovich*
-
-* `AS::Callbacks#run_callbacks` remove `key` argument. *Francesco Rodriguez*
-
-* `deep_dup` works more expectedly now and duplicates also values in `Hash` instances and elements in `Array` instances. *Alexey Gaziev*
-
-* Inflector no longer applies ice -> ouse to words like "slice", "police", etc. *Wes Morgan*
-
-* Add `ActiveSupport::Deprecations.behavior = :silence` to completely ignore Rails runtime deprecations. *twinturbo*
-
-* Make `Module#delegate` stop using `send` - can no longer delegate to private methods. *dasch*
-
-* `ActiveSupport::Callbacks`: deprecate `:rescuable` option. *Bogdan Gusiev*
-
-* Adds `Integer#ordinal` to get the ordinal suffix string of an integer. *Tim Gildea*
-
-* `ActiveSupport::Callbacks`: `:per_key` option is no longer supported. *Bogdan Gusiev*
-
-* `ActiveSupport::Callbacks#define_callbacks`: add `:skip_after_callbacks_if_terminated` option. *Bogdan Gusiev*
-
-* Add `html_escape_once` to `ERB::Util`, and delegate the `escape_once` tag helper to it. *Carlos Antonio da Silva*
-
-* Deprecates the compatibility method `Module#local_constant_names`,
- use `Module#local_constants` instead (which returns symbols). *Xavier Noria*
-
-* Deletes the compatibility method `Module#method_names`,
- use `Module#methods` from now on (which returns symbols). *Xavier Noria*
-
-* Deletes the compatibility method `Module#instance_method_names`,
- use `Module#instance_methods` from now on (which returns symbols). *Xavier Noria*
-
-* `BufferedLogger` is deprecated. Use `ActiveSupport::Logger`, or the logger
- from the Ruby standard library.
-
- *Aaron Patterson*
-
-* Unicode database updated to 6.1.0. *Norman Clarke*
-
-* Adds `encode_big_decimal_as_string` option to force JSON serialization of `BigDecimal` as numeric instead
- of wrapping them in strings for safety.
-
-* Optimize log subscribers to check log level before doing any processing. *Brian Durand*
-
-Please check [3-2-stable](https://github.com/rails/rails/blob/3-2-stable/activesupport/CHANGELOG.md) for previous changes.
+Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/activesupport/CHANGELOG.md) for previous changes.
diff --git a/activesupport/lib/active_support/version.rb b/activesupport/lib/active_support/version.rb
index 2dc040d9a8..8762330a6e 100644
--- a/activesupport/lib/active_support/version.rb
+++ b/activesupport/lib/active_support/version.rb
@@ -1,7 +1,7 @@
module ActiveSupport
# Returns the version of the currently loaded ActiveSupport as a Gem::Version
def self.version
- Gem::Version.new "4.0.0.rc1"
+ Gem::Version.new "4.1.0.beta"
end
module VERSION #:nodoc:
diff --git a/guides/CHANGELOG.md b/guides/CHANGELOG.md
index b0e52847e1..766f7f6f56 100644
--- a/guides/CHANGELOG.md
+++ b/guides/CHANGELOG.md
@@ -1,12 +1,3 @@
-## Rails 4.0.0 (unreleased) ##
-* Change Service pages(404, etc). *Stanislav Sobolev*
+* No changes.
-## Rails 4.0.0.beta1 (unreleased) ##
-
-* Split Validations and Callbacks guide into two. *Steve Klabnik*
-
-* New guide _Working with JavaScript in Rails_. *Steve Klabnik*
-
-* Guides updated to reflect new test locations. *Mike Moore*
-
-* Guides have a responsive design. *Joe Fiorini*
+Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/guides/CHANGELOG.md) for previous changes.
diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md
index f67177a047..ba914fb12e 100644
--- a/railties/CHANGELOG.md
+++ b/railties/CHANGELOG.md
@@ -1,375 +1,3 @@
-## Rails 4.0.0 (unreleased) ##
+* No changes.
-* Move rails.png into a data-uri. One less file to get generated into a new
- application. This is also consistent with the removal of index.html.
-
- *Steve Klabnik*
-
-* The application rake task `doc:rails` generates now an API like the
- official one (except for the links to GitHub).
-
- *Xavier Noria*
-
-* Allow vanilla apps to render CoffeeScript templates in production
-
- Vanilla apps already render CoffeeScript templates in development and test
- environments. With this change, the production behavior matches that of
- the other environments.
-
- Effectively, this meant moving coffee-rails (and the JavaScript runtime on
- which it is dependent) from the :assets group to the top-level of the
- generated Gemfile.
-
- *Gabe Kopley*
-
-* Don't generate a scaffold.css when --no-assets is specified
-
- *Kevin Glowacz*
-
-* Add support for generate scaffold password:digest
-
- * adds password_digest attribute to the migration
- * adds has_secure_password to the model
- * adds password and password_confirmation password_fields to _form.html
- * omits password from index.html and show.html
- * adds password and password_confirmation to the controller
- * adds unencrypted password and password_confirmation to the controller test
- * adds encrypted password_digest to the fixture
-
- *Sam Ruby*
-
-* Improved `rake test` command for running tests
-
- To run all tests:
-
- $ rake test
-
- To run a test suite
-
- $ rake test:[models,helpers,units,controllers,mailers,...]
-
- To run a selected test file(s):
-
- $ rake test test/unit/foo_test.rb [test/unit/bar_test.rb ...]
-
- To run a single test from a test file
-
- $ rake test test/unit/foo_test.rb TESTOPTS='-n test_the_truth'
-
-* Improve service pages with new layout (404, etc).
-
- *Stanislav Sobolev*
-
-
-## Rails 4.0.0.beta1 (February 25, 2013) ##
-
-* Improve `rake stats` for JavaScript and CoffeeScript: ignore block comments
- and calculates number of functions.
-
- *Hendy Tanata*
-
-* Ability to use a custom builder by passing `--builder` (or `-b`) has been removed.
- Consider using application template instead. See this guide for more detail:
- http://guides.rubyonrails.org/rails_application_templates.html
-
- *Prem Sichanugrist*
-
-* Fix `rake db:*` tasks to work with `DATABASE_URL` and without `config/database.yml`.
-
- *Terence Lee*
-
-* Add notice message for destroy action in scaffold generator.
-
- *Rahul P. Chaudhari*
-
-* Add two new test rake tasks to speed up full test runs.
-
- * `test:all`: run tests quickly by merging all types and not resetting db.
- * `test:all:db`: run tests quickly, but also reset db.
-
- *Ryan Davis*
-
-* Add `--rc` option to support the load of a custom rc file during the generation of a new app.
-
- *Amparo Luna*
-
-* Add `--no-rc` option to skip the loading of railsrc file during the generation of a new app.
-
- *Amparo Luna*
-
-* Fixes database.yml when creating a new rails application with '.'
- Fixes #8304.
-
- *Jeremy W. Rowe*
-
-* Restore Rails::Engine::Railties#engines with deprecation to ensure
- compatibility with gems such as Thinking Sphinx
- Fixes #8551.
-
- *Tim Raymond*
-
-* Specify which logs to clear when using the `rake log:clear` task.
- (e.g. rake log:clear LOGS=test,staging)
-
- *Matt Bridges*
-
-* Allow a `:dirs` key in the `SourceAnnotationExtractor.enumerate` options
- to explicitly set the directories to be traversed so it's easier to define
- custom rake tasks.
-
- *Brian D. Burns*
-
-* Deprecate `Rails::Generators::ActiveModel#update_attributes` in favor of `#update`.
-
- ORMs that implement `Generators::ActiveModel#update_attributes` should change
- to `#update`. Scaffold controller generators should change calls like:
-
- @orm_instance.update_attributes(...)
-
- to:
-
- @orm_instance.update(...)
-
- This goes along with the addition of `ActiveRecord::Base#update`.
-
- *Carlos Antonio da Silva*
-
-* Include `jbuilder` by default and rely on its scaffold generator to show json API.
- Check https://github.com/rails/jbuilder for more info and examples.
-
- *DHH*
-
-* Scaffold now generates HTML-only controller by default.
-
- *DHH + Pavel Pravosud*
-
-* The generated `README.rdoc` for new applications invites the user to
- document the necessary steps to get the application up and running.
-
- *Xavier Noria*
-
-* Generated applications no longer get `doc/README_FOR_APP`. In consequence,
- the `doc` directory is created on demand by documentation tasks rather than
- generated by default.
-
- *Xavier Noria*
-
-* App executables now live in the `bin/` directory: `bin/bundle`,
- `bin/rails`, `bin/rake`. Run `rake rails:update:bin` to add these
- executables to your own app. `script/rails` is gone from new apps.
-
- Running executables within your app ensures they use your app's Ruby
- version and its bundled gems, and it ensures your production deployment
- tools only need to execute a single script. No more having to carefully
- `cd` to the app dir and run `bundle exec ...`.
-
- Rather than treating `bin/` as a junk drawer for generated "binstubs",
- bundler 1.3 adds support for generating stubs for just the executables
- you actually use: `bundle binstubs unicorn` generates `bin/unicorn`.
- Add that executable to git and version it just like any other app code.
-
- *Jeremy Kemper*
-
-* `config.assets.enabled` is now true by default. If you're upgrading from a Rails 3.x app
- that does not use the asset pipeline, you'll be required to add `config.assets.enabled = false`
- to your application.rb. If you don't want the asset pipeline on a new app use `--skip-sprockets`
-
- *DHH*
-
-* Environment name can be a start substring of the default environment names
- (production, development, test). For example: tes, pro, prod, dev, devel.
- Fixes #8628.
-
- *Mykola Kyryk*
-
-* Add `-B` alias for `--skip-bundle` option in the rails new generators.
-
- *Jiri Pospisil*
-
-* Quote column names in generates fixture files. This prevents
- conflicts with reserved YAML keywords such as 'yes' and 'no'
- Fixes #8612.
-
- *Yves Senn*
-
-* Explicit options have precedence over `~/.railsrc` on the `rails new` command.
-
- *Rafael Mendonça França*
-
-* Generated migrations now always use the `change` method.
-
- *Marc-André Lafortune*
-
-* Add `app/models/concerns` and `app/controllers/concerns` to the default directory structure and load path.
- See http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns for usage instructions.
-
- *DHH*
-
-* The `rails/info/routes` now correctly formats routing output as an html table.
-
- *Richard Schneeman*
-
-* The `public/index.html` is no longer generated for new projects.
- Page is replaced by internal `welcome_controller` inside of railties.
-
- *Richard Schneeman*
-
-* Add `ENV['RACK_ENV']` support to `rails runner/console/server`.
-
- *kennyj*
-
-* Add `db` to list of folders included by `rake notes` and `rake notes:custom`. *Antonio Cangiano*
-
-* Engines with a dummy app include the rake tasks of dependencies in the app namespace.
- Fixes #8229.
-
- *Yves Senn*
-
-* Add `sqlserver.yml` template file to satisfy `-d sqlserver` being passed to `rails new`.
- Fixes #6882.
-
- *Robert Nesius*
-
-* Rake test:uncommitted finds git directory in ancestors *Nicolas Despres*
-
-* Add dummy app Rake tasks when `--skip-test-unit` and `--dummy-path` is passed to the plugin generator.
- Fixes #8121.
-
- *Yves Senn*
-
-* Add `.rake` to list of file extensions included by `rake notes` and `rake notes:custom`. *Brent J. Nordquist*
-
-* New test locations `test/models`, `test/helpers`, `test/controllers`, and
- `test/mailers`. Corresponding rake tasks added as well. *Mike Moore*
-
-* Set a different cache per environment for assets pipeline
- through `config.assets.cache`.
-
- *Guillermo Iguaran*
-
-* `Rails.public_path` now returns a Pathname object. *Prem Sichanugrist*
-
-* Remove highly uncommon `config.assets.manifest` option for moving the manifest path.
- This option is now unsupported in sprockets-rails.
-
- *Guillermo Iguaran & Dmitry Vorotilin*
-
-* Add `config.action_controller.permit_all_parameters` to disable
- StrongParameters protection, it's false by default.
-
- *Guillermo Iguaran*
-
-* Remove `config.active_record.whitelist_attributes` and
- `config.active_record.mass_assignment_sanitizer` from new applications since
- MassAssignmentSecurity has been extracted from Rails.
-
- *Guillermo Iguaran*
-
-* Change `rails new` and `rails plugin new` generators to name the `.gitkeep` files
- as `.keep` in a more SCM-agnostic way.
-
- Change `--skip-git` option to only skip the `.gitignore` file and still generate
- the `.keep` files.
-
- Add `--skip-keeps` option to skip the `.keep` files.
-
- *Derek Prior & Francesco Rodriguez*
-
-* Fixed support for `DATABASE_URL` environment variable for rake db tasks.
-
- *Grace Liu*
-
-* `rails dbconsole` now can use SSL for MySQL. The `database.yml` options sslca, sslcert, sslcapath, sslcipher
- and sslkey now affect `rails dbconsole`.
-
- *Jim Kingdon and Lars Petrus*
-
-* Correctly handle SCRIPT_NAME when generating routes to engine in application
- that's mounted at a sub-uri. With this behavior, you *should not* use
- `default_url_options[:script_name]` to set proper application's mount point by
- yourself.
-
- *Piotr Sarnacki*
-
-* `config.threadsafe!` is deprecated in favor of `config.eager_load` which provides a more fine grained control on what is eager loaded .
-
- *José Valim*
-
-* The migration generator will now produce AddXXXToYYY/RemoveXXXFromYYY migrations with references statements, for instance
-
- rails g migration AddReferencesToProducts user:references supplier:references{polymorphic}
-
- will generate the migration with:
-
- add_reference :products, :user, index: true
- add_reference :products, :supplier, polymorphic: true, index: true
-
- *Aleksey Magusev*
-
-* Allow scaffold/model/migration generators to accept a `polymorphic` modifier
- for `references`/`belongs_to`, for instance
-
- rails g model Product supplier:references{polymorphic}
-
- will generate the model with `belongs_to :supplier, polymorphic: true`
- association and appropriate migration.
-
- *Aleksey Magusev*
-
-* Set `config.active_record.migration_error` to `:page_load` for development.
-
- *Richard Schneeman*
-
-* Add runner to `Rails::Railtie` as a hook called just after runner starts.
-
- *José Valim & kennyj*
-
-* Add `/rails/info/routes` path, displays same information as `rake routes` .
-
- *Richard Schneeman & Andrew White*
-
-* Improved `rake routes` output for redirects.
-
- *Łukasz Strzałkowski & Andrew White*
-
-* Load all environments available in `config.paths["config/environments"]`.
-
- *Piotr Sarnacki*
-
-* Remove `Rack::SSL` in favour of `ActionDispatch::SSL`.
-
- *Rafael Mendonça França*
-
-* Remove Active Resource from Rails framework.
-
- *Prem Sichangrist*
-
-* Allow to set class that will be used to run as a console, other than IRB, with `Rails.application.config.console=`. It's best to add it to `console` block.
-
- Example:
-
- # it can be added to config/application.rb
- console do
- # this block is called only when running console,
- # so we can safely require pry here
- require "pry"
- config.console = Pry
- end
-
- *Piotr Sarnacki*
-
-* Add convenience `hide!` method to Rails generators to hide current generator
- namespace from showing when running `rails generate`.
-
- *Carlos Antonio da Silva*
-
-* Rails::Plugin has gone. Instead of adding plugins to vendor/plugins use gems or bundler with path or git dependencies.
-
- *Santiago Pastorino*
-
-* Set config.action_mailer.async = true to turn on asynchronous
- message delivery.
-
- *Brian Cardarella*
-
-Please check [3-2-stable](https://github.com/rails/rails/blob/3-2-stable/railties/CHANGELOG.md) for previous changes.
+Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/railties/CHANGELOG.md) for previous changes.
diff --git a/version.rb b/version.rb
index dcbf57a4df..5a6d8d0983 100644
--- a/version.rb
+++ b/version.rb
@@ -1,9 +1,9 @@
module Rails
module VERSION
MAJOR = 4
- MINOR = 0
+ MINOR = 1
TINY = 0
- PRE = "rc1"
+ PRE = "beta"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end