CHANGELOG.md 10.5 KB
Newer Older
1
## Rails 4.0.0 (unreleased) ##
S
Steve Klabnik 已提交
2

3 4 5 6 7 8 9 10 11
*   Add `DateTime#seconds_until_end_of_day` and `Time#seconds_until_end_of_day`
    as a complement for `seconds_from_midnight`; useful when setting expiration
    times for caches, e.g.:

        <% cache('dashboard', expires_in: Date.current.seconds_until_end_of_day) do %>
          ...

    *Olek Janiszewski*

12 13
*   No longer proxy ActiveSupport::Multibyte#class. *Steve Klabnik*

14 15
*   Deprecate `ActiveSupport::TestCase#pending` method, use `skip` from MiniTest instead. *Carlos Antonio da Silva*

16 17 18 19 20 21 22 23 24 25 26 27 28
*   `XmlMini.with_backend` now may be safely used with threads:

        Thread.new do
          XmlMini.with_backend("REXML") { rexml_power }
        end
        Thread.new do
          XmlMini.with_backend("LibXML") { libxml_power }
        end

    Each thread will use it's own backend.

    *Nikita Afanasenko*

29
*   Dependencies no longer trigger Kernel#autoload in remove_constant [fixes #8213]. *Xavier Noria*
30

31 32
*   Simplify mocha integration and remove monkey-patches, bumping mocha to 0.13.0. *James Mead*

33 34 35 36 37
*   `#as_json` isolates options when encoding a hash.
    Fix #8182

    *Yves Senn*

S
Steve Klabnik 已提交
38 39
*   Deprecate Hash#diff in favor of MiniTest's #diff. *Steve Klabnik*

40
*   Kernel#capture can catch output from subprocesses *Dmitry Vorotilin*
41

42 43 44 45
*   `to_xml` conversions now use builder's `tag!` method instead of explicit invocation of `method_missing`.

    *Nikita Afanasenko*

46 47
*   Fixed timezone mapping of the Solomon Islands. *Steve Klabnik*

48 49 50 51 52
*   Make callstack attribute optional in
    ActiveSupport::Deprecation::Reporting methods `warn` and `deprecation_warning`

    *Alexey Gaziev*

53 54
*   Implement HashWithIndifferentAccess#replace so key? works correctly. *David Graham*

55 56
*   Handle the possible Permission Denied errors atomic.rb might trigger due to its chown and chmod calls. *Daniele Sluijters*

57
*   Hash#extract! returns only those keys that present in the receiver.
58 59 60 61 62

        {:a => 1, :b => 2}.extract!(:a, :x) # => {:a => 1}

    *Mikhail Dieterle*

63
*   Hash#extract! returns the same subclass, that the receiver is. I.e.
64 65 66 67
    HashWithIndifferentAccess#extract! returns HashWithIndifferentAccess instance.

    *Mikhail Dieterle*

68 69
*   Optimize ActiveSupport::Cache::Entry to reduce memory and processing overhead. *Brian Durand*

70 71 72 73 74 75 76
*   Tests tag the Rails log with the current test class and test case:

        [SessionsControllerTest] [test_0002_sign in] Processing by SessionsController#create as HTML
        [SessionsControllerTest] [test_0002_sign in] ...

    *Jeremy Kemper*

77
*   Add `logger.push_tags` and `.pop_tags` to complement logger.tagged:
78 79 80 81 82 83 84 85 86 87 88 89 90

        class Job
          def before
            Rails.logger.push_tags :jobs, self.class.name
          end

          def after
            Rails.logger.pop_tags 2
          end
        end

    *Jeremy Kemper*

91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
*   Allow delegation to the class using the `:class` keyword, replacing
    `self.class` usage:

        class User
          def self.hello
           "world"
          end

          delegate :hello, to: :class
        end

    *Marc-Andre Lafortune*

*   `Date.beginning_of_week` thread local and `beginning_of_week` application
    config option added (default is Monday).

    *Innokenty Mikhailov*
108

