refinements 7.2.0 → 7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad5be980b8f793ae3267c3903932b56af4d7e0f4e85868086015f7f44209e6e6
4
- data.tar.gz: 21fd8437f771085190de49af6f46e08ba3cc1cdd6844649d8e63cde20549b9f4
3
+ metadata.gz: 3b7d7affd4176bb25ee87d3718b592a0bd2b07be2bad86d584f06f0d16dcd866
4
+ data.tar.gz: 256ab9f274581c668a06949a41501c50885f9681dd6150c9b58046d59cf87de7
5
5
  SHA512:
6
- metadata.gz: 0a37bebc4c4ef4f6e0b503601f2728eee8f04c9bcde3b714e9332dac343b62f4281dc4924b178c24a011c2e6ddfcb963e479aab6b0f070fc4bd898a99f98824a
7
- data.tar.gz: c33d3b26f9b7c19ec977a36c1904faa888f00884921abad97ac4ca76e14772fda5b87cc2455d46e8c114f4392604f216ff90e06a3648be7c00fa268b77697c44
6
+ metadata.gz: 356b4ea5575bbec34d4b2c31495c59b49ce9efe00bedcce194d458c8bdbbcf47ca87e3be00b60f910af14e2768cf8b42de909fcdec652a895d8de706652e0777
7
+ data.tar.gz: 0a7d8c6bd99585868ec7b2d119f7014e1c2ebf571324d23c8be209bd364417c4106f465a4f0dd6ab012fb6f82e1024ae803ef0d27949051e6c65b4aa2d6f63dd
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -19,29 +19,47 @@ toc::[]
19
19
  ** `#compress` - Removes `nil` and empty values without modifying itself.
20
20
  ** `#compress!` - Removes `nil` and empty values while modifying itself.
21
21
  ** `#ring` - Answers a circular array which can enumerate before, current, after elements.
22
- * *DateTimes*:
23
- ** `.utc` - Answers new DateTime object for current UTC date/time.
24
22
  * *BigDecimals*:
25
23
  ** `#inspect` - Allows one to inspect a big decimal with numeric representation.
24
+ * *DateTimes*:
25
+ ** `.utc` - Answers new DateTime object for current UTC date/time.
26
26
  * *Files*:
27
- ** `#name` - Answers the _name_ of file without extension.
28
- ** `#copy` - Copies an existing file to new file. Both directory structures must exist.
29
27
  ** `#rewrite` - When given a file path and a block, it provides the contents of the recently read
30
28
  file for manipulation and immediate writing back to the same file.
31
- ** `#touch` - Updates the access and modified times of an existing file or creates the file when
32
- not existing.
33
29
  * *Hashes*:
34
- ** `#except` - Answers new hash with given keys removed without modifying calling hash.
35
- ** `#except!` - Answers new hash with given keys removed while modifying calling hash.
30
+ ** `.infinite` - Answers new hash where missing keys, even deeply nested, answer an empty hash.
31
+ ** `.with_default` - Answers new hash where every top-level missing key has the same default value.
32
+ ** `#except` - Answers new hash with given keys removed without modifying itself.
33
+ ** `#except!` - Answers new hash with given keys removed while modifying itself.
36
34
  ** `#symbolize_keys` - Converts keys to symbols without modifying itself.
37
35
  ** `#symbolize_keys!` - Converts keys to symbols while modifying itself.
38
36
  ** `#deep_merge` - Merges deeply nested hashes together without modifying itself.
39
37
  ** `#deep_merge!` - Merges deeply nested hashes together while modifying itself.
