epitools 0.5.96 → 0.5.97
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
- data/VERSION +1 -1
- data/lib/epitools/core_ext/string.rb +51 -45
- data/spec/core_ext_spec.rb +10 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bcb7b057dfd89a787a892fbbc839c89a2a2b2213
|
4
|
+
data.tar.gz: 0bf96917183fd8298ff61d399444567993d07de0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42fbcc5fe50f0a1b2eb7b49156f73ccb108d70560b3c57bcccd7224686ca5417aef2a83133c5e3cc7ac6c112734200e2b60a22cca5eaa1d35fbe92b5fdbd6214
|
7
|
+
data.tar.gz: aba4e219db005393dce44cc1712ed31828b65f1e678d96cd7b77a9c60eff0e8bb6f007e314916e847ec247a0f982a81d778dccf4451c9c66749737709f062977
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.97
|
@@ -10,7 +10,7 @@ class String
|
|
10
10
|
def to_unix
|
11
11
|
gsub("\r\n", "\n")
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
#
|
15
15
|
# Remove redundant whitespaces (not including newlines).
|
16
16
|
#
|
@@ -63,7 +63,7 @@ class String
|
|
63
63
|
#
|
64
64
|
def contains_color?
|
65
65
|
self[COLOR_REGEXP]
|
66
|
-
end
|
66
|
+
end
|
67
67
|
alias_method :contains_colors?, :contains_color?
|
68
68
|
alias_method :contains_ansi?, :contains_color?
|
69
69
|
|
@@ -73,7 +73,7 @@ class String
|
|
73
73
|
def strip_color
|
74
74
|
gsub(COLOR_REGEXP, '')
|
75
75
|
end
|
76
|
-
alias_method :strip_ansi, :strip_color
|
76
|
+
alias_method :strip_ansi, :strip_color
|
77
77
|
|
78
78
|
#
|
79
79
|
# Like #each_line, but skips empty lines and removes \n's.
|
@@ -82,7 +82,7 @@ class String
|
|
82
82
|
# note: $/ is the platform's newline separator
|
83
83
|
split($/).select{|l| not l.blank? }
|
84
84
|
end
|
85
|
-
|
85
|
+
|
86
86
|
alias_method :nicelines, :nice_lines
|
87
87
|
alias_method :clean_lines, :nice_lines
|
88
88
|
|
@@ -171,7 +171,7 @@ class String
|
|
171
171
|
|
172
172
|
|
173
173
|
#
|
174
|
-
# Wrap all lines at window size, and indent
|
174
|
+
# Wrap all lines at window size, and indent
|
175
175
|
#
|
176
176
|
def wrap_and_indent(prefix, width=nil)
|
177
177
|
prefix = " "*prefix if prefix.is_a? Numeric
|
@@ -207,14 +207,14 @@ class String
|
|
207
207
|
def rot13
|
208
208
|
tr('n-za-mN-ZA-M', 'a-zA-Z')
|
209
209
|
end
|
210
|
-
|
210
|
+
|
211
211
|
#
|
212
212
|
# Convert non-URI characters into %XXes.
|
213
213
|
#
|
214
214
|
def urlencode
|
215
215
|
URI.escape(self)
|
216
216
|
end
|
217
|
-
|
217
|
+
|
218
218
|
#
|
219
219
|
# Convert an URI's %XXes into regular characters.
|
220
220
|
#
|
@@ -240,20 +240,28 @@ class String
|
|
240
240
|
params.map_values { |v| v.size > 1 ? v : v.first }
|
241
241
|
end
|
242
242
|
|
243
|
+
#
|
244
|
+
# Raw bytes to an integer (as big as necessary)
|
245
|
+
#
|
246
|
+
def to_i_from_bytes(big_endian=false)
|
247
|
+
bs = reverse ? bytes.reverse_each : bytes.each
|
248
|
+
bs.with_index.inject(0) { |sum,(b,i)| (b << (8*i)) + sum }
|
249
|
+
end
|
250
|
+
|
243
251
|
#
|
244
252
|
# Cached constants for base62 decoding.
|
245
|
-
#
|
253
|
+
#
|
246
254
|
BASE62_DIGITS = Hash[ Integer::BASE62_DIGITS.zip((0...Integer::BASE62_DIGITS.size).to_a) ]
|
247
255
|
BASE62_BASE = Integer::BASE62_BASE
|
248
|
-
|
256
|
+
|
249
257
|
#
|
250
258
|
# Convert a string (encoded in base16 "hex" -- for example, an MD5 or SHA1 hash)
|
251
|
-
# into "base62" format. (See Integer#to_base62 for more info.)
|
259
|
+
# into "base62" format. (See Integer#to_base62 for more info.)
|
252
260
|
#
|
253
261
|
def to_base62
|
254
262
|
to_i(16).to_base62
|
255
263
|
end
|
256
|
-
|
264
|
+
|
257
265
|
#
|
258
266
|
# Convert a string encoded in base62 into an integer.
|
259
267
|
# (See Integer#to_base62 for more info.)
|
@@ -273,8 +281,8 @@ class String
|
|
273
281
|
def from_base64
|
274
282
|
unpack("m").first
|
275
283
|
end
|
276
|
-
alias_method :decode64, :from_base64
|
277
|
-
|
284
|
+
alias_method :decode64, :from_base64
|
285
|
+
|
278
286
|
#
|
279
287
|
# Encode into a mime64/base64 string
|
280
288
|
#
|
@@ -286,25 +294,25 @@ class String
|
|
286
294
|
|
287
295
|
#
|
288
296
|
# MD5 the string
|
289
|
-
#
|
297
|
+
#
|
290
298
|
def md5
|
291
299
|
Digest::MD5.hexdigest self
|
292
300
|
end
|
293
|
-
|
301
|
+
|
294
302
|
#
|
295
303
|
# SHA1 the string
|
296
|
-
#
|
304
|
+
#
|
297
305
|
def sha1
|
298
306
|
Digest::SHA1.hexdigest self
|
299
307
|
end
|
300
|
-
|
308
|
+
|
301
309
|
#
|
302
310
|
# SHA256 the string
|
303
|
-
#
|
311
|
+
#
|
304
312
|
def sha256
|
305
313
|
Digest::SHA256.hexdigest self
|
306
314
|
end
|
307
|
-
|
315
|
+
|
308
316
|
#
|
309
317
|
# gzip the string
|
310
318
|
#
|
@@ -313,7 +321,7 @@ class String
|
|
313
321
|
Zlib::GzipWriter.wrap(zipped, level) { |io| io.write(self) }
|
314
322
|
zipped.string
|
315
323
|
end
|
316
|
-
|
324
|
+
|
317
325
|
#
|
318
326
|
# gunzip the string
|
319
327
|
#
|
@@ -321,31 +329,31 @@ class String
|
|
321
329
|
data = StringIO.new(self)
|
322
330
|
Zlib::GzipReader.new(data).read
|
323
331
|
end
|
324
|
-
|
332
|
+
|
325
333
|
#
|
326
334
|
# deflate the string
|
327
335
|
#
|
328
336
|
def deflate(level=nil)
|
329
337
|
Zlib::Deflate.deflate(self, level)
|
330
338
|
end
|
331
|
-
|
339
|
+
|
332
340
|
#
|
333
341
|
# inflate the string
|
334
342
|
#
|
335
343
|
def inflate
|
336
344
|
Zlib::Inflate.inflate(self)
|
337
345
|
end
|
338
|
-
|
339
|
-
# `true` if this string starts with the substring
|
340
|
-
#
|
346
|
+
|
347
|
+
# `true` if this string starts with the substring
|
348
|
+
#
|
341
349
|
def startswith?(substring)
|
342
350
|
self[0...substring.size] == substring
|
343
351
|
end
|
344
352
|
alias_method :startswith, :startswith?
|
345
|
-
|
353
|
+
|
354
|
+
#
|
355
|
+
# `true` if this string ends with the substring
|
346
356
|
#
|
347
|
-
# `true` if this string ends with the substring
|
348
|
-
#
|
349
357
|
def endswith?(substring)
|
350
358
|
self[-substring.size..-1] == substring
|
351
359
|
end
|
@@ -357,7 +365,7 @@ class String
|
|
357
365
|
def from_json
|
358
366
|
JSON.parse(self)
|
359
367
|
end
|
360
|
-
|
368
|
+
|
361
369
|
#
|
362
370
|
# Parse this string as YAML
|
363
371
|
#
|
@@ -367,7 +375,7 @@ class String
|
|
367
375
|
|
368
376
|
#
|
369
377
|
# Unmarshal the string (transform it into Ruby datatypes).
|
370
|
-
#
|
378
|
+
#
|
371
379
|
def unmarshal
|
372
380
|
Marshal.restore self
|
373
381
|
end
|
@@ -385,7 +393,7 @@ class String
|
|
385
393
|
#
|
386
394
|
def amount(n)
|
387
395
|
case n
|
388
|
-
when 0
|
396
|
+
when 0
|
389
397
|
"0 #{self}s"
|
390
398
|
when 1, -1
|
391
399
|
"#{n} #{self}"
|
@@ -393,7 +401,7 @@ class String
|
|
393
401
|
"#{n} #{self}s"
|
394
402
|
end
|
395
403
|
end
|
396
|
-
|
404
|
+
|
397
405
|
#
|
398
406
|
# Converts time duration strings (mm:ss, mm:ss.dd, hh:mm:ss, or dd:hh:mm:ss) to seconds.
|
399
407
|
# (The reverse of Integer#to_hms)
|
@@ -407,7 +415,7 @@ class String
|
|
407
415
|
nums_and_units = nums.reverse.zip %w[seconds minutes hours days]
|
408
416
|
nums_and_units.map { |num, units| num.send(units) }.sum
|
409
417
|
end
|
410
|
-
|
418
|
+
|
411
419
|
#
|
412
420
|
# Print a hexdump of the string to STDOUT (coloured, if the terminal supports it)
|
413
421
|
#
|
@@ -415,10 +423,9 @@ class String
|
|
415
423
|
Hex.dump(self)
|
416
424
|
end
|
417
425
|
|
418
|
-
|
419
426
|
unless public_method_defined? :to_proc
|
420
|
-
|
421
|
-
#
|
427
|
+
|
428
|
+
#
|
422
429
|
# String#to_proc
|
423
430
|
#
|
424
431
|
# See http://weblog.raganwald.com/2007/10/stringtoproc.html
|
@@ -430,7 +437,7 @@ class String
|
|
430
437
|
#
|
431
438
|
# (c) 2007 Reginald Braithwaite
|
432
439
|
# Portions Copyright (c) 2006 Oliver Steele
|
433
|
-
#
|
440
|
+
#
|
434
441
|
# Permission is hereby granted, free of charge, to any person obtaining
|
435
442
|
# a copy of this software and associated documentation files (the
|
436
443
|
# "Software"), to deal in the Software without restriction, including
|
@@ -438,10 +445,10 @@ class String
|
|
438
445
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
439
446
|
# permit persons to whom the Software is furnished to do so, subject to
|
440
447
|
# the following conditions:
|
441
|
-
#
|
448
|
+
#
|
442
449
|
# The above copyright notice and this permission notice shall be
|
443
450
|
# included in all copies or substantial portions of the Software.
|
444
|
-
#
|
451
|
+
#
|
445
452
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
446
453
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
447
454
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
@@ -475,22 +482,21 @@ class String
|
|
475
482
|
/(?:\b[A-Z]|\.[a-zA-Z_$])[a-zA-Z_$\d]*|[a-zA-Z_$][a-zA-Z_$\d]*:|self|arguments|'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"/, ''
|
476
483
|
).scan(
|
477
484
|
/([a-z_$][a-z_$\d]*)/i
|
478
|
-
) do |v|
|
485
|
+
) do |v|
|
479
486
|
params.push(v) unless params.include?(v)
|
480
487
|
end
|
481
488
|
end
|
482
489
|
eval_block("Proc.new { |#{params.join(', ')}| #{expr} }", block)
|
483
490
|
end
|
484
491
|
end
|
485
|
-
|
492
|
+
|
486
493
|
private
|
487
|
-
|
494
|
+
|
488
495
|
def eval_block(code, block)
|
489
496
|
eval code, block && block.binding
|
490
497
|
end
|
491
|
-
|
492
|
-
end # unless public_method_defined? :to_proc
|
493
498
|
|
494
|
-
end
|
499
|
+
end # unless public_method_defined? :to_proc
|
495
500
|
|
496
501
|
|
502
|
+
end
|
data/spec/core_ext_spec.rb
CHANGED
@@ -336,6 +336,16 @@ describe String do
|
|
336
336
|
5.mulmod(2).should == [10, 0]
|
337
337
|
end
|
338
338
|
|
339
|
+
it "to_i_from_byteses" do
|
340
|
+
i = 2**31
|
341
|
+
|
342
|
+
big_endian_bytes = [i].pack("L>")
|
343
|
+
little_endian_bytes = [i].pack("L<")
|
344
|
+
|
345
|
+
big_endian_bytes.to_i_from_bytes(true).should == i
|
346
|
+
little_endian_bytes.to_i_from_bytes.should == i
|
347
|
+
end
|
348
|
+
|
339
349
|
end
|
340
350
|
|
341
351
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: epitools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.97
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- epitron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|