refinements 8.3.0 → 8.5.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
- checksums.yaml.gz.sig +0 -0
- data/README.adoc +356 -203
- data/lib/refinements/arrays.rb +5 -2
- data/lib/refinements/classes.rb +13 -0
- data/lib/refinements/hashes.rb +6 -0
- data/lib/refinements/identity.rb +1 -1
- data/lib/refinements/pathnames.rb +13 -3
- data/lib/refinements/strings.rb +14 -26
- data/lib/refinements/symbols.rb +12 -0
- data/lib/refinements.rb +2 -0
- data.tar.gz.sig +0 -0
- metadata +6 -3
- metadata.gz.sig +1 -2
data/lib/refinements/arrays.rb
CHANGED
|
@@ -4,9 +4,12 @@ module Refinements
|
|
|
4
4
|
# Provides additional enhancements to the Array primitive.
|
|
5
5
|
module Arrays
|
|
6
6
|
refine Array do
|
|
7
|
-
def compress =
|
|
7
|
+
def compress = dup.compress!
|
|
8
8
|
|
|
9
|
-
def compress!
|
|
9
|
+
def compress!
|
|
10
|
+
compact!
|
|
11
|
+
delete_if { |element| element.respond_to?(:empty?) && element.empty? }
|
|
12
|
+
end
|
|
10
13
|
|
|
11
14
|
def excluding(*elements) = self - elements.flatten
|
|
12
15
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Refinements
|
|
4
|
+
# Provides additional enhancements to Class objects.
|
|
5
|
+
module Classes
|
|
6
|
+
refine Class do
|
|
7
|
+
def descendants
|
|
8
|
+
ObjectSpace.each_object(singleton_class)
|
|
9
|
+
.reject { |klass| klass.singleton_class? || klass == self }
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
data/lib/refinements/hashes.rb
CHANGED
|
@@ -15,6 +15,8 @@ module Refinements
|
|
|
15
15
|
def compress = dup.compress!
|
|
16
16
|
|
|
17
17
|
def compress!
|
|
18
|
+
return self if empty?
|
|
19
|
+
|
|
18
20
|
compact!.delete_if { |_key, value| value.respond_to?(:empty?) && value.empty? }
|
|
19
21
|
end
|
|
20
22
|
|
|
@@ -40,6 +42,10 @@ module Refinements
|
|
|
40
42
|
|
|
41
43
|
def deep_symbolize_keys! = replace(deep_symbolize_keys)
|
|
42
44
|
|
|
45
|
+
def fetch_value key, *default_value, &block
|
|
46
|
+
fetch(key, *default_value, &block) || default_value.first
|
|
47
|
+
end
|
|
48
|
+
|
|
43
49
|
# :reek:TooManyStatements
|
|
44
50
|
def flatten_keys prefix: nil, delimiter: "_", cast: :to_sym
|
|
45
51
|
fail StandardError, "Unknown cast: #{cast}." unless %i[to_sym to_s].include? cast
|
data/lib/refinements/identity.rb
CHANGED
|
@@ -24,12 +24,16 @@ module Refinements
|
|
|
24
24
|
new(root).files(pattern).each { |path| require path.to_s }
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
def root = new(
|
|
27
|
+
def root = new(File::SEPARATOR)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
refine Pathname do
|
|
31
|
-
def change_dir
|
|
32
|
-
|
|
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
|
|
@@ -38,10 +42,16 @@ module Refinements
|
|
|
38
42
|
self
|
|
39
43
|
end
|
|
40
44
|
|
|
45
|
+
def deep_touch(...) = make_ancestors.touch(...)
|
|
46
|
+
|
|
47
|
+
def delete = super && self
|
|
48
|
+
|
|
41
49
|
def directories pattern = "*", flag: File::FNM_SYSCASE
|
|
42
50
|
glob(pattern, flag).select(&:directory?).sort
|
|
43
51
|
end
|
|
44
52
|
|
|
53
|
+
def empty = file? ? (truncate(0) and self) : remove_tree.make_dir
|
|
54
|
+
|
|
45
55
|
def extensions = basename.to_s.split(/(?=\.)+/).tap(&:shift)
|
|
46
56
|
|
|
47
57
|
def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?).sort
|
data/lib/refinements/strings.rb
CHANGED
|
@@ -16,39 +16,31 @@ 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
|
|
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
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
(padding * multiplier) + self
|
|
30
|
+
multiplier.negative? ? self : (padding * multiplier) + self
|
|
40
31
|
end
|
|
41
32
|
|
|
42
|
-
def last
|
|
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
|
-
|
|
38
|
+
self[(minimum + 1)..]
|
|
39
|
+
end
|
|
46
40
|
|
|
47
|
-
|
|
48
|
-
return "" if min.negative?
|
|
41
|
+
def pluralize(suffix, replace: /$/, count: 0) = count.abs == 1 ? self : sub(replace, suffix)
|
|
49
42
|
|
|
50
|
-
|
|
51
|
-
end
|
|
43
|
+
def singularize(suffix, replace: "", count: 1) = count.abs == 1 ? sub(suffix, replace) : self
|
|
52
44
|
|
|
53
45
|
def snakecase
|
|
54
46
|
return downcase unless match? DELIMITERS
|
|
@@ -68,11 +60,7 @@ module Refinements
|
|
|
68
60
|
|
|
69
61
|
def to_bool = %w[true yes on t y 1].include?(downcase.strip)
|
|
70
62
|
|
|
71
|
-
def up
|
|
72
|
-
return self if empty?
|
|
73
|
-
|
|
74
|
-
first.upcase + self[1, size]
|
|
75
|
-
end
|
|
63
|
+
def up = empty? ? self : first.upcase + self[1, size]
|
|
76
64
|
|
|
77
65
|
private
|
|
78
66
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Refinements
|
|
4
|
+
# Provides additional enhancements to the Symbol primitive.
|
|
5
|
+
module Symbols
|
|
6
|
+
refine Symbol do
|
|
7
|
+
def call *arguments, &block
|
|
8
|
+
proc { |receiver| receiver.public_send self, *arguments, &block }
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
data/lib/refinements.rb
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require "refinements/identity"
|
|
4
4
|
require "refinements/arrays"
|
|
5
|
+
require "refinements/classes"
|
|
5
6
|
require "refinements/big_decimals"
|
|
6
7
|
require "refinements/date_times"
|
|
7
8
|
require "refinements/hashes"
|
|
@@ -10,3 +11,4 @@ require "refinements/pathnames"
|
|
|
10
11
|
require "refinements/strings"
|
|
11
12
|
require "refinements/string_ios"
|
|
12
13
|
require "refinements/structs"
|
|
14
|
+
require "refinements/symbols"
|
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.
|
|
4
|
+
version: 8.5.2
|
|
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-
|
|
31
|
+
date: 2021-11-20 00:00:00.000000000 Z
|
|
32
32
|
dependencies: []
|
|
33
33
|
description:
|
|
34
34
|
email:
|
|
@@ -44,6 +44,7 @@ files:
|
|
|
44
44
|
- lib/refinements.rb
|
|
45
45
|
- lib/refinements/arrays.rb
|
|
46
46
|
- lib/refinements/big_decimals.rb
|
|
47
|
+
- lib/refinements/classes.rb
|
|
47
48
|
- lib/refinements/date_times.rb
|
|
48
49
|
- lib/refinements/hashes.rb
|
|
49
50
|
- lib/refinements/identity.rb
|
|
@@ -52,6 +53,7 @@ files:
|
|
|
52
53
|
- lib/refinements/string_ios.rb
|
|
53
54
|
- lib/refinements/strings.rb
|
|
54
55
|
- lib/refinements/structs.rb
|
|
56
|
+
- lib/refinements/symbols.rb
|
|
55
57
|
homepage: https://www.alchemists.io/projects/refinements
|
|
56
58
|
licenses:
|
|
57
59
|
- Apache-2.0
|
|
@@ -59,6 +61,7 @@ metadata:
|
|
|
59
61
|
bug_tracker_uri: https://github.com/bkuhlmann/refinements/issues
|
|
60
62
|
changelog_uri: https://www.alchemists.io/projects/refinements/changes.html
|
|
61
63
|
documentation_uri: https://www.alchemists.io/projects/refinements
|
|
64
|
+
rubygems_mfa_required: 'true'
|
|
62
65
|
source_code_uri: https://github.com/bkuhlmann/refinements
|
|
63
66
|
post_install_message:
|
|
64
67
|
rdoc_options: []
|
|
@@ -75,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
75
78
|
- !ruby/object:Gem::Version
|
|
76
79
|
version: '0'
|
|
77
80
|
requirements: []
|
|
78
|
-
rubygems_version: 3.2.
|
|
81
|
+
rubygems_version: 3.2.31
|
|
79
82
|
signing_key:
|
|
80
83
|
specification_version: 4
|
|
81
84
|
summary: A collection of refinements to core Ruby objects.
|
metadata.gz.sig
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
DC��yr*$��q�O�J�sL(Uڐ�����@������℺����B�ԗXW&&��!��E�*�I���������F�
|
|
1
|
+
�|$I.�\Kb��]�� O��V�_X�9�ŷ���f�
|