backports 3.20.0 → 3.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/Gemfile +1 -1
- data/README.md +285 -158
- data/lib/backports/2.1.0/module/singleton_class.rb +8 -0
- data/lib/backports/2.3.0/struct/dig.rb +2 -0
- data/lib/backports/2.4.0/string/unpack1.rb +7 -0
- data/lib/backports/2.5.0/dir/children.rb +4 -0
- data/lib/backports/2.5.0/dir/each_child.rb +7 -0
- data/lib/backports/2.5.0/integer/sqrt.rb +1 -1
- data/lib/backports/2.7.0/complex/{comparision.rb → comparison.rb} +0 -0
- data/lib/backports/2.7.0/enumerable/tally.rb +4 -3
- data/lib/backports/3.0.0/ractor.rb +15 -1
- data/lib/backports/3.1.0/array/intersect.rb +16 -0
- data/lib/backports/3.1.0/array.rb +3 -0
- data/lib/backports/3.1.0/class/descendants.rb +11 -0
- data/lib/backports/3.1.0/class/subclasses.rb +11 -0
- data/lib/backports/3.1.0/class.rb +3 -0
- data/lib/backports/3.1.0/enumerable/compact.rb +5 -0
- data/lib/backports/3.1.0/enumerable/tally.rb +18 -0
- data/lib/backports/3.1.0/enumerable.rb +3 -0
- data/lib/backports/3.1.0/file/dirname.rb +16 -0
- data/lib/backports/3.1.0/file.rb +3 -0
- data/lib/backports/3.1.0/integer/try_convert.rb +5 -0
- data/lib/backports/3.1.0/integer.rb +3 -0
- data/lib/backports/3.1.0/match_data/match.rb +5 -0
- data/lib/backports/3.1.0/match_data/match_length.rb +6 -0
- data/lib/backports/3.1.0/match_data.rb +3 -0
- data/lib/backports/3.1.0/struct/keyword_init.rb +5 -0
- data/lib/backports/3.1.0/struct.rb +3 -0
- data/lib/backports/3.1.0.rb +3 -0
- data/lib/backports/3.1.rb +1 -0
- data/lib/backports/latest.rb +1 -1
- data/lib/backports/ractor/cloner.rb +81 -69
- data/lib/backports/ractor/errors.rb +14 -10
- data/lib/backports/{tools → ractor}/filtered_queue.rb +11 -8
- data/lib/backports/ractor/queues.rb +50 -46
- data/lib/backports/ractor/ractor.rb +225 -191
- data/lib/backports/ractor/sharing.rb +75 -71
- data/lib/backports/version.rb +1 -1
- metadata +25 -4
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Backports Library [<img src="https://travis-ci.org/marcandre/backports.svg?branch=master">](https://travis-ci.org/marcandre/backports) [<img src="https://badge.fury.io/rb/backports.svg" alt="Gem Version" />](http://badge.fury.io/rb/backports) [](https://tidelift.com/subscription/pkg/rubygems-backports?utm_source=rubygems-backports&utm_medium=referral&utm_campaign=readme)
|
2
2
|
|
3
|
-
Yearning to
|
3
|
+
Yearning to write a gem using some new cool features in Ruby 3.1 while
|
4
4
|
still supporting Ruby 2.5.x?
|
5
5
|
Have some legacy code in Ruby 1.8 but can't live without `flat_map`?
|
6
6
|
|
@@ -38,25 +38,26 @@ This will make sure that Hash responds to `dig`, `fetch_values`, `to_proc` and c
|
|
38
38
|
### Up to a specific Ruby version (for quick coding)
|
39
39
|
|
40
40
|
You can load all backports up to a specific version.
|
41
|
-
For example, to bring any version of Ruby mostly up to Ruby 3.
|
41
|
+
For example, to bring any version of Ruby mostly up to Ruby 3.1.0's standards:
|
42
42
|
|
43
|
-
require 'backports/3.
|
43
|
+
require 'backports/3.1.0'
|
44
44
|
|
45
45
|
This will bring in all the features of 1.8.7 and many features of Ruby 1.9.x
|
46
|
-
all the way up to Ruby 3.
|
46
|
+
all the way up to Ruby 3.1.0 (for all versions of Ruby)!
|
47
47
|
|
48
48
|
You may `require 'backports/latest'` as a
|
49
49
|
shortcut to the latest Ruby version supported.
|
50
50
|
|
51
|
-
|
51
|
+
_Note_: For production / public gems, it is highly recommended you only require
|
52
52
|
the backports you need explicitly.
|
53
53
|
|
54
|
-
|
54
|
+
_Note_: Although I am a Ruby committer, this gem is a personal project and is
|
55
55
|
not endorsed by ruby-core.
|
56
56
|
|
57
57
|
## What's inside
|
58
58
|
|
59
59
|
Goals for backported features:
|
60
|
+
|
60
61
|
1. Won't break older code
|
61
62
|
2. Pure Ruby (no C extensions)
|
62
63
|
3. Pass [ruby/spec](https://github.com/ruby/spec)
|
@@ -108,349 +109,464 @@ itself, JRuby and Rubinius.
|
|
108
109
|
|
109
110
|
# Complete List of backports
|
110
111
|
|
112
|
+
## Ruby 3.1 backports
|
113
|
+
|
114
|
+
#### Array
|
115
|
+
|
116
|
+
- `intersect?`
|
117
|
+
|
118
|
+
#### Class
|
119
|
+
|
120
|
+
- `descendants`
|
121
|
+
- `subclasses`
|
122
|
+
|
123
|
+
#### Enumerable
|
124
|
+
|
125
|
+
- `compact`
|
126
|
+
- `tally` (with hash argument)
|
127
|
+
|
128
|
+
### File
|
129
|
+
|
130
|
+
- `dirname` (with depth argument)
|
131
|
+
|
132
|
+
#### Integer
|
133
|
+
|
134
|
+
- `try_convert`
|
135
|
+
|
136
|
+
#### MatchData
|
137
|
+
|
138
|
+
- `match`
|
139
|
+
- `match_length`
|
140
|
+
|
141
|
+
#### Struct
|
142
|
+
|
143
|
+
- `keyword_init?`
|
144
|
+
|
111
145
|
## Ruby 3.0 backports
|
112
146
|
|
113
147
|
#### Env
|
114
|
-
|
148
|
+
|
149
|
+
- `except`
|
115
150
|
|
116
151
|
#### Hash
|
117
|
-
|
118
|
-
|
152
|
+
|
153
|
+
- `except`
|
154
|
+
- `transform_keys`, `transform_keys!` (with hash argument)
|
119
155
|
|
120
156
|
#### Ractor
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
157
|
+
|
158
|
+
- All methods, with the caveats:
|
159
|
+
- uses Ruby's `Thread` internally
|
160
|
+
- will not raise some errors when `Ractor` would (in particular `Ractor::IsolationError`)
|
161
|
+
- supported in Ruby 2.0+ only
|
125
162
|
|
126
163
|
#### Symbol
|
127
|
-
|
164
|
+
|
165
|
+
- `name`
|
128
166
|
|
129
167
|
## Ruby 2.7 backports
|
130
168
|
|
131
169
|
#### Array
|
132
|
-
|
170
|
+
|
171
|
+
- `intersection`
|
133
172
|
|
134
173
|
#### Comparable
|
135
|
-
|
174
|
+
|
175
|
+
- `clamp` (with range)
|
136
176
|
|
137
177
|
#### Complex
|
138
|
-
|
178
|
+
|
179
|
+
- `<=>`
|
139
180
|
|
140
181
|
#### Enumerable
|
141
|
-
|
142
|
-
|
182
|
+
|
183
|
+
- `filter_map`
|
184
|
+
- `tally`
|
143
185
|
|
144
186
|
#### Enumerator
|
145
|
-
|
187
|
+
|
188
|
+
- `produce` (class method)
|
146
189
|
|
147
190
|
#### Time
|
148
|
-
|
191
|
+
|
192
|
+
- `floor`, `ceil`
|
149
193
|
|
150
194
|
## Ruby 2.6 backports
|
151
195
|
|
152
196
|
#### Array
|
153
|
-
|
154
|
-
|
197
|
+
|
198
|
+
- `difference`, `union`
|
199
|
+
- `to_h` (with block)
|
155
200
|
|
156
201
|
#### Enumerable
|
157
|
-
|
158
|
-
|
202
|
+
|
203
|
+
- `chain`
|
204
|
+
- `to_h` (with block)
|
159
205
|
|
160
206
|
#### Enumerator::Chain (use Enumerable#chain)
|
161
207
|
|
162
208
|
#### Hash
|
163
|
-
|
164
|
-
|
209
|
+
|
210
|
+
- `merge`, `merge!`/`update` (with multiple arguments)
|
211
|
+
- `to_h` (with block)
|
165
212
|
|
166
213
|
#### Kernel
|
167
|
-
|
214
|
+
|
215
|
+
- `then`
|
168
216
|
|
169
217
|
#### Method
|
170
|
-
|
218
|
+
|
219
|
+
- `<<`, `>>`
|
171
220
|
|
172
221
|
#### Proc
|
173
|
-
|
222
|
+
|
223
|
+
- `<<`, `>>`
|
174
224
|
|
175
225
|
#### Range
|
176
|
-
|
226
|
+
|
227
|
+
- `cover?` (with `Range` argument)
|
177
228
|
|
178
229
|
## Ruby 2.5 backports
|
179
230
|
|
180
231
|
#### Array
|
181
|
-
|
232
|
+
|
233
|
+
- `append`, `prepend`
|
182
234
|
|
183
235
|
#### Dir
|
184
|
-
|
236
|
+
|
237
|
+
- `children`, `each_child`
|
185
238
|
|
186
239
|
#### Enumerable
|
187
|
-
|
240
|
+
|
241
|
+
- `any?`, `all?`, `none?`, `one?` (with pattern argument)
|
188
242
|
|
189
243
|
#### Hash
|
190
|
-
|
191
|
-
|
244
|
+
|
245
|
+
- `slice`
|
246
|
+
- `transform_keys`
|
192
247
|
|
193
248
|
#### Integer
|
194
|
-
|
195
|
-
|
249
|
+
|
250
|
+
- `sqrt`
|
251
|
+
- `allbits?`, `anybits?` and `nobits?`
|
196
252
|
|
197
253
|
#### Kernel
|
198
|
-
|
254
|
+
|
255
|
+
- `yield_self`
|
199
256
|
|
200
257
|
#### Module
|
201
|
-
|
202
|
-
|
203
|
-
|
258
|
+
|
259
|
+
- `attr`, `attr_accessor`, `attr_reader`, `attr_writer` (now public)
|
260
|
+
- `define_method`, `alias_method`, `undef_method`, `remove_method` (now
|
261
|
+
public)
|
204
262
|
|
205
263
|
#### String
|
206
|
-
|
207
|
-
|
208
|
-
|
264
|
+
|
265
|
+
- `delete_prefix`, `delete_prefix!`
|
266
|
+
- `delete_suffix`, `delete_suffix!`
|
267
|
+
- `undump`
|
209
268
|
|
210
269
|
#### Struct
|
211
|
-
|
270
|
+
|
271
|
+
- `new` (with `keyword_init: true`)
|
212
272
|
|
213
273
|
## Ruby 2.4 backports
|
214
274
|
|
215
275
|
#### Comparable
|
216
|
-
|
276
|
+
|
277
|
+
- `clamp`
|
217
278
|
|
218
279
|
#### Enumerable
|
219
|
-
|
220
|
-
|
280
|
+
|
281
|
+
- `sum`
|
282
|
+
- `uniq`
|
221
283
|
|
222
284
|
#### Hash
|
223
|
-
|
224
|
-
|
285
|
+
|
286
|
+
- `compact`, `compact!`
|
287
|
+
- `transform_values`, `transform_values!`
|
225
288
|
|
226
289
|
#### Queue
|
227
|
-
|
290
|
+
|
291
|
+
- `close`, `closed?`
|
228
292
|
|
229
293
|
#### Regexp
|
230
|
-
|
294
|
+
|
295
|
+
- `match?`
|
231
296
|
|
232
297
|
#### String
|
233
|
-
|
298
|
+
|
299
|
+
- `match?`
|
300
|
+
- `unpack1`
|
234
301
|
|
235
302
|
#### FalseClass, Fixnum, Bignum, Float, NilClass, TrueClass
|
236
|
-
|
303
|
+
|
304
|
+
- `dup`
|
237
305
|
|
238
306
|
## Ruby 2.3 backports
|
239
307
|
|
240
308
|
#### Array
|
241
|
-
|
242
|
-
|
309
|
+
|
310
|
+
- `bsearch_index`
|
311
|
+
- `dig`
|
243
312
|
|
244
313
|
#### Enumerable
|
245
|
-
|
246
|
-
|
314
|
+
|
315
|
+
- `chunk_while`
|
316
|
+
- `grep_v`
|
247
317
|
|
248
318
|
#### Hash
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
319
|
+
|
320
|
+
- `dig`
|
321
|
+
- `fetch_values`
|
322
|
+
- `to_proc`
|
323
|
+
- <=, <, >=, >
|
253
324
|
|
254
325
|
#### Numeric
|
255
|
-
|
256
|
-
|
326
|
+
|
327
|
+
- `negative?`
|
328
|
+
- `positive?`
|
257
329
|
|
258
330
|
#### String
|
259
|
-
|
331
|
+
|
332
|
+
- unary + and -
|
260
333
|
|
261
334
|
#### Struct
|
262
|
-
|
335
|
+
|
336
|
+
- `dig`
|
263
337
|
|
264
338
|
## Ruby 2.2 backports
|
265
339
|
|
266
340
|
#### Enumerable
|
267
|
-
|
268
|
-
|
341
|
+
|
342
|
+
- `slice_after`
|
343
|
+
- `slice_when`
|
269
344
|
|
270
345
|
#### Float
|
271
|
-
|
272
|
-
|
346
|
+
|
347
|
+
- `prev_float`
|
348
|
+
- `next_float`
|
273
349
|
|
274
350
|
#### Kernel
|
275
|
-
|
351
|
+
|
352
|
+
- `itself`
|
276
353
|
|
277
354
|
#### Method
|
278
|
-
|
279
|
-
|
355
|
+
|
356
|
+
- `curry`
|
357
|
+
- `super_method`
|
280
358
|
|
281
359
|
#### String
|
282
|
-
|
283
|
-
|
284
|
-
|
360
|
+
|
361
|
+
- `unicode_normalize`
|
362
|
+
- `unicode_normalize!`
|
363
|
+
- `unicode_normalize?`
|
285
364
|
|
286
365
|
## Ruby 2.1 backports
|
287
366
|
|
288
367
|
#### Array
|
289
|
-
|
368
|
+
|
369
|
+
- `to_h`
|
290
370
|
|
291
371
|
#### Bignum
|
292
|
-
|
372
|
+
|
373
|
+
- `bit_length`
|
293
374
|
|
294
375
|
#### Enumerable
|
295
|
-
|
376
|
+
|
377
|
+
- `to_h`
|
296
378
|
|
297
379
|
#### Fixnum
|
298
|
-
|
380
|
+
|
381
|
+
- `bit_length`
|
299
382
|
|
300
383
|
#### Module
|
301
|
-
|
384
|
+
|
385
|
+
- `include` (now public)
|
386
|
+
- `singleton_class?`
|
302
387
|
|
303
388
|
## Ruby 2.0 backports
|
304
389
|
|
305
390
|
#### Array
|
306
|
-
|
391
|
+
|
392
|
+
- `bsearch`
|
307
393
|
|
308
394
|
#### Enumerable
|
309
|
-
|
395
|
+
|
396
|
+
- `lazy`
|
310
397
|
|
311
398
|
#### Enumerator::Lazy
|
312
|
-
|
399
|
+
|
400
|
+
- all methods
|
313
401
|
|
314
402
|
#### Hash
|
315
|
-
|
316
|
-
|
403
|
+
|
404
|
+
- `default_proc=` (with nil argument)
|
405
|
+
- `to_h`
|
317
406
|
|
318
407
|
#### `nil.to_h`
|
319
408
|
|
320
409
|
#### Range
|
321
|
-
|
410
|
+
|
411
|
+
- `bsearch`
|
322
412
|
|
323
413
|
#### Struct
|
324
|
-
|
414
|
+
|
415
|
+
- `to_h`
|
325
416
|
|
326
417
|
## Ruby 1.9.3 backports
|
327
418
|
|
328
419
|
#### File
|
329
|
-
|
420
|
+
|
421
|
+
- `NULL`
|
330
422
|
|
331
423
|
#### IO
|
332
|
-
|
333
|
-
|
424
|
+
|
425
|
+
- `advise` (acts as a noop)
|
426
|
+
- `write`, `binwrite`
|
334
427
|
|
335
428
|
#### String
|
336
|
-
|
337
|
-
|
429
|
+
|
430
|
+
- `byteslice`
|
431
|
+
- `prepend`
|
338
432
|
|
339
433
|
## Ruby 1.9.2 backports
|
340
434
|
|
341
435
|
#### Array
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
436
|
+
|
437
|
+
- `rotate, rotate!`
|
438
|
+
- `keep_if, select!`
|
439
|
+
- `product` (with block)
|
440
|
+
- `repeated_combination`, `repeated_permutation`
|
441
|
+
- `sort_by!`
|
442
|
+
- `uniq, uniq!` (with block)
|
348
443
|
|
349
444
|
#### Complex
|
350
|
-
|
445
|
+
|
446
|
+
- `to_r`
|
351
447
|
|
352
448
|
#### Dir
|
353
|
-
|
449
|
+
|
450
|
+
- `home`
|
354
451
|
|
355
452
|
#### Enumerable
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
453
|
+
|
454
|
+
- `chunk`
|
455
|
+
- `flat_map`, `collect_concat`
|
456
|
+
- `join`
|
457
|
+
- `slice_before`
|
360
458
|
|
361
459
|
#### Float::INFINITY, NAN
|
362
460
|
|
363
461
|
#### Hash
|
364
|
-
|
462
|
+
|
463
|
+
- `keep_if`, `select!`
|
365
464
|
|
366
465
|
#### Object
|
367
|
-
|
466
|
+
|
467
|
+
- `singleton_class`
|
368
468
|
|
369
469
|
#### Random (new class)
|
370
470
|
|
371
|
-
|
471
|
+
_Note_: The methods of `Random` can't be required individually; the class
|
372
472
|
can only be required whole with `require 'backports/1.9.2/random'`.
|
373
473
|
|
374
474
|
## Ruby 1.9.1 backports
|
375
475
|
|
376
476
|
Additionally, the following Ruby 1.9 features have been backported:
|
477
|
+
|
377
478
|
#### Array
|
378
|
-
|
379
|
-
|
479
|
+
|
480
|
+
- `try_convert`
|
481
|
+
- `sample`
|
380
482
|
|
381
483
|
#### Enumerable
|
382
|
-
|
383
|
-
|
484
|
+
|
485
|
+
- `each_with_object`
|
486
|
+
- `each_with_index` (with arguments)
|
384
487
|
|
385
488
|
#### Enumerator
|
386
|
-
|
489
|
+
|
490
|
+
- `new` (with block)
|
387
491
|
|
388
492
|
#### File
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
493
|
+
|
494
|
+
- `binread`
|
495
|
+
- `to_path`
|
496
|
+
- All class methods accepting filenames will accept files or anything
|
497
|
+
with a `#to_path` method.
|
498
|
+
- `File.open` accepts an options hash.
|
394
499
|
|
395
500
|
#### Float
|
396
|
-
|
501
|
+
|
502
|
+
- `round`
|
397
503
|
|
398
504
|
#### Hash
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
505
|
+
|
506
|
+
- `assoc`, `rassoc`
|
507
|
+
- `key`
|
508
|
+
- `try_convert`
|
509
|
+
- `default_proc=`
|
403
510
|
|
404
511
|
#### Integer
|
405
|
-
|
406
|
-
|
512
|
+
|
513
|
+
- `magnitude`
|
514
|
+
- `round`
|
407
515
|
|
408
516
|
#### IO
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
517
|
+
|
518
|
+
- `bin_read`
|
519
|
+
- `try_convert`
|
520
|
+
- `ungetbyte`
|
521
|
+
- `IO.open` accepts an options hash.
|
413
522
|
|
414
523
|
#### Kernel
|
415
|
-
|
524
|
+
|
525
|
+
- `require_relative`
|
416
526
|
|
417
527
|
#### Math
|
418
|
-
|
419
|
-
|
528
|
+
|
529
|
+
- `log` (with base)
|
530
|
+
- `log2`
|
420
531
|
|
421
532
|
#### Numeric
|
422
|
-
|
533
|
+
|
534
|
+
- `round`
|
423
535
|
|
424
536
|
#### Object
|
425
|
-
|
426
|
-
|
427
|
-
|
537
|
+
|
538
|
+
- `define_singleton_method`
|
539
|
+
- `public_method`
|
540
|
+
- `public_send`
|
428
541
|
|
429
542
|
#### Proc
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
543
|
+
|
544
|
+
- `yield`
|
545
|
+
- `lambda?`
|
546
|
+
- `curry`
|
547
|
+
- `===`
|
434
548
|
|
435
549
|
#### Range
|
436
|
-
|
550
|
+
|
551
|
+
- `cover?`
|
437
552
|
|
438
553
|
#### Regexp
|
439
|
-
|
554
|
+
|
555
|
+
- `try_convert`
|
440
556
|
|
441
557
|
#### String
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
558
|
+
|
559
|
+
- `ascii_only?`
|
560
|
+
- `chr`
|
561
|
+
- `clear`
|
562
|
+
- `codepoints`, `each_codepoint`
|
563
|
+
- `get_byte`, `set_byte`
|
564
|
+
- `ord`
|
565
|
+
- `try_convert`
|
449
566
|
|
450
567
|
`Enumerator` can be accessed directly (instead of `Enumerable::Enumerator`)
|
451
568
|
|
452
|
-
To include
|
453
|
-
"backports/1.9.1"`.
|
569
|
+
To include _only_ these backports and those of the 1.8 line, `require "backports/1.9.1"`.
|
454
570
|
|
455
571
|
Moreover, a pretty good imitation of `BasicObject` is available, but since it
|
456
572
|
is only an imitation, it must be required explicitly:
|
@@ -464,8 +580,11 @@ Complete Ruby 1.8.7 backporting (core language). Refer to the official list of
|
|
464
580
|
backports!
|
465
581
|
|
466
582
|
Only exceptions:
|
583
|
+
|
467
584
|
#### String#gsub (the form returning an enumerator)
|
468
|
-
|
585
|
+
|
586
|
+
#### GC.stress= (not implemented)
|
587
|
+
|
469
588
|
#### Array#choice (removed in 1.9, use 1.9.1's Array#sample instead)
|
470
589
|
|
471
590
|
## Libraries
|
@@ -477,7 +596,9 @@ The backports would be automatically used after requiring 'backports/std_lib' bu
|
|
477
596
|
The following libraries are up to date with Ruby 1.9.3:
|
478
597
|
|
479
598
|
#### Matrix
|
599
|
+
|
480
600
|
#### Prime
|
601
|
+
|
481
602
|
#### Set
|
482
603
|
|
483
604
|
The following library is to date with Ruby 2.0.0:
|
@@ -488,6 +609,7 @@ I am aware of the following backport gem, which probably won't make it into
|
|
488
609
|
this gem:
|
489
610
|
|
490
611
|
#### Net::SMTP for Ruby 1.8.6:
|
612
|
+
|
491
613
|
[smtp_tls](http://seattlerb.rubyforge.org/smtp_tls/)
|
492
614
|
|
493
615
|
Requiring backports for a given version of Ruby will also load
|
@@ -500,13 +622,16 @@ but could be useful in some projects. It is possible to request such
|
|
500
622
|
incompatible changes. Backports currently supports the following:
|
501
623
|
|
502
624
|
#### Hash
|
503
|
-
|
625
|
+
|
626
|
+
- `select` (returns a Hash instead of an Array)
|
504
627
|
|
505
628
|
#### Enumerable / Array
|
506
|
-
|
629
|
+
|
630
|
+
- `map` (returns an enumerator when called without a block)
|
507
631
|
|
508
632
|
#### String
|
509
|
-
|
633
|
+
|
634
|
+
- `length`, `size` (for UTF-8 support)
|
510
635
|
|
511
636
|
These must be imported in addition to the backports gem, for example:
|
512
637
|
|
@@ -518,8 +643,11 @@ These must be imported in addition to the backports gem, for example:
|
|
518
643
|
Thanks for the bug reports and patches, in particular the repeat offenders:
|
519
644
|
|
520
645
|
#### Arto Bendiken ( [bendiken](http://github.com/bendiken) )
|
646
|
+
|
521
647
|
#### Konstantin Haase ( [rkh](https://github.com/rkh) )
|
648
|
+
|
522
649
|
#### Roger Pack ( [rdp](http://github.com/rdp) )
|
650
|
+
|
523
651
|
#### Victor Shepelev ( [zverok](http://github.com/zverok) )
|
524
652
|
|
525
653
|
## Contributing
|
@@ -545,5 +673,4 @@ Failures that are acceptable are added the to `tags` file.
|
|
545
673
|
LICENSE file.
|
546
674
|
|
547
675
|
Author
|
548
|
-
:
|
549
|
-
|
676
|
+
: Marc-André Lafortune
|