irb_hacks 0.2.4 → 0.2.5
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/irb_hacks/core_ext/kernel/less.rb +63 -40
- data/lib/irb_hacks/version.rb +1 -1
- metadata +3 -2
@@ -2,51 +2,79 @@ module IrbHacks
|
|
2
2
|
module CoreExtensions #:nodoc:
|
3
3
|
module Kernel #:nodoc:
|
4
4
|
module SingletonMethods #:nodoc:
|
5
|
-
#
|
5
|
+
# @see {InstanceMethods#less}
|
6
6
|
def less(*args, &block)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
# Handle content & options.
|
8
|
+
content = []
|
9
|
+
o = {}
|
10
|
+
options = {}
|
11
|
+
|
12
|
+
begin
|
13
|
+
if block
|
14
|
+
args.each do |arg|
|
15
|
+
if arg.is_a? Hash
|
16
|
+
options.merge! arg
|
17
|
+
elsif [String, Symbol].any? {|klass| arg.is_a? klass}
|
18
|
+
options.merge!(arg.to_sym => true)
|
19
|
+
else
|
20
|
+
raise ArgumentError, "Unsupported argument: #{arg.inspect}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
o[k = :line] = options.delete(k)
|
25
|
+
o[k = :stderr] = options.delete(k)
|
12
26
|
else
|
13
|
-
|
14
|
-
|
27
|
+
# Non-block.
|
28
|
+
args.each do |arg|
|
29
|
+
if arg.is_a? Hash
|
30
|
+
options.merge! arg
|
31
|
+
else
|
32
|
+
content << arg
|
33
|
+
end
|
15
34
|
end
|
16
|
-
end
|
17
|
-
else
|
18
|
-
# Block invocation.
|
19
35
|
|
20
|
-
|
21
|
-
|
36
|
+
o[k = :line] = options.delete(k)
|
37
|
+
end # if block
|
22
38
|
|
23
|
-
|
24
|
-
|
25
|
-
##p "arg hash", arg
|
26
|
-
options.merge! arg
|
27
|
-
elsif [Symbol, String].include? arg.class
|
28
|
-
##p "arg sym/str", arg
|
29
|
-
options.merge! arg.to_sym => true
|
30
|
-
else
|
31
|
-
raise ArgumentError, "Unsupported argument #{arg.inspect}"
|
32
|
-
end
|
39
|
+
if content.empty?
|
40
|
+
raise ArgumentError, "No content to browse"
|
33
41
|
end
|
34
42
|
|
35
|
-
|
43
|
+
if not options.empty?
|
44
|
+
raise ArgumentError, "Unknown option(s): #{options.inspect}"
|
45
|
+
end
|
46
|
+
rescue ArgumentError => e
|
47
|
+
# NOTE: We are interactive, print it friendly.
|
48
|
+
return STDERR.puts e.message
|
49
|
+
end # begin/rescue
|
50
|
+
|
51
|
+
##DT.p "content", content
|
52
|
+
##DT.p "options", options
|
53
|
+
##DT.p "o", o
|
36
54
|
|
37
|
-
|
55
|
+
cmd = [
|
56
|
+
IrbHacks.conf.less_cmd,
|
57
|
+
("+#{o[:line]}" if o[:line]),
|
58
|
+
].compact.join(" ")
|
38
59
|
|
60
|
+
# Run the pager.
|
61
|
+
if block
|
39
62
|
old_stdout = STDOUT.clone
|
40
|
-
old_stderr = STDERR.clone if
|
63
|
+
old_stderr = STDERR.clone if o[:stderr]
|
41
64
|
|
42
|
-
File.popen(
|
65
|
+
File.popen(cmd, "w") do |f|
|
43
66
|
STDOUT.reopen(f)
|
44
|
-
STDERR.reopen(f) if
|
67
|
+
STDERR.reopen(f) if o[:stderr]
|
45
68
|
yield
|
46
69
|
STDOUT.reopen(old_stdout)
|
47
|
-
STDERR.reopen(old_stderr) if
|
70
|
+
STDERR.reopen(old_stderr) if o[:stderr]
|
71
|
+
end
|
72
|
+
else
|
73
|
+
# Non-block.
|
74
|
+
File.popen(cmd, "w") do |f|
|
75
|
+
f.puts content
|
48
76
|
end
|
49
|
-
end
|
77
|
+
end
|
50
78
|
|
51
79
|
nil
|
52
80
|
end # less
|
@@ -55,12 +83,13 @@ module IrbHacks
|
|
55
83
|
module InstanceMethods
|
56
84
|
private
|
57
85
|
|
58
|
-
#
|
86
|
+
# Browse program data with GNU <tt>less</tt> or other configured OS pager.
|
59
87
|
#
|
60
88
|
# Plain form:
|
61
89
|
#
|
90
|
+
# less "hello"
|
62
91
|
# less "hello", "world"
|
63
|
-
# less
|
92
|
+
# less data, :line => 10
|
64
93
|
#
|
65
94
|
# Block form:
|
66
95
|
#
|
@@ -73,15 +102,9 @@ module IrbHacks
|
|
73
102
|
# STDERR.puts "to stderr"
|
74
103
|
# end
|
75
104
|
#
|
76
|
-
#
|
77
|
-
#
|
78
|
-
# :stderr => T|F # Redirect STDERR too.
|
79
|
-
#
|
80
|
-
# If block form option is String or Symbol, it's automatically
|
81
|
-
# converted to Hash like <tt>{:var => true}</tt>. Thus, you can write <tt>less(:stderr)</tt>
|
82
|
-
# for <tt>less(:stderr => true)</tt>, they are functionally identical.
|
105
|
+
# less(:stderr) {...} # Shortcut form of saying `:stderr => true`.
|
83
106
|
#
|
84
|
-
#
|
107
|
+
# @see {IrbHacks::Config::less_cmd}
|
85
108
|
def less(*args, &block)
|
86
109
|
::Kernel.less(*args, &block)
|
87
110
|
end
|
data/lib/irb_hacks/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: irb_hacks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -88,3 +88,4 @@ signing_key:
|
|
88
88
|
specification_version: 3
|
89
89
|
summary: Yet another set of IRB hacks
|
90
90
|
test_files: []
|
91
|
+
has_rdoc:
|