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 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