40
- ** `#reverse_merge` - Merges calling hash into passed in hash without modifying calling hash.
41
- ** `#reverse_merge!` - Merges calling hash into passed in hash while modifying calling hash.
38
+ ** `#deep_symbolize_keys` - Symbolizes keys of nested hash without modifying itself. Does not handle
39
+ nested arrays, though.
40
+ ** `#deep_symbolize_keys!` - Symbolizes keys of nested hash while modifying itself. Does not handle
41
+ nested arrays, though.
42
+ ** `#recurse` - Applies block to nested hash. Does not handle nested arrays, though.
43
+ ** `#rekey` - Transforms keys per mapping (size of mapping can vary) without modifying itself.
44
+ ** `#rekey!` - Transforms keys per mapping (size of mapping can vary) while modifying itself.
45
+ ** `#reverse_merge` - Merges calling hash into passed in hash without modifying itself.
46
+ ** `#reverse_merge!` - Merges calling hash into passed in hash while modifying itself.
47
+ ** `#use` - Passes each hash value as a block argument for further processing.
42
48
  * *Pathnames*:
49
+ ** `Pathname` - Conversion function (refined from `Kernel`) which can cast `nil` into a pathname.
50
+ ** `#name` - Answers file name without extension.
51
+ ** `#copy` - Copies file from current location to new location.
52
+ ** `#directories` - Answers all or filtered directories for current path.
53
+ ** `#extensions` - Answers file extensions as an array.
54
+ ** `#files` - Answers all or filtered files for current path.
55
+ ** `#gsub` - Same behavior as `String#gsub` but answers a path with patterns replaced with desired
56
+ substitutes.
57
+ ** `#relative_parent_from` - Answers relative path from parent directory. This is a complement to
58
+ `#relative_path_from`.
59
+ ** `#make_ancestors` - Ensures all ancestor directories are created for a path.
43
60
  ** `#rewrite` - When given a block, it provides the contents of the recently read file for
44
61
  manipulation and immediate writing back to the same file.
62
+ ** `#touch` - Updates access and modification times for path. Defaults to current time.
45
63
  * *Strings*:
46
64
  ** `#first` - Answers first character of a string or first set of characters if given a number.
47
65
  ** `#last` - Answers last character of a string or last set of characters if given a number.
@@ -49,17 +67,18 @@ manipulation and immediate writing back to the same file.
49
67
  (i.e. `<space>`, `\n`, `\t`, `\r`).
50
68
  ** `#up` - Answers string with only first letter upcased.
51
69
  ** `#down` - Answers string with only first letter downcased.
52
- ** `#camelcase` - Answers a camelcased string. Example: "`ThisIsCamelcase`".
53
- ** `#snakecase` - Answers a snakecased string. Example: "`this_is_snakecase`".
54
- ** `#titleize` - Answers titleized string. Example: "`This Is Titleized`".
55
- ** `#use` - Provides hash value computation, via a block, by using only the keys as arguments to
56
- the block.
70
+ ** `#camelcase` - Answers a camelcased string.
71
+ ** `#snakecase` - Answers a snakecased string.
72
+ ** `#titleize` - Answers titleized string.
73
+ ** `#to_bool` - Answers string as a boolean.
74
+ * *String IOs*:
75
+ ** `#reread` - Answers full string by rewinding to beginning of string and reading all content.
57
76
 
58
77
  == Requirements
59
78
 
60
- . https://www.ruby-lang.org[Ruby 2.7.x].
61
- . A solid understanding of https://www.youtube.com/watch?v=qXC9Gk4dCEw[Ruby refinements and lexical
62
- scope].
79
+ . https://www.ruby-lang.org[Ruby].
80
+ . A solid understanding of link:https://www.alchemists.io/articles/ruby_refinements[Ruby refinements
81
+ and lexical scope].
63
82
 
64
83
  == Setup
65
84
 
@@ -113,8 +132,8 @@ gem "refinements", require: false
113
132
  [source,ruby]
114
133
  ----
115
134
  require "refinements/arrays"
116
- require "refinements/date_times"
117
135
  require "refinements/big_decimals"
136
+ require "refinements/date_times"
118
137
  require "refinements/files"
119
138
  require "refinements/hashes"
120
139
  require "refinements/pathnames"
@@ -129,8 +148,8 @@ Much like including/extending a module, you’ll need modify your object(s) to u
129
148
  ----
130
149
  class Example
131
150
  using Refinements::Arrays
132
- using Refinements::DateTimes
133
151
  using Refinements::BigDecimals
152
+ using Refinements::DateTimes
134
153
  using Refinements::Files
