CHANGELOG.md 9.2 KB
Newer Older
K
Kevin Deisz 已提交
1 2 3 4 5 6 7
*   Add `Enumerable#pluck` to get the same values from arrays as from ActiveRecord
    associations.

    Fixes #20339.

    *Kevin Deisz*

8 9 10
*   Add a bang version to `ActiveSupport::OrderedOptions` get methods which will raise
    an `KeyError` if the value is `.blank?`

11 12 13
    Before:

        if (slack_url = Rails.application.secrets.slack_url).present?)
14
          # Do something worthwhile
15
        else
16
          # Raise as important secret password is not specified
17 18 19 20 21 22 23 24
        end

    After:

        slack_url = Rails.application.secrets.slack_url!

    *Aditya Sanghi*, *Gaurish Sharma*

25 26
*   Remove deprecated `Class#superclass_delegating_accessor`.
    Use `Class#class_attribute` instead.
27 28 29

    *Akshay Vishnoi*

30
*   Patch `Delegator` to work with `#try`.
31

32
    Fixes #5790.
33 34 35

    *Nate Smith*

36 37 38 39
*   Add `Integer#positive?` and `Integer#negative?` query methods
    in the vein of `Fixnum#zero?`.

    This makes it nicer to do things like `bunch_of_numbers.select(&:positive?)`.
40 41 42

    *DHH*

43
*   Encoding `ActiveSupport::TimeWithZone` to YAML now preserves the timezone information.
44 45 46 47 48

    Fixes #9183.

    *Andrew White*

49 50 51 52 53
*   Added `ActiveSupport::TimeZone#strptime` to allow parsing times as if
    from a given timezone.

    *Paul A Jungwirth*

54 55 56 57 58
*   `ActiveSupport::Callbacks#skip_callback` now raises an `ArgumentError` if
    an unrecognized callback is removed.

    *Iain Beeston*

59
*   Added `ActiveSupport::ArrayInquirer` and `Array#inquiry`.
60 61 62 63 64 65 66 67 68 69 70 71 72 73

    Wrapping an array in an `ArrayInquirer` gives a friendlier way to check its
    contents:

        variants = ActiveSupport::ArrayInquirer.new([:phone, :tablet])

        variants.phone?    # => true
        variants.tablet?   # => true
        variants.desktop?  # => false

        variants.any?(:phone, :tablet)   # => true
        variants.any?(:phone, :desktop)  # => true
        variants.any?(:desktop, :watch)  # => false

74 75 76
    `Array#inquiry` is a shortcut for wrapping the receiving array in an
    `ArrayInquirer`.

77 78
    *George Claghorn*

Y
Yves Senn 已提交
79 80
*   Deprecate `alias_method_chain` in favour of `Module#prepend` introduced in
    Ruby 2.0.
81 82 83

    *Kir Shatrov*

T
Todd Bealmear 已提交
84 85 86 87 88
*   Added `#without` on `Enumerable` and `Array` to return a copy of an
    enumerable without the specified elements.

    *Todd Bealmear*

K
karanarora 已提交
89
*   Fixed a problem where `String#truncate_words` would get stuck with a complex
90 91 92 93
    string.

    *Henrik Nygren*

K
karanarora 已提交
94
*   Fixed a roundtrip problem with `AS::SafeBuffer` where primitive-like strings
95 96 97 98
    will be dumped as primitives:

    Before:

99 100 101 102 103
        YAML.load ActiveSupport::SafeBuffer.new("Hello").to_yaml  # => "Hello"
        YAML.load ActiveSupport::SafeBuffer.new("true").to_yaml   # => true
        YAML.load ActiveSupport::SafeBuffer.new("false").to_yaml  # => false
        YAML.load ActiveSupport::SafeBuffer.new("1").to_yaml      # => 1
        YAML.load ActiveSupport::SafeBuffer.new("1.1").to_yaml    # => 1.1
104

105
    After:
