refinements 12.6.0 → 12.7.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.adoc +109 -0
- data/lib/refinements/array.rb +2 -2
- data/lib/refinements/binding.rb +13 -0
- data/lib/refinements/data.rb +2 -2
- data/lib/refinements/hash.rb +2 -2
- data/lib/refinements/io.rb +2 -2
- data/lib/refinements/object.rb +22 -0
- data/lib/refinements/shared/diff.rb +17 -0
- data/lib/refinements/shared/many.rb +15 -0
- data/lib/refinements/shared/reread.rb +10 -0
- data/lib/refinements/string_io.rb +2 -2
- data/lib/refinements/struct.rb +2 -2
- data/lib/refinements.rb +2 -0
- data/refinements.gemspec +1 -1
- data.tar.gz.sig +0 -0
- metadata +7 -5
- metadata.gz.sig +0 -0
- data/lib/refinements/shared/enumerables/many.rb +0 -17
- data/lib/refinements/shared/ios/reread.rb +0 -12
- data/lib/refinements/shared/values/diff.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d95a713a69dbbeaec7c6c2f76c634f576d763e86d32b1f46bad9817ac6eacd70
|
4
|
+
data.tar.gz: 5d972fa9193dab8743c5ed1aa7980a9b11be3b34e951f885377d25742d791eb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cec359f8d82a7e98889f2913e8330857d15f9d7a99ae0024e3895b6b4ec61c7a6c6a17897fb19b3ae1f10224d02be2affca6c81093d7965c6acfdb58d0b5c535
|
7
|
+
data.tar.gz: b967aed2a285c8ca49b5ef6a54f830721a19ccdc7521ac7857bedcec849b781e7b6a357b770c4f99cd47fe4197f2f0b2cbecd149e89096cd4193c841a64dc623
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -13,16 +13,19 @@ toc::[]
|
|
13
13
|
Enhances the following objects:
|
14
14
|
|
15
15
|
* Array
|
16
|
+
* Binding
|
16
17
|
* Data
|
17
18
|
* DateTime
|
18
19
|
* Hash
|
19
20
|
* IO
|
20
21
|
* LogDevice
|
21
22
|
* Logger
|
23
|
+
* Object
|
22
24
|
* Pathname
|
23
25
|
* String
|
24
26
|
* StringIO
|
25
27
|
* Struct
|
28
|
+
* Symbol
|
26
29
|
|
27
30
|
== Requirements
|
28
31
|
|
@@ -77,12 +80,14 @@ gem "refinements", require: false
|
|
77
80
|
[source,ruby]
|
78
81
|
----
|
79
82
|
require "refinements/array"
|
83
|
+
require "refinements/binding"
|
80
84
|
require "refinements/data"
|
81
85
|
require "refinements/date_time"
|
82
86
|
require "refinements/hash"
|
83
87
|
require "refinements/io"
|
84
88
|
require "refinements/log_device"
|
85
89
|
require "refinements/logger"
|
90
|
+
require "refinements/object"
|
86
91
|
require "refinements/pathname"
|
87
92
|
require "refinements/string"
|
88
93
|
require "refinements/string_io"
|
@@ -99,12 +104,14 @@ refinement(s):
|
|
99
104
|
----
|
100
105
|
class Example
|
101
106
|
using Refinements::Array
|
107
|
+
using Refinements::Binding
|
102
108
|
using Refinements::Data
|
103
109
|
using Refinements::DateTime
|
104
110
|
using Refinements::Hash
|
105
111
|
using Refinements::IO
|
106
112
|
using Refinements::LogDevice
|
107
113
|
using Refinements::Logger
|
114
|
+
using Refinements::Object
|
108
115
|
using Refinements::Pathname
|
109
116
|
using Refinements::String
|
110
117
|
using Refinements::StringIO
|
@@ -394,6 +401,59 @@ Further enhances `#to_sentence` by answering a sentence where all elements are i
|
|
394
401
|
|
395
402
|
💡 You can use a string or a symbol for the conjunction (i.e. `"and"` or `:and`).
|
396
403
|
|
404
|
+
==== Binding
|
405
|
+
|
406
|
+
===== #[]
|
407
|
+
|
408
|
+
Allows you to obtain a local variable. This is an alias to `#local_variable_get`.
|
409
|
+
|
410
|
+
[source,ruby]
|
411
|
+
----
|
412
|
+
a = 1
|
413
|
+
binding[:a] # 1
|
414
|
+
binding[:bogus] # `bogus' is not defined (NameError)
|
415
|
+
----
|
416
|
+
|
417
|
+
===== #[]=
|
418
|
+
|
419
|
+
Allows you to set a local variable. This is an alias to `#local_variable_set`.
|
420
|
+
|
421
|
+
[source,ruby]
|
422
|
+
----
|
423
|
+
a = 1
|
424
|
+
binding[:a] = 5
|
425
|
+
binding[:bogus] = "bad"
|
426
|
+
|
427
|
+
binding[:a] # 5
|
428
|
+
binding[:bogus] # # `bogus' is not defined (NameError)
|
429
|
+
----
|
430
|
+
|
431
|
+
===== #local?
|
432
|
+
|
433
|
+
Allows you to check if local variable is defined. This is an alias to `#local_variable_defined?`.
|
434
|
+
|
435
|
+
[source,ruby]
|
436
|
+
----
|
437
|
+
a = 1
|
438
|
+
|
439
|
+
binding.local? :a # true
|
440
|
+
binding.local? :b # false
|
441
|
+
----
|
442
|
+
|
443
|
+
===== #locals
|
444
|
+
|
445
|
+
Allows you to acquire all locally defined variables. This is an alias to `#local_variables`.
|
446
|
+
|
447
|
+
[source,ruby]
|
448
|
+
----
|
449
|
+
binding.locals # []
|
450
|
+
|
451
|
+
a = 1
|
452
|
+
b = 2
|
453
|
+
|
454
|
+
binding.locals # [:a, :b]
|
455
|
+
----
|
456
|
+
|
397
457
|
==== Data
|
398
458
|
|
399
459
|
===== #diff
|
@@ -875,6 +935,55 @@ logger.any { "Test." }
|
|
875
935
|
A, [2000-01-10T09:00:00.330719 #44925] ANY -- : Test.
|
876
936
|
```
|
877
937
|
|
938
|
+
==== Object
|
939
|
+
|
940
|
+
===== #in?
|
941
|
+
|
942
|
+
Allows you to know if `self` is included in, or an element of, the target object.
|
943
|
+
|
944
|
+
[source,ruby]
|
945
|
+
----
|
946
|
+
1.in? [1, 2, 3] # true
|
947
|
+
9.in? [1, 2, 3] # false
|
948
|
+
|
949
|
+
"a".in? %w[a b c] # true
|
950
|
+
"z".in? %w[a b c] # false
|
951
|
+
|
952
|
+
:a.in? %i[a b c] # true
|
953
|
+
:z.in? %i[a b c] # false
|
954
|
+
|
955
|
+
:a.in? %i[a b c].to_enum # true
|
956
|
+
:z.in? %i[a b c].to_enum # false
|
957
|
+
|
958
|
+
:a.in?({a: 1, b: 2, c: 3}) # true
|
959
|
+
:z.in?({a: 1, b: 2, c: 3}) # false
|
960
|
+
|
961
|
+
1.in? 1..5 # true
|
962
|
+
9.in? 1..5 # false
|
963
|
+
|
964
|
+
1.in? Set[1, 2, 3] # true
|
965
|
+
9.in? Set[1, 2, 3] # false
|
966
|
+
|
967
|
+
"a".in? "abcde" # true
|
968
|
+
"z".in? "abcde" # false
|
969
|
+
|
970
|
+
"z".in? Object.new # `String#include?` must be implemented. (NoMethodError)
|
971
|
+
----
|
972
|
+
|
973
|
+
===== #to_proc
|
974
|
+
|
975
|
+
Allows you to cast any object to a proc.
|
976
|
+
|
977
|
+
[source,ruby]
|
978
|
+
----
|
979
|
+
one = Class.new { def call = :test }
|
980
|
+
.new
|
981
|
+
two = Object.new
|
982
|
+
|
983
|
+
one.to_proc # #<Proc:0x0000000124019580 (lambda)>
|
984
|
+
two.to_proc # `Object#call` must be implemented. (NoMethodError)
|
985
|
+
----
|
986
|
+
|
878
987
|
==== Pathname
|
879
988
|
|
880
989
|
===== Pathname
|
data/lib/refinements/array.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "refinements/shared/
|
3
|
+
require "refinements/shared/many"
|
4
4
|
|
5
5
|
module Refinements
|
6
6
|
# Provides additional enhancements to the Array primitive.
|
7
7
|
module Array
|
8
8
|
refine ::Array do
|
9
|
-
import_methods Shared::
|
9
|
+
import_methods Shared::Many
|
10
10
|
|
11
11
|
def combinatorial?(other) = !other.empty? && size == union(other).size
|
12
12
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Refinements
|
4
|
+
# Provides additional enhancements to the Binding class.
|
5
|
+
module Binding
|
6
|
+
refine ::Binding do
|
7
|
+
alias_method :[], :local_variable_get
|
8
|
+
alias_method :[]=, :local_variable_set
|
9
|
+
alias_method :local?, :local_variable_defined?
|
10
|
+
alias_method :locals, :local_variables
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/refinements/data.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "refinements/shared/
|
3
|
+
require "refinements/shared/diff"
|
4
4
|
|
5
5
|
module Refinements
|
6
6
|
# Provides additional enhancements to the Struct primitive.
|
7
7
|
module Data
|
8
8
|
refine ::Data do
|
9
|
-
import_methods Shared::
|
9
|
+
import_methods Shared::Diff
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
data/lib/refinements/hash.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "refinements/shared/
|
3
|
+
require "refinements/shared/many"
|
4
4
|
|
5
5
|
module Refinements
|
6
6
|
# Provides additional enhancements to the Hash primitive.
|
@@ -12,7 +12,7 @@ module Refinements
|
|
12
12
|
end
|
13
13
|
|
14
14
|
refine ::Hash do
|
15
|
-
import_methods Shared::
|
15
|
+
import_methods Shared::Many
|
16
16
|
|
17
17
|
def compress = compact.delete_if { |_key, value| value.respond_to?(:empty?) && value.empty? }
|
18
18
|
|
data/lib/refinements/io.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "refinements/shared/
|
3
|
+
require "refinements/shared/reread"
|
4
4
|
|
5
5
|
module Refinements
|
6
6
|
# Provides additional enhancements to the IO primitive.
|
@@ -17,7 +17,7 @@ module Refinements
|
|
17
17
|
end
|
18
18
|
|
19
19
|
refine ::IO do
|
20
|
-
import_methods Shared::
|
20
|
+
import_methods Shared::Reread
|
21
21
|
|
22
22
|
def redirect other
|
23
23
|
return self unless block_given?
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Refinements
|
4
|
+
# Provides additional enhancements to the Object class.
|
5
|
+
module Object
|
6
|
+
refine ::Object do
|
7
|
+
def in? other
|
8
|
+
case other
|
9
|
+
when Range then other.cover? self
|
10
|
+
when ::Array, Enumerable, ::Hash, Set, ::String then other.include? self
|
11
|
+
else fail NoMethodError, "`#{self.class}#include?` must be implemented."
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_proc
|
16
|
+
return method(:call).to_proc if respond_to? :call
|
17
|
+
|
18
|
+
fail NoMethodError, "`#{self.class}#call` must be implemented."
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Refinements
|
4
|
+
module Shared
|
5
|
+
# Provides functionality for knowing the difference between two whole value objects.
|
6
|
+
module Diff
|
7
|
+
def diff other
|
8
|
+
if other.is_a? self.class
|
9
|
+
to_h.merge(other.to_h) { |_, one, two| [one, two].uniq }
|
10
|
+
.select { |_, diff| diff.size == 2 }
|
11
|
+
else
|
12
|
+
to_h.each.with_object({}) { |(key, value), diff| diff[key] = [value, nil] }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Refinements
|
4
|
+
module Shared
|
5
|
+
# Provides functionality for knowing whether an enumerable has many elements or not.
|
6
|
+
module Many
|
7
|
+
def many?
|
8
|
+
return size > 1 unless block_given?
|
9
|
+
|
10
|
+
total = reduce(0) { |count, item| yield(item) ? count + 1 : count }
|
11
|
+
total > 1
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "refinements/shared/
|
3
|
+
require "refinements/shared/reread"
|
4
4
|
require "stringio"
|
5
5
|
|
6
6
|
module Refinements
|
7
7
|
# Provides additional enhancements to the StringIO primitive.
|
8
8
|
module StringIO
|
9
9
|
refine ::StringIO do
|
10
|
-
import_methods Shared::
|
10
|
+
import_methods Shared::Reread
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
data/lib/refinements/struct.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "refinements/shared/
|
3
|
+
require "refinements/shared/diff"
|
4
4
|
|
5
5
|
module Refinements
|
6
6
|
# Provides additional enhancements to the Struct primitive.
|
@@ -10,7 +10,7 @@ module Refinements
|
|
10
10
|
end
|
11
11
|
|
12
12
|
refine ::Struct do
|
13
|
-
import_methods Shared::
|
13
|
+
import_methods Shared::Diff
|
14
14
|
|
15
15
|
def merge(...) = dup.merge!(...)
|
16
16
|
|
data/lib/refinements.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "refinements/array"
|
4
|
+
require "refinements/binding"
|
4
5
|
require "refinements/data"
|
5
6
|
require "refinements/date_time"
|
6
7
|
require "refinements/hash"
|
7
8
|
require "refinements/io"
|
8
9
|
require "refinements/log_device"
|
9
10
|
require "refinements/logger"
|
11
|
+
require "refinements/object"
|
10
12
|
require "refinements/pathname"
|
11
13
|
require "refinements/string"
|
12
14
|
require "refinements/string_io"
|
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.7.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-07-
|
38
|
+
date: 2024-07-15 00:00:00.000000000 Z
|
39
39
|
dependencies: []
|
40
40
|
description:
|
41
41
|
email:
|
@@ -50,16 +50,18 @@ files:
|
|
50
50
|
- README.adoc
|
51
51
|
- lib/refinements.rb
|
52
52
|
- lib/refinements/array.rb
|
53
|
+
- lib/refinements/binding.rb
|
53
54
|
- lib/refinements/data.rb
|
54
55
|
- lib/refinements/date_time.rb
|
55
56
|
- lib/refinements/hash.rb
|
56
57
|
- lib/refinements/io.rb
|
57
58
|
- lib/refinements/log_device.rb
|
58
59
|
- lib/refinements/logger.rb
|
60
|
+
- lib/refinements/object.rb
|
59
61
|
- lib/refinements/pathname.rb
|
60
|
-
- lib/refinements/shared/
|
61
|
-
- lib/refinements/shared/
|
62
|
-
- lib/refinements/shared/
|
62
|
+
- lib/refinements/shared/diff.rb
|
63
|
+
- lib/refinements/shared/many.rb
|
64
|
+
- lib/refinements/shared/reread.rb
|
63
65
|
- lib/refinements/string.rb
|
64
66
|
- lib/refinements/string_io.rb
|
65
67
|
- lib/refinements/struct.rb
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Refinements
|
4
|
-
module Shared
|
5
|
-
module Enumerables
|
6
|
-
# Provides shared functionality for knowing whether an enumerable has many elements or not.
|
7
|
-
module Many
|
8
|
-
def many?
|
9
|
-
return size > 1 unless block_given?
|
10
|
-
|
11
|
-
total = reduce(0) { |count, item| yield(item) ? count + 1 : count }
|
12
|
-
total > 1
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Refinements
|
4
|
-
module Shared
|
5
|
-
module IOs
|
6
|
-
# Provides shared functionality for I/O object rewinding.
|
7
|
-
module Reread
|
8
|
-
def reread(length = nil, buffer: nil) = tap(&:rewind).read(length, buffer)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Refinements
|
4
|
-
module Shared
|
5
|
-
module Values
|
6
|
-
# Provides shared whole value functionality for knowing the difference between two objects.
|
7
|
-
module Diff
|
8
|
-
def diff other
|
9
|
-
if other.is_a? self.class
|
10
|
-
to_h.merge(other.to_h) { |_, one, two| [one, two].uniq }
|
11
|
-
.select { |_, diff| diff.size == 2 }
|
12
|
-
else
|
13
|
-
to_h.each.with_object({}) { |(key, value), diff| diff[key] = [value, nil] }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|