# Changelog All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] Note: [Next major version (X-mas 2021?)](https://github.com/marcandre/backports/issues/139) may drop support for Ruby < 2.2, please comment. ## [3.20.1](https://github.com/marcandre/backports/compare/v3.20.0...v3.20.1) - 2021-01-03 ### Fixed * Added `Ractor.[]` and `[]=` [#161] * `Ractor.current` fixed from threads [#161] ## [3.20.0](https://github.com/marcandre/backports/compare/v3.19.0...v3.20.0) - 2020-12-30 ### Added Ractor backport (all methods) ## [3.19.0](https://github.com/marcandre/backports/compare/v3.18.2...v3.19.0) - 2020-12-28 ### Added * Ruby 3.0 backports * Env * `except` * Hash * `except` * `transform_keys`, `transform_keys!` (with hash argument) * Symbol * `name` * Ruby 2.3 backports * Queue * `close`, `closed?` (affects `push`, `pop` and aliases) ## [3.18.2](https://github.com/marcandre/backports/compare/v3.18.0...v3.18.2) - 2020-08-26 ### Fixed Require per ruby version now properly requiring 2.3.0 backports for `String` [#152] ## [3.18.1](https://github.com/marcandre/backports/compare/v3.18.1...v3.18.2) - 2020-06-22 ### Fixed Fixed Changelog URI in gem manifest ## [3.18.0](https://github.com/marcandre/backports/compare/v3.17.2...v3.18.0) - 2020-06-22 ### Changed Require per ruby version / all requires now check `RUBY_VERSION` to be more efficient [#149] ## [3.17.2](https://github.com/marcandre/backports/compare/v3.17.1...v3.17.2) - 2020-04-09 ### Fixed Fix Range#cover (Ruby 2.6.0) [#148] ## [3.17.1](https://github.com/marcandre/backports/compare/v3.17.0...v3.17.1) - 2020-04-09 ### Fixed Fix Range#size (Ruby 2.0) on Ruby 1.8.7 [#144] ## [3.17.0](https://github.com/marcandre/backports/compare/v3.16.2...v3.17.0) - 2020-03-06 ### Added * Ruby 2.6 backports * Range * `cover?` (with `Range` argument) ### Changed Requiring features for a particular version of Ruby or `latest` is un-deprecated but instead simply warned in verbose mode. ## [3.16.1](https://github.com/marcandre/backports/compare/v3.16.0...v3.16.1) - 2020-02-16 ### Deprecated Officially deprecate requiring features for a particular version of Ruby, `latest`, `std_lib` or `rails` backports. Partly un-deprecated in 3.17.0! ### Fixed `matrix` library when loaded in 2.7.0 [#141] ## [3.16.0](https://github.com/marcandre/backports/compare/v3.15.0...v3.16.0) - 2020-02-06 ### Added * Ruby 2.7 backports * Array * `intersection` * Comparable * `clamp` (with range) * Complex * `<=>` * Enumerable * `filter_map` * `tally` * Enumerator * `produce` (class method) * Time * `floor`, `ceil` ## [3.15.0] - 2019-05-15 ### Added * Proc / Method * `<<`, `>>` ## 3.14.0 - 2019-04-29 ### Added * Hash * `to_h` (with block) ## 3.13.0 - 2019-04-5 ### Added * Hash * `merge`, `merge!`/`update` (with multiple arguments) ## 3.12.0 - 2019-02-20 ### Added * Ruby 2.6.0 backports * Array * `difference`, `union` * `to_h` (with block) * Enumerable * `chain` * `to_h` (with block) * Enumerator::Chain (use Enumerable#chain) * Kernel * `then` * Additional backports for 2.5.0: * String * `undump` ## 3.11.0 - 2017-12-25 ### Added * Ruby version 2.5.0 backports * Array * `append`, `prepend` * Dir * `children`, `each_child` * Enumerable * `any?`, `all?`, `none?`, `one?` (with pattern argument) * Hash * `slice` * `transform_keys` * Integer * `sqrt` * `allbits?`, `anybits?` and `nobits?` * Kernel * `yield_self` * Module * `attr`, `attr_accessor`, `attr_reader`, `attr_writer` (now public) * `define_method`, `alias_method`, `undef_method`, `remove_method` (now public) * String * `delete_prefix`, `delete_prefix!` * `delete_suffix`, `delete_suffix!` * Struct * `new` (with `keyword_init: true`) * `require 'backports/latest'` is now the way to require everything, but is discouraged ## 3.10.0 - 2017-10-17 ### Added * Additional features of 2.4.0 * Enumerable * `uniq` * `sum` * Hash * `compact` * `transform_values` ## 3.9.0 - 2017-10-07 ### Added * From 2.4.0: `dup` for `true`, `false`, `nil`, Numeric * From 2.2.0: `Method#super_method` ## 3.8.0 - 2017-04-26 ### Added * From 2.4.0: `String#match?`, `Regexp#match?` * From 2.3.0: * unary `String#+`, `-` * Numeric: `positive?`, `negative?` * Hash: `to_proc`, `fetch_values`, `>`, `<`, `>=`, `<=` * Enumerable: `chunk_while`, `grep_v` * `{Array|Hash|Struct}#dig` * `Array#bsearch_index` * From 2.2.0: * `Method#curry` * `String#unicode_normalize{|?|!}` * `Kernel#itself` * Float: `next_float`, `prev_float` ## 3.7.0 - 2017-03-28 Initiate work on backports of 2.2, 2.3, 2.4 ### Added * From 2.4.0: * `Comparable#clamp` * From 2.2.0: * Enumerable: `slice_when`, `slice_after` ## 3.6.0 - 2014-02-14 ### Added * Additional features of 2.1.0 * Bignum#bit_length * Fixnum#bit_length * Module#include (now public) ## 3.5.0 - 2014-02-3 ### Added * Additional features of 2.0.0 * Range#size ## 3.4.0 - 2013-12-29 ### Added * Additional features of 2.1.0 * Array#to_h, Enumerable#to_h ## 3.3.0 - 2013-04-03 ### Fixed * Moved `Proc#yield` & `Hash#key` from 1.8.7 to 1.9.1 ## 3.2.0 - 2013-04-02 ### Fixed * Moved `Dir.mktmpdir` to the stdlib 'tmpdir' for Ruby 1.8.7 ### Removed * Removed `returning` as it is no longer part of Rails. ## 3.1.0 - 2013-03-05 ### Added * Backports can now be loaded separately! ### Fixed * Small tweaks and fixes for many methods to pass more RubySpecs ## 3.0.0 - 2013-02-24 ### Added * Additional features of 2.0.0 * Struct#to_h, NilClass#to_h, Hash#to_h * Hash#default_proc = nil * OpenStruct lib * 1.8.7's Enumerator#with_index (it wasn't in the 1.8.7 NEWS file...) ## 2.8.0 - 2013-02-3 ### Added * Added some features of 2.0.0 (must be required explicitly until official release): * Array#bsearch * Range#bsearch ## 2.7.0 - 2013-01-14 ### Added * Features of 2.0.0 (must be required explicitly until official release): * Enumerable#lazy * Enumerator::Lazy ## 2.6.0 - 2012-05-29 ### Removed * Enumerable#join ## 2.5.0 - 2012-02-25 ### Added * Some features of 1.9.3: * IO::NULL * IO#advise * String#byteslice * String#prepend ## 2.4.0 - 2012-02-24 ### Added * Add backporting for libraries * Bring libraries up to date: * Matrix * Prime * Set * Some features of 1.9.3: * IO.write, IO.binwrite * Forcing backports (must be required explicitly): * Hash#select (returns a Hash instead of an Array) * Enumerable / Array#map (returns an enumerator when called without a block) * String#length, size (for UTF-8 support) ## 2.3.0 - 2011-05-13 ### Added * `Enumerator::Yielder#<<` ## 2.2.0 - 2011-05-13 ### Fixed * Ruby 1.8.8 was officially cancelled; code was moved to Ruby 1.9.1 and README updated. * `"".ord` now raises an error. ## 2.1.0 - 2011-04-16 ### Added * Proc#curry, #lambda (thanks Konstantine Haase) ## 2.0.0 - 2010-12-5 ### Fixed Change of major version because of two small changes that are not quite compatible and because the minor version was getting quite high! * Remove attempt at faking the new method missing. Unless you used `respond_to_missing` **and** `method(:some_method_handled_with_method_missing)`, you won't see a difference, except better performance (see issue #32) and this fixes some errors (see issue #34) * Change behavior of array.flatten(0) to match Ruby 1.9 (i.e. return a dup of array, instead of array itself) ## 1.18.0 - 2010-06-19 ### Added * Some features of 1.9.1: * Math#log2, Math#log with base ### Fixed * Enumerator#each in 1.8.6. ## 1.17.0 - 2010-05-17 ### Added * Some features of 1.9.2: * Array#repeated_combination, #repeated_permutation ## 1.16.2 - 2010-04-11 ### Added * Some features of 1.9.2: * Array#uniq, #uniq! (with block) * Array#product (with block) * Dir.home * Hash#keep_if, select! * Random (new class) ## 1.15.0 - 2010-02-23 ### Added * A features of 1.9.2: * Object#singleton_class ## 1.14.0 - 2010-02-3 ### Added * Some features of 1.9.2: * Array#rotate, rotate! * Array#keep_if, select! * Array#sort_by! * Enumerable#join * Enumerable#slice_before * Float::INFINITY, NAN * MatchData#== ## 1.13.0 - 2010-01-20 ### Added * Missing for 1.8.7 were * Array#permutation * Hash#hash (was only inherited) * Hash#eql? (was only inherited) ## 1.12.0 - 2009-12-4 ### Added * Finer grain includes (see README) require "backports/1.9" # requires all ruby backports require "backports/1.9.1" # requires all ruby backports up to 1.9.1 (but not 1.9.2) * Backported all builtin methods of 1.8.8 (most of which where moved from the 1.9 backports) * Refreshed README ## 1.11.0 - 2009-11-04 ### Added * Enumerable#flat_map / collect_concat (Ruby 1.9) * Object#public_send (Ruby 1.9) * Object#public_method (Ruby 1.9) ## 1.10.0 - 2009-09-29 ### Added * Enumerable#chunk (Ruby 1.9) * Kernel#respond_to_missing? (Ruby 1.9) * Completed Process.exec (Ruby 1.8.7) ## 1.9.0 - 2009-09-04 ### Added * In Ruby 1.9, most class methods of File accept filenames as String, or convertible via #to_str or #to_path. * File#to_path is also an alias to File#path. These have been backported. * File.binread (actually IO.binread) * BasicObject available via "require 'backports/basic_object" ## 1.8.4 - 2009-09-03 ### Added `Dir.mktmpdir` for older version of 1.8.6 ## 1.8.1 - 2009-09-01 ### Added The alias String#lines (Ruby 1.8.7) ## 1.8.0 - 2009-08-30 ### Added Backports can be required selectively: * backports/1.8.7 * backports/1.9 (which include 1.8.7) * rails ## 1.7.1 - 2009-08-20 ### Fixed `Enumerable#take` and `Enumerable#first(n)` are now returning as soon as possible. Previously, `#each` was yielding one element too many. See redmine issue #1554. ## 1.7.0 - 2009-05-27 ### Fixed Porting all 1.8.7 features to rubinius was quite enlightening (http://blog.marc-andre.ca/2009/05/schizo-ruby-puzzle.html ). Many improvements were made to be consistent with MRI, e.g. converting arguments using to_int if needed, etc... The changes are now reflected in 'backports'. ### Added Some IO and ARGF methods were missing and are now complete. ## 1.6.6 - 2009-04-30 ### Fixed Important bug fix. `String#gsub` is left alone until I find a good way to modify it. ## 1.6.0 - 2009-04-29 ### Added Completed backport to 1.8.7. * Array * `extract_options!` * Binding * `eval` * Dir * `each`, `foreach` * Enumerator * `new` * `with_object` * `next`, `rewind` * Hash * Optional block for `delete_if, each, each_key, each_pair, each_value, reject!, select` (and ENV) * Integer * moved stuff out of Fixnum * Optional block for `downto`, `times`, `upto` * IO * Optional block for `each`, `each_line`, `each_byte`, `foreach` (and ARGF) * Kernel * `loop`, `StopIteration` * +__method__+, +__callee__+ * Method * `name`, `owner`, `receiver` * Module * `class_exec`, `module_exec` * Numeric * `step` * Object * `define_singleton_method` * `instance_exec` * ObjectSpace * `each_object` * Range * Optional block for `each`, `step` * Regexp * `union` * String * `try_convert` * `ascii_only?` * `bytesize` * `chr` * `clear` * `codepoints`, `each_codepoint` * `stringify_keys`, `stringify_keys!` * `each`, `each_line`, `each_byte` * `gsub` * `upto` * Struct * `each`, `each_pair` * Symbol * `<=>`, `casecmp` * `capitalize`, `downcase`, `next`, `succ`, `swapcase`, `upcase` * `=~, [], empty?, length, match, size` * UnboundMethod * `name`, `owner` ## 1.5.0 - 2009-04-24 ### Added * Array (completed) * `combination` * `try_convert` * Optional block for `collect!, :map!, :each, :each_index, :reject, :reject!, :delete_if` * `pop`, `shift` * `product` * Fixnum (completed) * `div`, `fdiv` * `succ` * `magnitude` * Enumerable (completed) * `each_with_object` * `inject` * `max_by`, `min_by`, `minmax`, `minmax_by` * `reduce` * `to_a` ## 1.4.0 - 2009-04-21 ### Added * String * `rpartition` * Proc * `yield` ## 1.3.0 - 2009-04-17 ### Added * Enumerable * `none?` * Array * `sample`, `shuffle`, `shuffle!` * String * `each_char`, `chars` * `partition` Tests and fixes for `String#start_with?` and `String#end_with?` ## 1.2.0 - 2009-04-12 ### Added * Array * `reverse_each` * `cycle` * Enumerable * `reverse_each` * `each_slice`, `each_cons` * `count` * `cycle` * `group_by` * Hash * `default_proc=` ## 1.1.0 - 2009-04-11 ### Added * Array * `flatten`, `flatten!` * `find_index`, `index` * Hash * `reverse_merge`, `reverse_merge!` ## 1.0.0 - 2009-04-2 * Initial release. ## Notes The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [Unreleased]: https://github.com/marcandre/backports/compare/v3.16.0...HEAD [3.16.0]: https://github.com/marcandre/backports/compare/v3.15.0...v3.16.0 [3.15.0]: https://github.com/marcandre/backports/compare/v3.14.0...v3.15.0