* Use lang/ruby/gem.mk instead of misc/rubygems/rubygem.mk.
* Add LICENSE.
* Update dependency according to gemspec.
*2.3.9 (September 4, 2010)*
Unknown, but some tests are updated.
Changes:
* Add index length support for MySQL. #1852 [Emili Parreno, Pratik Naik]
* find_or_create_by_attr(value, ...) works when attr is protected.
#4457 [Santiago Pastorino, Marc-Andr\xc3\xa9 Lafortune]
* JSON supports a custom root option: to_json(:root => 'custom') #4515
[Jatinder Singh]
* Destroy uses optimistic locking. If lock_version on the record
you're destroying doesn't match lock_version in the database, a
StaleObjectError is raised. #1966 [Curtis Hawthorne]
* To prefix the table names of all models in a module, define
self.table_name_pr efix on the module. #4032 [Andrew White]
* Association inverses for belongs_to, has_one, and
has_many. Optimization to re duce database queries. #3533 [Murray
Steele]
* MySQL: add_ and change_column support positioning. #3286 [Ben Marini]
* Reset your Active Record counter caches with the reset_counter_cache
class method. #1211 [Mike Breen, Gabe da Silveira]
vulnerability in ruby-actionpack.
Major changes:
- Improved compatibility with Ruby 1.9
- RailsXss plugin availability
- Fixes for the Nokogiri backend for XmlMini
Changes since 2.1.1:
* Allow metal to live in plugins #2045 [Matthew Rudy]
* Added metal [Josh Peek]
* Remove script/performance/request in favour of the performance
integration tests. [Pratik Naik]
* Add a rake task to apply a template to an existing application :
rake rails:template LOCATION=~/template.rb [Pratik Naik]
* Add "-m/--template" option to Rails generator to apply a template to
the generated application. [Jeremy McAnally]
* Extracted the process scripts (inspector, reaper, spawner) into the
plugin irs_process_scripts [David Heinemeier Hansson]
* Changed Rails.root to return a Pathname object
* Added view path support for engines [David Heinemeier Hansson]
* Added that config/routes.rb files in engine plugins are
automatically loaded (and reloaded when they change in dev mode)
[David Heinemeier Hansson]
* Added app/[models|controllers|helpers] to the load path for plugins
that has an app directory (go engines ;)) [David Heinemeier Hansson]
* Add config.preload_frameworks to load all frameworks at
startup. Default to false so Rails autoloads itself as it's
used. Turn this on for Passenger and JRuby. Also turned on by
config.threadsafe! [Jeremy Kemper]
* Add a rake task to generate dispatchers : rake
rails:generate_dispatchers [Pratik Naik]
* "rails <app>" will not generate public/dispatch.cgi/fcgi/rb files by
default now. Please use "--with-dispatchers" option if you need
them. [Yaroslav Markin, Pratik Naik]
* Added rake rails:update:application_controller to renamed
application.rb to application_controller.rb -- included in rake
rails:update so upgrading to 2.3 will automatically trigger it #1439
[kastner]
* Added Rails.backtrace_cleaner as an accessor for the
Rails::BacktraceCleaner instance used by the framework to cut down
on backtrace noise and config/initializers/backtrace_silencers.rb to
add your own (or turn them all off) [David Heinemeier Hansson]
* Switch from Test::Unit::TestCase to ActiveSupport::TestCase. [Jeremy Kemper]
* Added config.i18n settings gatherer to config/environment,
auto-loading of all locales in config/locales/*.rb,yml, and
config/locales/en.yml as a sample locale [David Heinemeier Hansson]
* BACKWARDS INCOMPATIBLE: Renamed application.rb to
application_controller.rb and removed all the special casing that
was in place to support the former. You must do this rename in your
own application when you upgrade to this version [David Heinemeier
Hansson]
* Fixed plugin generator so that generated unit tests would subclass
ActiveSupport::TestCase, also introduced a helper script to reduce
the needed require statements #1137 [Mathias Meyer]
* Update Prototype to 1.6.0.3 [sam]
* Fixed that sqlite would report "db/development.sqlite3 already
exists" whether true or not on db:create #614 [Antonio Cangiano]
* Added config.threadsafe! to toggle allow concurrency settings and
disable the dependency loader [Josh Peek]
* Turn cache_classes on by default [Josh Peek]
* Added configurable eager load paths. Defaults to app/models,
app/controllers, and app/helpers [Josh Peek]
* Introduce simple internationalization support. [Ruby i18n team]
* Make script/plugin install <plugin> -r <revision> option work with
git based plugins. #257. [Tim Pope Jakub Kuźma]. Example:
* Added Rails.initialized? flag [Josh Peek]
* Make rake test:uncommitted work with Git. [Tim Pope]
* Added Thin support to script/server. #488 [Bob Klosinski]
* Fix script/about in production mode. #370 [Cheah Chu Yeow, Xavier
Noria, David Krmpotic]
* Add the gem load paths before the framework is loaded, so certain
gems like RedCloth and BlueCloth can be frozen.
* Fix discrepancies with loading rails/init.rb from gems.
* Plugins check for the gem init path (rails/init.rb) before the
standard plugin init path (init.rb) [Jacek Becela]
* Changed all generated tests to use the test/do declaration style
[David Heinemeier Hansson]
* Wrapped Rails.env in StringInquirer so you can do
Rails.env.development? [David Heinemeier Hansson]
* Fixed that RailsInfoController wasn't considering all requests local
in development mode (Edgard Castro) [#310 state:resolved]
Changes:
* Set config.active_record.timestamped_migrations = false to have
migrations with numeric prefix instead of UTC
timestamp. #446.
* Fixed that create database statements would always include "DEFAULT
NULL" [#334]
* change_column_default preserves the not-null constraint. #617
* Add :tokenizer option to validates_length_of to specify how to split
up the attribute string. #507. Example :
# Ensure essay contains at least 100 words.
validates_length_of :essay, :minimum => 100, :too_short => "Your
essay must be at least %d words."), :tokenizer => lambda {|str|
str.scan(/\w+/) }
* Always treat integer :limit as byte length. #420
* Partial updates don't update lock_version if nothing changed. #426
* Fix column collision with named_scope and :joins. #46
* db:migrate:down and :up update schema_migrations. #369
* PostgreSQL: support :conditions => [':foo::integer', { :foo => 1 }]
without treating the ::integer typecast as a bind variable.
* MySQL: rename_column preserves column defaults. #466
* Add :from option to calculations. #397
* Add :validate option to associations to enable/disable the automatic
validation of associated models. Resolves#301.
* PostgreSQL: use 'INSERT ... RETURNING id' for 8.2 and later.
* Added SQL escaping for :limit and :offset in MySQL
Changes:
* Depend on Action Pack 1.4.4
* Fix #count on a has_many :through association so that it recognizes the
:uniq option. Closes#8801 [lifofifo]
* Don't clobber includes passed to has_many.count [danger]
* Make sure has_many uses :include when counting [danger]
* Save associated records only if the association is already loaded. #8713
* Changing the :default Date format doesn't break date quoting. #6312
* Allow nil serialized attributes with a set class constraint. #7293
* belongs_to assignment creates a new proxy rather than modifying its target
in-place. #8412 [mmangino@elevatedrails.com]
* Fix column type detection while loading fixtures. Closes#7987 [roderickvd]
* Document deep eager includes. #6267 [Josh Susser, Dan Manges]
* Oracle: extract column length for CHAR also. #7866 [ymendel]
* Small additions and fixes for ActiveRecord documentation. Closes#7342
* SQLite: binary escaping works with $KCODE='u'. #7862 [tsuka]
* Improved cloning performance by relying less on exception raising #8159
Changes:
* Pass a range in :conditions to use the SQL BETWEEN operator. #6974
[dcmanges] Student.find(:all, :conditions => { :grade => 9..12 })
* Don't create instance writer methods for class attributes. [Rick]
* When dealing with SQLite3, use the table_info pragma helper, so that the
bindings can do some translation for when sqlite3 breaks incompatibly
between point releases. [Jamis Buck]
* SQLServer: don't choke on strings containing 'null'. #7083 [Jakob S]
* Consistently use LOWER() for uniqueness validations (rather than mixing with
UPPER()) so the database can always use a functional index on the lowercased
column. #6495 [Si]
* MySQL: SET SQL_AUTO_IS_NULL=0 so 'where id is null' doesn't select the last
inserted id. #6778 [Jonathan Viney, timc]
* Fixtures use the table name and connection from set_fixture_class. #7330
[Anthony Eden]
* SQLServer: quote table name in indexes query. #2928 [keithm@infused.org]
Active Record connects business objects and database tables to create
a persistable domain model where logic and data is presented in one
wrapping. It is an implementation of the object-relational mapping
(ORM) pattern by the same name as described by Martin Fowler:
"An object that wraps a row in a database table or view, encapsulates
the database access, and adds domain logic on that data."
Active Records main contribution to the pattern is to relieve the
original of two stunting problems: lack of associations and
inheritance. By adding a simple domain language-like set of macros to
describe the former and integrating the Single Table Inheritance
pattern for the latter, Active Record narrows the gap of functionality
between the data mapper and active record approach.