135
154
  using Refinements::Hashes
136
155
  using Refinements::Pathnames
@@ -162,18 +181,18 @@ example.ring { |(before, current, after)| puts "#{before} #{current} #{after}" }
162
181
  # [2 3 1]
163
182
  ----
164
183
 
165
- ==== DateTime
184
+ ==== Big Decimal
166
185
 
167
186
  [source,ruby]
168
187
  ----
169
- DateTime.utc # => #<DateTime: 2019-12-31T18:17:00+00:00 ((2458849j,65820s,181867000n),+0s,2299161j)>
188
+ BigDecimal.new("5.0E-10").inspect # => "#<BigDecimal:3fd3d458fe84 0.0000000005>"
170
189
  ----
171
190
 
172
- ==== Big Decimal
191
+ ==== DateTime
173
192
 
174
193
  [source,ruby]
175
194
  ----
176
- BigDecimal.new("5.0E-10").inspect # => "#<BigDecimal:3fd3d458fe84 0.0000000005>"
195
+ DateTime.utc # => #<DateTime: 2019-12-31T18:17:00+00:00 ((2458849j,65820s,181867000n),+0s,2299161j)>
177
196
  ----
178
197
 
179
198
  ==== File
@@ -187,6 +206,15 @@ File.rewrite("/test.txt") { |content| content.gsub "[placeholder]", "example" }
187
206
 
188
207
  [source,ruby]
189
208
  ----
209
+ example = Hash.infinite
210
+ example[:a] # => {}
211
+ example[:a][:b][:c] # => {}
212
+
213
+ example = Hash.with_default ""
214
+ example[:a] # => ""
215
+ example = Hash.with_default []
216
+ example[:b] # => []
217
+
190
218
  example = {a: 1, b: 2, c: 3}
191
219
  example.except :a, :b # => {c: 3}
192
220
  example # => {a: 1, b: 2, c: 3}
@@ -219,6 +247,26 @@ example = {a: "A", b: {one: "One", two: "Two"}}
219
247
  example.deep_merge! b: {one: 1} # => {a: "A", b: {one: 1, two: "Two"}}
220
248
  example # => {a: "A", b: {one: 1, two: "Two"}}
221
249
 
250
+ example = {"a" => {"b" => 2}}
251
+ example.deep_symbolize_keys # => {a: {b: 1}}
252
+ example # => {"a" => {"b" => 2}}
253
+
254
+ example = {"a" => {"b" => 2}}
255
+ example.deep_symbolize_keys! # => {a: {b: 1}}
256
+ example # => {a: {b: 1}}
257
+
258
+ example = {"a" => {"b" => 1}}
259
+ example.recurse(&:symbolize_keys) # => {a: {b: 1}}
260
+ example.recurse(&:invert) # => {{"b" => 1} => "a"}
261
+
262
+ example = {a: 1, b: 2, c: 3}
263
+ example.rekey a: :amber, b: :blue # => {amber: 1, blue: 2, c: 3}
264
+ example # => {a: 1, b: 2, c: 3}
265
+
266
+ example = {a: 1, b: 2, c: 3}
267
+ example.rekey! a: :amber, b: :blue # => {amber: 1, blue: 2, c: 3}
268
+ example # => {amber: 1, blue: 2, c: 3}
269
+
222
270
  example = {a: 1, b: 2}
223
271
  example.reverse_merge a: 0, c: 3 # => {a: 1, b: 2, c: 3}
224
272
  example # => {a: 1, b: 2}
@@ -235,14 +283,35 @@ example.use { |unit, street| "#{unit} #{street}" } # => "221B Baker Street"
235
283
 
236
284
  [source,ruby]
237
285
  ----
238
- Pathname("test.txt").name # => Pathname("test")
286
+ Pathname(nil) # => Pathname("")
287
+
288
+ Pathname("example.txt").name # => Pathname("example")
239
289
 
240
290
  Pathname("input.txt").copy Pathname("output.txt")
241
291
 
