refinements 12.8.0 → 12.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81ecb80884f2fcc3c01f67b069fc4d8e46bf6c0dec1a03013a0f4183800c971e
4
- data.tar.gz: 85ced417ccf67b5940b1441df1cacc2d9ca32812e4bc9f89d775e17574cce1e9
3
+ metadata.gz: 56d9d8ea056f8d22d211d5d9ad964b74e5fc86eb4be0b3476a1cd15c0ef74856
4
+ data.tar.gz: bd3d5e64e0dfd3ae296d81a6b96212390b223f79b91d14fd3af14eab2c2dd867
5
5
  SHA512:
6
- metadata.gz: a9d24dfcb5491cda43127501056b1cbb74fa13286964bcfca60107e42ca2bb67c56e22e35fd8773f83e91c16122c97d2723ac6ca0fc1094c6bd746bee7c5bff6
7
- data.tar.gz: c8bbde575d08783fbf64d303fac8cb8cc0b0215b7bdc8e532ce1180f8451bc12e02391c9e22300edaba464ee50a1d2b1eb31b4081e8a234350e174ddc8cc7c08
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 _will not_ be mutated:
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 _will be_ mutated:
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
- ``` ruby
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
 
@@ -19,7 +19,12 @@ module Refinements
19
19
 
20
20
  def excluding(*elements) = self - elements.flatten
21
21
 
22
- def filter_find(&block) = block ? lazy.map(&block).find(&:itself) : lazy
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
 
@@ -80,9 +80,15 @@ module Refinements
80
80
 
81
81
  def symbolize_keys! = transform_keys!(&:to_sym)
82
82
 
83
- def transform_with(operations) = dup.transform_with! operations
83
+ def transform_value(key, &) = dup.transform_value!(key, &)
84
84
 
85
- def transform_with! operations
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
@@ -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?).sort
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?).sort
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
 
@@ -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) = keyword_init? ? new(**members.zip(values).to_h) : new(*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
@@ -8,6 +8,7 @@ require "refinements/hash"
8
8
  require "refinements/io"
9
9
  require "refinements/log_device"
10
10
  require "refinements/logger"
11
+ require "refinements/module"
11
12
  require "refinements/object"
12
13
  require "refinements/pathname"
13
14
  require "refinements/string"
data/refinements.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "refinements"
5
- spec.version = "12.8.0"
5
+ spec.version = "12.10.0"
6
6
  spec.authors = ["Brooke Kuhlmann"]
7
7
  spec.email = ["brooke@alchemists.io"]
8
8
  spec.homepage = "https://alchemists.io/projects/refinements"
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.8.0
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-09-01 00:00:00.000000000 Z
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.18
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