Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

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