292
+ Pathname("/example").directories # => [Pathname("a"), Pathname("b")]
293
+ Pathname("/example").directories "a*" # => [Pathname("a")]
294
+ Pathname("/example").directories flag: File::FNM_DOTMATCH # => [Pathname(".."), Pathname(".")]
295
+
296
+ Pathname("example.txt.erb").extensions # => [".txt", ".erb"]
297
+
298
+ Pathname("/example").files # => [Pathname("a.txt"), Pathname("a.png")]
299
+ Pathname("/example").files "*.png" # => [Pathname("a.png")]
300
+ Pathname("/example").files flag: File::FNM_DOTMATCH # => [Pathname(".ruby-version")]
301
+
302
+ Pathname("/a/path/some/path").gsub("path", "test") # => Pathname("/a/test/some/test")
303
+ Pathname("/%placeholder%/some/%placeholder%").gsub("%placeholder%", "test") # => Pathname("/test/some/test")
304
+
305
+ Pathname("/one/two/three").relative_parent_from("/one") # => Pathname "two"
306
+
307
+ Pathname("/one/two").make_ancestors
308
+ Pathname("/one").exist? # => true
309
+ Pathname("/one/two").exist? # => false
310
+
242
311
  Pathname("/test.txt").rewrite { |content| content.sub "[placeholder]", "example" }
243
312
 
244
- Pathname("test.txt").touch
245
- Pathname("test.txt").touch accessed_at: Time.now - 1, modified_at: Time.now - 1
313
+ Pathname("example.txt").touch
314
+ Pathname("example.txt").touch at: Time.now - 1
246
315
  ----
247
316
 
248
317
  ==== String
@@ -256,11 +325,37 @@ Pathname("test.txt").touch accessed_at: Time.now - 1, modified_at: Time.now - 1
256
325
  "instant".last 3 # => "ant"
257
326
 
258
327
  " \n\t\r".blank? # => true
328
+
259
329
  "example".up # => "Example"
330
+
260
331
  "EXAMPLE".down # => "eXAMPLE"
332
+
261
333
  "this_is_an_example".camelcase # => "ThisIsAnExample"
334
+
262
335
  "ThisIsAnExample".snakecase # => "this_is_an_example"
336
+
263
337
  "ThisIsAnExample".titleize # => "This Is An Example"
338
+
339
+ "true".to_bool # => true
340
+ "yes".to_bool # => true
341
+ "1".to_bool # => true
342
+ "".to_bool # => false
343
+ "example".to_bool # => false
344
+ ----
345
+
346
+ ==== String IO
347
+
348
+ [source,ruby]
349
+ ----
350
+ io = StringIO.new
351
+ io.write "This is a test."
352
+ io.reread # => "This is a test."
353
+
354
+ io.reread(4) => "This"
355
+
356
+ buffer = "".dup
357
+ io.reread(buffer: buffer)
358
+ buffer # => "This is a test."
264
359
  ----
265
360
 
266
361
  == Tests
@@ -299,4 +394,4 @@ Read link:CHANGES.adoc[CHANGES] for details.
299
394
 
300
395
  == Credits
301
396
 
302
- Engineered by link:https://www.alchemists.io/team/brooke_kuhlmann.html[Brooke Kuhlmann].
397
+ Engineered by link:https://www.alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].
@@ -2,9 +2,10 @@
2
2
 
3
3
  require "refinements/identity"
4
4
  require "refinements/arrays"
5
- require "refinements/date_times"
6
5
  require "refinements/big_decimals"
6
+ require "refinements/date_times"
7
7
  require "refinements/files"
8
8
  require "refinements/hashes"
9
9
  require "refinements/pathnames"
10
10
  require "refinements/strings"
11
+ require "refinements/string_ios"
@@ -4,6 +4,7 @@ module Refinements
4
4
  module Files
5
5
  refine File.singleton_class do
6
6
  def rewrite path
7
+ warn "[DEPRECATION]: File.rewrite is deprecated, use Pathname#rewrite instead."
7
8
  read(path).then { |content| write path, yield(content) }
8
9
  end
9
10
  end
@@ -2,6 +2,16 @@
2
2
 
3
3
  module Refinements
