Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 1713 lines (935 sloc) 84.387 kb
6764b7b Santiago Pastorino Add missing CHANGELOG entries
spastorino authored
1 ## Rails 3.2.8 ##
2
3 * No changes.
4
5 ## Rails 3.2.7 (Jul 26, 2012) ##
125dfdf Aaron Patterson updating changelogs
tenderlove authored
6
7 * Hash#fetch(fetch) is not the same as doing hash[key]
8 * adds a missing require [fixes #6896]
9 * make sure the inflection rules are loaded when cherry-picking active_support/core_ext/string/inflections.rb [fixes #6884]
10 * Merge pull request #6857 from rsutphin/as_core_ext_time_missing_require
11 * bump AS deprecation_horizon to 4.0
12
6764b7b Santiago Pastorino Add missing CHANGELOG entries
spastorino authored
13 ## Rails 3.2.6 (Jun 12, 2012) ##
301974a Aaron Patterson updating changelogs
tenderlove authored
14
15 * No changes.
16
b13d89e Rafael Mendonça França Add release date of 3.2.5 on the CHANGELOG
rafaelfranca authored
17 ## Rails 3.2.5 (Jun 1, 2012) ##
18
19 * ActiveSupport::JSON::Variable is deprecated. Define your own #as_json and #encode_json methods
20 for custom JSON string literals. *Erich Menge*
21
22
d3e5d1c Aaron Patterson updating changelogs
tenderlove authored
23 ## Rails 3.2.4 (May 31, 2012) ##
9b777d5 Mark J. Titorenko Add CHANGELOG section for unreleased Rails 3.2.4; document addition of #...
mjtko authored
24
25 * Added #beginning_of_hour and #end_of_hour to Time and DateTime core
26 extensions. *Mark J. Titorenko*
27
28
3005f58 Rafael Mendonça França Add release data to Rails 3.2.3
rafaelfranca authored
29 ## Rails 3.2.3 (March 30, 2012) ##
263d842 Vijay Dev update changelogs for gems without changes too [ci skip]
vijaydev authored
30
31 * No changes.
32
705a70f Mark J. Titorenko Bring activesupport CHANGELOG up-to-date/consistent with master.
mjtko authored
33
263d842 Vijay Dev update changelogs for gems without changes too [ci skip]
vijaydev authored
34 ## Rails 3.2.2 (March 1, 2012) ##
35
36 * No changes.
37
705a70f Mark J. Titorenko Bring activesupport CHANGELOG up-to-date/consistent with master.
mjtko authored
38
97e8d1d Xavier Noria CHANGELOG revision for v3.2.1
fxn authored
39 ## Rails 3.2.1 (January 26, 2012) ##
40
41 * Documentation fixes and improvements.
42
43 * Update time zone offset information. *Ravil Bayramgalin*
44
45 * The deprecated `ActiveSupport::Base64.decode64` calls `::Base64.decode64`
46 now. *Jonathan Viney*
47
48 * Fixes uninitialized constant `ActiveSupport::TaggedLogging::ERROR`. *kennyj*
49
50
f36dcaf David Heinemeier Hansson Preparing for 3.2.0 release
dhh authored
51 ## Rails 3.2.0 (January 20, 2012) ##
281272a Jon Leighton Convert CHANGELOGs to Markdown format.
jonleighton authored
52
337ac05 Sergey Nartimov add CHANGELOG entry for AS::Base64 deprecation
lest authored
53 * ActiveSupport::Base64 is deprecated in favor of ::Base64. *Sergey Nartimov*
54
55 * Module#synchronize is deprecated with no replacement. Please use `monitor`
56 from ruby's standard library.
d9c2882 Aaron Patterson Module#synchronize is deprecated with no replacement. Please use `monit...
tenderlove authored
57
a5b362d Xavier Noria some tweaks to PR#3547. [Closes #3547]
fxn authored
58 * (Date|DateTime|Time)#beginning_of_week accept an optional argument to
59 be able to set the day at which weeks are assumed to start.
60
71e84a3 José Valim Deprecated ActiveSupport::MessageEncryptor#encrypt and decrypt.
josevalim authored
61 * Deprecated ActiveSupport::MessageEncryptor#encrypt and decrypt. *José Valim*
62
d287e90 Xavier Noria implements AS::Notifications.subscribed, which provides subscriptions to...
fxn authored
63 * ActiveSupport::Notifications.subscribed provides subscriptions to events while a block runs. *fxn*
64
281272a Jon Leighton Convert CHANGELOGs to Markdown format.
jonleighton authored
65 * Module#qualified_const_(defined?|get|set) are analogous to the corresponding methods
66 in the standard API, but accept qualified constant names. *fxn*
67
68 * Added inflection #deconstantize which complements #demodulize. This inflection
69 removes the righmost segment in a qualified constant name. *fxn*
70
71 * Added ActiveSupport:TaggedLogging that can wrap any standard Logger class to provide tagging capabilities *DHH*
72
73 Logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
74 Logger.tagged("BCX") { Logger.info "Stuff" } # Logs "[BCX] Stuff"
75 Logger.tagged("BCX", "Jason") { Logger.info "Stuff" } # Logs "[BCX] [Jason] Stuff"
76 Logger.tagged("BCX") { Logger.tagged("Jason") { Logger.info "Stuff" } } # Logs "[BCX] [Jason] Stuff"
77
78 * Added safe_constantize that constantizes a string but returns nil instead of an exception if the constant (or part of it) does not exist *Ryan Oblak*
79
80 * ActiveSupport::OrderedHash is now marked as extractable when using Array#extract_options! *Prem Sichanugrist*
81
82 * Added Array#prepend as an alias for Array#unshift and Array#append as an alias for Array#<< *DHH*
83
84 * The definition of blank string for Ruby 1.9 has been extended to Unicode whitespace.
85 Also, in 1.8 the ideographic space U+3000 is considered to be whitespace. *Akira Matsuda, Damien Mathieu*
86
87 * The inflector understands acronyms. *dlee*
88
89 * Deprecated ActiveSupport::Memoizable in favor of Ruby memoization pattern *José Valim*
90
91 * Added Time#all_day/week/quarter/year as a way of generating ranges (example: Event.where(created_at: Time.now.all_week)) *DHH*
92
93 * Added instance_accessor: false as an option to Class#cattr_accessor and friends *DHH*
94
95 * Removed ActiveSupport::SecureRandom in favor of SecureRandom from the standard library *Jon Leighton*
96
97 * ActiveSupport::OrderedHash now has different behavior for #each and
98 \#each_pair when given a block accepting its parameters with a splat. *Andrew Radev*
99
04ef93d Aaron Patterson * ActiveSupport::BufferedLogger#silence is deprecated. If you want to...
tenderlove authored
100 * ActiveSupport::BufferedLogger#silence is deprecated. If you want to squelch
101 logs for a certain block, change the log level for that block.
102
103 * ActiveSupport::BufferedLogger#open_log is deprecated. This method should
104 not have been public in the first place.
105
106 * ActiveSupport::BufferedLogger's behavior of automatically creating the
107 directory for your log file is deprecated. Please make sure to create the
108 directory for your log file before instantiating.
109
110 * ActiveSupport::BufferedLogger#auto_flushing is deprecated. Either set the
111 sync level on the underlying file handle like this:
112
113 f = File.open('foo.log', 'w')
114 f.sync = true
115 ActiveSupport::BufferedLogger.new f
116
117 Or tune your filesystem. The FS cache is now what controls flushing.
118
119 * ActiveSupport::BufferedLogger#flush is deprecated. Set sync on your
120 filehandle, or tune your filesystem.
121
db743ff Rafael Mendonça França Fix my name in the CHANGELOG to follow the convention
rafaelfranca authored
122
705a70f Mark J. Titorenko Bring activesupport CHANGELOG up-to-date/consistent with master.
mjtko authored
123 ## Rails 3.1.4 (March 1, 2012) ##
124
125 * No changes
126
127
128 ## Rails 3.1.3 (November 20, 2011) ##
129
130 * No changes
131
132
133 ## Rails 3.1.2 (November 18, 2011) ##
134
135 * No changes
136
137
138 ## Rails 3.1.1 (October 7, 2011) ##
139
140 * ruby193: String#prepend is also unsafe *Akira Matsuda*
141
142 * Fix obviously breakage of Time.=== for Time subclasses *jeremyevans*
143
144 * Added fix so that file store does not raise an exception when cache dir does
145 not exist yet. This can happen if a delete_matched is called before anything
146 is saved in the cache. *Philippe Huibonhoa*
147
148 * Fixed performance issue where TimeZone lookups would require tzinfo each time *Tim Lucas*
149
150 * ActiveSupport::OrderedHash is now marked as extractable when using Array#extract_options! *Prem Sichanugrist*
151
152
281272a Jon Leighton Convert CHANGELOGs to Markdown format.
jonleighton authored
153 ## Rails 3.1.0 (August 30, 2011) ##
154
155 * ActiveSupport::Dependencies#load and ActiveSupport::Dependencies#require now
156 return the value from `super` *Aaron Patterson*
157
158 * Fixed ActiveSupport::Gzip to work properly in Ruby 1.8 *Guillermo Iguaran*
159
160 * Kernel.require_library_or_gem was deprecated and will be removed in Rails 3.2.0 *Josh Kalderimis*
161
162 * ActiveSupport::Duration#duplicable? was fixed for Ruby 1.8 *thedarkone*
163
164 * ActiveSupport::BufferedLogger set log encoding to BINARY, but still use text
165 mode to output portable newlines. *fxn*
166
167 * ActiveSupport::Dependencies now raises NameError if it finds an existing constant in load_missing_constant. This better reflects the nature of the error which is usually caused by calling constantize on a nested constant. *Andrew White*
168
169 * Deprecated ActiveSupport::SecureRandom in favour of SecureRandom from the standard library *Jon Leighton*
170
171 * New reporting method Kernel#quietly. *fxn*
172
173 * Add String#inquiry as a convenience method for turning a string into a StringInquirer object *DHH*
174
175 * Add Object#in? to test if an object is included in another object *Prem Sichanugrist, Brian Morearty, John Reitano*
176
177 * LocalCache strategy is now a real middleware class, not an anonymous class
178 posing for pictures.
179
180 * ActiveSupport::Dependencies::ClassCache class has been introduced for
181 holding references to reloadable classes.
182
183 * ActiveSupport::Dependencies::Reference has been refactored to take direct
184 advantage of the new ClassCache.
185
186 * Backports Range#cover? as an alias for Range#include? in Ruby 1.8 *Diego Carrion, fxn*
187
188 * Added weeks_ago and prev_week to Date/DateTime/Time. *Rob Zolkos, fxn*
189
190 * Added before_remove_const callback to ActiveSupport::Dependencies.remove_unloadable_constants! *Andrew White*
191
192 * JSON decoding now uses the multi_json gem which also vendors a json engine called OkJson. The yaml backend has been removed in favor of OkJson as a default engine for 1.8.x, while the built in 1.9.x json implementation will be used by default. *Josh Kalderimis*
193
194
705a70f Mark J. Titorenko Bring activesupport CHANGELOG up-to-date/consistent with master.
mjtko authored
195 ## Rails 3.0.12 (March 1, 2012) ##
196
197 * No changes.
198
199
200 ## Rails 3.0.11 (November 18, 2011) ##
201
202 * No changes.
203
204
205 ## Rails 3.0.10 (August 16, 2011) ##
206
207 * Delayed backtrace scrubbing in `load_missing_constant` until we actually
208 raise the exception
209
210
211 ## Rails 3.0.9 (June 16, 2011) ##
212
213 * No changes.
214
215
216 ## Rails 3.0.8 (June 7, 2011) ##
217
218 * No changes.
219
220
281272a Jon Leighton Convert CHANGELOGs to Markdown format.
jonleighton authored
221 ## Rails 3.0.7 (April 18, 2011) ##
222
223 * Hash.from_xml no longer loses attributes on tags containing only whitespace *André Arko*
224
225
705a70f Mark J. Titorenko Bring activesupport CHANGELOG up-to-date/consistent with master.
mjtko authored
226 ## Rails 3.0.6 (April 5, 2011)
281272a Jon Leighton Convert CHANGELOGs to Markdown format.
jonleighton authored
227
228 * No changes.
229
230
231 ## Rails 3.0.5 (February 26, 2011) ##
232
233 * No changes.
234
235
236 ## Rails 3.0.4 (February 8, 2011) ##
237
238 * No changes.
239
240
241 ## Rails 3.0.3 (November 16, 2010) ##
242
243 * No changes.
244
245
246 ## Rails 3.0.2 (November 15, 2010) ##
247
248 * Added before_remove_const callback to ActiveSupport::Dependencies.remove_unloadable_constants! *Andrew White*
249
250
251 ## Rails 3.0.1 (October 15, 2010) ##
252
253 * No Changes, just a version bump.
254
255
256 ## Rails 3.0.0 (August 29, 2010) ##
257
258 * Implemented String#strip_heredoc. *fxn*
259
260 * Pluggable cache stores: setting config.cache_store = "custom_store" will require 'active_support/cache/custom_store' and look for the CustomStore constant. #5486 *Mike Perham*
261
262 * Removed Object#returning, Object#tap should be used instead. *Santiago Pastorino*
263
264 * Deprecation behavior is no longer hardcoded to the name of the environment.
265 Instead, it is set via config.active_support.deprecation and can be one
266 of :log, :stderr or :notify. :notify is a new style that sends the warning
267 via ActiveSupport::Notifications, and is the new default for production
268 *Yehuda Katz*
269
270 * Renamed ActiveSupport::Dependecies.load_(once_)paths to autoload_(once_)paths. *fxn*
271
272 * Added ActiveSupport::FileUpdateChecker to execute a block only if a set of files changed, used by Router and I18n locale files. *José Valim*
273
274 * Added ActiveSupport::DescendantsTracker to track descendants with support to constants reloading. *José Valim*
275
276 * ActiveSupport::OrderedHash#merge and #merge! accept a block. #4838 *Paul Mucur, fxn*
277
278 * Date#since, #ago, #beginning_of_day, #end_of_day, and #xmlschema honor now the user time zone if set. *Geoff Buesing*
279
280 * Extracted String#truncate from TextHelper#truncate *DHH*
281
282 * Ruby 1.9: support UTF-8 case folding. #4595 *Norman Clarke*
283
284 * Removes Array#rand and backports Array#sample from Ruby 1.9, thanks to Marc-Andre Lafortune. *fxn*
285
286 * Ruby 1.9: Renames last_(month|year) to prev_(month|year) in Date and Time. *fxn*
287
288 * Aliases Date#sunday to Date#end_of_week. *fxn*
289
290 * Backports Date#>> from 1.9 so that calculations do the right thing around the calendar reform. *fxn*
291
292 * Date#to_time handles properly years in the range 0..138. *fxn*
293
294 * Deprecate {{}} as interpolation syntax for I18n in favor of %{} *José Valim*
295
296 * Array#to_xml is more powerful and able to handle the same types as Hash#to_xml #4490 *Neeraj Singh*
297
298 * Harmonize the caching API and refactor the backends. #4452 *Brian Durand*
299 All caches:
300 * Add default options to initializer that will be sent to all read, write, fetch, exist?, increment, and decrement
301 * Add support for the :expires_in option to fetch and write for all caches. Cache entries are stored with the create timestamp and a ttl so that expiration can be handled independently of the implementation.
302 * Add support for a :namespace option. This can be used to set a global prefix for cache entries.
303 * Deprecate expand_cache_key on ActiveSupport::Cache and move it to ActionController::Caching and ActionDispatch::Http::Cache since the logic in the method used some Rails specific environment variables and was only used by ActionPack classes. Not very DRY but there didn't seem to be a good shared spot and ActiveSupport really shouldn't be Rails specific.
304 * Add support for :race_condition_ttl to fetch. This setting can prevent race conditions on fetch calls where several processes try to regenerate a recently expired entry at once.
305 * Add support for :compress option to fetch and write which will compress any data over a configurable threshold.
306 * Nil values can now be stored in the cache and are distinct from cache misses for fetch.
307 * Easier API to create new implementations. Just need to implement the methods read_entry, write_entry, and delete_entry instead of overwriting existing methods.
308 * Since all cache implementations support storing objects, update the docs to state that ActiveCache::Cache::Store implementations should store objects. Keys, however, must be strings since some implementations require that.
309 * Increase test coverage.
310 * Document methods which are provided as convenience but which may not be universally available.
311
312 MemoryStore:
313 * MemoryStore can now safely be used as the cache for single server sites.
314 * Make thread safe so that the default cache implementation used by Rails is thread safe. The overhead is minimal and it is still the fastest store available.
315 * Provide :size initialization option indicating the maximum size of the cache in memory (defaults to 32Mb).
316 * Add prune logic that removes the least recently used cache entries to keep the cache size from exceeding the max.
317 * Deprecated SynchronizedMemoryStore since it isn't needed anymore.
318
319 FileStore:
320 * Escape key values so they will work as file names on all file systems, be consistent, and case sensitive
321 * Use a hash algorithm to segment the cache into sub directories so that a large cache doesn't exceed file system limits.
322 * FileStore can be slow so implement the LocalCache strategy to cache reads for the duration of a request.
323 * Add cleanup method to keep the disk from filling up with expired entries.
324 * Fix increment and decrement to use file system locks so they are consistent between processes.
325
326 MemCacheStore:
327 * Support all keys. Previously keys with spaces in them would fail
328 * Deprecate CompressedMemCacheStore since it isn't needed anymore (use :compress => true)
329
330 * JSON: encode objects that don't have a native JSON representation using to_hash, if available, instead of instance_values (the old fallback) or to_s (other encoders' default). Encode BigDecimal and Regexp encode as strings to conform with other encoders. Try to transcode non-UTF-8 strings. *Jeremy Kemper*
331
332 * HashWithIndifferentAccess: remove inherited symbolize_keys! since its keys are always strings. *Santiago Pastorino*
333
334 * Improve transliteration quality. #4374 *Norman Clarke*
335
336 * Speed up and add Ruby 1.9 support for ActiveSupport::Multibyte::Chars#tidy_bytes. #4350 *Norman Clarke*
337
338 * Reduced load time by deferring configuration of classes using
339 ActiveSupport::on_load(:component_name) *YK*
340
341 * Rename #metaclass to #singleton_class now that ruby-core has decided *JK*
342
343 * New assertions assert_blank and assert_present. #4299 *Juanjo Bazan*
344
345 * Use Object#singleton_class instead of #metaclass. Prefer Ruby's choice. *Jeremy Kemper*
346
347 * JSON backend for YAJL. Preferred if available. #2666 *Brian Lopez*
348
349 * Introduce class_attribute to declare inheritable class attributes. Writing an attribute on a subclass behaves just like overriding the superclass reader method. Unifies and replaces most usage of cattr_accessor, class_inheritable_attribute, superclass_delegating_attribute, and extlib_inheritable_attribute. *Jeremy Kemper, Yehuda Katz*
350
351 * Time#- with a DateTime argument behaves the same as with a Time argument, i.e. returns the difference between self and arg as a Float #3476 *Geoff Buesing*
352
353 * YAML serialization for OrderedHash. #3608 *Gregor Schmidt*
354
355 * Update bundled TZInfo to v0.3.16 *Geoff Buesing*
356
357 * Georgetown TimeZone is now mapped to "America/Guyana" instead of "America/Argentina/San_Juan" #1821 *Geoff Buesing, Reuben Sivan*
358
359 * Changed the default ActiveSupport.use_standard_json_time_format from false to true and
360 ActiveSupport.escape_html_entities_in_json from true to false to match previously announced Rails 3 defaults *DHH*
361
362 * Added Object#presence that returns the object if it's #present? otherwise returns nil *DHH/Colin Kelley*
363
364 * Add Enumerable#exclude? to bring parity to Enumerable#include? and avoid if !x.include?/else calls *DHH*
365
366 * Update Edinburgh TimeZone to use "Europe/London" instead of "Europe/Dublin" #3310 *Phil Ross*
367
368 * Update bundled TZInfo to v0.3.15 *Geoff Buesing*
369
370 * JSON: +Object#to_json+ calls +as_json+ to coerce itself into something natively encodable like +Hash+, +Integer+, or +String+. Override +as_json+ instead of +to_json+ so you're JSON library agnostic. *Jeremy Kemper*
371
372 * String #to_time and #to_datetime: handle fractional seconds #864 *Jason Frey*
373
374 * Update bundled TZInfo to v0.3.13 *Geoff Buesing*
375
376 * Allow MemCacheStore to be initialized with a MemCache-like object instead of addresses and options *Bryan Helmkamp*
377
378 * Change spelling of Kyev timezone to Kyiv #2613 *Alexander Dymo*
379
380 * Add ActiveSupport.parse_json_times to disable time parsing in JSON backends that don't support it or don't need it. *rick*
381
382 * Add pluggable JSON backends with support for the JSON gem. *rick*
383 Example: ActiveSupport::JSON.backend = "JSONGem"
384
385 All internal Rails JSON encoding is now handled by ActiveSupport::JSON.encode(). Use of #to_json is not recommended, as it may clash with other libraries that overwrite it. However, you can recover Rails specific functionality
386 if you really want to use #to_json.
387
388 gem 'json'
389 ActiveSupport::JSON.backend = "JSONGem"
390
391 class ActiveRecord::Base
392 alias to_json rails_to_json
393 end
394
395 * require 'active_support' no longer orders the whole menu of core extensions. Ask for just what you need: e.g. require 'active_support/core/time' to use timezones, durations, and stdlib date/time extensions. *Jeremy Kemper*
396
397 * Removed rarely-used DRb cache store. *Jeremy Kemper*
398
399 * TimeWithZone.name returns 'Time', to further thwart type checking *Geoff Buesing*
400
401 * Time.local instances: Adding 24.hours across the DST boundary adds 24 hours instead of one day #2066 *Michael Curtis*
402
403
404 ## 2.3.2 Final (March 15, 2009) ##
405
406 * XmlMini supports LibXML and Nokogiri backends. #2084, #2190 *Bart ten Brinke, Aaron Patterson*
407 Example: XmlMini.backend = 'Nokogiri'
408
409 * Vendorize i18n 0.1.3 gem (fixes issues with incompatible character encodings in Ruby 1.9) #2038 *Akira Matsuda*
410
411 * Update bundled memcache-client from 1.5.0.5 to 1.6.4.99. See http://www.mikeperham.com/2009/02/15/memcache-client-performance/ *Mike Perham*
412
413 * Ruby 1.9.1p0 fix: URI.unescape can decode multibyte chars. #2033 *MOROHASHI Kyosuke*
414
415 * Time#to_s(:rfc822) uses #formatted_offset instead of unreliable and non-standard %z directive #1899 *Zachary Zolton*
416
417 * Make TimeWithZone#to_formatted_s an alias to TimeWithZone#to_s #1796 *Levin Alexander*
418
419 * Introduce Array.wrap(foo) to wrap the argument in an array unless it's already an array. Wraps nil as an empty array. Use instead of Array(foo) and foo.to_a since they treat String as Enumerable. *Jeremy Kemper*
420
421 * TimeWithZone#xmlschema accepts optional fraction_digits argument [#1725 state:resolved] *Nicholas Dainty*
422
423 * Object#tap shim for Ruby < 1.8.7. Similar to Object#returning, tap yields self then returns self. *Jeremy Kemper*
424 array.select { ... }.tap(&:inspect).map { ... }
425
426 * TimeWithZone#- gives correct result with wrapped DateTime, and with DateTime argument *Geoff Buesing*
427
428 * Updated i18n gem to version 0.1.1 #1635 *Yaroslav Markin*
429
430 * Add :allow_nil option to delegate. #1127 *Sergio Gil*
431
432 * Add Benchmark.ms convenience method to benchmark realtime in milliseconds. *Jeremy Kemper*
433
434 * Updated included memcache-client to the 1.5.0.5 version which includes fixes from fiveruns and 37signals to deal with failover and timeouts #1535 *Joshua Sierles*
435
436 * Multibyte: add multibyte-safe Chars#ord rather than falling back to String#ord. #1483 *Jason Cheow*
437
438 * I18n support for Array#to_sentence. Introduces support.array.words_connector, .two_words_connector, and .last_word_connector translation keys. #1397 *Akira Matsuda*
439
440 * Added ActiveSupport::OrderedHash#each_key and ActiveSupport::OrderedHash#each_value #1410 *Christoffer Sawicki*
441
442 * Added ActiveSupport::MessageVerifier and MessageEncryptor to aid users who need to store signed and/or encrypted messages. *Michael Koziarski*
443
444 * Added ActiveSupport::BacktraceCleaner to cut down on backtrace noise according to filters and silencers *David Heinemeier Hansson*
445
446 * Added Object#try. ( Taken from http://ozmm.org/posts/try.html ) *Chris Wanstrath*
447
448 * Added Enumerable#none? to check that none of the elements match the block #1408 *Damian Janowski*
449
450 * TimeZone offset tests: use current_period, to ensure TimeZone#utc_offset is up-to-date *Geoff Buesing*
451
452 * Update bundled TZInfo to 0.3.12 *Geoff Buesing*
453
454 * Added lambda merging to OptionMerger (especially useful with named_scope and with_options) #726 *Paweł Kondzior*
455
456
457 ## 2.2.1 RC2 (November 14th, 2008) ##
458
459 * Increment the version of our altered memcache-client to prevent confusion caused when the 1.5.0 gem is installed.
460
461 * Fixed the option merging in Array#to_xml #1126 *Rudolf Gavlas*
462
463 * Make I18n::Backend::Simple reload its translations in development mode *David Heinemeier Hansson/Sven Fuchs*
464
465
466 ## 2.2.0 RC1 (October 24th, 2008) ##
467
468 * TimeWithZone#freeze: preload instance variables so that we can actually freeze *Geoff Buesing*
469
470 * Fix Brasilia timezone #1180 *Marcus Derencius, Kane*
471
472 * Time#advance recognizes fractional days and weeks. Deprecate Durations of fractional months and years #970 *Tom Lea*
473
474 * Add ActiveSupport::Rescuable module abstracting ActionController::Base rescue_from features. *Norbert Crombach, Pratik Naik*
475
476 * Switch from String#chars to String#mb_chars for the unicode proxy. *Manfred Stienstra*
477
478 This helps with 1.8.7 compatibility and also improves performance for some operations by reducing indirection.
479
480 * TimeWithZone #wday, #yday and #to_date avoid trip through #method_missing *Geoff Buesing*
481
482 * Added Time, Date, DateTime and TimeWithZone #past?, #future? and #today? #720 *Clemens Kofler, Geoff Buesing*
483
484 * Fixed Sri Jayawardenepura time zone to map to Asia/Colombo *Jamis Buck*
485
486 * Added Inflector#parameterize for easy slug generation ("Donald E. Knuth".parameterize => "donald-e-knuth") #713 *Matt Darby*
487
488 * Changed cache benchmarking to be reported in milliseconds *David Heinemeier Hansson*
489
490 * Fix Ruby's Time marshaling bug in pre-1.9 versions of Ruby: utc instances are now correctly unmarshaled with a utc zone instead of the system local zone [#900 state:resolved] *Luca Guidi, Geoff Buesing*
491
492 * Add Array#in_groups which splits or iterates over the array in specified number of groups. #579. [Adrian Mugnolo] Example:
493
494 a = (1..10).to_a
495 a.in_groups(3) # => [[1, 2, 3, 4], [5, 6, 7, nil], [8, 9, 10, nil]]
496 a.in_groups(3, false) # => [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
497
498 * Fix TimeWithZone unmarshaling: coerce unmarshaled Time instances to utc, because Ruby's marshaling of Time instances doesn't respect the zone *Geoff Buesing*
499
500 * Added Memoizable mixin for caching simple lazy loaded attributes *Josh Peek*
501
502 * Move the test related core_ext stuff out of core_ext so it's only loaded by the test helpers. *Michael Koziarski*
503
504 * Add Inflection rules for String#humanize. #535 *Dan Manges*
505
506 ActiveSupport::Inflector.inflections do |inflect|
507 inflect.human(/_cnt$/i, '\1_count')
508 end
509
510 'jargon_cnt'.humanize # => 'Jargon count'
511
512 * TimeWithZone: when crossing DST boundary, treat Durations of days, months or years as variable-length, and all other values as absolute length. A time + 24.hours will advance exactly 24 hours, but a time + 1.day will advance 23-25 hours, depending on the day. Ensure consistent behavior across all advancing methods *Geoff Buesing*
513
514 * Added TimeZone #=~, to support matching zones by regex in time_zone_select. #195 *Ernie Miller*
515
516 * Added Array#second through Array#fifth as aliases for Array#[1] through Array#[4] + Array#forty_two as alias for Array[41] *David Heinemeier Hansson*
517
518 * Added test/do declaration style testing to ActiveSupport::TestCase *DHH via Jay Fields*
519
520 * Added Object#present? which is equivalent to !Object#blank? *David Heinemeier Hansson*
521
522 * Added Enumberable#many? to encapsulate collection.size > 1 *David Heinemeier Hansson/Damian Janowski*
523
524 * Add more standard Hash methods to ActiveSupport::OrderedHash *Steve Purcell*
525
526 * Namespace Inflector, Dependencies, OrderedOptions, and TimeZone under ActiveSupport *Josh Peek*
527
528 * Added StringInquirer for doing things like StringInquirer.new("production").production? # => true and StringInquirer.new("production").development? # => false *David Heinemeier Hansson*
529
530 * Fixed Date#end_of_quarter to not blow up on May 31st [#289 state:resolved] (Danger)
531
532
533 ## 2.1.0 (May 31st, 2008) ##
534
535 * TimeZone#to_s shows offset as GMT instead of UTC, because GMT will be more familiar to end users (see time zone selects used by Windows OS, google.com and yahoo.com.) Reverts [8370] *Geoff Buesing*
536
537 * Hash.from_xml: datetime xml types overflow to Ruby DateTime class when out of range of Time. Adding tests for utc offsets *Geoff Buesing*
538
539 * TimeWithZone #+ and #- : ensure overflow to DateTime with Numeric arg *Geoff Buesing*
540
541 * Time#to_json: don't convert to utc before encoding. References #175 *Geoff Buesing*
542
543 * Remove unused JSON::RESERVED_WORDS, JSON.valid_identifier? and JSON.reserved_word? methods. Resolves #164. *Cheah Chu Yeow*
544
545 * Adding Date.current, which returns Time.zone.today if config.time_zone is set; otherwise returns Date.today *Geoff Buesing*
546
547 * TimeWithZone: date part getter methods (#year #mon #day etc) are defined on class; no longer relying on method_missing *Geoff Buesing*
548
549 * Time.zone.parse return nil for strings with no date information *Geoff Buesing*
550
551 * Time.zone.parse respects offset information in string. Resolves #105. *Scott Fleckenstein, Geoff Buesing*
552
553 * Added Ruby 1.8 implementation of Process.daemon
554
555 * Duration #since and #ago with no argument (e.g., 5.days.ago) return TimeWithZone when config.time_zone is set. Introducing Time.current, which returns Time.zone.now if config.time_zone is set, otherwise just returns Time.now *Geoff Buesing*
556
557 * Time#since behaves correctly when passed a Duration. Closes #11527 *kemiller*
558
559 * Add #getutc alias for DateTime#utc *Geoff Buesing*
560
561 * Refactor TimeWithZone: don't send #since, #ago, #+, #-, #advance through method_missing *Geoff Buesing*
562
563 * TimeWithZone respects config.active_support.use_standard_json_time_format *Geoff Buesing*
564
565 * Add config.active_support.escape_html_entities_in_json to allow disabling of html entity escaping. *Rick Olson*
566
567 * Improve documentation. *Xavier Noria*
568
569 * Modified ActiveSupport::Callbacks::Callback#call to accept multiple arguments.
570
571 * Time #yesterday and #tomorrow behave correctly crossing DST boundary. Closes #7399 *sblackstone*
572
573 * TimeWithZone: Adding tests for dst and leap day edge cases when advancing time *Geoff Buesing*
574
575 * TimeWithZone#method_missing: send to utc to advance with dst correctness, otherwise send to time. Adding tests for time calculations methods *Geoff Buesing*
576
577 * Add config.active_support.use_standard_json_time_format setting so that Times and Dates export to ISO 8601 dates. *Rick Olson*
578
579 * TZInfo: Removing unneeded TimezoneProxy class *Geoff Buesing*
580
581 * TZInfo: Removing unneeded TimezoneIndexDefinition, since we're not including Indexes::Timezones *Geoff Buesing*
582
583 * Removing unnecessary uses_tzinfo helper from tests, given that TZInfo is now bundled *Geoff Buesing*
584
585 * Bundling abbreviated version of TZInfo gem 0.3.8: only the classes and zone definitions required to support Rails time zone features are included. If a recent version of the full TZInfo gem is installed, this will take precedence over the bundled version *Geoff Buesing*
586
587 * TimeWithZone#marshal_load does zone lookup via Time.get_zone, so that tzinfo/Olson identifiers are handled *Geoff Buesing*
588
589 * Time.zone= accepts TZInfo::Timezone instances and Olson identifiers; wraps result in TimeZone instance *Geoff Buesing*
590
591 * TimeWithZone time conversions don't need to be wrapped in TimeOrDateTime, because TZInfo does this internally *Geoff Buesing*
592
593 * TimeWithZone#usec returns 0 instead of error when DateTime is wrapped *Geoff Buesing*
594
595 * Improve documentation. *Ryan Bigg, Jan De Poorter, Cheah Chu Yeow, Xavier Shay, Jack Danger Canty, Emilio Tagua, Xavier Noria, Sunny Ripert*
596
597 * Ensure that TimeWithZone#to_yaml works when passed a YAML::Emitter. *Rick Olson*
598
599 * Ensure correct TimeWithZone#to_date *Geoff Buesing*
600
601 * Make TimeWithZone work with tzinfo 0.2.x: use TZInfo::Timezone#zone_identifier alias for #abbreviation, silence warnings on tests. Raise LoadError when TZInfo version is < 0.2 by sniffing for TZInfo::TimeOrDateTime constant. Move all tzinfo-dependent TimeZone tests into uses_tzinfo block *Geoff Buesing*
602
603 * Time, DateTime and TimeWithZone #in_time_zone defaults to Time.zone. Removing now unneeded #in_current_time_zone *Geoff Buesing*
604
605 * TZInfo caches Timezone instances in its own internal hash cache, so TimeZone::MAPPING doesn't need to cache them as well *Geoff Buesing*
606
607 * Adding TimeZone#parse *Geoff Buesing*
608
609 * Adding TimeZone#at and DateTime#to_f *Geoff Buesing*
610
611 * TimeWithZone responds to Ruby 1.9 weekday-named query methods *Geoff Buesing*
612
613 * TimeWithZone caches TZInfo::TimezonePeriod used for time conversion so that it can be reused, and enforces DST rules correctly when instance is created from a local time *Geoff Buesing*
614
615 * Fixed that BufferedLogger should create its own directory if one doesn't already exist #11285 *lotswholetime*
616
617 * Fix Numeric time tests broken by DST change by anchoring them to fixed times instead of Time.now. Anchor TimeZone#now DST test to time specified with Time.at instead of Time.local to work around platform differences with Time.local and DST representation *Geoff Buesing*
618
619 * Removing unneeded #change_time_zone method from Time, DateTime and TimeWithZone *Geoff Buesing*
620
621 * TimeZone #local and #now correctly enforce DST rules *Geoff Buesing*
622
623 * TimeWithZone instances correctly enforce DST rules. Adding TimeZone#period_for_utc *Geoff Buesing*
624
625 * test_time_with_datetime_fallback expects DateTime.local_offset instead of DateTime.now.offset *Geoff Buesing*
626
627 * Adding TimeWithZone #marshal_dump and #marshal_load *Geoff Buesing*
628
629 * Add OrderedHash#to_hash *Josh Peek*
630
631 * Adding Time#end_of_day, _quarter, _week, and _year. #9312 *Juanjo Bazan, Tarmo Tänav, BigTitus*
632
633 * Adding TimeWithZone#between? *Geoff Buesing*
634
635 * Time.=== returns true for TimeWithZone instances *Geoff Buesing*
636
637 * TimeWithZone #+ and #- behave consistently with numeric arguments regardless of whether wrapped time is a Time or DateTime; consistenty answers false to #acts_like?(:date) *Geoff Buesing*
638
639 * Add String#squish and String#squish! to remove consecutive chunks of whitespace. #11123 *Jordi Bunster, Henrik N*
640
641 * Serialize BigDecimals as Floats when using to_yaml. #8746 *Ernesto Jimenez*
642
643 * Adding TimeWithZone #to_yaml, #to_datetime, #eql? and method aliases for duck-typing compatibility with Time *Geoff Buesing*
644
645 * TimeWithZone #in_time_zone returns +self+ if zone argument is the same as #time_zone *Geoff Buesing*
646
647 * Adding TimeWithZone #to_a, #to_f, #to_i, #httpdate, #rfc2822 *Geoff Buesing*
648
649 * Pruning unneeded TimeWithZone#change_time_zone_to_current *Geoff Buesing*
650
651 * Time#zone=, #in_time_zone and #change_time_zone accept a Duration *Geoff Buesing*
652
653 * Time#in_time_zone handles Time.local instances correctly *Geoff Buesing*
654
655 * Pruning unneeded Time#change_time_zone_to_current. Enhanced docs to #change_time_zone to explain the difference between this method and #in_time_zone *Geoff Buesing*
656
657 * TimeZone#new method renamed #local; when used with Time.zone, constructor now reads: Time.zone.local() *Geoff Buesing*
658
659 * Added Base64.encode64s to encode values in base64 without the newlines. This makes the values immediately usable as URL parameters or memcache keys without further processing *David Heinemeier Hansson*
660
661 * Remove :nodoc: entries around the ActiveSupport test/unit assertions. #10946 *dancroak, jamesh*
662
663 * Add Time.zone_default accessor for setting the default time zone. Rails::Configuration.time_zone sets this. #10982 *Geoff Buesing*
664
665 * cache.fetch(key, :force => true) to force a cache miss. *Jeremy Kemper*
666
667 * Support retrieving TimeZones with a Duration. TimeZone[-28800] == TimeZone[-480.minutes]. *Rick Olson*
668
669 * TimeWithZone#- added, so that #- can handle a Time or TimeWithZone argument correctly *Geoff Buesing*
670
671 * with_timezone test helper renamed with_env_tz, to distinguish between setting ENV['TZ'] and setting Time.zone in tests *Geoff Buesing*
672
673 * Time#- coerces TimeWithZone argument to a Time instance so that difference in seconds can be calculated. Closes #10914 *Geoff Buesing, yyyc514*
674
675 * Adding UTC zone to TimeZone; TimeWithZone no longer has to fake UTC zone with nil *Geoff Buesing*
676
677 * Time.get_zone refactored to private method, given that the encapsulated logic is only useful internally *Geoff Buesing*
678
679 * Time.zone uses thread-local variable for thread safety. Adding Time.use_zone, for overriding Time.zone locally inside a block. Removing unneeded Time.zone_reset! *Geoff Buesing*
680
681 * TimeZone#to_s uses UTC rather than GMT; reapplying change that was undone in [8679]. #1689 *Cheah Chu Yeow*
682
683 * Time.days_in_month defaults to current year if no year is supplied as argument #10799 [Radar], uses Date.gregorian_leap? to determine leap year, and uses constant lookup to determine days in month *Geoff Buesing*
684
685 * Adding Time and DateTime #compare_with_coercion, which layers behavior on #<=> so that any combination of Time, DateTime and ActiveSupport::TimeWithZone instances can be chronologically compared *Geoff Buesing*
686
687 * TimeZone#now returns an ActiveSupport::TimeWithZone *Geoff Buesing*
688
689 * Time #in_current_time_zone and #change_time_zone_to_current return self when Time.zone is nil *Geoff Buesing*
690
691 * Remove unneeded #to_datetime_default_s alias for DateTime#to_s, given that we inherit a #to_default_s from Date that does exactly the same thing *Geoff Buesing*
692
693 * Refactor Time and DateTime #to_formatted_s: use ternary instead of nested if/else *Geoff Buesing*
694
695 * Adding Time and DateTime #formatted_offset, for outputting +HH:MM utc offset strings with cross-platform consistency *Geoff Buesing*
696
697 * Adding alternate_utc_string option to TimeZone#formatted_offset. Removing unneeded TimeZone#offset. *Geoff Buesing*
698
699 * Introduce ActiveSupport::TimeWithZone, for wrapping Time instances with a TimeZone. Introduce instance methods to Time for creating TimeWithZone instances, and class methods for managing a global time zone. *Geoff Buesing*
700
701 * Replace non-dst-aware TimeZone class with dst-aware class from tzinfo_timezone plugin. TimeZone#adjust and #unadjust are no longer available; tzinfo gem must now be present in order to perform time zone calculations, via #local_to_utc and #utc_to_local methods. *Geoff Buesing*
702
703 * Extract ActiveSupport::Callbacks from Active Record, test case setup and teardown, and ActionController::Dispatcher. #10727 *Josh Peek*
704
705 * Introducing DateTime #utc, #utc? and #utc_offset, for duck-typing compatibility with Time. Closes #10002 *Geoff Buesing*
706
707 * Time#to_json uses Numeric#to_utc_offset_s to output a cross-platform-consistent representation without having to convert to DateTime. References #9750 *Geoff Buesing*
708
709 * Refactor number-to-HH:MM-string conversion logic from TimeZone#formatted_offset to a reusable Numeric#to_utc_offset_s method. *Geoff Buesing*
710
711 * Continue evolution toward ActiveSupport::TestCase. #10679 *Josh Peek*
712
713 * TestCase: introduce declared setup and teardown callbacks. Pass a list of methods and an optional block to call before setup or after teardown. Setup callbacks are run in the order declared; teardown callbacks are run in reverse. *Jeremy Kemper*
714
715 * Added ActiveSupport::Gzip.decompress/compress(source) as an easy wrapper for Zlib *Tobias Lütke*
716
717 * Included MemCache-Client to make the improved ActiveSupport::Cache::MemCacheStore work out of the box *Bob Cottrell, Eric Hodel*
718
719 ## Added ActiveSupport::Cache:: framework as an extraction from ActionController::Caching::Fragments:: David Heinemeier Hansson ##
720
721 * Fixed String#titleize to work for strings with 's too #10571 *trek*
722
723 * Changed the implementation of Enumerable#group_by to use a double array approach instead of a hash such that the insert order is honored *David Heinemeier Hansson/Marcel Molina Jr.*
724
725 * remove multiple enumerations from ActiveSupport::JSON#convert_json_to_yaml when dealing with date/time values. *Rick Olson*
726
727 * Hash#symbolize_keys skips keys that can't be symbolized. #10500 *Brad Greenlee*
728
729 * Ruby 1.9 compatibility. #1689, #10466, #10468, #10554, #10594, #10632 *Cheah Chu Yeow, Pratik Naik, Jeremy Kemper, Dirkjan Bussink, Xavier Noria*
730
731 * TimeZone#to_s uses UTC rather than GMT. #1689 *Cheah Chu Yeow*
732
733 * Refactor of Hash#symbolize_keys! to use Hash#replace. Closes #10420 *ReinH*
734
735 * Fix HashWithIndifferentAccess#to_options! so it doesn't clear the options hash. Closes #10419 *ReinH*
736
737
738 ## 2.0.1 (December 7th, 2007) ##
739
740 * Added Array#from and Array#to that behaves just from String#from and String#to *David Heinemeier Hansson*
741
742 * Fix that empty collections should be treated as empty arrays regardless of whitespace for Hash#from_xml #10255 *adamj*
743
744 * Time#time_with_datetime_fallback, Time#to_datetime, Date#to_datetime and String#to_datetime honor Ruby's default calendar reform setting. #10201 *Geoff Buesing*
745
746 * Change Time and DateTime #end_of_month to return last second of month instead of beginning of last day of month. Closes #10200 *Geoff Buesing*
747
748 * Speedup String#blank? *Jeremy Kemper, Michael Koziarski*
749
750 * Add documentation for Hash#diff. Closes #9306 *Tarmo Tänav*
751
752 * Add new superclass_delegating_accessors. Similar to class inheritable attributes but with subtly different semantics. *Michael Koziarski, Tarmo Tänav*
753
754 * Change JSON to encode %w(< > &) as 4 digit hex codes to be in compliance with the JSON spec. Closes #9975 *Josh Peek, Cheah Chu Yeow, Tim Pope*
755
756 * Fix JSON encoding/decoding bugs dealing with /'s. Closes #9990 *Rick Olson, theamazingrando*
757
758 * Introduce a base class for all test cases used by rails applications. ActiveSupport::TestCase *Michael Koziarski*
759
760 The intention is to use this to reduce the amount of monkeypatching / overriding that
761 is done to test/unit's classes.
762
763 * Document Enumerable and Hash #to_json. #9970 *Cheah Chu Yeow*
764
765 * Hash#to_xml handles symbol values. #9954 *Assaf*
766
767 * Hash#symbolize_keys behaves well with integer keys. #9890 *PotatoSalad*
768
769 * Multibyte: String#slice supports regexp argument. #9646 *yob*
770
771 * object.duplicable? returns true if object.dup is safe. False for nil, true, false, symbols, and numbers; true otherwise. #9333 *sur*
772
773 * Time, Date and DateTime #advance accept :weeks option. #9866 *Geoff Buesing*
774
775 * Fix Time#years_ago and #years_since from leap days. #9865 *Geoff Buesing*
776
777 * Time and DateTime#advance accept :hours, :minutes, and :seconds options. #9825 *Geoff Buesing*
778
779 * Fix Date#years_ago and #years_since from leap days. #9864 *Geoff Buesing*
780
781 * Refactor Time and Date#months_since and #months_ago to use #advance. #9863 *Geoff Buesing*
782
783 * Rebundle Builder 2.1.2 but prefer a newer RubyGem if available. *Jeremy Kemper*
784
785 * Add Range#overlaps?(range), Range#include?(range), and Range#step without a block. *brandon*
786
787 * Correct BufferedLogger#level? checks. #9806 *wildchild, Johan Sorensen*
788
789 * String#to_xs uses Eric Wong's fast_xs extension, if available, for Builder speedup. http://bogomips.org/fast_xs/ *Jeremy Kemper*
790
791 * Introduce BasicObject as Builder::BlankSlate for Ruby 1.9 forward compatibility. *Jeremy Kemper*
792
793 * Unbundle Builder in favor of a gem dependency. *Jeremy Kemper*
794
795 * Disambiguate Time, Date, and DateTime#to_json formatting. #9750 *Geoff Buesing, Cheah Chu Yeow*
796
797 * Hash#to_json takes :only or :except options to specific or omit certain hash keys. Enumerable#to_json passes through its options to each element. #9751 *Cheah Chu Yeow*
798
799 * BufferedLogger#auto_flushing = N flushes the log every N messages. Buffers with an array instead of string. Disabling auto_flushing still flushes when the buffer hits a maximum size, as a failsafe against memory-gobbling. *Jeremy Kemper*
800
801 * Fixed Date#xmlschema for dates outside the range of what can be created with Time #9744 *Geoff Buesing*
802
803 * Fixed that La Paz was included in -25200 and -14400 offsets when it should only be in -14400 #9735 *bermi*
804
805 * Fixed JSON encoding to use quoted keys according to the JSON standard. #8762 *choonkat, Cheah Chu Yeow*
806
807 * Alias Object#send to send! for Ruby 1.9 forward compatibility. *Jeremy Kemper*
808
809 * Backport Object#instance_variable_defined? for Ruby < 1.8.6. *Jeremy Kemper*
810
811 * BufferedLogger#add converts the message to a string. #9702, #9724 *eigentone, DrMark, Tom Ward*
812
813 * Added ActiveSupport::BufferedLogger as a duck-typing alternative (albeit with no formatter) to the Ruby Logger, which provides a very nice speed bump (inspired by Ezra's buffered logger) *David Heinemeier Hansson*
814
815 * Object#instance_exec produces fewer garbage methods. *Mauricio Fernandez*
816
817 * Decode json strings as Dates/Times if they're using a YAML-compatible format. Closes #9614 *Rick Olson*
818
819 * Fixed cache_page to use the request url instead of the routing options when picking a save path. #8614 *Josh Peek*
820
821 * Object.subclasses_of includes anonymous subclasses. *Jeremy Kemper*
822
823 * Fixed that pluralizing an empty string should return the same empty string, not "s". #7720 *Josh Peek*
824
825 * Added call to inspect on non-string classes for the logger #8533 *Coda Hale*
826
827 * Deprecation: remove deprecated :mday option from Time, Date, and DateTime#change. *Jeremy Kemper*
828
829 * Fix JSON decoder with nested quotes and commas. #9579 *Zach Dennis*
830
831 * Hash#to_xml doesn't double-unescape. #8806 *Ezran*
832
833 * Added Array#rand #9170 [Norbert Crombach]. Examples:
834
835 [].rand # => nil
836 ['a'].rand # => 'a'
837 [1,2,3].rand # => 1 or 2 or 3
838
839 * Deprecation: removed Reloadable. *Jeremy Kemper*
840
841 * Make the utf-handler return the correct value for non-matching regular expressions. Closes #9049 *Manfred Stienstra*
842
843 * Add ljust, rjust and center to utf8-handler. Closes #9165 *Manfred Stienstra*
844
845 * Fix Time#advance bug when trying to advance a year from leap day. Closes #8655 *Geoff Buesing*
846
847 * Add support for []= on ActiveSupport::Multibyte::Chars. Closes #9142. *ewan, Manfred Stienstra*
848
849 * Added Array#extract_options! to encapsulate the pattern of getting an options hash out of a variable number of parameters. #8759 *Norbert Crombach*
850
851 * Let alias_attribute work with attributes with initial capital letters (legacy columns etc). Closes #8596 *mpalmer*
852
853 * Added Hash#except which is the inverse of Hash#slice -- return the hash except the keys that are specified *David Heinemeier Hansson*
854
855 * Added support for pluralization with a different starting letter than the singular version (cow/kine) #4929 *norri_b/Josh Susser*
856
857 * Demote Hash#to_xml to use XmlSimple#xml_in_string so it can't read files or stdin. #8453 *candlerb, Jeremy Kemper*
858
859 * Backport clean_logger changes to support ruby 1.8.2 *Mislav Marohnić*
860
861 * Added proper handling of arrays #8537 *Josh Susser*
862
863 Before:
864 Hash.from_xml '<images></images>'
865 # => {:images => nil}
866
867 Hash.from_xml '<images><image>foo.jpg</image></images>'
868 # => {:images => {:image => "foo.jpg"}}
869
870 Hash.from_xml '<images><image>foo.jpg</image><image>bar.jpg</image></images>'
871 # => {:images => {:image => ["foo.jpg", "bar.jpg"]}}
872
873 After:
874 Hash.from_xml '<images type="array"></images>'
875 # => {:images => []}
876
877 Hash.from_xml '<images type="array"><image>foo.jpg</image></images>'
878 # => {:images => ["foo.jpg"]}
879
880 Hash.from_xml '<images type="array"><image>foo.jpg</image><image>bar.jpg</image></images>'
881 # => {:images => ["foo.jpg", "bar.jpg"]}
882
883 * Improve Time and Date test coverage. #8646 *Josh Peek*
884
885 * Add Date#since, ago, beginning_of_day, and end_of_day. Date + seconds works now. #8575 *Geoff Buesing*
886
887 * String#to_time overflows to DateTime. Add String#to_datetime. #8572 *Geoff Buesing*
888
889 * Date.yesterday and .tomorrow. #8571 *Geoff Buesing*
890
891 * Readable Date and DateTime#inspect. #8570 *Geoff Buesing*
892
893 * Move common DateTime calculations to Date. #8536 *Geoff Buesing*
894
895 * Added Date#change (like Time#change) *David Heinemeier Hansson*
896
897 * DateTime#to_time converts to Time unless out of range. #8512 *Geoff Buesing*
898
899 * Date#to_datetime, #to_s(:rfc822). #8512 *Geoff Buesing*
900
901 * Time durations use since instead of + for accuracy. #8513 *Geoff Buesing*
902
903 * escape <'s and >'s in JSON strings. #8371 *Rick Olson*
904
905 * Inflections: MatrixTest -> MatrixTests instead of MatricesTest. #8496 *jbwiv*
906
907 * Multibyte strings respond_to the String methods they proxy so they can be duck-typed. #6549 *Tuxie*
908
909 * Array#to_xml yields the builder just like Hash and ActiveRecord::Base. #8472 *seth*
910
911 * Date, Time, and DateTime support formatting blocks in addition to strftime strings. Introduce :long_ordinal format, e.g. "February 21st, 2005". #8191 *Coda Hale*
912
913 * Document Object#blank?. #6491 *Chris Mear*
914
915 * Date, Time, and DateTime#to_json. #8399 *wycats*
916
917 * Simplify API of assert_difference by passing in an expression that is evaluated before and after the passed in block. See documenation for examples of new API. *Marcel Molina Jr.*
918
919 * Added assert_difference and assert_no_difference to test/unit assertions *Tobias Lütke*
920
921 * Removed breakpointer and Binding.of_caller in favor of relying on ruby-debug by Kent Sibilev since the breakpointer has been broken since Ruby 1.8.4 and will not be coming back *David Heinemeier Hansson*
922
923 * Added parsing of file type in Hash.xml_in so you can easily do file uploads with base64 from an API *David Heinemeier Hansson*
924
925 <person>
926 <name>David</name>
927 <avatar type="file" name="me.jpg" content_type="image/jpg">R0lGODlhkACZAPUAAM5lcfjrtMQCG=\n</avatar>
928 </person>
929
930 ...becomes:
931
932 attributes = { :person => { :name => "David", :avatar => #<StringIO> } }
933 attributes[:person][:avatar].content_type # => "image/jpg"
934 attributes[:person][:avatar].original_filename # => "me.jpg"
935 attributes[:person][:avatar].read # => binary data of the file
936
937 Which is duck-type compatible with the files that you get when doing multipart uploads through HTML.
938
939 * Improved multibyte performance by relying less on exception raising #8159 *Blaine*
940
941 * Use XSD-compatible type names for Hash#to_xml and make the converters extendable #8047 *Tim Pope*
942
943 * Added yielding of builder in Hash#to_xml *David Heinemeier Hansson*
944
945 * Hash#with_indifferent_access now also converts hashes kept in arrays to indifferent access (makes it easier to treat HTML and XML parameters the same) *David Heinemeier Hansson*
946
947 * Hash#to_xml supports YAML attributes. #7502 *jonathan*
948
949 * Refactor ActiveSupport::JSON to be less obtuse. Add support for JSON decoding by way of Syck with ActiveSupport::JSON.decode(json_string). Prevent hash keys that are JavaScript reserved words from being unquoted during encoding. *Sam Stephenson*
950
951 * alias_method_chain preserves the original method's visibility. #7854 *Jonathan Viney*
952
953 * Update Dependencies to ignore constants inherited from ancestors. Closes #6951. *Nicholas Seckar*
954
955 * Array#to_query preserves its ordering. #7756 *Greg Spurrier*
956
957 * Out-of-range Time calculations transparently overflow to DateTime. Introduce Time#to_datetime. #7706, #7715 *Geoff Buesing*
958
959 * DateTime calculations analogous to the Date and Time extensions. #7693 *Geoff Buesing*
960
961 * Give DateTime correct .to_s implementations, lets it play nice with ActiveRecord quoting. #7649 *Geoff Buesing*
962
963 * Add File.atomic_write, allows you to write large files in an atomic manner, preventing users from seeing half written files. *Michael Koziarski*
964
965 * Allow users to provide custom formatters to Logger. *Anthony Eden*
966
967 * Hash#to_query CGI-escapes its keys. *Jeremy Kemper*
968
969 * Optimize Class Inheritable Attributes so that unnecessary hashes are not created. Closes #7472 *Bruce Perens*
970
971 * :db format for Date#to_s *Jeremy Kemper*
972 Date.new(2007, 1, 27).to_s(:db) # => '2007-01-27'
973
974 * Added :instance_writer option to #mattr_writer/accessor, #cattr_writer/accessor, and #class_inheritable_writer to skip the creation of the instance writer. *Rick Olson*
975
976 * Added Hash#to_query to turn a hash of values into a form-encoded query string *Nicholas Seckar*
977
978 * Increase test coverage for subclasses_of. Closes #7335. *Roman2K, Nicholas Seckar*
979
980 * Remove unused code from Duration#inspect. Closes #7180. *Rich Collins*
981
982 * Added test coverage for Inflector.inflections.clear. Closes #7179. *Rich Collins*
983
984 * ActiveSupport::Multibyte::Handlers::UTF8Handler should raise when a range and an integer are passed in (just like the native implementation). Closes #7176 *Rich Collins*
985
986 * A couple extra tests for #classify. Closes #7273. *Josh Susser*
987
988 * Better docs for Object extensions *zackchandler, Jamis Buck*
989
990 * Fix that Dates couldn't be subtracted from Dates after [5940]. *Sam Stephenson*
991
992 * Add Object#acts_like? and Time#acts_like_time? and Date#acts_like_date? to facilitate duck-typing. *Jamis Buck*
993
994 * Make 1.months and friends accurate by introducing a Duration class. #6835 *eventualbuddha*
995
996
997 ## 1.4.2 (March 12th, 2007) ##
998
999 * Ruby 1.8.6 and 1.9 define private Time#to_date and #to_datetime; make them
1000 public for compatibility. *Jeremy Kemper*
1001
1002 * Deprecation: warn on stderr if RAILS_DEFAULT_LOGGER isn't set yet. *Jeremy Kemper*
1003
1004
1005 ## 1.4.1 (February 5th, 2007) ##
1006
1007 * Optimize Class Inheritable Attributes so that unnecessary hashes are not created. Closes #7472 *Bruce Perens*
1008
1009 * Added :instance_writer option to #mattr_writer/accessor, #cattr_writer/accessor, and #class_inheritable_writer to skip the creation of the instance writer. *Rick Olson*
1010
1011 * Full test coverage for Inflector. #7228 *Dan Kubb*
1012
1013
1014 ## 1.4.0 (January 16th, 2007) ##
1015
1016 * Document Inflector.ordinalize and merge docs from String inflections. #7023 *smeade*
1017
1018 * Unbundle flexmock. *Jeremy Kemper*
1019
1020 * Fix Dependencies.autoloaded? to ignore anonymous modules. Closes #6561. *Nicholas Seckar*
1021
1022 * Update load once paths to prevent nested once constants from being detected and claimed by an external non-once load. *Nicholas Seckar*
1023
1024 * Deprecation: silence warnings when reporting test errors. *Jeremy Kemper*
1025
1026 * Hash#slice(*keys) returns a new hash with only the given keys. #slice! replaces the hash with only the given keys. Works with HashWithIndifferentAccess also. *Jeremy Kemper*
1027
1028 * HashWithIndifferentAccess#to_hash converts to a Hash with String keys and the same default value. *Jeremy Kemper*
1029
1030 * Fix remove_constant to correctly handle constant names of the form "::A::...". References #6720. *Nicholas Seckar*
1031
1032 * Fixed Array#to_xml when it contains a series of hashes (each piece would get its own XML declaration) #6610 *thkarcher/cyu*
1033
1034 * Added Time#to_s(:time) which will just return H:M, like 17:44 *David Heinemeier Hansson*
1035
1036 * Add Module#attr_accessor_with_default to initialize value of attribute before setting it. Closes #6538. *Stuart Halloway, Marcel Molina Jr.*
1037
1038 * Hash#to_xml handles keys with the same name as Kernel methods. #6613 *Jonathan del Strother*
1039
1040 * Added Time#end_of_day to get 23:59:59 of that day *David Heinemeier Hansson*
1041
1042 * Don't quote hash keys in Hash#to_json if they're valid JavaScript identifiers. Disable this with ActiveSupport::JSON.unquote_hash_key_identifiers = false if you need strict JSON compliance. *Sam Stephenson*
1043
1044 * Lazily load the Unicode Database in the UTF-8 Handler *Rick Olson*
1045
1046 * Update dependencies to delete partially loaded constants. *Nicholas Seckar*
1047
1048 * Fix unicode JSON regexp for Onigurama compatibility. #6494 *whitley*
1049
1050 * update XmlSimple to 1.0.10. Closes #6532. *Nick Sieger*
1051
1052 * Update dependencies to allow constants to be defined alongside their siblings. A common case for this is AR model classes with STI; user.rb might define User, Administrator and Guest for example. *Nicholas Seckar*
1053
1054 * next_week respects DST changes. #6483, #5617, #2353, #2509, #4551 *marclove, Rob Biedenharn, rails@roetzel.de, jsolson@damogran.org, drbrain@segment7.net*
1055
1056 * Expose methods added to Enumerable in the documentation, such as group_by. Closes #6170. *sergeykojin@gmail.com, Marcel Molina Jr.*
1057
1058 * Ensure Chars#tidy_bytes only tidies broken bytes. Closes #6397 *Manfred Stienstra*
1059
1060 * Add 'unloadable', a method used to mark any constant as requiring an unload after each request. *Nicholas Seckar*
1061
1062 * Make core_ext/string/access.rb multibyte safe. Closes #6388 *Manfred Stienstra*
1063
1064 * Make String#chars slicing behaviour consistent with String. Closes #6387 *Manfred Stienstra*
1065
1066 * Pull in latest multibyte patch. Closes #6346 *Manfred Stienstra*
1067
1068 * Add ActiveSupport::Multibyte. Provides String#chars which lets you deal with strings as a sequence of chars, not of bytes. Closes #6242 *Julian Tarkhanov, Manfred Stienstra, Thijs van der Vossen & Jan Behrens*
1069
1070 * Fix issue with #class_inheritable_accessor saving updates to the parent class when initialized with an Array or Hash *mojombo*
1071
1072 * Hash#to_xml supports Bignum and BigDecimal. #6313 *edibiase*
1073
1074 * Don't undefine #class in OptionMerger *Rick Olson*
1075
1076 * Hash.create_from_xml has been renamed to Hash.from_xml, alias will exist until Rails 2.0 *David Heinemeier Hansson*
1077
1078 * alias_method_chain works with accessor= methods also. #6153 *Caio Chassot*
1079
1080 * Fix loadable_constants_for_path to handle load paths that do not end with a slash. *Nicholas Seckar*
1081
1082 * Fix logic error in determining what was loaded by a given file. Closes #6039. *Nicholas Seckar*
1083
1084 * Equate Kernel.const_missing with Object.const_missing. Fixes #5988. *Nicholas Seckar*
1085
1086 * Add ApplicationController special case to Dependencies. *Nicholas Seckar*
1087
1088 * Don't pad remaining places with in_groups_of if specified padding value is false. *Marcel Molina Jr.*
1089
1090 * Fix cases where empty xml nodes weren't being translated to nil in Hash.create_from_xml *Rick Olso n*
1091
1092 <written-on type="date"></written-on> # => { :type => 'date' } # WRONG
1093 <written-on type="date"></written-on> # => nil # RIGHT
1094
1095 * Tighten rescue clauses. #5985 *james@grayproductions.net*
1096
1097 * Inflections: don't singularize -ies plurals. *foamdino@gmail.com, Mark Van Holstyn*
1098
1099 * Update Initializer to use load_once_paths to avoid plugin reloading. References #5852. *Nicholas Seckar*
1100
1101 * Use Array#assoc in ActiveSupport::OrderedHash. *Mauricio Fernandez*
1102
1103 * Greatly increased performance of String.to_json, which speeds up RJS considerably on large pages, fixes #3473 *Shugo Maeda*
1104
1105 * Detect missing_constants calls from removed modules and fail accordingly. *Nicholas Seckar*
1106
1107 * Stop using defined? in Dependencies.qualified_const_defined? since defined? may invoke const_missing. *Nicholas Seckar*
1108
1109 * Dependencies can autoload directories of nested classes. *Jeremy Kemper*
1110 Example:
1111 invoice.rb class Invoice
1112 invoice/lineitem.rb class Invoice::Lineitem
1113
1114 * Add Deprecation.silence so that Reloadable does not scold itself. *Nicholas Seckar*
1115
1116 * Add debugging logging to Dependencies. Currently can be enabled with Dependencies.log_activity = true; adding to Initializer and documenting is forthcoming. *Nicholas Seckar*
1117
1118 * Replace Reloadable with improvements to the Dependencies mechanism. *Nicholas Seckar*
1119
1120 * DateTime#to_time gives hour/minute/second resolution. #5747 *jon.evans@pobox.com*
1121
1122 * attr_internal to support namespacing and deprecation. Like attr_* except backed by internally-named instance variable. Set attr_internal_naming_format to change the format from the default '@_%s'. *Jeremy Kemper*
1123 # def foo() @foo__rofl end
1124 # def foo=(v) @foo__rofl = v end
1125 self.attr_internal_naming_format = '@%s__rofl'
1126 attr_internal :foo
1127
1128 * Raise fully qualified names upon name errors. #5533 *Lars Pind, Nicholas Seckar*
1129
1130 * Add extention to obtain the missing constant from NameError instances. *Nicholas Seckar*
1131
1132 * Thoroughly document inflections. #5700 *petermichaux@gmail.com*
1133
1134 * Added Module#alias_attribute [Jamis/David Heinemeier Hansson]. Example:
1135
1136 class Content < ActiveRecord::Base
1137 # has a title attribute
1138 end
1139
1140 class Email < ActiveRecord::Base
1141 alias_attribute :subject, :title
1142 end
1143
1144 e = Email.find(1)
1145 e.title # => "Superstars"
1146 e.subject # => "Superstars"
1147 e.subject? # => true
1148 e.subject = "Megastars"
1149 e.title # => "Megastars"
1150
1151 * Deprecation: easier to work with warning behavior as procs; default behaviors for each environment so users needn't update env.rb; and testing pleasure with assert_deprecated, assert_not_deprecated. *Jeremy Kemper*
1152 By default, test prints to $stderr, dev logs, production ignores.
1153 Provide your own per-environment in e.g. config/environments/development.rb:
1154 ActiveSupport::Deprecation.behavior = Proc.new { |message| raise message }
1155
1156 * First cut of the Rails Deprecation system. *Michael Koziarski*
1157
1158 * Strip boolean XML content before checking for 'true' *Rick Olson*
1159
1160 * Customize default BigDecimal formatting. References #5672 *Dave Thomas*
1161
1162 * Correctly convert <foo nil="true"> to nil when using Hash.create_from_xml. *Rick Olson*
1163
1164 * Optional identity for Enumerable#sum defaults to zero. #5657 *gensym@mac.com*
1165
1166 * HashWithIndifferentAccess shouldn't confuse false and nil. #5601 *Shugo Maeda*
1167
1168 * Fixed HashWithIndifferentAccess#default #5586 *chris@seagul.co.uk*
1169
1170 * More compatible Hash.create_from_xml. #5523 *nunemaker@gmail.com*
1171
1172 * Added Enumerable#sum for calculating a sum from the elements [David Heinemeier Hansson, jonathan@daikini.com]. Examples:
1173
1174 [1, 2, 3].sum
1175 payments.sum { |p| p.price * p.tax_rate }
1176 payments.sum(&:price)
1177
1178 This is instead of payments.inject(0) { |sum, p| sum + p.price }
1179
1180 * Correct and clarify Array#to_sentence docs. #5458 *brad@madriska.com*
1181
1182 * alias_method_chain preserves method punctuation so foo, foo?, and foo! may be chained with the same feature. *Jeremy Kemper*
1183 Example:
1184 alias_method_chain :save!, :validation
1185 is equivalent to
1186 alias_method :save_without_validation!, :save!
1187 alias_method :save!, :save_with_validation!
1188
1189 * Enhance Symbol#to_proc so it works with list objects, such as multi-dimensional arrays. Closes #5295 [nov@yo.rim.or.jp]. Example:
1190
1191 {1 => "one", 2 => "two", 3 => "three"}.sort_by(&:first).map(&:last)
1192 # => ["one", "two", "three"]
1193
1194 * Added Hash.create_from_xml(string) which will create a hash from a XML string and even typecast if possible [David Heinemeier Hansson]. Example:
1195
1196 Hash.create_from_xml <<-EOT
1197 <note>
1198 <title>This is a note</title>
1199 <created-at type="date">2004-10-10</created-at>
1200 </note>
1201 EOT
1202
1203 ...would return:
1204
1205 { :note => { :title => "This is a note", :created_at => Date.new(2004, 10, 10) } }
1206
1207 * Added Jim Weirich's excellent FlexMock class to vendor (Copyright 2003, 2004 by Jim Weirich (jim@weriichhouse.org)) -- it's not automatically required, though, so require 'flexmock' is still necessary *David Heinemeier Hansson*
1208
1209 * Fixed that Module#alias_method_chain should work with both foo? foo! and foo at the same time #4954 *anna@wota.jp*
1210
1211 * to_xml fixes, features, and speedup: introduce :dasherize option that converts updated_at to updated-at if true (the existing default); binary columns get encoding="base64" attribute; nil values get nil="true" attribute to distinguish empty values; add type information for float columns; allow arbitrarily deep :include; include SQL type information as the type attribute. #4989 *Blair Zajac <blair@orcaware.com>*
1212
1213 * Add OrderedHash#values. *Sam Stephenson*
1214
1215 * Added Array#to_s(:db) that'll produce a comma-separated list of ids [David Heinemeier Hansson]. Example:
1216
1217 Purchase.find(:all, :conditions => "product_id IN (#{shops.products.to_s(:db)})"
1218
1219 * Normalize classify's argument to a String so that it plays nice with Symbols. *Marcel Molina Jr.*
1220
1221 * Strip out leading schema name in classify. References #5139. *Michael Schoen*
1222
1223 * Remove Enumerable#first_match since break(value) handles the use case well enough. *Nicholas Seckar*
1224
1225 Enumerable#first_match was like detect, but instead of returning the matching element, the yielded value returned. For example:
1226
1227 user_xml = adapters(:from => User, :to => Xml).first_match do |adapter|
1228 adapter.adapt @user
1229 end
1230
1231 But this is just as easily done with:
1232
1233 user_xml = adapters(:from => User, :to => Xml).each do
1234 break adapter.adapt(@user)
1235 end
1236
1237 * Make Array#in_groups_of just return the grouped collection if a block isn't given. *Marcel Molina Jr.*
1238
1239 * Don't destroy a HashWithIndifferentAccess if symbolize_keys! or stringify_keys! is called on it. Closes #5076. *Marcel Molina Jr., guy.naor@famundo.com*
1240
1241 * Document Module::delegate. #5002 *pergesu@gmail.com*
1242
1243 * Replace alias method chaining with Module#alias_method_chain. *Marcel Molina Jr.*
1244
1245 * Strip out punctuation on predicates or bang methods being aliased with alias_method_chain since target?_without_feature is not a valid method name. Add tests for Module#alias_method_chain. *Marcel Molina Jr.*
1246
1247 * Replace Ruby's deprecated append_features in favor of included. *Marcel Molina Jr.*
1248
1249 * Allow default options in with_options to be overridden. Closes #4480. *murphy@cYcnus.de*
1250
1251 * Added Module#alias_method_chain *Jamis Buck*
1252
1253 * Updated to Builder 2.0 *David Heinemeier Hansson*
1254
1255 * Add Array#split for dividing arrays into one or more subarrays by value or block. *Sam Stephenson*
1256
1257 ## 1.3.1 (April 6th, 2006) ##
1258
1259 * Clean paths inside of exception messages and traces. *Nicholas Seckar*
1260
1261 * Add Pathname.clean_within for cleaning all the paths inside of a string. *Nicholas Seckar*
1262
1263 * provide an empty Dependencies::LoadingModule.load which prints deprecation warnings. Lets 1.0 applications function with .13-style environment.rb.
1264
1265
1266 ## 1.3.0 (March 27th, 2006) ##
1267
1268 * When possible, avoid incorrectly obtaining constants from parent modules. Fixes #4221. *Nicholas Seckar*
1269
1270 * Add more tests for dependencies; refactor existing cases. *Nicholas Seckar*
1271
1272 * Move Module#parent and Module#as_load_path into core_ext. Add Module#parent. *Nicholas Seckar*
1273
1274 * Add CachingTools::HashCaching to simplify the creation of nested, autofilling hashes. *Nicholas Seckar*
1275
1276 * Remove a hack intended to avoid unloading the same class twice, but which would not work anyways. *Nicholas Seckar*
1277
1278 * Update Object.subclasses_of to locate nested classes. This affects Object.remove_subclasses_of in that nested classes will now be unloaded. *Nicholas Seckar*
1279
1280 * Update Object.remove_subclasses_of to use Class.remove_class, reducing duplication. *Nicholas Seckar*
1281
1282 * Added Fixnum#seconds for consistency, so you can say 5.minutes + 30.seconds instead of 5.minutes + 30 #4389 *François Beausoleil*
1283
1284 * Added option to String#camelize to generate lower-cased camel case by passing in :lower, like "super_man".camelize(:lower) # => "superMan" *David Heinemeier Hansson*
1285
1286 * Added Hash#diff to show the difference between two hashes *Chris McGrath*
1287
1288 * Added Time#advance to do precise time time calculations for cases where a month being approximated to 30 days won't do #1860 *Rick Olson*
1289
1290 * Enhance Inflector.underscore to convert '-' into '_' (as the inverse of Inflector.dasherize) *Jamis Buck*
1291
1292 * Switched to_xml to use the xml schema format for datetimes. This allows the encoding of time zones and should improve operability. *Michael Koziarski*
1293
1294 * Added a note to the documentation for the Date related Numeric extensions to indicate that they're
1295 approximations and shouldn't be used for critical calculations. *Michael Koziarski*
1296
1297 * Added Hash#to_xml and Array#to_xml that makes it much easier to produce XML from basic structures [David Heinemeier Hansson]. Examples:
1298
1299 { :name => "David", :street_name => "Paulina", :age => 26, :moved_on => Date.new(2005, 11, 15) }.to_xml
1300
1301 ...returns:
1302
1303 <person>
1304 <street-name>Paulina</street-name>
1305 <name>David</name>
1306 <age type="integer">26</age>
1307 <moved-on type="date">2005-11-15</moved-on>
1308 </person>
1309
1310 * Moved Jim Weirich's wonderful Builder from Action Pack to Active Support (it's simply too useful to be stuck in AP) *David Heinemeier Hansson*
1311
1312 * Fixed that Array#to_sentence will return "" on an empty array instead of ", and" #3842, #4031 *rubyonrails@beautifulpixel.com*
1313
1314 * Add Enumerable#group_by for grouping collections based on the result of some
1315 block. Useful, for example, for grouping records by date.
1316
1317 ex.
1318
1319 latest_transcripts.group_by(&:day).each do |day, transcripts|
1320 p "#{day} -> #{transcripts.map(&:class) * ', '}"
1321 end
1322 "2006-03-01 -> Transcript"
1323 "2006-02-28 -> Transcript"
1324 "2006-02-27 -> Transcript, Transcript"
1325 "2006-02-26 -> Transcript, Transcript"
1326
1327 Add Array#in_groups_of, for iterating over an array in groups of a certain
1328 size.
1329
1330 ex.
1331
1332 %w(1 2 3 4 5 6 7).in_groups_of(3) {|g| p g}
1333 ["1", "2", "3"]
1334 ["4", "5", "6"]
1335 ["7", nil, nil]
1336
1337 *Marcel Molina Jr., Sam Stephenson*
1338
1339 * Added Kernel#daemonize to turn the current process into a daemon that can be killed with a TERM signal *David Heinemeier Hansson*
1340
1341 * Add 'around' methods to Logger, to make it easy to log before and after messages for a given block as requested in #3809. [Michael Koziarski] Example:
1342
1343 logger.around_info("Start rendering component (#{options.inspect}): ",
1344 "\n\nEnd of component rendering") { yield }
1345
1346 * Added Time#beginning_of_quarter #3607 *cohen.jeff@gmail.com*
1347
1348 * Fix Object.subclasses_of to only return currently defined objects *Jonathan Viney <jonathan@bluewire.net.nz>*
1349
1350 * Fix constantize to properly handle names beginning with '::'. *Nicholas Seckar*
1351
1352 * Make String#last return the string instead of nil when it is shorter than the limit [Scott Barron].
1353
1354 * Added delegation support to Module that allows multiple delegations at once (unlike Forwardable in the stdlib) [David Heinemeier Hansson]. Example:
1355
1356 class Account < ActiveRecord::Base
1357 has_one :subscription
1358 delegate :free?, :paying?, :to => :subscription
1359 delegate :overdue?, :to => "subscription.last_payment"
1360 end
1361
1362 account.free? # => account.subscription.free?
1363 account.overdue? # => account.subscription.last_payment.overdue?
1364
1365 * Fix Reloadable to handle the case where a class that has been 'removed' has not yet been garbage collected. *Nicholas Seckar*
1366
1367 * Don't allow Reloadable to be included into Modules.
1368
1369 * Remove LoadingModule. *Nicholas Seckar*
1370
1371 * Add documentation for Reloadable::Subclasses. *Nicholas Seckar*
1372
1373 * Add Reloadable::Subclasses which handles the common case where a base class should not be reloaded, but its subclasses should be. *Nicholas Seckar*
1374
1375 * Further improvements to reloading code *Nicholas Seckar, Trevor Squires*
1376
1377 - All classes/modules which include Reloadable can define reloadable? for fine grained control of reloading
1378 - Class.remove_class uses Module#parent to access the parent module
1379 - Class.remove_class expanded to handle multiple classes in a single call
1380 - LoadingModule.clear! has been removed as it is no longer required
1381 - Module#remove_classes_including has been removed in favor of Reloadable.reloadable_classes
1382
1383 * Added reusable reloading support through the inclusion of the Relodable module that all subclasses of ActiveRecord::Base, ActiveRecord::Observer, ActiveController::Base, and ActionMailer::Base automatically gets. This means that these classes will be reloaded by the dispatcher when Dependencies.mechanism = :load. You can make your own models reloadable easily:
1384
1385 class Setting
1386 include Reloadable
1387 end
1388
1389 Reloading a class is done by removing its constant which will cause it to be loaded again on the next reference. *David Heinemeier Hansson*
1390
1391 * Added auto-loading support for classes in modules, so Conductor::Migration will look for conductor/migration.rb and Conductor::Database::Settings will look for conductor/database/settings.rb *Nicholas Seckar*
1392
1393 * Add Object#instance_exec, like instance_eval but passes its arguments to the block. (Active Support will not override the Ruby 1.9 implementation of this method.) *Sam Stephenson*
1394
1395 * Add Proc#bind(object) for changing a proc or block's self by returning a Method bound to the given object. Based on why the lucky stiff's "cloaker" method. *Sam Stephenson*
1396
1397 * Fix merge and dup for hashes with indifferent access #3404 *Ken Miller*
1398
1399 * Fix the requires in option_merger_test to unbreak AS tests. *Sam Stephenson*
1400
1401 * Make HashWithIndifferentAccess#update behave like Hash#update by returning the hash. #3419, #3425 *asnem@student.ethz.ch, JanPrill@blauton.de, Marcel Molina Jr.*
1402
1403 * Add ActiveSupport::JSON and Object#to_json for converting Ruby objects to JSON strings. *Sam Stephenson*
1404
1405 * Add Object#with_options for DRYing up multiple calls to methods having shared options. [Sam Stephenson] Example:
1406
1407 ActionController::Routing::Routes.draw do |map|
1408 # Account routes
1409 map.with_options(:controller => 'account') do |account|
1410 account.home '', :action => 'dashboard'
1411 account.signup 'signup', :action => 'new'
1412 account.logout 'logout', :action => 'logout'
1413 end
1414 end
1415
1416 * Introduce Dependencies.warnings_on_first_load setting. If true, enables warnings on first load of a require_dependency. Otherwise, loads without warnings. Disabled (set to false) by default. *Jeremy Kemper*
1417
1418 * Active Support is warnings-safe. #1792 *Eric Hodel*
1419
1420 * Introduce enable_warnings counterpart to silence_warnings. Turn warnings on when loading a file for the first time if Dependencies.mechanism == :load. Common mistakes such as redefined methods will print warnings to stderr. *Jeremy Kemper*
1421
1422 * Add Symbol#to_proc, which allows for, e.g. [:foo, :bar].map(&:to_s). *Marcel Molina Jr.*
1423
1424 * Added the following methods [Marcel Molina Jr., Sam Stephenson]:
1425 * Object#copy_instance_variables_from(object) to copy instance variables from one object to another
1426 * Object#extended_by to get an instance's included/extended modules
1427 * Object#extend_with_included_modules_from(object) to extend an instance with the modules from another instance
1428
1429 ## 1.2.5 (December 13th, 2005) ##
1430
1431 * Become part of Rails 1.0
1432
1433 * Rename Version constant to VERSION. #2802 *Marcel Molina Jr.*
1434
1435 ## 1.2.3 (November 7th, 2005) ##
1436
1437 * Change Inflector#constantize to use eval instead of const_get. *Nicholas Seckar*
1438
1439 * Fix const_missing handler to ignore the trailing '.rb' on files when comparing paths. *Nicholas Seckar*
1440
1441 * Define kernel.rb methods in "class Object" instead of "module Kernel" to work around a Windows peculiarity *Sam Stephenson*
1442
1443 * Fix broken tests caused by incomplete loading of active support. *Nicholas Seckar*
1444
1445 * Fix status pluralization bug so status_codes doesn't get pluralized as statuses_code. #2758 *keithm@infused.org*
1446
1447 * Added Kernel#silence_stderr to silence stderr for the duration of the given block *Sam Stephenson*
1448
1449 * Changed Kernel#` to print a message to stderr (like Unix) instead of raising Errno::ENOENT on Win32 *Sam Stephenson*
1450
1451 * Changed 0.blank? to false rather than true since it violates everyone's expectation of blankness. #2518, #2705 *rails@jeffcole.net*
1452
1453 * When loading classes using const_missing, raise a NameError if and only if the file we tried to load was not present. *Nicholas Seckar*
1454
1455 * Added petabytes and exebytes to numeric extensions #2397 *timct@mac.com*
1456
1457 * Added Time#end_of_month to accompany Time#beginning_of_month #2514 *Jens-Christian Fischer*
1458
1459
1460 ## 1.2.2 (October 26th, 2005) ##
1461
1462 * Set Logger.silencer = false to disable Logger#silence. Useful for debugging fixtures.
1463
1464 * Add title case method to String to do, e.g., 'action_web_service'.titlecase # => 'Action Web Service'. *Marcel Molina Jr.*
1465
1466
1467 ## 1.2.1 (October 19th, 2005) ##
1468
1469 * Classify generated routing code as framework code to avoid appearing in application traces. *Nicholas Seckar*
1470
1471 * Show all framework frames in the framework trace. *Nicholas Seckar*
1472
1473
1474 ## 1.2.0 (October 16th, 2005) ##
1475
1476 * Update Exception extension to show the first few framework frames in an application trace. *Nicholas Seckar*
1477
1478 * Added Exception extension to provide support for clean backtraces. *Nicholas Seckar*
1479
1480 * Updated whiny nil to be more concise and useful. *Nicholas Seckar*
1481
1482 * Added Enumerable#first_match *Nicholas Seckar*
1483
1484 * Fixed that Time#change should also reset usec when also resetting minutes #2459 *ikeda@dream.big.or.jp*
1485
1486 * Fix Logger compatibility for distributions that don't keep Ruby and its standard library in sync.
1487
1488 * Replace '%e' from long and short time formats as Windows does not support it. #2344. *Tom Ward <tom@popdog.net>*
1489
1490 * Added to_s(:db) to Range, so you can get "BETWEEN '2005-12-10' AND '2005-12-12'" from Date.new(2005, 12, 10)..Date.new(2005, 12, 12) (and likewise with Times)
1491
1492 * Moved require_library_or_gem into Kernel. #1992 *Michael Schuerig <michael@schuerig.de>*
1493
1494 * Add :rfc822 as an option for Time#to_s (to get rfc822-formatted times)
1495
1496 * Chain the const_missing hook to any previously existing hook so rails can play nicely with rake
1497
1498 * Clean logger is compatible with both 1.8.2 and 1.8.3 Logger. #2263 *Michael Schuerig <michael@schuerig.de>*
1499
1500 * Added native, faster implementations of .blank? for the core types #2286 *skae*
1501
1502 * Fixed clean logger to work with Ruby 1.8.3 Logger class #2245
1503
1504 * Fixed memory leak with Active Record classes when Dependencies.mechanism = :load #1704 *Chris McGrath*
1505
1506 * Fixed Inflector.underscore for use with acronyms, so HTML becomes html instead of htm_l #2173 *k@v2studio.com*
1507
1508 * Fixed dependencies related infinite recursion bug when a controller file does not contain a controller class. Closes #1760. *rcolli2@tampabay.rr.com*
1509
1510 * Fixed inflections for status, quiz, move #2056 *deirdre@deirdre.net*
1511
1512 * Added Hash#reverse_merge, Hash#reverse_merge!, and Hash#reverse_update to ease the use of default options
1513
1514 * Added Array#to_sentence that'll turn ['one', 'two', 'three'] into "one, two, and three" #2157 *Manfred Stienstra*
1515
1516 * Added Kernel#silence_warnings to turn off warnings temporarily for the passed block
1517
1518 * Added String#starts_with? and String#ends_with? #2118 *Thijs van der Vossen*
1519
1520 * Added easy extendability to the inflector through Inflector.inflections (using the Inflector::Inflections singleton class). Examples:
1521
1522 Inflector.inflections do |inflect|
1523 inflect.plural /^(ox)$/i, '\1\2en'
1524 inflect.singular /^(ox)en/i, '\1'
1525
1526 inflect.irregular 'octopus', 'octopi'
1527
1528 inflect.uncountable "equipment"
1529 end
1530
1531 * Added String#at, String#from, String#to, String#first, String#last in ActiveSupport::CoreExtensions::String::Access to ease access to individual characters and substrings in a string serving basically as human names for range access.
1532
1533 * Make Time#last_month work when invoked on the 31st of a month.
1534
1535 * Add Time.days_in_month, and make Time#next_month work when invoked on the 31st of a month
1536
1537 * Fixed that Time#midnight would have a non-zero usec on some platforms #1836
1538
1539 * Fixed inflections of "index/indices" #1766 *damn_pepe@gmail.com*
1540
1541 * Added stripping of _id to String#humanize, so "employee_id" becomes "Employee" #1574 *Justin French*
1542
1543 * Factor Fixnum and Bignum extensions into Integer extensions *Nicholas Seckar*
1544
1545 * Hooked #ordinalize into Fixnum and Bignum classes. *Nicholas Seckar, danp*
1546
1547 * Added Fixnum#ordinalize to turn 1.ordinalize to "1st", 3.ordinalize to "3rd", and 10.ordinalize to "10th" and so on #1724 *paul@cnt.org*
1548
1549
1550 ## 1.1.1 (11 July, 2005) ##
1551
1552 * Added more efficient implementation of the development mode reset of classes #1638 *Chris McGrath*
1553
1554
1555 ## 1.1.0 (6 July, 2005) ##
1556
1557 * Fixed conflict with Glue gem #1606 *Rick Olson*
1558
1559 * Added new rules to the Inflector to deal with more unusual plurals mouse/louse => mice/lice, information => information, ox => oxen, virus => viri, archive => archives #1571, #1583, #1490, #1599, #1608 *foamdino@gmail.com/others*
1560
1561 * Fixed memory leak with Object#remove_subclasses_of, which inflicted a Rails application running in development mode with a ~20KB leak per request #1289 *Chris McGrath*
1562
1563 * Made 1.year == 365.25.days to account for leap years. This allows you to do User.find(:all, :conditions => ['birthday > ?', 50.years.ago]) without losing a lot of days. #1488 *tuxie@dekadance.se*
1564
1565 * Added an exception if calling id on nil to WhinyNil #584 *kevin-temp@writesoon.com*
1566
1567 * Added Fix/Bignum#multiple_of? which returns true on 14.multiple_of?(7) and false on 16.multiple_of?(7) #1464 *Thomas Fuchs*
1568
1569 * Added even? and odd? to work with Bignums in addition to Fixnums #1464 *Thomas Fuchs*
1570
1571 * Fixed Time#at_beginning_of_week returned the next Monday instead of the previous one when called on a Sunday #1403 *jean.helou@gmail.com*
1572
1573 * Increased the speed of indifferent hash access by using Hash#default. #1436 *Nicholas Seckar*
1574
1575 * Added that " " is now also blank? (using strip if available)
1576
1577 * Fixed Dependencies so all modules are able to load missing constants #1173 *Nicholas Seckar*
1578
1579 * Fixed the Inflector to underscore strings containing numbers, so Area51Controller becomes area51_controller #1176 *Nicholas Seckar*
1580
1581 * Fixed that HashWithIndifferentAccess stringified all keys including symbols, ints, objects, and arrays #1162 *Nicholas Seckar*
1582
1583 * Fixed Time#last_year to go back in time, not forward #1278 *fabien@odilat.com*
1584
1585 * Fixed the pluralization of analysis to analyses #1295 *seattle@rootimage.msu.edu*
1586
1587 * Fixed that Time.local(2005,12).months_since(1) would raise "ArgumentError: argument out of range" #1311 *jhahn@niveon.com*
1588
1589 * Added silencing to the default Logger class
1590
1591
1592 ## 1.0.4 (19th April, 2005) ##
1593
1594 * Fixed that in some circumstances controllers outside of modules may have hidden ones inside modules. For example, admin/content might have been hidden by /content. #1075 *Nicholas Seckar*
1595
1596 * Fixed inflection of perspectives and similar words #1045 *Thijs van der Vossen*
1597
1598 * Added Fixnum#even? and Fixnum#odd?
1599
1600 * Fixed problem with classes being required twice. Object#const_missing now uses require_dependency to load files. It used to use require_or_load which would cause models to be loaded twice, which was not good for validations and other class methods #971 *Nicholas Seckar*
1601
1602
1603 ## 1.0.3 (27th March, 2005) ##
1604
1605 * Fixed Inflector.pluralize to handle capitalized words #932 *Jeremy Kemper*
1606
1607 * Added Object#suppress which allows you to make a saner choice around with exceptions to swallow #980. Example:
1608
1609 suppress(ZeroDivisionError) { 1/0 }
1610
1611 ...instead of:
1612
1613 1/0 rescue nil # BAD, EVIL, DIRTY.
1614
1615
1616 ## 1.0.2 (22th March, 2005) ##
1617
1618 * Added Kernel#returning -- a Ruby-ized realization of the K combinator, courtesy of Mikael Brockman.
1619
1620 def foo
1621 returning values = [] do
1622 values << 'bar'
1623 values << 'baz'
1624 end
1625 end
1626
1627 foo # => ['bar', 'baz']
1628
1629
1630 ## 1.0.1 (7th March, 2005) ##
1631
1632 * Fixed Hash#indifferent_access to also deal with include? and fetch and nested hashes #726 *Nicholas Seckar*
1633
1634 * Added Object#blank? -- see http://redhanded.hobix.com/inspect/objectBlank.html #783 *_why the lucky stiff*
1635
1636 * Added inflection rules for "sh" words, like "wish" and "fish" #755 *phillip@pjbsoftware.com*
1637
1638 * Fixed an exception when using Ajax based requests from Safari because Safari appends a \000 to the post body. Symbols can't have \000 in them so indifferent access would throw an exception in the constructor. Indifferent hashes now use strings internally instead. #746 *Tobias Lütke*
1639
1640 * Added String#to_time and String#to_date for wrapping ParseDate
1641
1642
1643 ## 1.0.0 (24th February, 2005) ##
1644
1645 * Added TimeZone as the first of a number of value objects that among others Active Record can use rich value objects using composed_of #688 *Jamis Buck*
1646
1647 * Added Date::Conversions for getting dates in different convenient string representations and other objects
1648
1649 * Added Time::Conversions for getting times in different convenient string representations and other objects
1650
1651 * Added Time::Calculations to ask for things like Time.now.tomorrow, Time.now.yesterday, Time.now.months_ago(4) #580 [DP|Flurin]. Examples:
1652
1653 "Later today" => now.in(3.hours),
1654 "Tomorrow morning" => now.tomorrow.change(:hour => 9),
1655 "Tomorrow afternoon" => now.tomorrow.change(:hour => 14),
1656 "In a couple of days" => now.tomorrow.tomorrow.change(:hour => 9),
1657 "Next monday" => now.next_week.change(:hour => 9),
1658 "In a month" => now.next_month.change(:hour => 9),
1659 "In 6 months" => now.months_since(6).change(:hour => 9),
1660 "In a year" => now.in(1.year).change(:hour => 9)
1661
1662 * Upgraded to breakpoint 92 which fixes:
1663
1664 * overload IRB.parse_opts(), fixes #443
1665 => breakpoints in tests work even when running them via rake
1666 * untaint handlers, might fix an issue discussed on the Rails ML
1667 * added verbose mode to breakpoint_client
1668 * less noise caused by breakpoint_client by default
1669 * ignored TerminateLineInput exception in signal handler
1670 => quiet exit on Ctrl-C
1671
1672 * Fixed Inflector for words like "news" and "series" that are the same in plural and singular #603 [echion], #615 *marcenuc*
1673
1674 * Added Hash#stringify_keys and Hash#stringify_keys!
1675
1676 * Added IndifferentAccess as a way to wrap a hash by a symbol-based store that also can be accessed by string keys
1677
1678 * Added Inflector.constantize to turn "Admin::User" into a reference for the constant Admin::User
1679
1680 * Added that Inflector.camelize and Inflector.underscore can deal with modules like turning "Admin::User" into "admin/user" and back
1681
1682 * Added Inflector.humanize to turn attribute names like employee_salary into "Employee salary". Used by automated error reporting in AR.
1683
1684 * Added availability of class inheritable attributes to the masses #477 *Jeremy Kemper*
1685
1686 class Foo
1687 class_inheritable_reader :read_me
1688 class_inheritable_writer :write_me
1689 class_inheritable_accessor :read_and_write_me
1690 class_inheritable_array :read_and_concat_me
1691 class_inheritable_hash :read_and_update_me
1692 end
1693
1694 # Bar gets a clone of (not a reference to) Foo's attributes.
1695 class Bar < Foo
1696 end
1697
1698 Bar.read_and_write_me == Foo.read_and_write_me
1699 Bar.read_and_write_me = 'bar'
1700 Bar.read_and_write_me != Foo.read_and_write_me
1701
1702 * Added Inflections as an extension on String, so Inflector.pluralize(Inflector.classify(name)) becomes name.classify.pluralize #476 *Jeremy Kemper*
1703
1704 * Added Byte operations to Numeric, so 5.5.megabytes + 200.kilobytes #461 *Marcel Molina Jr.*
1705
1706 * Fixed that Dependencies.reload can't load the same file twice #420 *Kent Sibilev*
1707
1708 * Added Fixnum#ago/until, Fixnum#since/from_now #450 *Jeremy Kemper*
1709
1710 * Added that Inflector now accepts Symbols and Classes by calling .to_s on the word supplied
1711
1712 * Added time unit extensions to Fixnum that'll return the period in seconds, like 2.days + 4.hours.
Something went wrong with that request. Please try again.