refinements 12.8.0 → 12.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.adoc +87 -9
- data/lib/refinements/array.rb +6 -1
- data/lib/refinements/hash.rb +8 -2
- data/lib/refinements/module.rb +12 -0
- data/lib/refinements/pathname.rb +2 -2
- data/lib/refinements/struct.rb +6 -1
- data/lib/refinements.rb +1 -0
- data/refinements.gemspec +1 -1
- data.tar.gz.sig +0 -0
- metadata +4 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56d9d8ea056f8d22d211d5d9ad964b74e5fc86eb4be0b3476a1cd15c0ef74856
|
4
|
+
data.tar.gz: bd3d5e64e0dfd3ae296d81a6b96212390b223f79b91d14fd3af14eab2c2dd867
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63f889fedadba076370027afce7f0e176bd7e840d6b470d99043033a39f79277a4aebe7b0573e8d6c367432c59e98cb77b26ee62b5148f420121b632d86f8dfb
|
7
|
+
data.tar.gz: 47712bdf7aff52e05671f7fed297bd06f54dfa1e554e529723c3ab932b2204d30630a25906b757769f314c213e004014fc887bcdfd5b6ac36edf1949bd16335d
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -20,6 +20,7 @@ Enhances the following objects:
|
|
20
20
|
* IO
|
21
21
|
* LogDevice
|
22
22
|
* Logger
|
23
|
+
* Module
|
23
24
|
* Object
|
24
25
|
* Pathname
|
25
26
|
* String
|
@@ -87,6 +88,7 @@ require "refinements/hash"
|
|
87
88
|
require "refinements/io"
|
88
89
|
require "refinements/log_device"
|
89
90
|
require "refinements/logger"
|
91
|
+
require "refinements/module"
|
90
92
|
require "refinements/object"
|
91
93
|
require "refinements/pathname"
|
92
94
|
require "refinements/string"
|
@@ -111,6 +113,7 @@ class Example
|
|
111
113
|
using Refinements::IO
|
112
114
|
using Refinements::LogDevice
|
113
115
|
using Refinements::Logger
|
116
|
+
using Refinements::Module
|
114
117
|
using Refinements::Object
|
115
118
|
using Refinements::Pathname
|
116
119
|
using Refinements::String
|
@@ -186,6 +189,8 @@ Removes given array or elements without mutating itself.
|
|
186
189
|
|
187
190
|
===== #filter_find
|
188
191
|
|
192
|
+
⚠️ _This is deprecated and will be removed in Version 13.0.0._
|
193
|
+
|
189
194
|
Answers the first element which evaluates to true from a filtered collection.
|
190
195
|
|
191
196
|
[source,ruby]
|
@@ -635,7 +640,7 @@ Any object that _is not_ the same type will have a `nil` value as shown in the l
|
|
635
640
|
|
636
641
|
Fetches value for exiting or missing key. Behavior is identical to `#fetch` except when the value of
|
637
642
|
the key is `nil` you'll get the default value instead. This eliminates the need for using an _or_
|
638
|
-
expression `example.fetch(:desired_key) || "default_value"`.
|
643
|
+
expression: `example.fetch(:desired_key) || "default_value"`.
|
639
644
|
|
640
645
|
[source,ruby]
|
641
646
|
----
|
@@ -650,8 +655,7 @@ expression `example.fetch(:desired_key) || "default_value"`.
|
|
650
655
|
|
651
656
|
===== #flatten_keys
|
652
657
|
|
653
|
-
Flattens nested keys as top-level keys without mutating itself. Does not handle nested arrays
|
654
|
-
though.
|
658
|
+
Flattens nested keys as top-level keys without mutating itself. Keys are converted to symbols. Does not handle nested arrays.
|
655
659
|
|
656
660
|
[source,ruby]
|
657
661
|
----
|
@@ -665,8 +669,7 @@ example # {a: {b: 1}}
|
|
665
669
|
|
666
670
|
===== #flatten_keys!
|
667
671
|
|
668
|
-
Flattens nested keys as top-level keys while mutating itself. Does not handle nested arrays
|
669
|
-
though.
|
672
|
+
Flattens nested keys as top-level keys while mutating itself. Keys are converted to symbols. Does not handle nested arrays.
|
670
673
|
|
671
674
|
[source,ruby]
|
672
675
|
----
|
@@ -747,6 +750,52 @@ example.symbolize_keys! # {a: 1, b: 2}
|
|
747
750
|
example # {a: 1, b: 2}
|
748
751
|
----
|
749
752
|
|
753
|
+
===== #transform_value
|
754
|
+
|
755
|
+
Transforms a value for the specified key _only_ if the key exists and a block is given. Otherwise, the original hash is answered. Does not mutate itself.
|
756
|
+
|
757
|
+
[source,ruby]
|
758
|
+
----
|
759
|
+
example = {a: 1, b: 2}
|
760
|
+
|
761
|
+
example.transform_value :b # {a: 1, b: 2}
|
762
|
+
example.transform_value(:b) { 20 } # {a: 1, b: 20}
|
763
|
+
example.transform_value(:b) { |value| value * 10 } # {a: 1, b: 20}
|
764
|
+
example.transform_value :c # {a: 1, b: 2}
|
765
|
+
example.transform_value(:c) { :bogus } # {a: 1, b: 2}
|
766
|
+
----
|
767
|
+
|
768
|
+
The original object _is not_ mutated:
|
769
|
+
|
770
|
+
[source,ruby]
|
771
|
+
----
|
772
|
+
example.transform_value(:b) { 20 } # {a: 1, b: 20}
|
773
|
+
example # {a: 1, b: 2}
|
774
|
+
----
|
775
|
+
|
776
|
+
===== #transform_value!
|
777
|
+
|
778
|
+
Transforms a value for the specified key _only_ if the key exists and a block is given. Otherwise, the original hash is answered. Mutates itself.
|
779
|
+
|
780
|
+
[source,ruby]
|
781
|
+
----
|
782
|
+
example = {a: 1, b: 2}
|
783
|
+
|
784
|
+
example.transform_value! :b # {a: 1, b: 2}
|
785
|
+
example.transform_value!(:b) { 20 } # {a: 1, b: 20}
|
786
|
+
example.transform_value!(:b) { |value| value * 10 } # {a: 1, b: 20}
|
787
|
+
example.transform_value! :c # {a: 1, b: 2}
|
788
|
+
example.transform_value!(:c) { :bogus } # {a: 1, b: 2}
|
789
|
+
----
|
790
|
+
|
791
|
+
The original object _is_ mutated:
|
792
|
+
|
793
|
+
[source,ruby]
|
794
|
+
----
|
795
|
+
example.transform_value!(:b) { 20 } # {a: 1, b: 20}
|
796
|
+
example # {a: 1, b: 20}
|
797
|
+
----
|
798
|
+
|
750
799
|
===== #transform_with
|
751
800
|
|
752
801
|
Transforms values of keys using specific operations (i.e. any object that responds to `#call`). Does not mutate itself and you can transform multiple values at once:
|
@@ -768,7 +817,7 @@ example.transform_with bogus: -> value { value.tr "<>", "" }
|
|
768
817
|
# {email: "<jd@example.com>"}
|
769
818
|
----
|
770
819
|
|
771
|
-
The original object
|
820
|
+
The original object _is not_ mutated:
|
772
821
|
|
773
822
|
[source,ruby]
|
774
823
|
----
|
@@ -796,7 +845,7 @@ example.transform_with! bogus: -> value { value.tr "<>", "" }
|
|
796
845
|
# {email: "<jd@example.com>"}
|
797
846
|
----
|
798
847
|
|
799
|
-
The original object
|
848
|
+
The original object _is_ mutated:
|
800
849
|
|
801
850
|
[source,ruby]
|
802
851
|
----
|
@@ -925,7 +974,8 @@ logger.reread # ""
|
|
925
974
|
|
926
975
|
Allows you to log _any_ message which is identical in behavior and functionality to the `Logger#unknown` method only this requires less typing and better matches the terminology used by the `#unknown` method.
|
927
976
|
|
928
|
-
|
977
|
+
[source,ruby]
|
978
|
+
----
|
929
979
|
logger = Logger.new STDOUT
|
930
980
|
|
931
981
|
logger.any "Test."
|
@@ -933,7 +983,33 @@ logger.any "Test."
|
|
933
983
|
|
934
984
|
logger.any { "Test." }
|
935
985
|
A, [2000-01-10T09:00:00.330719 #44925] ANY -- : Test.
|
936
|
-
|
986
|
+
----
|
987
|
+
|
988
|
+
==== Module
|
989
|
+
|
990
|
+
===== #pseudonym
|
991
|
+
|
992
|
+
Allows you to set a temporary name for your anonymous `Module` (or `Class` since `Class` inherits from `Module`) with a better default than what `+#set_temporary_name+` provides.
|
993
|
+
|
994
|
+
[source,ruby]
|
995
|
+
----
|
996
|
+
Module.new.pseudonym "demo" # demo-44600
|
997
|
+
Module.new.pseudonym "demo", delimiter: "_" # demo_60900
|
998
|
+
Module.new.pseudonym "demo", nil # demo-
|
999
|
+
Module.new.pseudonym "demo", nil, delimiter: nil # demo
|
1000
|
+
----
|
1001
|
+
|
1002
|
+
The same applies for anonymous classes since classes inherit from modules:
|
1003
|
+
|
1004
|
+
[source,ruby]
|
1005
|
+
----
|
1006
|
+
Class.new.pseudonym "demo" # demo-44600 < Object
|
1007
|
+
Class.new.pseudonym "demo", delimiter: "_" # demo_60900 < Object
|
1008
|
+
Class.new.pseudonym "demo", nil # demo- < Object
|
1009
|
+
Class.new.pseudonym "demo", nil, delimiter: nil # demo < Object
|
1010
|
+
----
|
1011
|
+
|
1012
|
+
💡 While convenient, if you find yourself nullifying the suffix and/or delimiter, you're better off using `+#set_temporary_name+`.
|
937
1013
|
|
938
1014
|
==== Object
|
939
1015
|
|
@@ -1554,6 +1630,8 @@ io.to_str # "One, Two."
|
|
1554
1630
|
|
1555
1631
|
===== .with_positions
|
1556
1632
|
|
1633
|
+
⚠️ _This is deprecated and will be removed in Version 13.0.0._
|
1634
|
+
|
1557
1635
|
Answers a struct instance with given positional arguments regardless of
|
1558
1636
|
whether the struct was constructed with positional or keyword arguments.
|
1559
1637
|
|
data/lib/refinements/array.rb
CHANGED
@@ -19,7 +19,12 @@ module Refinements
|
|
19
19
|
|
20
20
|
def excluding(*elements) = self - elements.flatten
|
21
21
|
|
22
|
-
def filter_find(&
|
22
|
+
def filter_find(&)
|
23
|
+
warn "`#{self.class}##{__method__}` is deprecated and will be removed in Version 13.0.0.",
|
24
|
+
category: :deprecated
|
25
|
+
|
26
|
+
block_given? ? lazy.map(&).find(&:itself) : lazy
|
27
|
+
end
|
23
28
|
|
24
29
|
def including(*elements) = self + elements.flatten
|
25
30
|
|
data/lib/refinements/hash.rb
CHANGED
@@ -80,9 +80,15 @@ module Refinements
|
|
80
80
|
|
81
81
|
def symbolize_keys! = transform_keys!(&:to_sym)
|
82
82
|
|
83
|
-
def
|
83
|
+
def transform_value(key, &) = dup.transform_value!(key, &)
|
84
84
|
|
85
|
-
def
|
85
|
+
def transform_value! key
|
86
|
+
block_given? && key?(key) ? merge!(key => yield(self[key])) : self
|
87
|
+
end
|
88
|
+
|
89
|
+
def transform_with(**) = dup.transform_with!(**)
|
90
|
+
|
91
|
+
def transform_with!(**operations)
|
86
92
|
operations.each { |key, function| self[key] = function.call self[key] if key? key }
|
87
93
|
self
|
88
94
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Refinements
|
4
|
+
# Provides additional enhancements to the Symbol primitive.
|
5
|
+
module Module
|
6
|
+
refine ::Module do
|
7
|
+
def pseudonym prefix, suffix = object_id, delimiter: "-"
|
8
|
+
set_temporary_name "#{prefix}#{delimiter}#{suffix}"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/refinements/pathname.rb
CHANGED
@@ -53,14 +53,14 @@ module Refinements
|
|
53
53
|
def delete_suffix(pattern) = parent.join %(#{name.sub(/#{pattern}\z/, "")}#{extname})
|
54
54
|
|
55
55
|
def directories pattern = "*", flag: File::FNM_SYSCASE
|
56
|
-
glob(pattern, flag).select(&:directory?)
|
56
|
+
glob(pattern, flag).select(&:directory?)
|
57
57
|
end
|
58
58
|
|
59
59
|
def empty = file? ? (truncate(0) and self) : remove_tree.make_dir
|
60
60
|
|
61
61
|
def extensions = basename.to_s.split(/(?=\.)+/).tap(&:shift)
|
62
62
|
|
63
|
-
def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?)
|
63
|
+
def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?)
|
64
64
|
|
65
65
|
def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))
|
66
66
|
|
data/lib/refinements/struct.rb
CHANGED
@@ -6,7 +6,12 @@ module Refinements
|
|
6
6
|
# Provides additional enhancements to the Struct primitive.
|
7
7
|
module Struct
|
8
8
|
refine ::Struct.singleton_class do
|
9
|
-
def with_positions(*values)
|
9
|
+
def with_positions(*values)
|
10
|
+
warn "`#{self.class}##{__method__}` is deprecated and will be removed in Version 13.0.0.",
|
11
|
+
category: :deprecated
|
12
|
+
|
13
|
+
keyword_init? ? new(**members.zip(values).to_h) : new(*values)
|
14
|
+
end
|
10
15
|
end
|
11
16
|
|
12
17
|
refine ::Struct do
|
data/lib/refinements.rb
CHANGED
data/refinements.gemspec
CHANGED
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: 12.
|
4
|
+
version: 12.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brooke Kuhlmann
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
|
36
36
|
gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2024-
|
38
|
+
date: 2024-10-22 00:00:00.000000000 Z
|
39
39
|
dependencies: []
|
40
40
|
description:
|
41
41
|
email:
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/refinements/io.rb
|
58
58
|
- lib/refinements/log_device.rb
|
59
59
|
- lib/refinements/logger.rb
|
60
|
+
- lib/refinements/module.rb
|
60
61
|
- lib/refinements/object.rb
|
61
62
|
- lib/refinements/pathname.rb
|
62
63
|
- lib/refinements/shared/diff.rb
|
@@ -96,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
97
|
- !ruby/object:Gem::Version
|
97
98
|
version: '0'
|
98
99
|
requirements: []
|
99
|
-
rubygems_version: 3.5.
|
100
|
+
rubygems_version: 3.5.22
|
100
101
|
signing_key:
|
101
102
|
specification_version: 4
|
102
103
|
summary: A collection of core object refinements.
|
metadata.gz.sig
CHANGED
Binary file
|