4
4
  module Hashes
5
+ refine Hash.singleton_class do
6
+ def infinite
7
+ new { |new_hash, missing_key| new_hash[missing_key] = new(&new_hash.default_proc) }
8
+ end
9
+
10
+ def with_default value
11
+ new { |new_hash, missing_key| new_hash[missing_key] = value }
12
+ end
13
+ end
14
+
5
15
  refine Hash do
6
16
  def except *keys
7
17
  reject { |key, _value| keys.include? key }
@@ -23,10 +33,11 @@ module Refinements
23
33
  dup.deep_merge! other
24
34
  end
25
35
 
26
- # :reek:FeatureEnvy
27
36
  def deep_merge! other
37
+ clazz = self.class
38
+
28
39
  merge! other do |_key, this_value, other_value|
29
- if this_value.is_a?(Hash) && other_value.is_a?(Hash)
40
+ if this_value.is_a?(clazz) && other_value.is_a?(clazz)
30
41
  this_value.deep_merge other_value
31
42
  else
32
43
  other_value
@@ -34,11 +45,41 @@ module Refinements
34
45
  end
35
46
  end
36
47
 
48
+ def deep_symbolize_keys
49
+ recurse(&:symbolize_keys)
50
+ end
51
+
52
+ def deep_symbolize_keys!
53
+ recurse(&:symbolize_keys!)
54
+ end
55
+
56
+ def recurse &block
57
+ return self unless block_given?
58
+
59
+ transform = yield self
60
+
61
+ transform.each do |key, value|
62
+ transform[key] = value.recurse(&block) if value.is_a? self.class
63
+ end
64
+ end
65
+
66
+ def rekey mapping = {}
67
+ return self if mapping.empty?
68
+
69
+ transform_keys { |key| mapping[key] || key }
70
+ end
71
+
72
+ def rekey! mapping = {}
73
+ replace rekey(mapping)
74
+ end
75
+
37
76
  def reverse_merge other
77
+ warn "[DEPRECATION]: #reverse_merge is deprecated, use #merge instead."
38
78
  other.merge self
39
79
  end
40
80
 
41
81
  def reverse_merge! other
82
+ warn "[DEPRECATION]: #reverse_merge! is deprecated, use #merge! instead."
42
83
  merge!(other) { |_key, old_value, _new_value| old_value }
43
84
  end
44
85
 
@@ -5,7 +5,7 @@ module Refinements
5
5
  module Identity
6
6
  NAME = "refinements"
7
7
  LABEL = "Refinements"
8
- VERSION = "7.2.0"
8
+ VERSION = "7.7.0"
9
9
  VERSION_LABEL = "#{LABEL} #{VERSION}"
10
10
  end
11
11
  end
@@ -4,6 +4,14 @@ require "pathname"
4
4
 
5
5
  module Refinements
6
6
  module Pathnames
7
+ refine Kernel do
8
+ def Pathname object
9
+ return super(String(object)) unless object
10
+
11
+ super
12
+ end
13
+ end
14
+
7
15
  refine Pathname do
8
16
  def name
9
17
  basename extname
@@ -15,6 +23,31 @@ module Refinements
15
23
  self
16
24
  end
17
25
 
26
+ def directories pattern = "*", flag: File::FNM_SYSCASE
27
+ glob(pattern, flag).select(&:directory?).sort
28
+ end
29
+
30
+ def extensions
31
+ basename.to_s.split(/(?=\.)+/).tap(&:shift)
32
+ end
33
+
34
+ def files pattern = "*", flag: File::FNM_SYSCASE
35
+ glob(pattern, flag).select(&:file?).sort
36
+ end
37
+
38
+ def gsub pattern, replacement
39
+ self.class.new to_s.gsub(pattern, replacement)
40
+ end
41
+
42
+ def relative_parent_from root
43
+ relative_path_from(root).parent
44
+ end
45
+
46
+ def make_ancestors
47
+ dirname.mkpath
48
+ self
49
+ end
50
+
18
51
  def rewrite
19
52
  read.then { |content| write yield(content) if block_given? }