109 110 111 112 113 114 115 116 117 118 119 120 121
*   An optional block can be passed to `config_accessor` to set its default value

        class User
          include ActiveSupport::Configurable
          config_accessor :hair_colors do
            [:brown, :black, :blonde, :red]
          end
        end

        User.hair_colors # => [:brown, :black, :blonde, :red]

    *Larry Lv*

122
*   ActiveSupport::Benchmarkable#silence has been deprecated due to its lack of
123 124 125 126 127 128
    thread safety. It will be removed without replacement in Rails 4.1.

    *Steve Klabnik*

*   An optional block can be passed to `Hash#deep_merge`. The block will be invoked
    for each duplicated key and used to resolve the conflict.
129

130
    *Pranas Kiziela*
131

132 133 134 135 136
*   ActiveSupport::Deprecation is now a class. It is possible to create an instance
    of deprecator. Backwards compatibility has been preserved.

    You can choose which instance of the deprecator will be used.

137
        deprecate :method_name, :deprecator => deprecator_instance
138 139 140

    You can use ActiveSupport::Deprecation in your gem.

141 142
        require 'active_support/deprecation'
        require 'active_support/core_ext/module/deprecation'
143

144 145 146 147
        class MyGem
          def self.deprecator
            ActiveSupport::Deprecation.new('2.0', 'MyGem')
          end
148

149 150
          def old_method
          end
151

152 153
          def new_method
          end
154

155 156
          deprecate :old_method => :new_method, :deprecator => deprecator
        end
157

158 159
        MyGem.new.old_method
        # => DEPRECATION WARNING: old_method is deprecated and will be removed from MyGem 2.0 (use new_method instead). (called from <main> at file.rb:18)
160 161 162

    *Piotr Niełacny & Robert Pankowecki*

163 164
*   `ERB::Util.html_escape` encodes single quote as `#39`. Decimal form has better support in old browsers. *Kalys Osmonov*

165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
*   `ActiveSupport::Callbacks`: deprecate monkey patch of object callbacks.
    Using the #filter method like this:

        before_filter MyFilter.new

        class MyFilter
          def filter(controller)
          end
        end

    Is now deprecated with recommendation to use the corresponding filter type
    (`#before`, `#after` or `#around`):

        before_filter MyFilter.new

        class MyFilter
          def before(controller)
          end
        end

    *Bogdan Gusiev*

187 188 189 190 191 192
*   An optional block can be passed to `HashWithIndifferentAccess#update` and `#merge`.
    The block will be invoked for each duplicated key, and used to resolve the conflict,
    thus replicating the behaviour of the corresponding methods on the `Hash` class.

    *Leo Cassarani*

193 194 195 196 197 198
*   Remove `j` alias for `ERB::Util#json_escape`.
    The `j` alias is already used for `ActionView::Helpers::JavaScriptHelper#escape_javascript`
    and both modules are included in the view context that would confuse the developers.

    *Akira Matsuda*

199 200 201 202
*   Replace deprecated `memcache-client` gem with `dalli` in ActiveSupport::Cache::MemCacheStore

    *Guillermo Iguaran*

203 204 205 206 207
*   Add default values to all `ActiveSupport::NumberHelper` methods, to avoid
    errors with empty locales or missing values.

    *Carlos Antonio da Silva*

208 209
*   `ActiveSupport::JSON::Variable` is deprecated. Define your own `#as_json` and
    `#encode_json` methods for custom JSON string literals.
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

    *Erich Menge*

*   Add String#indent. *fxn & Ace Suares*

*   Inflections can now be defined per locale. `singularize` and `pluralize`
    accept locale as an extra argument.

    *David Celis*

*   `Object#try` will now return nil instead of raise a NoMethodError if the
    receiving object does not implement the method, but you can still get the
    old behavior by using the new `Object#try!`.

    *DHH*

M
Mark Turner 已提交
226
*   `ERB::Util.html_escape` now escapes single quotes. *Santiago Pastorino*
227

228
*   `Time#change` now works with time values with offsets other than UTC or the local time zone. *Andrew White*
229

230
*   `ActiveSupport::Callbacks`: deprecate usage of filter object with `#before` and `#after` methods as `around` callback. *Bogdan Gusiev*
231

232
*   Add `Time#prev_quarter` and `Time#next_quarter` short-hands for `months_ago(3)` and `months_since(3)`. *SungHee Kang*
233

