buff-extensions 0.2.0 → 0.3.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.
data/lib/buff/extensions.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'kernel/reporting'
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
module Buff
|
5
|
+
module Extensions::Kernel
|
6
|
+
# Borrowd and modified from
|
7
|
+
# {https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/kernel/reporting.rb}
|
8
|
+
module Reporting
|
9
|
+
# Sets $VERBOSE to nil for the duration of the block and back to its original
|
10
|
+
# value afterwards.
|
11
|
+
#
|
12
|
+
# silence_warnings do
|
13
|
+
# value = noisy_call # no warning voiced
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# noisy_call # warning voiced
|
17
|
+
def silence_warnings
|
18
|
+
with_warnings(nil) { yield }
|
19
|
+
end
|
20
|
+
|
21
|
+
# Sets $VERBOSE to +true+ for the duration of the block and back to its
|
22
|
+
# original value afterwards.
|
23
|
+
def enable_warnings
|
24
|
+
with_warnings(true) { yield }
|
25
|
+
end
|
26
|
+
|
27
|
+
# Sets $VERBOSE for the duration of the block and back to its original
|
28
|
+
# value afterwards.
|
29
|
+
def with_warnings(flag)
|
30
|
+
old_verbose, $VERBOSE = $VERBOSE, flag
|
31
|
+
yield
|
32
|
+
ensure
|
33
|
+
$VERBOSE = old_verbose
|
34
|
+
end
|
35
|
+
|
36
|
+
# For compatibility
|
37
|
+
def silence_stderr #:nodoc:
|
38
|
+
silence_stream(STDERR) { yield }
|
39
|
+
end
|
40
|
+
|
41
|
+
# Silences any stream for the duration of the block.
|
42
|
+
#
|
43
|
+
# silence_stream(STDOUT) do
|
44
|
+
# puts 'This will never be seen'
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# puts 'But this will'
|
48
|
+
def silence_stream(stream)
|
49
|
+
old_stream = stream.dup
|
50
|
+
stream.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')
|
51
|
+
stream.sync = true
|
52
|
+
yield
|
53
|
+
ensure
|
54
|
+
stream.reopen(old_stream)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Blocks and ignores any exception passed as argument if raised within the block.
|
58
|
+
#
|
59
|
+
# suppress(ZeroDivisionError) do
|
60
|
+
# 1/0
|
61
|
+
# puts 'This code is NOT reached'
|
62
|
+
# end
|
63
|
+
#
|
64
|
+
# puts 'This code gets executed and nothing related to ZeroDivisionError was seen'
|
65
|
+
def suppress(*exception_classes)
|
66
|
+
yield
|
67
|
+
rescue Exception => e
|
68
|
+
raise unless exception_classes.any? { |cls| e.kind_of?(cls) }
|
69
|
+
end
|
70
|
+
|
71
|
+
# Captures the given stream and returns it:
|
72
|
+
#
|
73
|
+
# stream = capture(:stdout) { puts 'notice' }
|
74
|
+
# stream # => "notice\n"
|
75
|
+
#
|
76
|
+
# stream = capture(:stderr) { warn 'error' }
|
77
|
+
# stream # => "error\n"
|
78
|
+
#
|
79
|
+
# even for subprocesses:
|
80
|
+
#
|
81
|
+
# stream = capture(:stdout) { system('echo notice') }
|
82
|
+
# stream # => "notice\n"
|
83
|
+
#
|
84
|
+
# stream = capture(:stderr) { system('echo error 1>&2') }
|
85
|
+
# stream # => "error\n"
|
86
|
+
def capture(stream)
|
87
|
+
stream = stream.to_s
|
88
|
+
captured_stream = Tempfile.new(stream)
|
89
|
+
stream_io = eval("$#{stream}")
|
90
|
+
origin_stream = stream_io.dup
|
91
|
+
stream_io.reopen(captured_stream)
|
92
|
+
|
93
|
+
yield
|
94
|
+
|
95
|
+
stream_io.rewind
|
96
|
+
return captured_stream.read
|
97
|
+
ensure
|
98
|
+
captured_stream.unlink
|
99
|
+
stream_io.reopen(origin_stream)
|
100
|
+
end
|
101
|
+
alias :silence :capture
|
102
|
+
|
103
|
+
# Silences both STDOUT and STDERR, even for subprocesses.
|
104
|
+
#
|
105
|
+
# quietly { system 'bundle install' }
|
106
|
+
def quietly
|
107
|
+
silence_stream(STDOUT) do
|
108
|
+
silence_stream(STDERR) do
|
109
|
+
yield
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
module Kernel
|
118
|
+
include Buff::Extensions::Kernel::Reporting
|
119
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'string/inflections'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Buff
|
2
|
+
module Extensions::String
|
3
|
+
module Inflections
|
4
|
+
def underscore
|
5
|
+
word = self.dup
|
6
|
+
word.gsub!('::', '/')
|
7
|
+
word.gsub!(/(?:([A-Za-z\d])|^)((?=a)b)(?=\b|[^a-z])/) { "#{$1}#{$1 && '_'}#{$2.downcase}" }
|
8
|
+
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
|
9
|
+
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
10
|
+
word.tr!("-", "_")
|
11
|
+
word.downcase!
|
12
|
+
word
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class String
|
19
|
+
include Buff::Extensions::String::Inflections
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: buff-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -196,8 +196,12 @@ files:
|
|
196
196
|
- lib/buff/extensions/hash/key_transforms.rb
|
197
197
|
- lib/buff/extensions/hash/reverse_merge.rb
|
198
198
|
- lib/buff/extensions/hash/slice.rb
|
199
|
+
- lib/buff/extensions/kernel.rb
|
200
|
+
- lib/buff/extensions/kernel/reporting.rb
|
199
201
|
- lib/buff/extensions/object.rb
|
200
202
|
- lib/buff/extensions/object/blank.rb
|
203
|
+
- lib/buff/extensions/string.rb
|
204
|
+
- lib/buff/extensions/string/inflections.rb
|
201
205
|
- lib/buff/extensions/version.rb
|
202
206
|
- spec/buff/extensions/hash/dotted_paths_spec.rb
|
203
207
|
- spec/spec_helper.rb
|
@@ -222,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
226
|
version: '0'
|
223
227
|
segments:
|
224
228
|
- 0
|
225
|
-
hash:
|
229
|
+
hash: 1537856956160117241
|
226
230
|
requirements: []
|
227
231
|
rubyforge_project:
|
228
232
|
rubygems_version: 1.8.23
|