20
53
  self
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "stringio"
4
+
5
+ module Refinements
6
+ module StringIOs
7
+ refine StringIO do
8
+ def reread length = nil, buffer: nil
9
+ tap(&:rewind).read length, buffer
10
+ end
11
+ end
12
+ end
13
+ end
@@ -2,9 +2,12 @@
2
2
 
3
3
  module Refinements
4
4
  module Strings
5
+ DELIMITERS = %r([a-z][A-Z]|\s*-\s*|\s*/\s*|\s*:+\s*|\s*_\s*|\s+).freeze
6
+
5
7
  refine String.singleton_class do
6
8
  def delimiters
7
- %r([a-z][A-Z]|\s*\-\s*|\s*\/\s*|\s*\:+\s*|\s*\_\s*|\s+)
9
+ warn "[DEPRECATION]: .delimiters is deprecated, use DELIMITERS instead."
10
+ DELIMITERS
8
11
  end
9
12
  end
10
13
 
@@ -17,20 +20,18 @@ module Refinements
17
20
  return self[0] if max.zero?
18
21
  return "" if max.negative?
19
22
 
20
- self[0..(max - 1)]
23
+ self[..(max - 1)]
21
24
  end
22
25
 
23
- # :reek:TooManyStatements
24
26
  def last number = 0
25
27
  return self if empty?
26
28
 
27
29
  min = Integer number
28
- max = size - 1
29
30
 
30
- return self[max] if min.zero?
31
+ return self[size - 1] if min.zero?
31
32
  return "" if min.negative?
32
33
 
33
- self[(min + 1)..max]
34
+ self[(min + 1)..]
34
35
  end
35
36
 
36
37
  def blank?
@@ -50,33 +51,31 @@ module Refinements
50
51
  end
51
52
 
52
53
  def camelcase
53
- if match? self.class.delimiters
54
- split(%r(\s*\-\s*|\s*\/\s*|\s*\:+\s*)).then { |parts| combine parts, :up, "::" }
55
- .then { |text| text.split(/\s*\_\s*|\s+/) }
56
- .then { |parts| combine parts, :up }
57
- else
58
- up
59
- end
54
+ return up unless match? DELIMITERS
55
+
56
+ split(%r(\s*-\s*|\s*/\s*|\s*:+\s*)).then { |parts| combine parts, :up, "::" }
57
+ .then { |text| text.split(/\s*_\s*|\s+/) }
58
+ .then { |parts| combine parts, :up }
60
59
  end
61
60
 
62
61
  def snakecase
63
- if match? self.class.delimiters
64
- split(%r(\s*\-\s*|\s*\/\s*|\s*\:+\s*)).then { |parts| combine parts, :down, "/" }
65
- .then { |txt| txt.split(/(?=[A-Z])|\s*\_\s*|\s+/) }
66
- .then { |parts| combine parts, :down, "_" }
67
- else
68
- downcase
69
- end
62
+ return downcase unless match? DELIMITERS
63
+
64
+ split(%r(\s*-\s*|\s*/\s*|\s*:+\s*)).then { |parts| combine parts, :down, "/" }
65
+ .then { |text| text.split(/(?=[A-Z])|\s*_\s*|\s+/) }
66
+ .then { |parts| combine parts, :down, "_" }
70
67
  end
71
68
 
72
69
  def titleize
73
- if match? self.class.delimiters
74
- split(/(?=[A-Z])|\s*\_\s*|\s*\-\s*|\s+/).then { |parts| combine parts, :up, " " }
75
- .then { |text| text.split %r(\s*\/\s*|\s*\:+\s*) }
76
- .then { |parts| combine parts, :up, "/" }
77
- else
78
- capitalize
79
- end
70
+ return capitalize unless match? DELIMITERS
71
+
72
+ split(/(?=[A-Z])|\s*_\s*|\s*-\s*|\s+/).then { |parts| combine parts, :up, " " }
73
+ .then { |text| text.split %r(\s*/\s*|\s*:+\s*) }
74
+ .then { |parts| combine parts, :up, "/" }
75
+ end
76
+
77
+ def to_bool
78
+ %w[true yes on t y 1].include? downcase.strip
80
79
  end
