w-stdlib 0.0.14 → 0.0.15

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: 3355c40d71a6abcf9d8d1f74872c23fa251444c5105f3798f6cbbe90497635ed
4
- data.tar.gz: 17f0b9a70c22a681bfc6576e9f7b5789d9dd592bdc300803308c620595bb9740
3
+ metadata.gz: de329ce379af0a89b8b8c7879ae89907b7e23922973ce14e83f94393b2725012
4
+ data.tar.gz: d7860bd01015f1344cb96a05769954ebbdcc36e14243b90bc3ba80fa4044a036
5
5
  SHA512:
6
- metadata.gz: 27a8fb9264d9cf7ff56d471107b2a45e9a3968fe5fe4188606ff6a2184fc5c9c32f62e5f52a323b5fe5c7433c23cccb69c23ffa146eedcf8d7d1a09a145d91ae
7
- data.tar.gz: 13aa45d3fd2fc54f0a7a74a93ae191fb49f725efad56877c934143f81ca1a1d64e654318d2260169d8d8dff05a8f8d2bc0cd28da550f738ee82914eb234a1986
6
+ metadata.gz: fc7f4dc141c22b3a7e1ba26b31c11000756a83cbfee52da34df43c04dbf1c3aa7fb3058efb9102495f286ecb142833b1289e2e6aabe97969cac6cc177fe45d00
7
+ data.tar.gz: 50058d76f55b2290a6cc25c65f1e7de23c2df24fdebb3c68fdc599d19c8119e81154ac4a9f83cb616fbce7688d432098a9ad6bf52c93cfa64677fafea83f29b4
@@ -74,5 +74,19 @@ module ArrayExt
74
74
  def to_h_by
75
75
  map { [yield(_1), _1] }.to_h
76
76
  end
77
+
78
+ def frequencies
79
+ h = Hash.new(0)
80
+ each { h[_1] += 1 }
81
+ h
82
+ end
83
+
84
+ def sliding_window(n)
85
+ (0..length-n).map { self[_1..._1+n] }
86
+ end
87
+
88
+ def chunks(n)
89
+ (0..length/n).map { self[_1*n..._1*n+n] }
90
+ end
77
91
  end
78
92
  end
@@ -1,6 +1,7 @@
1
1
  require_relative './string'
2
2
  require 'aws-sdk-iam'
3
3
  require 'aws-sdk-core/arn_parser'
4
+ require 'w-stdlib/prelude'
4
5
 
5
6
  using StringExt
6
7
 
@@ -13,7 +13,8 @@ module FileExt
13
13
  end
14
14
 
15
15
  def strings
16
- `strings '#{name}'`
16
+ n = name.gsub('\'', '\\\'')
17
+ `strings '#{n}'`
17
18
  end
18
19
  end
19
20
  end
@@ -20,6 +20,10 @@ module HashExt
20
20
  select { _1.to_s.matches_pat?(pat) }
21
21
  end
22
22
 
23
+ def search_vals(pat)
24
+ select { _2.to_s.matches_pat?(pat) }
25
+ end
26
+
23
27
  def puts_all
24
28
  each { puts "#{_1}: #{_2}"}
25
29
  end
@@ -4,13 +4,28 @@ module ObjectExt
4
4
  !self.nil?
5
5
  end
6
6
 
7
- def _?
7
+ alias_method :nn?, :not_nil?
8
+
9
+ def _?(default=nil)
8
10
  return self if self.not_nil?
11
+ return default if default.not_nil?
9
12
  yield
10
13
  end
11
14
 
15
+ alias_method :fnil, :_?
16
+
12
17
  def lift_array
13
18
  kind_of?(Array) ? self : [self]
14
19
  end
20
+
21
+ def encode_json
22
+ JSON.generate self
23
+ end
24
+
25
+ def encode_yaml
26
+ YAML.dump self
27
+ end
28
+
29
+ alias lift_a lift_array
15
30
  end
16
31
  end
@@ -2,9 +2,108 @@ require 'base64'
2
2
  require 'json'
3
3
  require 'cgi'
4
4
  require 'yaml'
5
+ require 'digest'
5
6
 
6
7
  module StringExt
7
8
  refine String do