234 235
*   Remove obsolete and unused `require_association` method from dependencies. *fxn*

236 237 238 239 240 241 242 243 244 245 246 247
*   Add `:instance_accessor` option for `config_accessor`.

        class User
          include ActiveSupport::Configurable
          config_accessor :allowed_access, instance_accessor: false
        end

        User.new.allowed_access = true # => NoMethodError
        User.new.allowed_access        # => NoMethodError

    *Francesco Rodriguez*

248 249
*   ActionView::Helpers::NumberHelper methods have been moved to ActiveSupport::NumberHelper and are now available via
    Numeric#to_s.  Numeric#to_s now accepts the formatting  options :phone, :currency, :percentage, :delimited,
250 251
    :rounded, :human, and :human_size. *Andrew Mutz*

252
*   Add `Hash#transform_keys`, `Hash#transform_keys!`, `Hash#deep_transform_keys`, and `Hash#deep_transform_keys!`. *Mark McSpadden*
253

254
*   Changed xml type `datetime` to `dateTime` (with upper case letter `T`). *Angelo Capilleri*
255

256 257
*   Add `:instance_accessor` option for `class_attribute`. *Alexey Vakhov*

258 259
*   `constantize` now looks in the ancestor chain. *Marc-Andre Lafortune & Andrew White*

260 261 262 263
*   Adds `Hash#deep_stringify_keys` and `Hash#deep_stringify_keys!` to convert all keys from a +Hash+ instance into strings *Lucas Húngaro*

*   Adds `Hash#deep_symbolize_keys` and `Hash#deep_symbolize_keys!` to convert all keys from a +Hash+ instance into symbols *Lucas Húngaro*

264
*   `Object#try` can't call private methods. *Vasiliy Ermolovich*
265

266 267
*   `AS::Callbacks#run_callbacks` remove `key` argument. *Francesco Rodriguez*

268
*   `deep_dup` works more expectedly now and duplicates also values in +Hash+ instances and elements in +Array+ instances. *Alexey Gaziev*
269

270
*   Inflector no longer applies ice -> ouse to words like slice, police, ets *Wes Morgan*
J
José Valim 已提交
271

272
*   Add `ActiveSupport::Deprecations.behavior = :silence` to completely ignore Rails runtime deprecations *twinturbo*
273

274
*   Make Module#delegate stop using `send` - can no longer delegate to private methods. *dasch*
D
Daniel Schierbeck 已提交
275

276
*   AS::Callbacks: deprecate `:rescuable` option. *Bogdan Gusiev*
277

278
*   Adds Integer#ordinal to get the ordinal suffix string of an integer. *Tim Gildea*
279

280
*   AS::Callbacks: `:per_key` option is no longer supported
281

282
*   `AS::Callbacks#define_callbacks`: add `:skip_after_callbacks_if_terminated` option.
283

284
*   Add html_escape_once to ERB::Util, and delegate escape_once tag helper to it. *Carlos Antonio da Silva*
285

286 287
*   Deprecates the compatibility method Module#local_constant_names,
    use Module#local_constants instead (which returns symbols). *fxn*
288

289 290
*   Deletes the compatibility method Module#method_names,
    use Module#methods from now on (which returns symbols). *fxn*
291

292 293
*   Deletes the compatibility method Module#instance_method_names,
    use Module#instance_methods from now on (which returns symbols). *fxn*
294

295 296
*   BufferedLogger is deprecated.  Use ActiveSupport::Logger, or the logger
    from Ruby stdlib.
297

298
*   Unicode database updated to 6.1.0.
299

300 301
*   Adds `encode_big_decimal_as_string` option to force JSON serialization of BigDecimals as numeric instead
    of wrapping them in strings for safety.
302

303 304
*   Remove deprecated ActiveSupport::JSON::Variable. *Erich Menge*

305 306
*   Optimize log subscribers to check log level before doing any processing. *Brian Durand*

X
Xavier Noria 已提交
307
Please check [3-2-stable](https://github.com/rails/rails/blob/3-2-stable/activesupport/CHANGELOG.md) for previous changes.