81
80
 
82
81
  private
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refinements
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.2.0
4
+ version: 7.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - |
@@ -28,7 +28,7 @@ cert_chain:
28
28
  2XV8FRa7/JimI07sPLC13eLY3xd/aYTi85Z782KIA4j0G8XEEWAX0ouBhlXPocZv
29
29
  QWc=
30
30
  -----END CERTIFICATE-----
31
- date: 2020-04-01 00:00:00.000000000 Z
31
+ date: 2020-08-05 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: bundler-audit
@@ -50,28 +50,28 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '14.0'
53
+ version: '14.2'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '14.0'
60
+ version: '14.2'
61
61
  - !ruby/object:Gem::Dependency
62
- name: git-cop
62
+ name: git-lint
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '4.0'
67
+ version: '1.0'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '4.0'
74
+ version: '1.0'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: guard-rspec
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -92,28 +92,28 @@ dependencies:
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '0.12'
95
+ version: '0.13'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '0.12'
102
+ version: '0.13'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: pry-byebug
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '3.7'
109
+ version: '3.9'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '3.7'
116
+ version: '3.9'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: rake
119
119
  requirement: !ruby/object:Gem::Requirement
@@ -162,14 +162,14 @@ dependencies:
162
162
  requirements:
163
163
  - - "~>"
164
164
  - !ruby/object:Gem::Version
165
- version: '0.79'
165
+ version: '0.83'
166
166
  type: :development
167
167
  prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
169
169
  requirements:
170
170
  - - "~>"
171
171
  - !ruby/object:Gem::Version
172
- version: '0.79'
172
+ version: '0.83'
173
173
  - !ruby/object:Gem::Dependency
174
174
  name: rubocop-performance
175
175
  requirement: !ruby/object:Gem::Requirement
@@ -204,14 +204,14 @@ dependencies:
204
204
  requirements:
205
205
  - - "~>"
206
206
  - !ruby/object:Gem::Version
207
- version: '1.37'
207
+ version: '1.39'
208
208
  type: :development
209
209
  prerelease: false
210
210
  version_requirements: !ruby/object:Gem::Requirement
211
211
  requirements:
212
212
  - - "~>"
213
213
  - !ruby/object:Gem::Version
214
- version: '1.37'
214
+ version: '1.39'
215
215
  - !ruby/object:Gem::Dependency
216
216
  name: simplecov
217
217
  requirement: !ruby/object:Gem::Requirement
@@ -226,7 +226,7 @@ dependencies:
226
226
  - - "~>"
227
227
  - !ruby/object:Gem::Version
228
228
  version: '0.18'
229
- description:
229
+ description:
230
230
  email:
231
231
  - brooke@alchemists.io
232
232
  executables: []
@@ -245,6 +245,7 @@ files:
245
245
  - lib/refinements/hashes.rb
246
246
  - lib/refinements/identity.rb
247
247
  - lib/refinements/pathnames.rb
248
+ - lib/refinements/string_ios.rb
248
249
  - lib/refinements/strings.rb
249
250
  homepage: https://www.alchemists.io/projects/refinements
250
251
  licenses:
@@ -254,7 +255,7 @@ metadata:
254
255
  changelog_uri: https://www.alchemists.io/projects/refinements/changes.html
255
256
  documentation_uri: https://www.alchemists.io/projects/refinements
256
257
  source_code_uri: https://github.com/bkuhlmann/refinements
257
- post_install_message:
258
+ post_install_message:
258
259
  rdoc_options: []
259
260
  require_paths:
260
261
  - lib
@@ -269,8 +270,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
269
270
  - !ruby/object:Gem::Version
270
271
  version: '0'
271
272
  requirements: []
272
- rubygems_version: 3.1.2
273
- signing_key:
273
+ rubygems_version: 3.1.4
274
+ signing_key:
274
275
  specification_version: 4
275
276
  summary: A collection of refinements to core Ruby objects.
276
277
  test_files: []
metadata.gz.sig CHANGED
Binary file