9
+ def is_downcase?
10
+ self.match?(/^[a-z]+$/)
11
+ end
12
+
13
+ def is_uppercase?
14
+ self.match?(/^[A-Z]+$/)
15
+ end
16
+
17
+ alias_method :is_upper?, :is_uppercase?
18
+ alias_method :is_uppercase?, :is_upper?
19
+ alias_method :is_lowercase?, :is_downcase?
20
+ alias_method :is_lower?, :is_downcase?
21
+
22
+
23
+ def matches_glob?(pattern)
24
+ File.fnmatch pattern, self
25
+ end
26
+
27
+ # encoding
28
+ def b64
29
+ Base64.strict_encode64 self
30
+ end
31
+
32
+ def b64d
33
+ Base64.decode64 self
34
+ end
35
+
36
+ def encode_url
37
+ CGI.escape self
38
+ end
39
+
40
+ def decode_url
41
+ CGI.unescape self
42
+ end
43
+
44
+ def decode_json
45
+ JSON.parse self
46
+ end
47
+
48
+ def decode_yaml
49
+ YAML.safe_load self
50
+ end
51
+
52
+ # decodes either a single json element or lines of json elements
53
+ def decode_multi_json
54
+ JSON.parse self
55
+ rescue JSON::ParserError
56
+ lines.map(&:decode_json)
57
+ end
58
+
59
+ # escaping
60
+ def escape_regexp
61
+ Regexp.quote self
62
+ end
63
+
64
+ # hashing
65
+ def sha1
66
+ Digest::SHA1.hexdigest self
67
+ end
68
+
69
+ def sha256
70
+ Digest::SHA256.hexdigest self
71
+ end
72
+
73
+ def sha512
74
+ Digest::SHA512.hexdigest self
75
+ end
76
+
77
+ def md5
78
+ Digest::MD5.hexdigest self
79
+ end
80
+
81
+ # files
82
+ def read_file
83
+ File.read self
84
+ end
85
+
86
+ def write_file(name)
87
+ # write the file creating it if it doesnt exist
88
+ File.open(name, 'w') { |f| f.write self }
89
+ end
90
+
91
+ def append_file(name)
92
+ File.write name, self, mode: 'a'
93
+ end
94
+
95
+ def prepend_file(name)
96
+ File.write name, self + File.read(name)
97
+ end
98
+
99
+ def read_yaml
100
+ read_file.from_yaml
101
+ end
102
+
103
+ def read_json
104
+ read_file.from_json
105
+ end
106
+
8
107
  def include_any?(ss)
9
108
  ss.any? { include? _1 }
10
109
  end
@@ -44,7 +143,9 @@ module StringExt
44
143
  end
45
144
 
46
145
  def to_bool
47
- self.downcase == 'true'
146
+ s = downcase
147
+ return nil if s != 'true' && s != 'false'
148
+ s == 'true'
48
149
  end
49
150
 
50
151
  def from_b64
@@ -107,6 +208,10 @@ module StringExt
107
208
  self.lines.select { _1.matches_pat? pat }
108
209
  end
109
210
 
211
+ def grepv(pat)
212
+ self.lines.reject { _1.matches_pat? pat }
213
+ end
214
+
110
215
  def matches_pat?(pat)
111
216
  case pat
112
217
  when String
@@ -122,6 +227,10 @@ module StringExt
122
227
  p + self
123
228
  end
124
229
 
230
+ def suffix(s)
231
+ self + s
232
+ end
233
+
125
234
  def to_bs
126
235
  n, units = self.scan(/([0-9.]+)(B|KB|MB|GB)/).first
127
236
  raise "Invalid size: #{self}" unless n && units
@@ -165,5 +274,11 @@ module StringExt
165
274
  def indent_count
166
275
  scan(/^\s+/).first&.length || 0
167
276
  end
277
+
278
+ alias_method :is_number?, :is_numeric?
279
+ alias_method :suf?, :end_with?
280
+ alias_method :pref?, :start_with?
281
+ alias_method :starts_with?, :start_with?
282
+ alias_method :ends_with?, :end_with?
168
283
  end
169
284
  end
data/w-stdlib.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |g|
2
2
  g.name = 'w-stdlib'
3
- g.version = '0.0.14'
3
+ g.version = '0.0.15'
4
4
  g.summary = 'Pre-alpha package that contains abstractions that I find useful when scripting. Not suitable for production use. Breaking changes highly likely even with minor version bumps. Use at your own risk'
5
5
  g.description = g.summary
6
6
  g.authors = ['will@btlr.dev']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: w-stdlib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - will@btlr.dev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-07 00:00:00.000000000 Z
11
+ date: 2023-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parallel