106

107 108 109 110 111
        YAML.load ActiveSupport::SafeBuffer.new("Hello").to_yaml  # => "Hello"
        YAML.load ActiveSupport::SafeBuffer.new("true").to_yaml   # => "true"
        YAML.load ActiveSupport::SafeBuffer.new("false").to_yaml  # => "false"
        YAML.load ActiveSupport::SafeBuffer.new("1").to_yaml      # => "1"
        YAML.load ActiveSupport::SafeBuffer.new("1.1").to_yaml    # => "1.1"
112 113 114

    *Godfrey Chan*

115 116
*   Enable `number_to_percentage` to keep the number's precision by allowing
    `:precision` to be `nil`.
117

118
    *Jack Xu*
119

120
*   `config_accessor` became a private method, as with Ruby's `attr_accessor`.
121 122 123

    *Akira Matsuda*

124 125 126 127 128
*   `AS::Testing::TimeHelpers#travel_to` now changes `DateTime.now` as well as
    `Time.now` and `Date.today`.

    *Yuki Nishijima*

129 130 131 132 133 134 135 136
*   Add `file_fixture` to `ActiveSupport::TestCase`.
    It provides a simple mechanism to access sample files in your test cases.

    By default file fixtures are stored in `test/fixtures/files`. This can be
    configured per test-case using the `file_fixture_path` class attribute.

    *Yves Senn*

137 138 139 140
*   Return value of yielded block in `File.atomic_write`.

    *Ian Ker-Seymer*

K
karanarora 已提交
141
*   Duplicate frozen array when assigning it to a `HashWithIndifferentAccess` so
142 143 144 145 146 147
    that it doesn't raise a `RuntimeError` when calling `map!` on it in `convert_value`.

    Fixes #18550.

    *Aditya Kapoor*

148 149 150 151 152
*   Add missing time zone definitions for Russian Federation and sync them
    with `zone.tab` file from tzdata version 2014j (latest).

    *Andrey Novikov*

G
Guillermo Iguaran 已提交
153 154
*   Add `SecureRandom.base58` for generation of random base58 strings.

155
    *Matthew Draper*, *Guillermo Iguaran*
G
Guillermo Iguaran 已提交
156

157 158 159 160 161
*   Add `#prev_day` and `#next_day` counterparts to `#yesterday` and
    `#tomorrow` for `Date`, `Time`, and `DateTime`.

    *George Claghorn*

162 163 164 165 166
*   Add `same_time` option to `#next_week` and `#prev_week` for `Date`, `Time`,
    and `DateTime`.

    *George Claghorn*

167 168 169
*   Add `#on_weekend?`, `#next_weekday`, `#prev_weekday` methods to `Date`,
    `Time`, and `DateTime`.

K
karanarora 已提交
170
    `#on_weekend?` returns `true` if the receiving date/time falls on a Saturday
171 172 173 174 175 176 177 178 179 180
    or Sunday.

    `#next_weekday` returns a new date/time representing the next day that does
    not fall on a Saturday or Sunday.

    `#prev_weekday` returns a new date/time representing the previous day that
    does not fall on a Saturday or Sunday.

    *George Claghorn*

181 182 183 184
*   Change the default test order from `:sorted` to `:random`.

    *Rafael Mendonça França*

185 186 187 188
*   Remove deprecated `ActiveSupport::JSON::Encoding::CircularReferenceError`.

    *Rafael Mendonça França*

189 190 191 192 193
*   Remove deprecated methods `ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=`
    and `ActiveSupport::JSON::Encoding.encode_big_decimal_as_string`.

    *Rafael Mendonça França*

194 195 196 197
*   Remove deprecated `ActiveSupport::SafeBuffer#prepend`.

    *Rafael Mendonça França*

198 199 200 201 202 203
*   Remove deprecated methods at `Kernel`.

    `silence_stderr`, `silence_stream`, `capture` and `quietly`.

    *Rafael Mendonça França*

