finishing_moves 0.1.1 → 0.1.2
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/Gemfile.lock +1 -1
- data/README.md +30 -43
- data/finishing_moves.gemspec +0 -2
- data/lib/finishing_moves/object.rb +6 -1
- data/lib/finishing_moves/version.rb +1 -1
- metadata +2 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7edf17bb22f39f2a5ef98ff9a636605c0dfc0772
|
|
4
|
+
data.tar.gz: 9f60832e76dfa4d8738844398bfef705dc76a059
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 89e13ebcf8b735570055a2d1a3270989b9424f2c47947c1f1c59af6451c1c2fa6ebc6b2ac92d93160bc1154738db2891110e269143deaae90173eee0498a1cdb
|
|
7
|
+
data.tar.gz: 16e94f9abb4f914aaff7b37cacc9734ae07269a52d2eae05848648ab9e67e4833cc97a662cb24c629f541fcfd6b783db40f5eddb906f77772d05e53481ce442a
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -8,17 +8,25 @@ In gamer terms, if standard Ruby methods are your default moves, `finishing_move
|
|
|
8
8
|
|
|
9
9
|
## Development approach
|
|
10
10
|
|
|
11
|
-
- **Never** override default Ruby behavior, only add functionality.
|
|
11
|
+
- **Never** override default Ruby behavior, only add functionality.
|
|
12
12
|
- Follow the Unix philosophy of *"Do one job really well."*
|
|
13
13
|
- Minimize assumptions within the method, e.g. avoid formatting output, mutating values, and long conditional logic flows.
|
|
14
14
|
- Test all the things.
|
|
15
15
|
|
|
16
16
|
## Installation
|
|
17
17
|
|
|
18
|
+
Gemfile
|
|
18
19
|
```
|
|
19
|
-
|
|
20
|
+
gem 'finishing_moves'
|
|
20
21
|
```
|
|
21
22
|
|
|
23
|
+
Command line
|
|
24
|
+
```
|
|
25
|
+
gem install 'finishing_moves'
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
[Here's the gem link](https://rubygems.org/gems/finishing_moves), if you like looking at that stuff.
|
|
29
|
+
|
|
22
30
|
## Current Finishers
|
|
23
31
|
|
|
24
32
|
### Extensions to `Object`
|
|
@@ -204,9 +212,6 @@ var = nil_chain(Geomancer.reset_ley_lines) { summon_fel_beast[:step_3].scry }
|
|
|
204
212
|
|
|
205
213
|
`nil_chain` is aliased to `chain` for more brevity, and `method_chain` for alternative clarity.
|
|
206
214
|
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
215
|
#### `Object#bool_chain`
|
|
211
216
|
|
|
212
217
|
This is the same logic under the hood as `nil_chain`, however we forcibly return a boolean `false` instead of `nil` if the chain breaks.
|
|
@@ -225,8 +230,6 @@ nil_chain(false) { a.b.c.hello }
|
|
|
225
230
|
# => false
|
|
226
231
|
```
|
|
227
232
|
|
|
228
|
-
---
|
|
229
|
-
|
|
230
233
|
#### `Object#same_as`
|
|
231
234
|
|
|
232
235
|
Comparison operator that normalizes both sides into strings, then runs them over `==`.
|
|
@@ -283,8 +286,6 @@ user.same_as 'FACELESS_ONE'
|
|
|
283
286
|
# => false
|
|
284
287
|
```
|
|
285
288
|
|
|
286
|
-
---
|
|
287
|
-
|
|
288
289
|
#### `Object#class_exists?`
|
|
289
290
|
|
|
290
291
|
> *I just want to know if [insert class name] has been defined!*
|
|
@@ -329,8 +330,6 @@ class_exists? :DefinitelyFakeClass
|
|
|
329
330
|
# => false (at least it better be; if you actually use this name, I will find you...)
|
|
330
331
|
```
|
|
331
332
|
|
|
332
|
-
---
|
|
333
|
-
|
|
334
333
|
#### `Object#not_nil?`
|
|
335
334
|
|
|
336
335
|
Because that dangling `!` on the front of a call to `nil?` is just oh so not-ruby-chic.
|
|
@@ -342,9 +341,7 @@ nil.not_nil?
|
|
|
342
341
|
# => true
|
|
343
342
|
```
|
|
344
343
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
---
|
|
344
|
+
Much better. Now pass me another PBR and my fedora.
|
|
348
345
|
|
|
349
346
|
### Extensions to `Hash`
|
|
350
347
|
|
|
@@ -373,8 +370,6 @@ power_rangers.delete! :radiant_orchid
|
|
|
373
370
|
# It probably would've triggered if I included Kimberly
|
|
374
371
|
```
|
|
375
372
|
|
|
376
|
-
---
|
|
377
|
-
|
|
378
373
|
#### `Hash#delete_each`
|
|
379
374
|
Deletes all records in a hash matching the keys passed in as an array. Returns a hash of deleted entries. Silently ignores any keys which are not found.
|
|
380
375
|
|
|
@@ -397,8 +392,6 @@ mega_man_bosses
|
|
|
397
392
|
# => { :wood_man => 4 }
|
|
398
393
|
```
|
|
399
394
|
|
|
400
|
-
---
|
|
401
|
-
|
|
402
395
|
#### `Hash#delete_each!`
|
|
403
396
|
|
|
404
397
|
Same logic as `delete_each`, but return the modified hash, and discard the deleted values.
|
|
@@ -419,11 +412,9 @@ mega_man_bosses.delete_each! :crash_man, :quick_man
|
|
|
419
412
|
# => { }
|
|
420
413
|
```
|
|
421
414
|
|
|
422
|
-
---
|
|
423
|
-
|
|
424
415
|
### `Fixnum#length` and `Bignum#length`
|
|
425
416
|
|
|
426
|
-
Ruby doesn't provide a native way to see how many digits are in an integer, but that's exactly what we worry about anytime
|
|
417
|
+
Ruby doesn't provide a native way to see how many digits are in an integer, but that's exactly what we worry about anytime database `INT` lengths collide with Ruby `Fixnum` or `Bignum` values.
|
|
427
418
|
|
|
428
419
|
```ruby
|
|
429
420
|
1.length
|
|
@@ -459,17 +450,17 @@ For consistency, we added matching methods to `Float` and `BigDecimal` that simp
|
|
|
459
450
|
# => ArgumentError: Cannot get length: "1.2654377184388666e+21" is not an integer
|
|
460
451
|
```
|
|
461
452
|
|
|
462
|
-
---
|
|
463
|
-
|
|
464
453
|
### Typecasting *to* `Boolean`
|
|
465
454
|
|
|
466
455
|
Boolean values are frequently represented as strings and integers in databases and file storage. So we always thought it was a little odd that Ruby lacked a boolean typecasting method, given the proliferation of `to_*` methods for `String`, `Symbol`, `Integer`, `Float`, `Hash`, etc.
|
|
467
456
|
|
|
468
|
-
So we made one for strings and
|
|
457
|
+
So we made one for strings, integers, and nil.
|
|
469
458
|
|
|
470
459
|
#### `String#to_bool`
|
|
471
460
|
|
|
472
|
-
Strings get analyzed and return true
|
|
461
|
+
Strings get analyzed and return `true` or `false` for a small set of potential values.
|
|
462
|
+
|
|
463
|
+
These comparisons are not case-sensitive.
|
|
473
464
|
|
|
474
465
|
```ruby
|
|
475
466
|
['1', 't', 'true', 'on', 'y', 'yes'].each do |true_string|
|
|
@@ -498,7 +489,7 @@ end
|
|
|
498
489
|
A string with anything other than these matching values will throw an error.
|
|
499
490
|
|
|
500
491
|
```ruby
|
|
501
|
-
["foo", "tru", "trueish", "druish", "000"].each do |bad_string|
|
|
492
|
+
["foo", "tru", "trueish", "druish", "00", "000"].each do |bad_string|
|
|
502
493
|
bad_string.to_bool
|
|
503
494
|
# => ArgumentError: invalid value for Boolean
|
|
504
495
|
end
|
|
@@ -506,7 +497,7 @@ end
|
|
|
506
497
|
|
|
507
498
|
#### `Fixnum#to_bool`
|
|
508
499
|
|
|
509
|
-
A zero is false, a one is true. That's it. Everything else throws `ArgumentError
|
|
500
|
+
A zero is false, a one is true. That's it. Everything else throws `ArgumentError`.
|
|
510
501
|
|
|
511
502
|
```ruby
|
|
512
503
|
0.to_bool
|
|
@@ -542,7 +533,7 @@ nil.to_bool == false
|
|
|
542
533
|
|
|
543
534
|
#### `TrueClass#to_bool` and `FalseClass#to_bool`
|
|
544
535
|
|
|
545
|
-
|
|
536
|
+
In case your code calls `to_bool` on a variable of indeterminate type, they return what you expect.
|
|
546
537
|
|
|
547
538
|
```ruby
|
|
548
539
|
true.to_bool
|
|
@@ -552,11 +543,9 @@ false.to_bool
|
|
|
552
543
|
# => false
|
|
553
544
|
```
|
|
554
545
|
|
|
555
|
-
---
|
|
556
|
-
|
|
557
546
|
### Typecasting *from* `Boolean` and `Nil`
|
|
558
547
|
|
|
559
|
-
Complementing the methods to typecast boolean values coming out of data storage, we have methods to convert booleans and `nil` into
|
|
548
|
+
Complementing the methods to typecast boolean values coming out of data storage, we have methods to convert booleans and `nil` into integer and symbol representations.
|
|
560
549
|
|
|
561
550
|
```ruby
|
|
562
551
|
true.to_i
|
|
@@ -570,33 +559,31 @@ false.to_sym
|
|
|
570
559
|
# => :false
|
|
571
560
|
|
|
572
561
|
nil.to_i
|
|
573
|
-
# => 0 (
|
|
562
|
+
# => 0 (following same logic as `NilClass#to_bool`)
|
|
574
563
|
nil.to_sym
|
|
575
564
|
# => :nil
|
|
576
565
|
```
|
|
577
566
|
|
|
578
|
-
##
|
|
579
|
-
|
|
580
|
-
### Got an idea for another finisher?
|
|
567
|
+
## Add your own finisher!
|
|
581
568
|
|
|
582
569
|
1. Fork this repo
|
|
583
570
|
2. Write your tests
|
|
584
571
|
3. Add your finisher
|
|
585
|
-
4. Repeat steps 2 and 3 until
|
|
572
|
+
4. Repeat steps 2 and 3 until you see a brilliant luster
|
|
586
573
|
5. Submit a pull request
|
|
587
|
-
6. Everyone kicks even more ass!
|
|
588
574
|
|
|
589
575
|
###### Got a good nerdy reference for our code samples?
|
|
590
576
|
We'll take pull requests on those too. Bonus karma points if you apply the reference to the specs too.
|
|
591
577
|
|
|
592
|
-
##
|
|
578
|
+
## Credits
|
|
593
579
|
|
|
594
|
-
|
|
580
|
+

|
|
595
581
|
|
|
596
|
-
|
|
582
|
+
Finishing Moves is maintained and funded by [Forge Software (forgecrafted.com)](http://www.forgecrafted.com)
|
|
597
583
|
|
|
598
|
-
|
|
584
|
+
If you like our code, please give us a hollar if your company needs outside pro's who write damn-good code AND run servers at the same time!
|
|
599
585
|
|
|
600
|
-
|
|
586
|
+
## License
|
|
601
587
|
|
|
602
|
-
|
|
588
|
+
Finishing Moves is Copyright 20XX (that means "forever") Forge Software, LLC. It is free software, and may be
|
|
589
|
+
redistributed under the terms specified in the LICENSE file.
|
data/finishing_moves.gemspec
CHANGED
|
@@ -12,8 +12,6 @@ Gem::Specification.new do |s|
|
|
|
12
12
|
s.summary = %q{Small, focused, incredibly useful methods added to core Ruby classes.}
|
|
13
13
|
s.description = <<-EOF
|
|
14
14
|
Ruby includes a huge amount of default awesomeness that tackles most common development challenges. But every now and then, you find yourself in a situation where an elaborate-yet-precise coding maneuver wins the day. Finishing Moves is a collection of methods designed to assist in those just-typical-enough-to-be-annoying scenarios.
|
|
15
|
-
|
|
16
|
-
In gamer terms, if standard Ruby methods are your default actions, finishing_moves would be mana-consuming techniques. Your cooldown spells. Your grenades (there's never enough grenades). In the right situation, they kick serious cyclomatic butt.
|
|
17
15
|
EOF
|
|
18
16
|
s.homepage = "https://github.com/forgecrafted/finishing_moves"
|
|
19
17
|
s.license = "MIT"
|
|
@@ -10,7 +10,6 @@ class Object
|
|
|
10
10
|
return ret_val
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
|
-
alias_method :chain, :nil_chain
|
|
14
13
|
alias_method :method_chain, :nil_chain
|
|
15
14
|
|
|
16
15
|
def bool_chain(&block)
|
|
@@ -38,5 +37,11 @@ class Object
|
|
|
38
37
|
end
|
|
39
38
|
end
|
|
40
39
|
|
|
40
|
+
def cascade(&block)
|
|
41
|
+
loop do
|
|
42
|
+
yield
|
|
43
|
+
break
|
|
44
|
+
end
|
|
45
|
+
end
|
|
41
46
|
|
|
42
47
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: finishing_moves
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Frank Koehl
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-12-
|
|
12
|
+
date: 2014-12-23 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rb-readline
|
|
@@ -83,8 +83,6 @@ dependencies:
|
|
|
83
83
|
version: '0'
|
|
84
84
|
description: |2
|
|
85
85
|
Ruby includes a huge amount of default awesomeness that tackles most common development challenges. But every now and then, you find yourself in a situation where an elaborate-yet-precise coding maneuver wins the day. Finishing Moves is a collection of methods designed to assist in those just-typical-enough-to-be-annoying scenarios.
|
|
86
|
-
|
|
87
|
-
In gamer terms, if standard Ruby methods are your default actions, finishing_moves would be mana-consuming techniques. Your cooldown spells. Your grenades (there's never enough grenades). In the right situation, they kick serious cyclomatic butt.
|
|
88
86
|
email:
|
|
89
87
|
- frank@forgecrafted.com
|
|
90
88
|
- chris@forgecrafted.com
|