refinements 12.7.1 → 12.9.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: 81242c43b3aad6b04319273228ac9a83e1dde30677f95bafe56629552e9a2aff
4
- data.tar.gz: 350fbedab3dba89b6506b73b1ee1eb029d0fab302d347caddccfb53af865bc8b
3
+ metadata.gz: 229ada32a4378800013462184db88be59d33109cbbd63c8c6378add52fc7b321
4
+ data.tar.gz: 4f0291390f858b45e2066dc9eac5e3f06ceef5c9e1051160aa7c625e734c78c4
5
5
  SHA512:
6
- metadata.gz: 3b52ff2d707ddca982386b1f65d49f21a080faa3f5985adead49c3c15c3bed2ebc4c5587c0bedbbe2fcc3a0b80e97946c5b895fb365d39eeeabf02922b0388a0
7
- data.tar.gz: f7eaf17a912a7ddfdf05117da9a13f0bd699aae9238f6df8e8dcc26f963f431781710a20f39775162547c44fe847d04edd6304da3bbaea90412e74db35f2c72f
6
+ metadata.gz: dbe61e5483ff24ffe0d9852e3f1c34e613f53a48f8a96cb15b862bf2528c448df71e9357d2910068b7e41275a916a9169f99e6b5b67c355df73eaf3e6ac2d124
7
+ data.tar.gz: 3f77b617a157b3d9be6735a08a9340ddd945642107d5e2728e384f6496197a44e180cfcce8c5738ec5ea509df883fcc5ca3b1261ffaddeaedbcfe0764987d9d0
checksums.yaml.gz.sig CHANGED
Binary file
data/README.adoc CHANGED
@@ -635,7 +635,7 @@ Any object that _is not_ the same type will have a `nil` value as shown in the l
635
635
 
636
636
  Fetches value for exiting or missing key. Behavior is identical to `#fetch` except when the value of
637
637
  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"`.
638
+ expression: `example.fetch(:desired_key) || "default_value"`.
639
639
 
640
640
  [source,ruby]
641
641
  ----
@@ -650,8 +650,7 @@ expression `example.fetch(:desired_key) || "default_value"`.
650
650
 
651
651
  ===== #flatten_keys
652
652
 
653
- Flattens nested keys as top-level keys without mutating itself. Does not handle nested arrays,
654
- though.
653
+ Flattens nested keys as top-level keys without mutating itself. Keys are converted to symbols. Does not handle nested arrays.
655
654
 
656
655
  [source,ruby]
657
656
  ----
@@ -665,8 +664,7 @@ example # {a: {b: 1}}
665
664
 
666
665
  ===== #flatten_keys!
667
666
 
668
- Flattens nested keys as top-level keys while mutating itself. Does not handle nested arrays,
669
- though.
667
+ Flattens nested keys as top-level keys while mutating itself. Keys are converted to symbols. Does not handle nested arrays.
670
668
 
671
669
  [source,ruby]
672
670
  ----
@@ -747,6 +745,52 @@ example.symbolize_keys! # {a: 1, b: 2}
747
745
  example # {a: 1, b: 2}
748
746
  ----
749
747
 
748
+ ===== #transform_value
749
+
750
+ 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.
751
+
752
+ [source,ruby]
753
+ ----
754
+ example = {a: 1, b: 2}
755
+
756
+ example.transform_value :b # {a: 1, b: 2}
757
+ example.transform_value(:b) { 20 } # {a: 1, b: 20}
758
+ example.transform_value(:b) { |value| value * 10 } # {a: 1, b: 20}
759
+ example.transform_value :c # {a: 1, b: 2}
760
+ example.transform_value(:c) { :bogus } # {a: 1, b: 2}
761
+ ----
762
+
763
+ The original object _is not_ mutated:
764
+
765
+ [source,ruby]
766
+ ----
767
+ example.transform_value(:b) { 20 } # {a: 1, b: 20}
768
+ example # {a: 1, b: 2}
769
+ ----
770
+
771
+ ===== #transform_value!
772
+
773
+ 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.
774
+
775
+ [source,ruby]
776
+ ----
777
+ example = {a: 1, b: 2}
778
+
779
+ example.transform_value! :b # {a: 1, b: 2}
780
+ example.transform_value!(:b) { 20 } # {a: 1, b: 20}
781
+ example.transform_value!(:b) { |value| value * 10 } # {a: 1, b: 20}
782
+ example.transform_value! :c # {a: 1, b: 2}
783
+ example.transform_value!(:c) { :bogus } # {a: 1, b: 2}
784
+ ----
785
+
786
+ The original object _is_ mutated:
787
+
788
+ [source,ruby]
789
+ ----
790
+ example.transform_value!(:b) { 20 } # {a: 1, b: 20}
791
+ example # {a: 1, b: 20}
792
+ ----
793
+
750
794
  ===== #transform_with
751
795
 
752
796
  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 +812,7 @@ example.transform_with bogus: -> value { value.tr "<>", "" }
768
812
  # {email: "<jd@example.com>"}
769
813
  ----
770
814
 
771
- The original object _will not_ be mutated:
815
+ The original object _is not_ mutated:
772
816
 
773
817
  [source,ruby]