204 205 206 207 208
*   Remove deprecated `active_support/core_ext/big_decimal/yaml_conversions`
    file.

    *Rafael Mendonça França*

209 210 211 212 213
*   Remove deprecated methods `ActiveSupport::Cache::Store.instrument` and
    `ActiveSupport::Cache::Store.instrument=`.

    *Rafael Mendonça França*

214
*   Change the way in which callback chains can be halted.
215

216 217 218 219 220 221 222 223
    The preferred method to halt a callback chain from now on is to explicitly
    `throw(:abort)`.
    In the past, returning `false` in an ActiveSupport callback had the side
    effect of halting the callback chain. This is not recommended anymore and,
    depending on the value of
    `Callbacks::CallbackChain.halt_and_display_warning_on_return_false`, will
    either not work at all or display a deprecation warning.

K
karanarora 已提交
224
*   Add `Callbacks::CallbackChain.halt_and_display_warning_on_return_false`
225 226

    Setting `Callbacks::CallbackChain.halt_and_display_warning_on_return_false`
K
karanarora 已提交
227
    to `true` will let an app support the deprecated way of halting callback
228 229
    chains by returning `false`.

K
karanarora 已提交
230
    Setting the value to `false` will tell the app to ignore any `false` value
231 232 233 234 235 236 237 238 239
    returned by callbacks, and only halt the chain upon `throw(:abort)`.

    The value can also be set with the Rails configuration option
    `config.active_support.halt_callback_chains_on_return_false`.

    When the configuration option is missing, its value is `true`, so older apps
    ported to Rails 5.0 will not break (but display a deprecation warning).
    For new Rails 5.0 apps, its value is set to `false` in an initializer, so
    these apps will support the new behavior by default.
240 241 242

    *claudiob*

K
karanarora 已提交
243
*   Changes arguments and default value of CallbackChain's `:terminator` option
244 245 246 247 248 249

    Chains of callbacks defined without an explicit `:terminator` option will
    now be halted as soon as a `before_` callback throws `:abort`.

    Chains of callbacks defined with a `:terminator` option will maintain their
    existing behavior of halting as soon as a `before_` callback matches the
250
    terminator's expectation.
251 252 253

    *claudiob*

254 255 256 257 258 259 260
*   Deprecate `MissingSourceFile` in favor of `LoadError`.

    `MissingSourceFile` was just an alias to `LoadError` and was not being
    raised inside the framework.

    *Rafael Mendonça França*

R
Robin Dupret 已提交
261 262
*   Add support for error dispatcher classes in `ActiveSupport::Rescuable`.
    Now it acts closer to Ruby's rescue.
263

264 265
    Example:

266 267 268 269 270 271 272 273 274 275 276 277 278 279
        class BaseController < ApplicationController
          module ErrorDispatcher
            def self.===(other)
              Exception === other && other.respond_to?(:status)
            end
          end

          rescue_from ErrorDispatcher do |error|
            render status: error.status, json: { error: error.to_s }
          end
        end

    *Genadi Samokovarov*

R
Robin Dupret 已提交
280
*   Add `#verified` and `#valid_message?` methods to `ActiveSupport::MessageVerifier`
281

R
Robin Dupret 已提交
282 283 284 285
    Previously, the only way to decode a message with `ActiveSupport::MessageVerifier`
    was to use `#verify`, which would raise an exception on invalid messages. Now
    `#verified` can also be used, which returns `nil` on messages that cannot be
    decoded.
286

R
Robin Dupret 已提交
287 288 289
    Previously, there was no way to check if a message's format was valid without
    attempting to decode it. `#valid_message?` is a boolean convenience method that
    checks whether the message is valid without actually decoding it.
290

291 292
    *Logan Leger*

293
Please check [4-2-stable](https://github.com/rails/rails/blob/4-2-stable/activesupport/CHANGELOG.md) for previous changes.