epitools 0.5.105 → 0.5.106
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/epitools/core_ext/file.rb +2 -2
- data/lib/epitools/core_ext/misc.rb +13 -0
- data/lib/epitools/core_ext/string.rb +100 -1
- data/lib/epitools/path.rb +5 -2
- 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: e62d7058f8223acc7bf84eb7c77fc32e78c94735
|
4
|
+
data.tar.gz: c9b8d58d8dd39c12e78ccf29aeacc5a0c109edfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89a89b7b72de4c1c71f46af1a2b27e2dc02811d82034c8e17cd84a36e44c0a14fb28ead350509f150b3ec6f258175d2a3714a5f9455409a84924735a659cf794
|
7
|
+
data.tar.gz: 4962e60b4daf5eb39c623d606a04bc08846e24aae70f2e003028c96c2f4f6a76874d030adfb8972079bbd485de06d4bf2afac931e1fdbfe3d3b70113ed1f93d7
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.106
|
@@ -111,7 +111,7 @@ class File
|
|
111
111
|
seek(-(data.size - index), IO::SEEK_CUR)
|
112
112
|
break
|
113
113
|
elsif eof?
|
114
|
-
|
114
|
+
return nil
|
115
115
|
else
|
116
116
|
seek(-(string.size - 1), IO::SEEK_CUR)
|
117
117
|
end
|
@@ -133,7 +133,7 @@ class File
|
|
133
133
|
seek(index+string.size, IO::SEEK_CUR)
|
134
134
|
break
|
135
135
|
elsif pos == 0
|
136
|
-
|
136
|
+
return nil
|
137
137
|
else
|
138
138
|
seek(string.size - 1, IO::SEEK_CUR)
|
139
139
|
end
|
@@ -257,6 +257,19 @@ module ObjectSpace
|
|
257
257
|
|
258
258
|
end
|
259
259
|
|
260
|
+
|
261
|
+
#
|
262
|
+
# Make OpenStruct a little tiny bit more like a Hash
|
263
|
+
#
|
264
|
+
class OpenStruct
|
265
|
+
def empty?; @table ? @table.empty? : true; end
|
266
|
+
def blank?; empty?; end
|
267
|
+
def any?; !empty?; end
|
268
|
+
|
269
|
+
def keys; @table&.keys || []; end
|
270
|
+
end
|
271
|
+
|
272
|
+
|
260
273
|
#
|
261
274
|
# Flush standard input's buffer.
|
262
275
|
#
|
@@ -428,7 +428,7 @@ class String
|
|
428
428
|
#
|
429
429
|
# String#to_proc
|
430
430
|
#
|
431
|
-
# See http://weblog.raganwald.com/2007/10/stringtoproc.html
|
431
|
+
# See: http://weblog.raganwald.com/2007/10/stringtoproc.html
|
432
432
|
#
|
433
433
|
# Ported from the String Lambdas in Oliver Steele's Functional Javascript
|
434
434
|
# http://osteele.com/sources/javascript/functional/
|
@@ -438,6 +438,105 @@ class String
|
|
438
438
|
# (c) 2007 Reginald Braithwaite
|
439
439
|
# Portions Copyright (c) 2006 Oliver Steele
|
440
440
|
#
|
441
|
+
#
|
442
|
+
# ## Basic Usage
|
443
|
+
#
|
444
|
+
# 'x+1'.to_proc[2];
|
445
|
+
# → 3
|
446
|
+
# 'x+2*y'.to_proc[2, 3];
|
447
|
+
# → 8
|
448
|
+
# or (more usefully) later:
|
449
|
+
#
|
450
|
+
# square = 'x*x'.to_proc;
|
451
|
+
# square(3);
|
452
|
+
# → 9
|
453
|
+
# square(4);
|
454
|
+
# → 16
|
455
|
+
#
|
456
|
+
# ## Explicit parameters
|
457
|
+
#
|
458
|
+
# If the string contains a ->, this separates the parameters from the body.
|
459
|
+
#
|
460
|
+
# 'x y -> x+2*y'.to_proc[2, 3];
|
461
|
+
# → 8
|
462
|
+
# 'y x -> x+2*y'.to_proc[2, 3];
|
463
|
+
# → 7
|
464
|
+
# Otherwise, if the string contains a _, it’s a unary function and _ is name of the parameter:
|
465
|
+
#
|
466
|
+
# '_+1'.to_proc[2];
|
467
|
+
# → 3
|
468
|
+
# '_*_'.to_proc[3];
|
469
|
+
# → 9
|
470
|
+
# ## Implicit parameters
|
471
|
+
#
|
472
|
+
# If the string doesn’t specify explicit parameters, they are implicit.
|
473
|
+
#
|
474
|
+
# If the string starts with an operator or relation besides -, or ends with an operator or relation, then its implicit arguments are placed at the beginning and/or end:
|
475
|
+
#
|
476
|
+
# '*2'.to_proc[2];
|
477
|
+
# → 4
|
478
|
+
# '/2'.to_proc[4];
|
479
|
+
# → 2
|
480
|
+
# '2/'.to_proc[4];
|
481
|
+
# → 0.5
|
482
|
+
# '/'.to_proc[2, 4];
|
483
|
+
# → 0.5
|
484
|
+
# ’.’ counts as a right operator:
|
485
|
+
#
|
486
|
+
# '.abs'.to_proc[-1];
|
487
|
+
# → 1
|
488
|
+
#
|
489
|
+
#
|
490
|
+
# Otherwise, the variables in the string, in order of occurrence, are its parameters.
|
491
|
+
#
|
492
|
+
# 'x+1'.to_proc[2];
|
493
|
+
# → 3
|
494
|
+
# 'x*x'.to_proc[3];
|
495
|
+
# → 9
|
496
|
+
# 'x + 2*y'.to_proc[1, 2];
|
497
|
+
# → 5
|
498
|
+
# 'y + 2*x'.to_proc[1, 2];
|
499
|
+
# → 5
|
500
|
+
#
|
501
|
+
# ## Chaining
|
502
|
+
#
|
503
|
+
# Chain -> to create curried functions.
|
504
|
+
#
|
505
|
+
# 'x y -> x+y'.to_proc[2, 3];
|
506
|
+
# → 5
|
507
|
+
# 'x -> y -> x+y'.to_proc[2][3];
|
508
|
+
# → 5
|
509
|
+
# plus_two = 'x -> y -> x+y'.to_proc[2];
|
510
|
+
# plus_two[3]
|
511
|
+
# → 5
|
512
|
+
#
|
513
|
+
# Using String#to_proc in Idiomatic Ruby
|
514
|
+
#
|
515
|
+
# Ruby on Rails popularized Symbol#to_proc, so much so that it will be part of Ruby 1.9.
|
516
|
+
#
|
517
|
+
# If you like:
|
518
|
+
#
|
519
|
+
# %w[dsf fgdg fg].map(&:capitalize)
|
520
|
+
# → ["Dsf", "Fgdg", "Fg"]
|
521
|
+
# then %w[dsf fgdg fg].map(&'.capitalize') isn’t much of an improvement.
|
522
|
+
#
|
523
|
+
# But what about doubling every value in a list:
|
524
|
+
#
|
525
|
+
# (1..5).map &'*2'
|
526
|
+
# → [2, 4, 6, 8, 10]
|
527
|
+
#
|
528
|
+
# Or folding a list:
|
529
|
+
#
|
530
|
+
# (1..5).inject &'+'
|
531
|
+
# → 15
|
532
|
+
#
|
533
|
+
# Or having fun with factorial:
|
534
|
+
#
|
535
|
+
# factorial = "(1.._).inject &'*'".to_proc
|
536
|
+
# factorial[5]
|
537
|
+
# → 120
|
538
|
+
#
|
539
|
+
# LICENSE:
|
441
540
|
# Permission is hereby granted, free of charge, to any person obtaining
|
442
541
|
# a copy of this software and associated documentation files (the
|
443
542
|
# "Software"), to deal in the Software without restriction, including
|
data/lib/epitools/path.rb
CHANGED
@@ -108,6 +108,8 @@ require 'epitools/core_ext/string'
|
|
108
108
|
#
|
109
109
|
class Path
|
110
110
|
|
111
|
+
include Enumerable
|
112
|
+
|
111
113
|
# The directories in the path, split into an array. (eg: ['usr', 'src', 'linux'])
|
112
114
|
attr_reader :dirs
|
113
115
|
|
@@ -637,10 +639,11 @@ class Path
|
|
637
639
|
#
|
638
640
|
# All the lines in this file, chomped.
|
639
641
|
#
|
640
|
-
def
|
642
|
+
def each
|
641
643
|
io.each_line
|
642
644
|
end
|
643
|
-
alias_method :
|
645
|
+
alias_method :each_line, :each
|
646
|
+
alias_method :lines, :each
|
644
647
|
|
645
648
|
def grep(pat)
|
646
649
|
return to_enum(:grep, pat).to_a unless block_given?
|
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.106
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- epitron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|