774
818
  ----
@@ -796,7 +840,7 @@ example.transform_with! bogus: -> value { value.tr "<>", "" }
796
840
  # {email: "<jd@example.com>"}
797
841
  ----
798
842
 
799
- The original object _will be_ mutated:
843
+ The original object _is_ mutated:
800
844
 
801
845
  [source,ruby]
802
846
  ----
@@ -1524,6 +1568,32 @@ io.reread(buffer:) # "This is a test."
1524
1568
  buffer # "This is a test."
1525
1569
  ----
1526
1570
 
1571
+ ===== #to_s
1572
+
1573
+ Answers underlying string representation for _explicit_ conversion.
1574
+
1575
+ [source,ruby]
1576
+ ----
1577
+ io = StringIO.new
1578
+ io.write "One"
1579
+ io.write ", "
1580
+ io.write "Two."
1581
+ io.to_s # "One, Two."
1582
+ ----
1583
+
1584
+ ===== #to_str
1585
+
1586
+ Answers underlying string representation for _implicit_ conversion.
1587
+
1588
+ [source,ruby]
1589
+ ----
1590
+ io = StringIO.new
1591
+ io.write "One"
1592
+ io.write ", "
1593
+ io.write "Two."
1594
+ io.to_str # "One, Two."
1595
+ ----
1596
+
1527
1597
  ==== Struct
1528
1598
 
1529
1599
  ===== .with_positions
@@ -1730,6 +1800,8 @@ bin/rake
1730
1800
 
1731
1801
  == link:https://alchemists.io/policies/contributions[Contributions]
1732
1802
 
1803
+ == link:https://alchemists.io/policies/developer_certificate_of_origin[Developer Certificate of Origin]
1804
+
1733
1805
  == link:https://alchemists.io/projects/refinements/versions[Versions]
1734
1806
 
1735
1807
  == link:https://alchemists.io/community[Community]
@@ -19,7 +19,7 @@ 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(&) = block_given? ? lazy.map(&).find(&:itself) : lazy
23
23
 
24
24
  def including(*elements) = self + elements.flatten
25
25
 
@@ -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
@@ -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
 
@@ -8,6 +8,9 @@ module Refinements
8
8
  module StringIO
9
9
  refine ::StringIO do
10
10
  import_methods Shared::Reread
11
+
12
+ alias_method :to_s, :string
13
+ alias_method :to_str, :string
11
14
  end
12
15
  end
13
16
  end
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.7.1"
5
+ spec.version = "12.9.0"
6
6
  spec.authors = ["Brooke Kuhlmann"]
7
7
  spec.email = ["brooke@alchemists.io"]
8
8
  spec.homepage = "https://alchemists.io/projects/refinements"
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.metadata = {
13
13
  "bug_tracker_uri" => "https://github.com/bkuhlmann/refinements/issues",
14
14
  "changelog_uri" => "https://alchemists.io/projects/refinements/versions",
15
- "documentation_uri" => "https://alchemists.io/projects/refinements",
15
+ "homepage_uri" => "https://alchemists.io/projects/refinements",
16
16
  "funding_uri" => "https://github.com/sponsors/bkuhlmann",
17
17
  "label" => "Refinements",
18
18
  "rubygems_mfa_required" => "true",
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.signing_key = Gem.default_key_path
23
23
  spec.cert_chain = [Gem.default_cert_path]
24
24
 
25
- spec.required_ruby_version = "~> 3.3"
25
+ spec.required_ruby_version = ">= 3.3", "<= 3.4"
26
26
 
27
27
  spec.files = Dir["*.gemspec", "lib/**/*"]
28
28
  spec.extra_rdoc_files = Dir["README*", "LICENSE*"]
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.7.1
4
+ version: 12.9.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-08-03 00:00:00.000000000 Z
38
+ date: 2024-10-01 00:00:00.000000000 Z
39
39
  dependencies: []
40
40
  description:
41
41
  email:
@@ -73,7 +73,7 @@ licenses:
73
73
  metadata:
74
74
  bug_tracker_uri: https://github.com/bkuhlmann/refinements/issues
75
75
  changelog_uri: https://alchemists.io/projects/refinements/versions
76
- documentation_uri: https://alchemists.io/projects/refinements
76
+ homepage_uri: https://alchemists.io/projects/refinements
77
77
  funding_uri: https://github.com/sponsors/bkuhlmann
78
78
  label: Refinements
79
79
  rubygems_mfa_required: 'true'
@@ -84,16 +84,19 @@ require_paths:
84
84
  - lib
85
85
  required_ruby_version: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '3.3'
90
+ - - "<="
91
+ - !ruby/object:Gem::Version
92
+ version: '3.4'
90
93
  required_rubygems_version: !ruby/object:Gem::Requirement
91
94
  requirements:
92
95
  - - ">="
93
96
  - !ruby/object:Gem::Version
94
97
  version: '0'
95
98
  requirements: []
96
- rubygems_version: 3.5.17
99
+ rubygems_version: 3.5.20
97
100
  signing_key:
98
101
  specification_version: 4
99
102
  summary: A collection of core object refinements.
metadata.gz.sig CHANGED
Binary file