refinements 8.5.0 → 8.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91c5c0e066eac0f4f01a1b28a73f8aa122cb51725ff510fe69466db4f2cd4dac
4
- data.tar.gz: fc7b29eb6507fe08f2ebedd9a0b596c2bf70b7b9cd48a3b9de12cdae82613928
3
+ metadata.gz: e4dc374c744c7048ce100d331ab8e7b371582cf7f51a172ab2d946439b09884e
4
+ data.tar.gz: a0da5c502e385cbe3271e9a298960f856029e98ba9541e9d8c0cb91c33637241
5
5
  SHA512:
6
- metadata.gz: b9268d53d65140f5456f6c26521e7f55254480b58cfb30a73d9106aecb7a30977a02d03e8e37d6563904419a1a26d7dfec68f0f64a25f82baf294e817c01ac48
7
- data.tar.gz: b564b642883464ed667be47ecef73be99ef48665d1f2be8f34ae5ec48b852c6b9a07ee3c4b0c542154a538f54ceaed4e1eca9d528841150469d2c8a5957b6c3e
6
+ metadata.gz: 6855249021c392a26a9d3b85e12fd357ac4140bed632fd4c2a316d124fb8c47bcb1e24c3f76da2af6b3b40f6d06d01f96f42ad4987bf13a13175187cfe63a915
7
+ data.tar.gz: 5e064f823da67d4085cbcec41d00a3423b7abba5987514bbfd787f359ac62eb3b8820113fe1488b73f4cc77a84c807fc8fb87137be77ccf0cddd8220f70e035b
checksums.yaml.gz.sig CHANGED
Binary file
data/README.adoc CHANGED
@@ -11,9 +11,12 @@ image::https://img.shields.io/badge/code_style-alchemists-brightgreen.svg[Alchem
11
11
  [link=https://circleci.com/gh/bkuhlmann/refinements]
12
12
  image::https://circleci.com/gh/bkuhlmann/refinements.svg?style=svg[Circle CI Status]
13
13
 
14
- Refinements is a collection of enhancements to primitive Ruby objects without needing to resort
15
- painful and hard to debug monkey patches. These refinements give you additional syntactic sugar to
16
- build clean and concise implementations all while using less code.
14
+ Refinements are a collection of enhancements to primitive Ruby objects without needing to resort to
15
+ painful and hard to debug
16
+ link:https://www.alchemists.io/articles/ruby_antipatterns/#_monkey_patching[monkey patches]. These
17
+ refinements give you additional syntactic sugar to develop clean and concise implementations while
18
+ using less code. By refining our code we can acquire the functionality we wish the core primitives
19
+ had!
17
20
 
18
21
  toc::[]
19
22
 
@@ -70,6 +73,7 @@ gem "refinements", require: false
70
73
  ----
71
74
  require "refinements/arrays"
72
75
  require "refinements/big_decimals"
76
+ require "refinements/classes"
73
77
  require "refinements/date_times"
74
78
  require "refinements/hashes"
75
79
  require "refinements/ios"
@@ -77,6 +81,7 @@ require "refinements/pathnames"
77
81
  require "refinements/strings"
78
82
  require "refinements/string_ios"
79
83
  require "refinements/structs"
84
+ require "refinements/symbols"
80
85
  ----
81
86
 
82
87
  === Using
@@ -89,6 +94,7 @@ refinement(s):
89
94
  class Example
90
95
  using Refinements::Arrays
91
96
  using Refinements::BigDecimals
97
+ using Refinements::Classes
92
98
  using Refinements::DateTimes
93
99
  using Refinements::Hashes
94
100
  using Refinements::IOs
@@ -96,6 +102,7 @@ class Example
96
102
  using Refinements::Strings
97
103
  using Refinements::StringIOs
98
104
  using Refinements::Structs
105
+ using Refinements::Symbols
99
106
  end
100
107
  ----
101
108
 
@@ -113,8 +120,9 @@ Removes `nil` and empty objects without mutating itself.
113
120
  ----
114
121
  object = Object.new
115
122
  example = [1, "blueberry", nil, "", [], {}, object]
116
- example.compress # => [1, "blueberry", object]
117
- example # => [1, "blueberry", nil, "", [], {}, object]
123
+
124
+ example.compress # [1, "blueberry", object]
125
+ example # [1, "blueberry", nil, "", [], {}, object]
118
126
  ----
119
127
 
120
128
  ===== #compress!
@@ -125,8 +133,9 @@ Removes `nil` and empty values while mutating itself.
125
133
  ----
126
134
  object = Object.new
127
135
  example = [1, "blueberry", nil, "", [], {}, object]
128
- example.compress # => [1, "blueberry", object]
129
- example # => [1, "blueberry", object]
136
+
137
+ example.compress # [1, "blueberry", object]
138
+ example # [1, "blueberry", object]
130
139
  ----
131
140
 
132
141
  ===== #excluding
@@ -135,8 +144,8 @@ Removes given array or elements without mutating itself.
135
144
 
136
145
  [source,ruby]
137
146
  ----
138
- [1, 2, 3, 4, 5].excluding [4, 5] # => [1, 2, 3]
139
- [1, 2, 3, 4, 5].excluding 4, 5 # => [1, 2, 3]
147
+ [1, 2, 3, 4, 5].excluding [4, 5] # [1, 2, 3]
148
+ [1, 2, 3, 4, 5].excluding 4, 5 # [1, 2, 3]
140
149
  ----
141
150
 
142
151
  ===== #filter_find
@@ -151,9 +160,9 @@ handlers = [
151
160
  ->(object) { object if object == :a }
152
161
  ]
153
162
 
154
- handlers.filter_find # => Enumerator::Lazy
155
- handlers.filter_find { |handler| handler.call :a } # => :a
156
- handlers.filter_find { |handler| handler.call :x } # => nil
163
+ handlers.filter_find # Enumerator::Lazy
164
+ handlers.filter_find { |handler| handler.call :a } # :a
165
+ handlers.filter_find { |handler| handler.call :x } # nil
157
166
  ----
158
167
 
159
168
  ===== #including
@@ -162,8 +171,8 @@ Adds given array or elements without mutating itself.
162
171
 
163
172
  [source,ruby]
164
173
  ----
165
- [1, 2, 3].including [4, 5] # => [1, 2, 3, 4, 5]
166
- [1, 2, 3].including 4, 5 # => [1, 2, 3, 4, 5]
174
+ [1, 2, 3].including [4, 5] # [1, 2, 3, 4, 5]
175
+ [1, 2, 3].including 4, 5 # [1, 2, 3, 4, 5]
167
176
  ----
168
177
 
169
178
  ===== #intersperse
@@ -172,9 +181,9 @@ Inserts additional elements or array between all members of given array.
172
181
 
173
182
  [source,ruby]
174
183
  ----
175
- [1, 2, 3].intersperse :a # => [1, :a, 2, :a, 3]
176
- [1, 2, 3].intersperse :a, :b # => [1, :a, :b, 2, :a, :b, 3]
177
- [1, 2, 3].intersperse %i[a b c] # => [1, :a, :b, :c, 2, :a, :b, :c, 3]
184
+ [1, 2, 3].intersperse :a # [1, :a, 2, :a, 3]
185
+ [1, 2, 3].intersperse :a, :b # [1, :a, :b, 2, :a, :b, 3]
186
+ [1, 2, 3].intersperse %i[a b c] # [1, :a, :b, :c, 2, :a, :b, :c, 3]
178
187
  ----
179
188
 
180
189
  ===== #maximum
@@ -186,8 +195,8 @@ Answers the maximum extracted value from a collection of objects.
186
195
  Point = Struct.new :x, :y, keyword_init: true
187
196
  points = [Point[x: 1, y: 2], Point[x: 0, y: 1], Point[x: 2, y: 3]]
188
197
 
189
- points.maximum(:x) # => 2
190
- points.maximum(:y) # => 3
198
+ points.maximum(:x) # 2
199
+ points.maximum(:y) # 3
191
200
  ----
192
201
 
193
202
  ===== #mean
@@ -196,10 +205,10 @@ Answers mean/average all elements within an array.
196
205
 
197
206
  [source,ruby]
198
207
  ----
199
- [].mean # => 0
200
- [5].mean # => 5
201
- [1, 2, 3].mean # => 2
202
- [1.25, 1.5, 1.75].mean # => 1.5
208
+ [].mean # 0
209
+ [5].mean # 5
210
+ [1, 2, 3].mean # 2
211
+ [1.25, 1.5, 1.75].mean # 1.5
203
212
  ----
204
213
 
205
214
  ===== #minimum
@@ -211,8 +220,8 @@ Answers the minimum extracted value from a collection of objects.
211
220
  Point = Struct.new :x, :y, keyword_init: true
212
221
  points = [Point[x: 1, y: 2], Point[x: 0, y: 1], Point[x: 2, y: 3]]
213
222
 
214
- points.minimum(:x) # => 0
215
- points.minimum(:y) # => 1
223
+ points.minimum(:x) # 0
224
+ points.minimum(:y) # 1
216
225
  ----
217
226
 
218
227
  ===== #pad
@@ -222,9 +231,9 @@ needs to be a specific size with padded values.
222
231
 
223
232
  [source,ruby]
224
233
  ----
225
- [1].pad 0 # => [1]
226
- [1].pad 0, max: 3 # => [1, 0, 0]
227
- [1, 2].pad 3, max: 3 # => [1, 2, 3]
234
+ [1].pad 0 # [1]
235
+ [1].pad 0, max: 3 # [1, 0, 0]
236
+ [1, 2].pad 3, max: 3 # [1, 2, 3]
228
237
  ----
229
238
 
230
239
  ===== #ring
@@ -234,7 +243,7 @@ Answers a circular array which can enumerate before, current, after elements.
234
243
  [source,ruby]
235
244
  ----
236
245
  example = [1, 2, 3]
237
- example.ring # => #<Enumerator: ...>
246
+ example.ring # "#<Enumerator: ...>"
238
247
  example.ring { |(before, current, after)| puts "#{before} #{current} #{after}" }
239
248
 
240
249
  # [3 1 2]
@@ -250,7 +259,7 @@ Allows one to inspect a big decimal with numeric representation.
250
259
 
251
260
  [source,ruby]
252
261
  ----
253
- BigDecimal.new("5.0E-10").inspect # => "#<BigDecimal:3fd3d458fe84 0.0000000005>"
262
+ BigDecimal.new("5.0E-10").inspect # "#<BigDecimal:3fd3d458fe84 0.0000000005>"
254
263
  ----
255
264
 
256
265
  ==== Class
@@ -265,8 +274,8 @@ a = Class.new
265
274
  b = Class.new a
266
275
  c = Class.new a
267
276
 
268
- a.descendants # => [b, c]
269
- Class.new.descendants # => []
277
+ a.descendants # [b, c]
278
+ Class.new.descendants # []
270
279
  ----
271
280
 
272
281
  ==== DateTime
@@ -277,7 +286,7 @@ Answers new DateTime object for current UTC date/time.
277
286
 
278
287
  [source,ruby]
279
288
  ----
280
- DateTime.utc # => #<DateTime: 2019-12-31T18:17:00+00:00 ((2458849j,65820s,181867000n),+0s,2299161j)>
289
+ DateTime.utc # "#<DateTime: 2019-12-31T18:17:00+00:00 ((2458849j,65820s,181867000n),+0s,2299161j)>"
281
290
  ----
282
291
 
283
292
  ==== Hash
@@ -289,8 +298,8 @@ Answers new hash where missing keys, even deeply nested, answer an empty hash.
289
298
  [source,ruby]
290
299
  ----
291
300
  example = Hash.infinite
292
- example[:a] # => {}
293
- example[:a][:b][:c] # => {}
301
+ example[:a] # {}
302
+ example[:a][:b][:c] # {}
294
303
  ----
295
304
 
296
305
  ===== .with_default
@@ -300,10 +309,10 @@ Answers new hash where every top-level missing key has the same default value.
300
309
  [source,ruby]
301
310
  ----
302
311
  example = Hash.with_default ""
303
- example[:a] # => ""
312
+ example[:a] # ""
304
313
 
305
314
  example = Hash.with_default []
306
- example[:b] # => []
315
+ example[:b] # []
307
316
  ----
308
317
 
309
318
  ===== #compress
@@ -314,8 +323,9 @@ Removes `nil` and empty objects without mutating itself.
314
323
  ----
315
324
  object = Object.new
316
325
  example = {a: 1, b: "blueberry", c: nil, d: "", e: [], f: {}, g: object}
317
- example.compress # => {a: 1, b: "blueberry", g: object}
318
- example # => {a: 1, b: "blueberry", c: nil, d: "", e: [], f: {}, g: object}
326
+
327
+ example.compress # {a: 1, b: "blueberry", g: object}
328
+ example # {a: 1, b: "blueberry", c: nil, d: "", e: [], f: {}, g: object}
319
329
  ----
320
330
 
321
331
  ===== #compress!
@@ -326,8 +336,9 @@ Removes `nil` and empty objects while mutating itself.
326
336
  ----
327
337
  object = Object.new
328
338
  example = {a: 1, b: "blueberry", c: nil, d: "", e: [], f: {}, g: object}
329
- example.compress! # => {a: 1, b: "blueberry", g: object}
330
- example # => {a: 1, b: "blueberry", g: object}
339
+
340
+ example.compress! # {a: 1, b: "blueberry", g: object}
341
+ example # {a: 1, b: "blueberry", g: object}
331
342
  ----
332
343
 
333
344
  ===== #deep_merge
@@ -337,8 +348,9 @@ Merges deeply nested hashes together without mutating itself.
337
348
  [source,ruby]
338
349
  ----
339
350
  example = {a: "A", b: {one: "One", two: "Two"}}
340
- example.deep_merge b: {one: 1} # => {a: "A", b: {one: 1, two: "Two"}}
341
- example # => {a: "A", b: {one: "One", two: "Two"}}
351
+
352
+ example.deep_merge b: {one: 1} # {a: "A", b: {one: 1, two: "Two"}}
353
+ example # {a: "A", b: {one: "One", two: "Two"}}
342
354
  ----
343
355
 
344
356
  ===== #deep_merge!
@@ -348,8 +360,9 @@ Merges deeply nested hashes together while mutating itself.
348
360
  [source,ruby]
349
361
  ----
350
362
  example = {a: "A", b: {one: "One", two: "Two"}}
351
- example.deep_merge! b: {one: 1} # => {a: "A", b: {one: 1, two: "Two"}}
352
- example # => {a: "A", b: {one: 1, two: "Two"}}
363
+
364
+ example.deep_merge! b: {one: 1} # {a: "A", b: {one: 1, two: "Two"}}
365
+ example # {a: "A", b: {one: 1, two: "Two"}}
353
366
  ----
354
367
 
355
368
  ===== #deep_stringify_keys
@@ -359,8 +372,8 @@ Stringifies keys of nested hash without mutating itself. Does not handle nested
359
372
  [source,ruby]
360
373
  ----
361
374
  example = {a: {b: 2}}
362
- example.deep_stringify_keys # => {"a" => {"b" => 1}}
363
- example # => {a: {b: 2}}
375
+ example.deep_stringify_keys # {"a" => {"b" => 1}}
376
+ example # {a: {b: 2}}
364
377
  ----
365
378
 
366
379
  ===== #deep_stringify_keys!
@@ -370,8 +383,8 @@ Stringifies keys of nested hash while mutating itself. Does not handle nested ar
370
383
  [source,ruby]
371
384
  ----
372
385
  example = {a: {b: 2}}
373
- example.deep_stringify_keys! # => {"a" => {"b" => 1}}
374
- example # => {"a" => {"b" => 1}}
386
+ example.deep_stringify_keys! # {"a" => {"b" => 1}}
387
+ example # {"a" => {"b" => 1}}
375
388
  ----
376
389
 
377
390
  ===== #deep_symbolize_keys
@@ -381,8 +394,8 @@ Symbolizes keys of nested hash without mutating itself. Does not handle nested a
381
394
  [source,ruby]
382
395
  ----
383
396
  example = {"a" => {"b" => 2}}
384
- example.deep_symbolize_keys # => {a: {b: 1}}
385
- example # => {"a" => {"b" => 2}}
397
+ example.deep_symbolize_keys # {a: {b: 1}}
398
+ example # {"a" => {"b" => 2}}
386
399
  ----
387
400
 
388
401
  ===== #deep_symbolize_keys!
@@ -392,8 +405,8 @@ Symbolizes keys of nested hash while mutating itself. Does not handle nested arr
392
405
  [source,ruby]
393
406
  ----
394
407
  example = {"a" => {"b" => 2}}
395
- example.deep_symbolize_keys! # => {a: {b: 1}}
396
- example # => {a: {b: 1}}
408
+ example.deep_symbolize_keys! # {a: {b: 1}}
409
+ example # {a: {b: 1}}
397
410
  ----
398
411
 
399
412
  ===== #fetch_value
@@ -404,12 +417,12 @@ expression `example.fetch(:desired_key) || "default_value"`.
404
417
 
405
418
  [source,ruby]
406
419
  ----
407
- {a: "test"}.fetch_value :a, "default" # => "test"
408
- {a: "test"}.fetch_value :a # => "test"
409
- {a: nil}.fetch_value :a, "default" # => "default"
410
- {}.fetch_value(:a) { "default" } # => "default"
411
- {}.fetch_value :a # => KeyError
412
- {a: "test"}.fetch_value # => ArgumentError
420
+ {a: "test"}.fetch_value :a, "default" # "test"
421
+ {a: "test"}.fetch_value :a # "test"
422
+ {a: nil}.fetch_value :a, "default" # "default"
423
+ {}.fetch_value(:a) { "default" } # "default"
424
+ {}.fetch_value :a # KeyError
425
+ {a: "test"}.fetch_value # ArgumentError
413
426
  ----
414
427
 
415
428
  ===== #flatten_keys
@@ -419,15 +432,15 @@ though.
419
432
 
420
433
  [source,ruby]
421
434
  ----
422
- {a: {b: 1}}.flatten_keys prefix: :test # => {test_a_b: 1}
423
- {a: {b: 1}}.flatten_keys delimiter: :| # => {:"a|b" => 1}
435
+ {a: {b: 1}}.flatten_keys prefix: :test # {test_a_b: 1}
436
+ {a: {b: 1}}.flatten_keys delimiter: :| # {:"a|b" => 1}
424
437
 
425
- {a: {b: 1}}.flatten_keys cast: :to_s # => {"a_b" => 1}
426
- {"a" => {"b" => 1}}.flatten_keys cast: :to_sym # => {a_b: 1}
438
+ {a: {b: 1}}.flatten_keys cast: :to_s # {"a_b" => 1}
439
+ {"a" => {"b" => 1}}.flatten_keys cast: :to_sym # {a_b: 1}
427
440
 
428
441
  example = {a: {b: 1}}
429
- example.flatten_keys # => {a_b: 1}
430
- example # => {a: {b: 1}}
442
+ example.flatten_keys # {a_b: 1}
443
+ example # {a: {b: 1}}
431
444
  ----
432
445
 
433
446
  ===== #flatten_keys!
@@ -438,8 +451,8 @@ though.
438
451
  [source,ruby]
439
452
  ----
440
453
  example = {a: {b: 1}}
441
- example.flatten_keys! # => {a_b: 1}
442
- example # => {a_b: 1}
454
+ example.flatten_keys! # {a_b: 1}
455
+ example # {a_b: 1}
443
456
  ----
444
457
 
445
458
  ===== #recurse
@@ -450,8 +463,8 @@ handle nested arrays, though.
450
463
  [source,ruby]
451
464
  ----
452
465
  example = {"a" => {"b" => 1}}
453
- example.recurse(&:symbolize_keys) # => {a: {b: 1}}
454
- example.recurse(&:invert) # => {{"b" => 1} => "a"}
466
+ example.recurse(&:symbolize_keys) # {a: {b: 1}}
467
+ example.recurse(&:invert) # {{"b" => 1} => "a"}
455
468
  ----
456
469
 
457
470
  ===== #stringify_keys
@@ -461,8 +474,8 @@ Converts keys to strings without mutating itself.
461
474
  [source,ruby]
462
475
  ----
463
476
  example = {a: 1, b: 2}
464
- example.stringify_keys # => {"a" => 1, "b" => 2}
465
- example # => {a: 1, b: 2}
477
+ example.stringify_keys # {"a" => 1, "b" => 2}
478
+ example # {a: 1, b: 2}
466
479
  ----
467
480
 
468
481
  ===== #stringify_keys!
@@ -472,8 +485,8 @@ Converts keys to strings while mutating itself.
472
485
  [source,ruby]
473
486
  ----
474
487
  example = {a: 1, b: 2}
475
- example.stringify_keys! # => {"a" => 1, "b" => 2}
476
- example # => {"a" => 1, "b" => 2}
488
+ example.stringify_keys! # {"a" => 1, "b" => 2}
489
+ example # {"a" => 1, "b" => 2}
477
490
  ----
478
491
 
479
492
  ===== #symbolize_keys
@@ -483,8 +496,8 @@ Converts keys to symbols without mutating itself.
483
496
  [source,ruby]
484
497
  ----
485
498
  example = {"a" => 1, "b" => 2}
486
- example.symbolize_keys # => {a: 1, b: 2}
487
- example # => {"a" => 1, "b" => 2}
499
+ example.symbolize_keys # {a: 1, b: 2}
500
+ example # {"a" => 1, "b" => 2}
488
501
  ----
489
502
 
490
503
  ===== #symbolize_keys!
@@ -494,8 +507,8 @@ Converts keys to symbols while mutating itself.
494
507
  [source,ruby]
495
508
  ----
496
509
  example = {"a" => 1, "b" => 2}
497
- example.symbolize_keys! # => {a: 1, b: 2}
498
- example # => {a: 1, b: 2}
510
+ example.symbolize_keys! # {a: 1, b: 2}
511
+ example # {a: 1, b: 2}
499
512
  ----
500
513
 
501
514
  ===== #use
@@ -505,7 +518,8 @@ Passes each hash value as a block argument for further processing.
505
518
  [source,ruby]
506
519
  ----
507
520
  example = {unit: "221B", street: "Baker Street", city: "London", country: "UK"}
508
- example.use { |unit, street| "#{unit} #{street}" } # => "221B Baker Street"
521
+
522
+ example.use { |unit, street| "#{unit} #{street}" } # "221B Baker Street"
509
523
  ----
510
524
 
511
525
  ==== IO
@@ -518,8 +532,8 @@ block, you'll need to close the stream manually.
518
532
 
519
533
  [source,ruby]
520
534
  ----
521
- io = IO.void # => #<IO:fd 20>
522
- io = IO.void { |void| void.write "nevermore" } # => #<IO:(closed)>
535
+ io = IO.void # "#<IO:fd 20>"
536
+ io = IO.void { |void| void.write "nevermore" } # "#<IO:(closed)>"
523
537
  ----
524
538
 
525
539
  ===== #redirect
@@ -532,8 +546,8 @@ answered instead.
532
546
  io = IO.new IO.sysopen(Pathname("test.txt").to_s, "w+")
533
547
  other = IO.new IO.sysopen(Pathname("other.txt").to_s, "w+")
534
548
 
535
- io.redirect other # => #<IO:fd 20>
536
- io.redirect(other) { |stream| stream.write "test" } # => #<IO:fd 21>
549
+ io.redirect other # "#<IO:fd 20>"
550
+ io.redirect(other) { |stream| stream.write "test" } # "#<IO:fd 21>"
537
551
  ----
538
552
 
539
553
  ===== #reread
@@ -545,12 +559,12 @@ Answers full stream by rewinding to beginning of stream and reading all content.
545
559
  io = IO.new IO.sysopen(Pathname("test.txt").to_s, "w+")
546
560
  io.write "This is a test."
547
561
 
548
- io.reread # => "This is a test."
549
- io.reread 4 # => "This"
562
+ io.reread # "This is a test."
563
+ io.reread 4 # "This"
550
564
 
551
565
  buffer = "".dup
552
- io.reread(buffer: buffer) # => "This is a test."
553
- buffer # => "This is a test."
566
+ io.reread(buffer: buffer) # "This is a test."
567
+ buffer # "This is a test."
554
568
  ----
555
569
 
556
570
  ===== #squelch
@@ -561,9 +575,10 @@ arguments or when given a block.
561
575
  [source,ruby]
562
576
  ----
563
577
  io = IO.new IO.sysopen(Pathname("test.txt").to_s, "w+")
564
- io.squelch # => #<IO:fd 20>
565
- io.squelch { io.write "Test" } # => #<IO:fd 20>
566
- io.reread # => ""
578
+
579
+ io.squelch # "#<IO:fd 20>"
580
+ io.squelch { io.write "Test" } # "#<IO:fd 20>"
581
+ io.reread # ""
567
582
  ----
568
583
 
569
584
  ==== Pathname
@@ -577,7 +592,7 @@ construct a valid path.
577
592
 
578
593
  [source,ruby]
579
594
  ----
580
- Pathname(nil) # => Pathname("")
595
+ Pathname(nil) # Pathname("")
581
596
  ----
582
597
 
583
598
  ===== .home
@@ -586,7 +601,7 @@ Answers user home directory.
586
601
 
587
602
  [source,ruby]
588
603
  ----
589
- Pathname.home # => Pathname "/Users/bkuhlmann"
604
+ Pathname.home # Pathname "/Users/demo"
590
605
  ----
591
606
 
592
607
  ===== .make_temp_dir
@@ -603,13 +618,13 @@ reality, these paths will be longer depending on which operating system you are
603
618
 
604
619
  [source,ruby]
605
620
  ----
606
- Pathname.make_temp_dir # => Pathname:/var/folders/T/temp-20200101-16940-r8
607
- Pathname.make_temp_dir prefix: "prefix-" # => Pathname:/var/folders/T/prefix-20200101-16940-r8
608
- Pathname.make_temp_dir suffix: "-suffix" # => Pathname:/var/folders/T/temp-20200101-16940-r8-suffix
609
- Pathname.make_temp_dir prefix: "prefix-", suffix: "-suffix" # => Pathname:/var/folders/T/prefix-20200101-16940-r8-suffix
610
- Pathname.make_temp_dir root: "/example" # => Pathname:/example/temp-20200101-16940-r8
611
- Pathname.make_temp_dir { "I am a block result" } # => "I am a block result"
612
- Pathname.make_temp_dir { |path| path.join "sub_dir" } # => Pathname:/var/folders/T/temp-20200101-16940-r8/sub_dir
621
+ Pathname.make_temp_dir # Pathname:/var/folders/T/temp-20200101-16940-r8
622
+ Pathname.make_temp_dir prefix: "prefix-" # Pathname:/var/folders/T/prefix-20200101-16940-r8
623
+ Pathname.make_temp_dir suffix: "-suffix" # Pathname:/var/folders/T/temp-20200101-16940-r8-suffix
624
+ Pathname.make_temp_dir prefix: "prefix-", suffix: "-suffix" # Pathname:/var/folders/T/prefix-20200101-16940-r8-suffix
625
+ Pathname.make_temp_dir root: "/example" # Pathname:/example/temp-20200101-16940-r8
626
+ Pathname.make_temp_dir { "I am a block result" } # "I am a block result"
627
+ Pathname.make_temp_dir { |path| path.join "sub_dir" } # Pathname:/var/folders/T/temp-20200101-16940-r8/sub_dir
613
628
  ----
614
629
 
615
630
  ===== .require_tree
@@ -646,7 +661,7 @@ Answers operating system root path.
646
661
 
647
662
  [source,ruby]
648
663
  ----
649
- Pathname.root # => Pathname "/"
664
+ Pathname.root # Pathname "/"
650
665
  ----
651
666
 
652
667
  ===== #change_dir
@@ -656,13 +671,13 @@ link:https://rubyapi.org/o/Dir.chdir#method-c-chdir[Dir.chdir] for details.
656
671
 
657
672
  [source,ruby]
658
673
  ----
659
- Pathname.pwd # => "/"
660
- Pathname("/test").make_dir.change_dir # => Pathname "/test"
661
- Pathname.pwd # => "/test"
662
-
663
- Pathname.pwd # => "/"
664
- Pathname("/test").make_dir.change_dir { "example" } # => "example"
665
- Pathname.pwd # => "/"
674
+ current = Pathname.pwd # "$HOME/demo" (Present Working Directory)
675
+ custom = current.join("test").make_dir # Pathname "$HOME/demo/test"
676
+ custom.change_dir # "$HOME/demo/test" (Present Working Directory)
677
+ current.change_dir # "$HOME/demo" (Present Working Directory)
678
+ custom.change_dir { "example" } # "example"
679
+ custom.change_dir { |path| path } # Pathname "$HOME/demo/test"
680
+ Pathname.pwd # "$HOME/demo" (Present Working Directory)
666
681
  ----
667
682
 
668
683
  ===== #copy
@@ -671,7 +686,7 @@ Copies file from current location to new location while answering itself so it c
671
686
 
672
687
  [source,ruby]
673
688
  ----
674
- Pathname("input.txt").copy Pathname("output.txt") # => Pathname("input.txt")
689
+ Pathname("input.txt").copy Pathname("output.txt") # Pathname("input.txt")
675
690
  ----
676
691
 
677
692
  ===== #deep_touch
@@ -681,8 +696,8 @@ directories no matter how deeply nested the file might be.
681
696
 
682
697
  [source,ruby]
683
698
  ----
684
- Pathname("a/b/c/d.txt").touch # => Pathname("a/b/c/d.txt")
685
- Pathname("a/b/c/d.txt").touch Time.now - 1 # => Pathname("a/b/c/d.txt")
699
+ Pathname("a/b/c/d.txt").touch # Pathname("a/b/c/d.txt")
700
+ Pathname("a/b/c/d.txt").touch Time.now - 1 # Pathname("a/b/c/d.txt")
686
701
  ----
687
702
 
688
703
  ===== #delete
@@ -692,10 +707,10 @@ Deletes file or directory and answers itself so it can be chained.
692
707
  [source,ruby]
693
708
  ----
694
709
  # When path exists.
695
- Pathname("/example.txt").touch.delete # => Pathname("/example")
710
+ Pathname("/example.txt").touch.delete # Pathname("/example")
696
711
 
697
712
  # When path doesn't exist.
698
- Pathname("/example.txt").delete # => Errno::ENOENT
713
+ Pathname("/example.txt").delete # Errno::ENOENT
699
714
  ----
700
715
 
701
716
  ===== #directories
@@ -704,9 +719,9 @@ Answers all directories or filtered directories for current path.
704
719
 
705
720
  [source,ruby]
706
721
  ----
707
- Pathname("/example").directories # => [Pathname("a"), Pathname("b")]
708
- Pathname("/example").directories "a*" # => [Pathname("a")]
709
- Pathname("/example").directories flag: File::FNM_DOTMATCH # => [Pathname(".."), Pathname(".")]
722
+ Pathname("/example").directories # [Pathname("a"), Pathname("b")]
723
+ Pathname("/example").directories "a*" # [Pathname("a")]
724
+ Pathname("/example").directories flag: File::FNM_DOTMATCH # [Pathname(".."), Pathname(".")]
710
725
  ----
711
726
 
712
727
  ===== #empty
@@ -719,8 +734,8 @@ of contents. If a directory or file doesn't exist, it will be created.
719
734
  directory = Pathname("test").make_path
720
735
  file = directory.join("test.txt").write("example")
721
736
 
722
- file.empty.read # => ""
723
- directory.empty.children # => []
737
+ file.empty.read # ""
738
+ directory.empty.children # []
724
739
  ----
725
740
 
726
741
  ===== #extensions
@@ -729,7 +744,7 @@ Answers file extensions as an array.
729
744
 
730
745
  [source,ruby]
731
746
  ----
732
- Pathname("example.txt.erb").extensions # => [".txt", ".erb"]
747
+ Pathname("example.txt.erb").extensions # [".txt", ".erb"]
733
748
  ----
734
749
 
735
750
  ===== #files
@@ -738,9 +753,9 @@ Answers all files or filtered files for current path.
738
753
 
739
754
  [source,ruby]
740
755
  ----
741
- Pathname("/example").files # => [Pathname("a.txt"), Pathname("a.png")]
742
- Pathname("/example").files "*.png" # => [Pathname("a.png")]
743
- Pathname("/example").files flag: File::FNM_DOTMATCH # => [Pathname(".ruby-version")]
756
+ Pathname("/example").files # [Pathname("a.txt"), Pathname("a.png")]
757
+ Pathname("/example").files "*.png" # [Pathname("a.png")]
758
+ Pathname("/example").files flag: File::FNM_DOTMATCH # [Pathname(".ruby-version")]
744
759
  ----
745
760
 
746
761
  ===== #gsub
@@ -750,10 +765,10 @@ Same behavior as `String#gsub` but answers a path with patterns replaced with de
750
765
  [source,ruby]
751
766
  ----
752
767
  Pathname("/a/path/some/path").gsub("path", "test")
753
- # => Pathname("/a/test/some/test")
768
+ # Pathname("/a/test/some/test")
754
769
 
755
770
  Pathname("/%placeholder%/some/%placeholder%").gsub("%placeholder%", "test")
756
- # => Pathname("/test/some/test")
771
+ # Pathname("/test/some/test")
757
772
  ----
758
773
 
759
774
  ===== #make_ancestors
@@ -762,9 +777,9 @@ Ensures all ancestor directories are created for a path.
762
777
 
763
778
  [source,ruby]
764
779
  ----
765
- Pathname("/one/two").make_ancestors # => Pathname("/one/two")
766
- Pathname("/one").exist? # => true
767
- Pathname("/one/two").exist? # => false
780
+ Pathname("/one/two").make_ancestors # Pathname("/one/two")
781
+ Pathname("/one").exist? # true
782
+ Pathname("/one/two").exist? # false
768
783
  ----
769
784
 
770
785
  ===== #make_dir
@@ -774,8 +789,8 @@ not throwing errors when directory does exist in order to ensure the pathname ca
774
789
 
775
790
  [source,ruby]
776
791
  ----
777
- Pathname("/one").make_dir # => Pathname("/one")
778
- Pathname("/one").make_dir.make_dir # => Pathname("/one")
792
+ Pathname("/one").make_dir # Pathname("/one")
793
+ Pathname("/one").make_dir.make_dir # Pathname("/one")
779
794
  ----
780
795
 
781
796
  ===== #make_path
@@ -785,8 +800,8 @@ not throwing errors when directory does exist in order to ensure the pathname ca
785
800
 
786
801
  [source,ruby]
787
802
  ----
788
- Pathname("/one/two/three").make_path # => Pathname("/one/two/three")
789
- Pathname("/one/two/three").make_path.make_path # => Pathname("/one/two/three")
803
+ Pathname("/one/two/three").make_path # Pathname("/one/two/three")
804
+ Pathname("/one/two/three").make_path.make_path # Pathname("/one/two/three")
790
805
  ----
791
806
 
792
807
  ===== #name
@@ -795,7 +810,7 @@ Answers file name without extension.
795
810
 
796
811
  [source,ruby]
797
812
  ----
798
- Pathname("example.txt").name # => Pathname("example")
813
+ Pathname("example.txt").name # Pathname("example")
799
814
  ----
800
815
 
801
816
  ===== #relative_parent
@@ -804,7 +819,7 @@ Answers relative path from parent directory. This is a complement to `#relative_
804
819
 
805
820
  [source,ruby]
806
821
  ----
807
- Pathname("/one/two/three").relative_parent("/one") # => Pathname "two"
822
+ Pathname("/one/two/three").relative_parent("/one") # Pathname "two"
808
823
  ----
809
824
 
810
825
  ===== #remove_dir
@@ -814,9 +829,9 @@ not throwing errors when directory does exist in order to ensure the pathname ca
814
829
 
815
830
  [source,ruby]
816
831
  ----
817
- Pathname("/test").make_dir.remove_dir.exist? # => false
818
- Pathname("/test").remove_dir # => Pathname("/test")
819
- Pathname("/test").remove_dir.remove_dir # => Pathname("/test")
832
+ Pathname("/test").make_dir.remove_dir.exist? # false
833
+ Pathname("/test").remove_dir # Pathname("/test")
834
+ Pathname("/test").remove_dir.remove_dir # Pathname("/test")
820
835
  ----
821
836
 
822
837
  ===== #remove_tree
@@ -830,14 +845,14 @@ parent_path = Pathname "/one"
830
845
  child_path = parent_path.join "two"
831
846
 
832
847
  child_path.make_path
833
- child_path.remove_tree # => Pathname "/one/two"
834
- child_path.exist? # => false
835
- paremt_path.exist? # => true
848
+ child_path.remove_tree # Pathname "/one/two"
849
+ child_path.exist? # false
850
+ paremt_path.exist? # true
836
851
 
837
852
  child_path.make_path
838
- parent_path.remove_tree # => Pathname "/one"
839
- child_path.exist? # => false
840
- parent_path.exist? # => false
853
+ parent_path.remove_tree # Pathname "/one"
854
+ child_path.exist? # false
855
+ parent_path.exist? # false
841
856
  ----
842
857
 
843
858
  ===== #rewrite
@@ -847,8 +862,8 @@ immediate writing back to the same file.
847
862
 
848
863
  [source,ruby]
849
864
  ----
850
- Pathname("/test.txt").rewrite # => Pathname("/test.txt")
851
- Pathname("/test.txt").rewrite { |body| body.sub "[token]", "example" } # => Pathname("/test.txt")
865
+ Pathname("/test.txt").rewrite # Pathname("/test.txt")
866
+ Pathname("/test.txt").rewrite { |body| body.sub "[token]", "example" } # Pathname("/test.txt")
852
867
  ----
853
868
 
854
869
  ===== #touch
@@ -858,10 +873,10 @@ doesn't exist, it will be created as a file.
858
873
 
859
874
  [source,ruby]
860
875
  ----
861
- Pathname("example").touch # => Pathname("example")
862
- Pathname("example").touch Time.now - 1 # => Pathname("example")
863
- Pathname("example.txt").touch # => Pathname("example.txt")
864
- Pathname("example.txt").touch Time.now - 1 # => Pathname("example.txt")
876
+ Pathname("example").touch # Pathname("example")
877
+ Pathname("example").touch Time.now - 1 # Pathname("example")
878
+ Pathname("example.txt").touch # Pathname("example.txt")
879
+ Pathname("example.txt").touch Time.now - 1 # Pathname("example.txt")
865
880
  ----
866
881
 
867
882
  ===== #write
@@ -871,9 +886,9 @@ options.
871
886
 
872
887
  [source,ruby]
873
888
  ----
874
- Pathname("example.txt").write "test" # => Pathname("example.txt")
875
- Pathname("example.txt").write "test", offset: 1 # => Pathname("example.txt")
876
- Pathname("example.txt").write "test", mode: "a" # => Pathname("example.txt")
889
+ Pathname("example.txt").write "test" # Pathname("example.txt")
890
+ Pathname("example.txt").write "test", offset: 1 # Pathname("example.txt")
891
+ Pathname("example.txt").write "test", mode: "a" # Pathname("example.txt")
877
892
  ----
878
893
 
879
894
  ==== String
@@ -884,7 +899,7 @@ Answers `true`/`false` based on whether string is blank, `<space>`, `\n`, `\t`,
884
899
 
885
900
  [source,ruby]
886
901
  ----
887
- " \n\t\r".blank? # => true
902
+ " \n\t\r".blank? # true
888
903
  ----
889
904
 
890
905
  ===== #camelcase
@@ -893,7 +908,7 @@ Answers a camelcased string.
893
908
 
894
909
  [source,ruby]
895
910
  ----
896
- "this_is_an_example".camelcase # => "ThisIsAnExample"
911
+ "this_is_an_example".camelcase # "ThisIsAnExample"
897
912
  ----
898
913
 
899
914
  ===== #down
@@ -902,7 +917,7 @@ Answers string with only first letter downcased.
902
917
 
903
918
  [source,ruby]
904
919
  ----
905
- "EXAMPLE".down # => "eXAMPLE"
920
+ "EXAMPLE".down # "eXAMPLE"
906
921
  ----
907
922
 
908
923
  ===== #first
@@ -911,8 +926,8 @@ Answers first character of a string or first set of characters if given a number
911
926
 
912
927
  [source,ruby]
913
928
  ----
914
- "example".first # => "e"
915
- "example".first 4 # => "exam"
929
+ "example".first # "e"
930
+ "example".first 4 # "exam"
916
931
  ----
917
932
 
918
933
  ===== #indent
@@ -921,11 +936,11 @@ Answers string indented by two spaces by default.
921
936
 
922
937
  [source,ruby]
923
938
  ----
924
- "example".indent # => " example"
925
- "example".indent 0 # => "example"
926
- "example".indent -1 # => "example"
927
- "example".indent 2 # => " example"
928
- "example".indent 3, padding: " " # => " example"
939
+ "example".indent # " example"
940
+ "example".indent 0 # "example"
941
+ "example".indent -1 # "example"
942
+ "example".indent 2 # " example"
943
+ "example".indent 3, padding: " " # " example"
929
944
  ----
930
945
 
931
946
  ===== #last
@@ -934,8 +949,8 @@ Answers last character of a string or last set of characters if given a number.
934
949
 
935
950
  [source,ruby]
936
951
  ----
937
- "instant".last # => "t"
938
- "instant".last 3 # => "ant"
952
+ "instant".last # "t"
953
+ "instant".last 3 # "ant"
939
954
  ----
940
955
 
941
956
  ===== #pluralize
@@ -948,14 +963,14 @@ well in other languages.
948
963
 
949
964
  [source,ruby]
950
965
  ----
951
- "apple".pluralize "s" # => apples
952
- "apple".pluralize "s", count: 0 # => apples
953
- "apple".pluralize "s", count: 1 # => apple
954
- "apple".pluralize "s", count: -1 # => apple
955
- "apple".pluralize "s", count: 2 # => apples
956
- "apple".pluralize "s", count: -2 # => apples
957
- "cactus".pluralize "i", replace: "us" # => cacti
958
- "cul-de-sac".pluralize "ls", replace: "l" # => culs-de-sac
966
+ "apple".pluralize "s" # apples
967
+ "apple".pluralize "s", count: 0 # apples
968
+ "apple".pluralize "s", count: 1 # apple
969
+ "apple".pluralize "s", count: -1 # apple
970
+ "apple".pluralize "s", count: 2 # apples
971
+ "apple".pluralize "s", count: -2 # apples
972
+ "cactus".pluralize "i", replace: "us" # cacti
973
+ "cul-de-sac".pluralize "ls", replace: "l" # culs-de-sac
959
974
  ----
960
975
 
961
976
  ===== #singularize
@@ -968,14 +983,14 @@ well in other languages.
968
983
 
969
984
  [source,ruby]
970
985
  ----
971
- "apples".singularize "s" # => apple
972
- "apples".singularize "s", count: 0 # => apples
973
- "apples".singularize "s", count: 1 # => apple
974
- "apples".singularize "s", count: -1 # => apple
975
- "apples".singularize "s", count: 2 # => apples
976
- "apples".singularize "s", count: -2 # => apples
977
- "cacti".singularize "i", replace: "us" # => cactus
978
- "culs-de-sac".singularize "ls", replace: "l" # => cul-de-sac
986
+ "apples".singularize "s" # apple
987
+ "apples".singularize "s", count: 0 # apples
988
+ "apples".singularize "s", count: 1 # apple
989
+ "apples".singularize "s", count: -1 # apple
990
+ "apples".singularize "s", count: 2 # apples
991
+ "apples".singularize "s", count: -2 # apples
992
+ "cacti".singularize "i", replace: "us" # cactus
993
+ "culs-de-sac".singularize "ls", replace: "l" # cul-de-sac
979
994
  ----
980
995
 
981
996
  ===== #snakecase
@@ -984,7 +999,7 @@ Answers a snakecased string.
984
999
 
985
1000
  [source,ruby]
986
1001
  ----
987
- "ThisIsAnExample".snakecase # => "this_is_an_example"
1002
+ "ThisIsAnExample".snakecase # "this_is_an_example"
988
1003
  ----
989
1004
 
990
1005
  ===== #titleize
@@ -993,7 +1008,7 @@ Answers titleized string.
993
1008
 
994
1009
  [source,ruby]
995
1010
  ----
996
- "ThisIsAnExample".titleize # => "This Is An Example"
1011
+ "ThisIsAnExample".titleize # "This Is An Example"
997
1012
  ----
998
1013
 
999
1014
  ===== #to_bool
@@ -1002,11 +1017,11 @@ Answers string as a boolean.
1002
1017
 
1003
1018
  [source,ruby]
1004
1019
  ----
1005
- "true".to_bool # => true
1006
- "yes".to_bool # => true
1007
- "1".to_bool # => true
1008
- "".to_bool # => false
1009
- "example".to_bool # => false
1020
+ "true".to_bool # true
1021
+ "yes".to_bool # true
1022
+ "1".to_bool # true
1023
+ "".to_bool # false
1024
+ "example".to_bool # false
1010
1025
  ----
1011
1026
 
1012
1027
  ===== #up
@@ -1015,7 +1030,7 @@ Answers string with only first letter upcased.
1015
1030
 
1016
1031
  [source,ruby]
1017
1032
  ----
1018
- "example".up # => "Example"
1033
+ "example".up # "Example"
1019
1034
  ----
1020
1035
 
1021
1036
  ==== String IO
@@ -1029,12 +1044,12 @@ Answers full string by rewinding to beginning of string and reading all content.
1029
1044
  io = StringIO.new
1030
1045
  io.write "This is a test."
1031
1046
 
1032
- io.reread # => "This is a test."
1033
- io.reread 4 # => "This"
1047
+ io.reread # "This is a test."
1048
+ io.reread 4 # "This"
1034
1049
 
1035
1050
  buffer = "".dup
1036
- io.reread(buffer: buffer) # => "This is a test."
1037
- buffer # => "This is a test."
1051
+ io.reread(buffer: buffer) # "This is a test."
1052
+ buffer # "This is a test."
1038
1053
  ----
1039
1054
 
1040
1055
  ==== Struct
@@ -1045,8 +1060,8 @@ Answers whether a struct was constructed with keyword or positional arguments.
1045
1060
 
1046
1061
  [source,ruby]
1047
1062
  ----
1048
- Struct.new(:a, keyword_init: true).keyworded? # => true
1049
- Struct.new(:a).keyworded? # => false
1063
+ Struct.new(:a, keyword_init: true).keyworded? # true
1064
+ Struct.new(:a).keyworded? # false
1050
1065
  ----
1051
1066
 
1052
1067
  ===== .with_keywords
@@ -1057,14 +1072,14 @@ whether the struct was constructed with positional or keyword arguments.
1057
1072
  [source,ruby]
1058
1073
  ----
1059
1074
  Example = Struct.new :a, :b, :c
1060
- Example.with_keywords a: 1, b: 2, c: 3 # => #<struct a=1, b=2, c=3>
1061
- Example.with_keywords a: 1 # => #<struct a=1, b=nil, c=nil>
1062
- Example.with_keywords c: 1 # => #<struct a=nil, b=nil, c=1>
1075
+ Example.with_keywords a: 1, b: 2, c: 3 # "#<struct a=1, b=2, c=3>"
1076
+ Example.with_keywords a: 1 # "#<struct a=1, b=nil, c=nil>"
1077
+ Example.with_keywords c: 1 # "#<struct a=nil, b=nil, c=1>"
1063
1078
 
1064
1079
  Example = Struct.new :a, :b, :c, keyword_init: true
1065
- Example.with_keywords a: 1, b: 2, c: 3 # => #<struct a=1, b=2, c=3>
1066
- Example.with_keywords a: 1 # => #<struct a=1, b=nil, c=nil>
1067
- Example.with_keywords c: 1 # => #<struct a=nil, b=nil, c=1>
1080
+ Example.with_keywords a: 1, b: 2, c: 3 # "#<struct a=1, b=2, c=3>"
1081
+ Example.with_keywords a: 1 # "#<struct a=1, b=nil, c=nil>"
1082
+ Example.with_keywords c: 1 # "#<struct a=nil, b=nil, c=1>"
1068
1083
  ----
1069
1084
 
1070
1085
  ===== .with_positions
@@ -1075,12 +1090,12 @@ whether the struct was constructed with positional or keyword arguments.
1075
1090
  [source,ruby]
1076
1091
  ----
1077
1092
  Example = Struct.new :a, :b, :c
1078
- Example.with_positions 1, 2, 3 # => #<struct a=1, b=2, c=3>
1079
- Example.with_positions 1 # => #<struct a=1, b=nil, c=nil>
1093
+ Example.with_positions 1, 2, 3 # "#<struct a=1, b=2, c=3>"
1094
+ Example.with_positions 1 # "#<struct a=1, b=nil, c=nil>"
1080
1095
 
1081
1096
  Example = Struct.new :a, :b, :c, keyword_init: true
1082
- Example.with_positions 1, 2, 3 # => #<struct a=1, b=2, c=3>
1083
- Example.with_positions 1 # => #<struct a=1, b=nil, c=nil>
1097
+ Example.with_positions 1, 2, 3 # "#<struct a=1, b=2, c=3>"
1098
+ Example.with_positions 1 # "#<struct a=1, b=nil, c=nil>"
1084
1099
  ----
1085
1100
 
1086
1101
  ===== #merge
@@ -1091,17 +1106,17 @@ Merges multiple attributes without mutating itself.
1091
1106
  ----
1092
1107
  Example = Struct.new :a, :b, :c
1093
1108
  example = Example[1, 2, 3]
1094
- example.merge a: 10 # => #<struct a=10, b=2, c=3>
1095
- example.merge a: 10, c: 30 # => #<struct a=10, b=2, c=30>
1096
- example.merge a: 10, b: 20, c: 30 # => #<struct a=10, b=20, c=30>
1097
- example # => #<struct a=1, b=2, c=3>
1109
+ example.merge a: 10 # "#<struct a=10, b=2, c=3>"
1110
+ example.merge a: 10, c: 30 # "#<struct a=10, b=2, c=30>"
1111
+ example.merge a: 10, b: 20, c: 30 # "#<struct a=10, b=20, c=30>"
1112
+ example # "#<struct a=1, b=2, c=3>"
1098
1113
 
1099
1114
  Example = Struct.new :a, :b, :c, keyword_init: true
1100
1115
  example = Example[a: 1, b: 2, c: 3]
1101
- example.merge a: 10 # => #<struct a=10, b=2, c=3>
1102
- example.merge a: 10, c: 30 # => #<struct a=10, b=2, c=30>
1103
- example.merge a: 10, b: 20, c: 30 # => #<struct a=10, b=20, c=30>
1104
- example # => #<struct a=1, b=2, c=3>
1116
+ example.merge a: 10 # "#<struct a=10, b=2, c=3>"
1117
+ example.merge a: 10, c: 30 # "#<struct a=10, b=2, c=30>"
1118
+ example.merge a: 10, b: 20, c: 30 # "#<struct a=10, b=20, c=30>"
1119
+ example # "#<struct a=1, b=2, c=3>"
1105
1120
  ----
1106
1121
 
1107
1122
  ===== #merge!
@@ -1112,17 +1127,17 @@ Merges multiple attributes while mutating itself.
1112
1127
  ----
1113
1128
  Example = Struct.new :a, :b, :c
1114
1129
  example = Example[1, 2, 3]
1115
- example.merge! a: 10 # => #<struct a=10, b=2, c=3>
1116
- example.merge! a: 10, c: 30 # => #<struct a=10, b=2, c=30>
1117
- example.merge! a: 10, b: 20, c: 30 # => #<struct a=10, b=20, c=30>
1118
- example # => #<struct a=10, b=20, c=30>
1130
+ example.merge! a: 10 # "#<struct a=10, b=2, c=3>"
1131
+ example.merge! a: 10, c: 30 # "#<struct a=10, b=2, c=30>"
1132
+ example.merge! a: 10, b: 20, c: 30 # "#<struct a=10, b=20, c=30>"
1133
+ example # "#<struct a=10, b=20, c=30>"
1119
1134
 
1120
1135
  Example = Struct.new :a, :b, :c, keyword_init: true
1121
1136
  example = Example[a: 1, b: 2, c: 3]
1122
- example.merge! a: 10 # => #<struct a=10, b=2, c=3>
1123
- example.merge! a: 10, c: 30 # => #<struct a=10, b=2, c=30>
1124
- example.merge! a: 10, b: 20, c: 30 # => #<struct a=10, b=20, c=30>
1125
- example # => #<struct a=10, b=20, c=30>
1137
+ example.merge! a: 10 # "#<struct a=10, b=2, c=3>"
1138
+ example.merge! a: 10, c: 30 # "#<struct a=10, b=2, c=30>"
1139
+ example.merge! a: 10, b: 20, c: 30 # "#<struct a=10, b=20, c=30>"
1140
+ example # "#<struct a=10, b=20, c=30>"
1126
1141
  ----
1127
1142
 
1128
1143
  ===== #revalue
@@ -1138,11 +1153,11 @@ below but a keyword struct would work too.
1138
1153
  Example = Struct.new :a, :b, :c
1139
1154
 
1140
1155
  example = Example[1, 2, 3]
1141
- example.revalue { |value| value * 2 } # => #<struct a=2, b=4, c=6>
1142
- example.revalue(c: 2) { |previous, current| previous + current } # => #<struct a=1, b=2, c=5>
1143
- example.revalue c: 2 # => #<struct a=1, b=2, c=3>
1144
- example.revalue # => #<struct a=1, b=2, c=3>
1145
- example # => #<struct a=1, b=2, c=3>
1156
+ example.revalue { |value| value * 2 } # "#<struct a=2, b=4, c=6>"
1157
+ example.revalue(c: 2) { |previous, current| previous + current } # "#<struct a=1, b=2, c=5>"
1158
+ example.revalue c: 2 # "#<struct a=1, b=2, c=3>"
1159
+ example.revalue # "#<struct a=1, b=2, c=3>"
1160
+ example # "#<struct a=1, b=2, c=3>"
1146
1161
 
1147
1162
  ----
1148
1163
 
@@ -1159,17 +1174,17 @@ keyword struct would work too.
1159
1174
  Example = Struct.new :a, :b, :c
1160
1175
 
1161
1176
  example = Example[1, 2, 3]
1162
- example.revalue! { |value| value * 2 } # => #<struct a=2, b=4, c=6>
1163
- example # => #<struct a=2, b=4, c=6>
1177
+ example.revalue! { |value| value * 2 } # "#<struct a=2, b=4, c=6>"
1178
+ example # "#<struct a=2, b=4, c=6>"
1164
1179
 
1165
1180
  example = Example[1, 2, 3]
1166
- example.revalue!(c: 2) { |previous, current| previous + current } # => #<struct a=1, b=2, c=5>
1167
- example # => #<struct a=1, b=2, c=5>
1181
+ example.revalue!(c: 2) { |previous, current| previous + current } # "#<struct a=1, b=2, c=5>"
1182
+ example # "#<struct a=1, b=2, c=5>"
1168
1183
 
1169
1184
  example = Example[1, 2, 3]
1170
- example.revalue! c: 2 # => #<struct a=1, b=2, c=3>
1171
- example.revalue! # => #<struct a=1, b=2, c=3>
1172
- example # => #<struct a=1, b=2, c=3>
1185
+ example.revalue! c: 2 # "#<struct a=1, b=2, c=3>"
1186
+ example.revalue! # "#<struct a=1, b=2, c=3>"
1187
+ example # "#<struct a=1, b=2, c=3>"
1173
1188
  ----
1174
1189
 
1175
1190
  ==== Symbol
@@ -1181,10 +1196,10 @@ with public methods in order to not break encapsulation.
1181
1196
 
1182
1197
  [source,ruby]
1183
1198
  ----
1184
- %w[clue crow cow].map(&:tr.call("c", "b")) # => ["blue", "brow", "bow"]
1185
- [%w[a b c], %w[c a b]].map(&:index.call { |element| element == "b" }) # => [1, 2]
1186
- %w[1.outside 2.inside].map(&:sub.call(/\./) { |bullet| bullet + " " }) # => ["1. outside", "2. inside"]
1187
- [1, 2, 3].map(&:to_s.call) # => ["1", "2", "3"]
1199
+ %w[clue crow cow].map(&:tr.call("c", "b")) # ["blue", "brow", "bow"]
1200
+ [%w[a b c], %w[c a b]].map(&:index.call { |element| element == "b" }) # [1, 2]
1201
+ %w[1.outside 2.inside].map(&:sub.call(/\./) { |bullet| bullet + " " }) # ["1. outside", "2. inside"]
1202
+ [1, 2, 3].map(&:to_s.call) # ["1", "2", "3"]
1188
1203
  ----
1189
1204
 
1190
1205
  ⚠️ Use of `#call` without any arguments or block should be avoided in order to not incur extra
@@ -5,7 +5,7 @@ module Refinements
5
5
  module Identity
6
6
  NAME = "refinements"
7
7
  LABEL = "Refinements"
8
- VERSION = "8.5.0"
8
+ VERSION = "8.5.1"
9
9
  VERSION_LABEL = "#{LABEL} #{VERSION}".freeze
10
10
  end
11
11
  end
@@ -28,8 +28,12 @@ module Refinements
28
28
  end
29
29
 
30
30
  refine Pathname do
31
- def change_dir &block
32
- block ? Dir.chdir(self, &block) : (Dir.chdir self and self)
31
+ def change_dir
32
+ if block_given?
33
+ Dir.chdir(self) { |path| yield Pathname(path) }
34
+ else
35
+ Dir.chdir self and self
36
+ end
33
37
  end
34
38
 
35
39
  def copy to
@@ -16,38 +16,26 @@ module Refinements
16
16
  .then { |parts| combine parts, :up }
17
17
  end
18
18
 
19
- def down
20
- return self if empty?
21
-
22
- first.downcase + self[1, size]
23
- end
19
+ def down = empty? ? self : first.downcase + self[1, size]
24
20
 
25
- def first number = 0
21
+ def first maximum = 0
26
22
  return self if empty?
23
+ return self[0] if maximum.zero?
24
+ return "" if maximum.negative?
27
25
 
28
- max = Integer number
29
-
30
- return self[0] if max.zero?
31
- return "" if max.negative?
32
-
33
- self[..(max - 1)]
26
+ self[..(maximum - 1)]
34
27
  end
35
28
 
36
29
  def indent multiplier = 1, padding: " "
37
- return self if multiplier.negative?
38
-
39
- (padding * multiplier) + self
30
+ multiplier.negative? ? self : (padding * multiplier) + self
40
31
  end
41
32
 
42
- def last number = 0
33
+ def last minimum = 0
43
34
  return self if empty?
35
+ return self[size - 1] if minimum.zero?
36
+ return "" if minimum.negative?
44
37
 
45
- min = Integer number
46
-
47
- return self[size - 1] if min.zero?
48
- return "" if min.negative?
49
-
50
- self[(min + 1)..]
38
+ self[(minimum + 1)..]
51
39
  end
52
40
 
53
41
  def pluralize(suffix, replace: /$/, count: 0) = count.abs == 1 ? self : sub(replace, suffix)
@@ -72,11 +60,7 @@ module Refinements
72
60
 
73
61
  def to_bool = %w[true yes on t y 1].include?(downcase.strip)
74
62
 
75
- def up
76
- return self if empty?
77
-
78
- first.upcase + self[1, size]
79
- end
63
+ def up = empty? ? self : first.upcase + self[1, size]
80
64
 
81
65
  private
82
66
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refinements
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.5.0
4
+ version: 8.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -28,7 +28,7 @@ cert_chain:
28
28
  lkHilIrX69jq8wMPpBhlaw2mRmeSL50Wv5u6xVBvOHhXFSP1crXM95vfLhLyRYod
29
29
  W2A=
30
30
  -----END CERTIFICATE-----
31
- date: 2021-10-16 00:00:00.000000000 Z
31
+ date: 2021-10-21 00:00:00.000000000 Z
32
32
  dependencies: []
33
33
  description:
34
34
  email:
metadata.gz.sig CHANGED
Binary file