pry 0.9.8pre7-i386-mswin32 → 0.9.8pre8-i386-mswin32
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/pry.rb +10 -2
- data/lib/pry/code.rb +8 -1
- data/lib/pry/command.rb +3 -3
- data/lib/pry/command_set.rb +36 -33
- data/lib/pry/config.rb +13 -1
- data/lib/pry/default_commands/context.rb +9 -4
- data/lib/pry/default_commands/documentation.rb +69 -99
- data/lib/pry/default_commands/input.rb +57 -49
- data/lib/pry/default_commands/introspection.rb +20 -15
- data/lib/pry/default_commands/ls.rb +1 -1
- data/lib/pry/default_commands/shell.rb +76 -1
- data/lib/pry/helpers/command_helpers.rb +9 -0
- data/lib/pry/hooks.rb +89 -10
- data/lib/pry/plugins.rb +3 -3
- data/lib/pry/pry_class.rb +6 -4
- data/lib/pry/pry_instance.rb +16 -1
- data/lib/pry/version.rb +1 -1
- data/test/helper.rb +6 -1
- data/test/test_command.rb +17 -17
- data/test/test_command_set.rb +4 -4
- data/test/test_default_commands/test_documentation.rb +20 -8
- data/test/test_default_commands/test_input.rb +71 -32
- data/test/test_default_commands/test_shell.rb +190 -0
- data/test/test_hooks.rb +72 -2
- metadata +76 -70
@@ -59,7 +59,7 @@ class Pry
|
|
59
59
|
|
60
60
|
alias_command(/%.?(-?\d+)?(?:\.\.(-?\d+))?/, "amend-line")
|
61
61
|
|
62
|
-
|
62
|
+
create_command "play" do
|
63
63
|
description "Play back a string variable or a method or a file as input. Type `play --help` for more information."
|
64
64
|
|
65
65
|
banner <<-BANNER
|
@@ -69,73 +69,78 @@ class Pry
|
|
69
69
|
if they were entered directly in the Pry REPL. Default action (no
|
70
70
|
options) is to play the provided string variable
|
71
71
|
|
72
|
-
e.g: `play
|
72
|
+
e.g: `play -i 20 --lines 1..3`
|
73
73
|
e.g: `play -m Pry#repl --lines 1..-1`
|
74
74
|
e.g: `play -f Rakefile --lines 5`
|
75
75
|
|
76
76
|
https://github.com/pry/pry/wiki/User-Input#wiki-Play
|
77
77
|
BANNER
|
78
78
|
|
79
|
+
attr_accessor :content
|
80
|
+
|
81
|
+
def setup
|
82
|
+
self.content = ""
|
83
|
+
end
|
84
|
+
|
79
85
|
def options(opt)
|
80
|
-
opt.on :
|
81
|
-
|
82
|
-
|
86
|
+
opt.on :m, :method, "Play a method's source.", true do |meth_name|
|
87
|
+
meth = get_method_or_raise(meth_name, target, {})
|
88
|
+
self.content << meth.source
|
89
|
+
end
|
90
|
+
opt.on :d, :doc, "Play a method's documentation.", true do |meth_name|
|
91
|
+
meth = get_method_or_raise(meth_name, target, {})
|
92
|
+
text.no_color do
|
93
|
+
self.content << process_comment_markup(meth.doc, :ruby)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
opt.on :c, :command, "Play a command's source.", true do |command_name|
|
97
|
+
command = find_command(command_name)
|
98
|
+
block = Pry::Method.new(find_command(command_name).block)
|
99
|
+
self.content << block.source
|
100
|
+
end
|
101
|
+
opt.on :f, :file, "Play a file.", true do |file|
|
102
|
+
self.content << File.read(File.expand_path(file))
|
103
|
+
end
|
104
|
+
opt.on :l, :lines, "Only play a subset of lines.", :optional => true, :as => Range, :default => 1..-1
|
105
|
+
opt.on :i, :in, "Play entries from Pry's input expression history. Takes an index or range.", :optional => true,
|
106
|
+
:as => Range, :default => -5..-1 do |range|
|
107
|
+
input_expressions = _pry_.input_array[range] || []
|
108
|
+
Array(input_expressions).each { |v| self.content << v }
|
109
|
+
end
|
83
110
|
opt.on :o, "open", 'When used with the -m switch, it plays the entire method except the last line, leaving the method definition "open". `amend-line` can then be used to modify the method.'
|
84
111
|
end
|
85
112
|
|
86
113
|
def process
|
87
|
-
|
88
|
-
process_method
|
89
|
-
elsif opts.present?(:file)
|
90
|
-
process_file
|
91
|
-
else
|
92
|
-
process_input
|
93
|
-
end
|
94
|
-
|
114
|
+
perform_play
|
95
115
|
run "show-input" unless _pry_.complete_expression?(eval_string)
|
96
116
|
end
|
97
117
|
|
98
|
-
def
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
eval_string << Array(meth.source.each_line.to_a[range]).join
|
118
|
+
def process_non_opt
|
119
|
+
args.each do |arg|
|
120
|
+
begin
|
121
|
+
self.content << target.eval(arg)
|
122
|
+
rescue Pry::RescuableException
|
123
|
+
raise CommandError, "Prblem when evaling #{arg}."
|
124
|
+
end
|
125
|
+
end
|
107
126
|
end
|
108
127
|
|
109
|
-
def
|
110
|
-
|
128
|
+
def perform_play
|
129
|
+
process_non_opt
|
111
130
|
|
112
|
-
if
|
113
|
-
|
131
|
+
if opts.present?(:lines)
|
132
|
+
self.content = restrict_to_lines(self.content, opts[:l])
|
114
133
|
end
|
115
134
|
|
116
|
-
|
117
|
-
|
118
|
-
range = (0..-2) if opts.present?(:open)
|
119
|
-
|
120
|
-
eval_string << Array(text_array[range]).join
|
121
|
-
end
|
122
|
-
|
123
|
-
def process_input
|
124
|
-
if !args.first
|
125
|
-
raise CommandError, "No input to play command."
|
135
|
+
if opts.present?(:open)
|
136
|
+
self.content = restrict_to_lines(self.content, 1..-2)
|
126
137
|
end
|
127
138
|
|
128
|
-
|
129
|
-
|
130
|
-
range = opts.present?(:lines) ? one_index_range_or_number(opts[:l]) : (0..-1)
|
131
|
-
range = (0..-2) if opts.present?(:open)
|
132
|
-
|
133
|
-
eval_string << Array(code.each_line.to_a[range]).join
|
139
|
+
eval_string << self.content
|
134
140
|
end
|
135
|
-
|
136
141
|
end
|
137
142
|
|
138
|
-
|
143
|
+
create_command "hist", "Show and replay Readline history. Aliases: history" do
|
139
144
|
banner <<-USAGE
|
140
145
|
Usage: hist
|
141
146
|
hist --head N
|
@@ -148,10 +153,10 @@ class Pry
|
|
148
153
|
USAGE
|
149
154
|
|
150
155
|
def options(opt)
|
151
|
-
opt.on :
|
152
|
-
opt.on :
|
156
|
+
opt.on :H, :head, "Display the first N items.", :optional => true, :as => Integer
|
157
|
+
opt.on :T, :tail, "Display the last N items.", :optional => true, :as => Integer
|
153
158
|
opt.on :s, :show, "Show the given range of lines.", :optional => true, :as => Range
|
154
|
-
opt.on :
|
159
|
+
opt.on :G, :grep, "Show lines matching the given pattern.", true, :as => String
|
155
160
|
opt.on :c, :clear, "Clear the current session's history."
|
156
161
|
opt.on :r, :replay, "Replay a line or range of lines.", true, :as => Range
|
157
162
|
opt.on :save, "Save history to a file.", true, :as => Range
|
@@ -230,8 +235,11 @@ class Pry
|
|
230
235
|
|
231
236
|
def process_replay
|
232
237
|
@history = @history.between(opts[:r])
|
233
|
-
|
234
|
-
_pry_.
|
238
|
+
|
239
|
+
_pry_.input_stack.push _pry_.input
|
240
|
+
_pry_.input = StringIO.new(@history.raw)
|
241
|
+
# eval_string << "#{@history.raw}\n"
|
242
|
+
# run "show-input" unless _pry_.complete_expression?(eval_string)
|
235
243
|
end
|
236
244
|
end
|
237
245
|
|
@@ -5,7 +5,7 @@ class Pry
|
|
5
5
|
|
6
6
|
Introspection = Pry::CommandSet.new do
|
7
7
|
|
8
|
-
|
8
|
+
create_command "show-method" do
|
9
9
|
description "Show the source for METH. Type `show-method --help` for more info. Aliases: $, show-source"
|
10
10
|
|
11
11
|
banner <<-BANNER
|
@@ -33,24 +33,29 @@ class Pry
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def process
|
36
|
-
|
37
|
-
raise CommandError, "Could not find method source" unless meth.source
|
36
|
+
raise CommandError, "Could not find method source" unless method_object.source
|
38
37
|
|
39
|
-
output.puts make_header(
|
40
|
-
output.puts "#{text.bold("Owner:")} #{
|
41
|
-
output.puts "#{text.bold("Visibility:")} #{
|
38
|
+
output.puts make_header(method_object)
|
39
|
+
output.puts "#{text.bold("Owner:")} #{method_object.owner || "N/A"}"
|
40
|
+
output.puts "#{text.bold("Visibility:")} #{method_object.visibility}"
|
42
41
|
output.puts
|
43
42
|
|
43
|
+
code = Code.from_method(method_object, start_line).
|
44
|
+
with_line_numbers(use_line_numbers?)
|
45
|
+
|
46
|
+
render_output(code, opts)
|
47
|
+
end
|
48
|
+
|
49
|
+
def use_line_numbers?
|
50
|
+
opts.present?(:b) || opts.present?(:l)
|
51
|
+
end
|
52
|
+
|
53
|
+
def start_line
|
44
54
|
if opts.present?(:'base-one')
|
45
|
-
|
55
|
+
1
|
46
56
|
else
|
47
|
-
|
57
|
+
method_object.source_line || 1
|
48
58
|
end
|
49
|
-
|
50
|
-
code = Code.from_method(meth, start_line).
|
51
|
-
with_line_numbers(opts.present?(:b) || opts.present?(:l))
|
52
|
-
|
53
|
-
render_output(code, opts)
|
54
59
|
end
|
55
60
|
end
|
56
61
|
|
@@ -98,7 +103,7 @@ class Pry
|
|
98
103
|
end
|
99
104
|
end
|
100
105
|
|
101
|
-
|
106
|
+
create_command "edit" do
|
102
107
|
description "Invoke the default editor on a file. Type `edit --help` for more info"
|
103
108
|
|
104
109
|
banner <<-BANNER
|
@@ -219,7 +224,7 @@ class Pry
|
|
219
224
|
end
|
220
225
|
end
|
221
226
|
|
222
|
-
|
227
|
+
create_command "edit-method" do
|
223
228
|
description "Edit a method. Type `edit-method --help` for more info."
|
224
229
|
|
225
230
|
banner <<-BANNER
|
@@ -3,7 +3,7 @@ class Pry
|
|
3
3
|
|
4
4
|
Ls = Pry::CommandSet.new do
|
5
5
|
|
6
|
-
|
6
|
+
create_command "ls","Show the list of vars and methods in the current scope. Type `ls --help` for more info.",
|
7
7
|
:shellwords => false, :interpolate => false do
|
8
8
|
|
9
9
|
def options(opt)
|
@@ -30,7 +30,79 @@ class Pry
|
|
30
30
|
end
|
31
31
|
alias_command "file-mode", "shell-mode"
|
32
32
|
|
33
|
-
|
33
|
+
create_command "save-file", "Export to a file using content from the REPL." do
|
34
|
+
banner <<-USAGE
|
35
|
+
Usage: save-file [OPTIONS] [FILE]
|
36
|
+
Save REPL content to a file.
|
37
|
+
e.g: save-file -m my_method -m my_method2 ./hello.rb
|
38
|
+
e.g: save-file -i 1..10 ./hello.rb --append
|
39
|
+
e.g: save-file -c show-method ./my_command.rb
|
40
|
+
e.g: save-file -f sample_file --lines 2..10 ./output_file.rb
|
41
|
+
USAGE
|
42
|
+
|
43
|
+
attr_accessor :content
|
44
|
+
attr_accessor :file_name
|
45
|
+
|
46
|
+
def setup
|
47
|
+
self.content = ""
|
48
|
+
end
|
49
|
+
|
50
|
+
def options(opt)
|
51
|
+
opt.on :m, :method, "Save a method's source.", true do |meth_name|
|
52
|
+
meth = get_method_or_raise(meth_name, target, {})
|
53
|
+
self.content << meth.source
|
54
|
+
end
|
55
|
+
opt.on :c, :command, "Save a command's source.", true do |command_name|
|
56
|
+
command = find_command(command_name)
|
57
|
+
block = Pry::Method.new(find_command(command_name).block)
|
58
|
+
self.content << block.source
|
59
|
+
end
|
60
|
+
opt.on :f, :file, "Save a file.", true do |file|
|
61
|
+
self.content << File.read(File.expand_path(file))
|
62
|
+
end
|
63
|
+
opt.on :l, :lines, "Only save a subset of lines.", :optional => true, :as => Range, :default => 1..-1
|
64
|
+
opt.on :i, :in, "Save entries from Pry's input expression history. Takes an index or range.", :optional => true,
|
65
|
+
:as => Range, :default => -5..-1 do |range|
|
66
|
+
input_expressions = _pry_.input_array[range] || []
|
67
|
+
Array(input_expressions).each { |v| self.content << v }
|
68
|
+
end
|
69
|
+
opt.on :a, :append, "Append to the given file instead of overwriting it."
|
70
|
+
end
|
71
|
+
|
72
|
+
def process
|
73
|
+
if args.empty?
|
74
|
+
raise CommandError, "Must specify a file name."
|
75
|
+
end
|
76
|
+
|
77
|
+
self.file_name = File.expand_path(args.first)
|
78
|
+
|
79
|
+
save_file
|
80
|
+
end
|
81
|
+
|
82
|
+
def save_file
|
83
|
+
if self.content.empty?
|
84
|
+
raise CommandError, "Found no code to save."
|
85
|
+
end
|
86
|
+
|
87
|
+
File.open(file_name, mode) do |f|
|
88
|
+
if opts.present?(:lines)
|
89
|
+
f.puts restrict_to_lines(content, opts[:l])
|
90
|
+
else
|
91
|
+
f.puts content
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def mode
|
97
|
+
if opts.present?(:append)
|
98
|
+
"a"
|
99
|
+
else
|
100
|
+
"w"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
create_command "cat", "Show code from a file, Pry's input buffer, or the last exception." do
|
34
106
|
banner <<-USAGE
|
35
107
|
Usage: cat FILE
|
36
108
|
cat --ex [STACK_INDEX]
|
@@ -97,6 +169,8 @@ class Pry
|
|
97
169
|
ex_file = RbxPath.convert_path_to_full(ex_file)
|
98
170
|
end
|
99
171
|
|
172
|
+
set_file_and_dir_locals(ex_file)
|
173
|
+
|
100
174
|
start_line = ex_line - window_size
|
101
175
|
start_line = 1 if start_line < 1
|
102
176
|
end_line = ex_line + window_size
|
@@ -146,6 +220,7 @@ class Pry
|
|
146
220
|
end
|
147
221
|
|
148
222
|
file_name, line_num = file_name.split(':')
|
223
|
+
file_name = File.expand_path(file_name)
|
149
224
|
set_file_and_dir_locals(file_name)
|
150
225
|
|
151
226
|
code = yield(Pry::Code.from_file(file_name))
|
@@ -191,6 +191,15 @@ class Pry
|
|
191
191
|
text.gsub(/^#{margin}/, '')
|
192
192
|
end
|
193
193
|
|
194
|
+
# Restrict a string to the given range of lines (1-indexed)
|
195
|
+
# @param [String] content The string.
|
196
|
+
# @param [Range, Fixnum] lines The line(s) to restrict it to.
|
197
|
+
# @return [String] The resulting string.
|
198
|
+
def restrict_to_lines(content, lines)
|
199
|
+
line_range = one_index_range_or_number(lines)
|
200
|
+
Array(content.lines.to_a[line_range]).join
|
201
|
+
end
|
202
|
+
|
194
203
|
def one_index_number(line_number)
|
195
204
|
if line_number > 0
|
196
205
|
line_number - 1
|
data/lib/pry/hooks.rb
CHANGED
@@ -1,6 +1,31 @@
|
|
1
1
|
class Pry
|
2
|
+
|
3
|
+
# Implements a hooks system for Pry. A hook is a callable that is
|
4
|
+
# associated with an event. A number of events are currently
|
5
|
+
# provided by Pry, these include: `:when_started`, `:before_session`, `:after_session`.
|
6
|
+
# A hook must have a name, and is connected with an event by the
|
7
|
+
# `Pry::Hooks#add_hook` method.
|
8
|
+
# @example Adding a hook for the `:before_session` event.
|
9
|
+
# Pry.config.hooks.add_hook(:before_session, :say_hi) do
|
10
|
+
# puts "hello"
|
11
|
+
# end
|
2
12
|
class Hooks
|
3
13
|
|
14
|
+
# Converts a hash to a `Pry::Hooks` instance. All hooks defined
|
15
|
+
# this way are anonymous. This functionality is primarily to
|
16
|
+
# provide backwards-compatibility with the old hash-based hook
|
17
|
+
# system in Pry versions < 0.9.8
|
18
|
+
# @param [Hash] hash The hash to convert to `Pry::Hooks`.
|
19
|
+
# @return [Pry::Hooks] The resulting `Pry::Hooks` instance.
|
20
|
+
def self.from_hash(hash)
|
21
|
+
instance = new
|
22
|
+
hash.each do |k, v|
|
23
|
+
instance.add_hook(k, nil, v)
|
24
|
+
end
|
25
|
+
|
26
|
+
instance
|
27
|
+
end
|
28
|
+
|
4
29
|
def initialize
|
5
30
|
@hooks = {}
|
6
31
|
end
|
@@ -24,14 +49,28 @@ class Pry
|
|
24
49
|
@errors ||= []
|
25
50
|
end
|
26
51
|
|
27
|
-
#
|
28
|
-
#
|
52
|
+
# FIXME:
|
53
|
+
# This is a hack to alert people of the new API.
|
54
|
+
def [](event_name)
|
55
|
+
warn "`Pry.hooks[]` is deprecated! Please use the new `Pry::Hooks` API! http://rubydoc.info/github/pry/pry/master/Pry/Hooks"
|
29
56
|
|
57
|
+
get_hook(event_name, nil)
|
58
|
+
end
|
30
59
|
|
60
|
+
# FIXME:
|
61
|
+
# This is a hack to alert people of the new API.
|
62
|
+
def []=(event_name, callable)
|
63
|
+
warn "`Pry.hooks[]=` is deprecated! Please use the new `Pry::Hooks` API! http://rubydoc.info/github/pry/pry/master/Pry/Hooks"
|
31
64
|
|
32
|
-
|
33
|
-
|
34
|
-
|
65
|
+
add_hook(event_name, nil, callable)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Destructively merge the contents of two `Pry:Hooks` instances.
|
69
|
+
# @param [Pry::Hooks] other The `Pry::Hooks` instance to merge
|
70
|
+
# @return [Pry:Hooks] Returns the receiver.
|
71
|
+
# @example
|
72
|
+
# hooks = Pry::Hooks.new.add_hook(:before_session, :say_hi) { puts "hi!" }
|
73
|
+
# Pry::Hooks.new.merge!(hooks)
|
35
74
|
def merge!(other)
|
36
75
|
@hooks.merge!(other.dup.hooks) do |key, v1, v2|
|
37
76
|
merge_arrays(v1, v2)
|
@@ -55,6 +94,9 @@ class Pry
|
|
55
94
|
# Return a new `Pry::Hooks` instance containing a merge of the contents of two `Pry:Hooks` instances,
|
56
95
|
# @param [Pry::Hooks] other The `Pry::Hooks` instance to merge
|
57
96
|
# @return [Pry::Hooks] The new hash.
|
97
|
+
# @example
|
98
|
+
# hooks = Pry::Hooks.new.add_hook(:before_session, :say_hi) { puts "hi!" }
|
99
|
+
# Pry::Hooks.new.merge(hooks)
|
58
100
|
def merge(other)
|
59
101
|
self.dup.tap do |v|
|
60
102
|
v.merge!(other)
|
@@ -66,18 +108,29 @@ class Pry
|
|
66
108
|
# @param [Symbol] hook_name The name of the hook.
|
67
109
|
# @param [#call] callable The callable.
|
68
110
|
# @yield The block to use as the callable (if `callable` parameter not provided)
|
111
|
+
# @return [Pry:Hooks] Returns the receiver.
|
112
|
+
# @example
|
113
|
+
# Pry::Hooks.new.add_hook(:before_session, :say_hi) { puts "hi!" }
|
69
114
|
def add_hook(event_name, hook_name, callable=nil, &block)
|
70
115
|
@hooks[event_name] ||= []
|
71
116
|
|
72
|
-
# do not allow duplicates
|
73
|
-
|
117
|
+
# do not allow duplicates, but allow multiple `nil` hooks
|
118
|
+
# (anonymous hooks)
|
119
|
+
if hook_exists?(event_name, hook_name) && !hook_name.nil?
|
120
|
+
raise ArgumentError, "Hook with name '#{hook_name}' already defined!"
|
121
|
+
end
|
122
|
+
|
123
|
+
if !block && !callable
|
124
|
+
raise ArgumentError, "Must provide a block or callable."
|
125
|
+
end
|
126
|
+
|
127
|
+
# ensure we only have one anonymous hook
|
128
|
+
@hooks[event_name].delete_if { |h, k| h.nil? } if hook_name.nil?
|
74
129
|
|
75
130
|
if block
|
76
131
|
@hooks[event_name] << [hook_name, block]
|
77
132
|
elsif callable
|
78
133
|
@hooks[event_name] << [hook_name, callable]
|
79
|
-
else
|
80
|
-
raise ArgumentError, "Must provide a block or callable."
|
81
134
|
end
|
82
135
|
|
83
136
|
self
|
@@ -87,6 +140,9 @@ class Pry
|
|
87
140
|
# @param [Symbol] event_name The name of the event.
|
88
141
|
# @param [Array] args The arguments to pass to each hook function.
|
89
142
|
# @return [Object] The return value of the last executed hook.
|
143
|
+
# @example
|
144
|
+
# my_hooks = Pry::Hooks.new.add_hook(:before_session, :say_hi) { puts "hi!" }
|
145
|
+
# my_hooks.exec_hook(:before_session) #=> OUTPUT: "hi!"
|
90
146
|
def exec_hook(event_name, *args, &block)
|
91
147
|
@hooks[event_name] ||= []
|
92
148
|
|
@@ -107,6 +163,9 @@ class Pry
|
|
107
163
|
# Return the number of hook functions registered for the `event_name` event.
|
108
164
|
# @param [Symbol] event_name The name of the event.
|
109
165
|
# @return [Fixnum] The number of hook functions for `event_name`.
|
166
|
+
# @example
|
167
|
+
# my_hooks = Pry::Hooks.new.add_hook(:before_session, :say_hi) { puts "hi!" }
|
168
|
+
# my_hooks.count(:before_session) #=> 1
|
110
169
|
def hook_count(event_name)
|
111
170
|
@hooks[event_name] ||= []
|
112
171
|
@hooks[event_name].size
|
@@ -116,6 +175,9 @@ class Pry
|
|
116
175
|
# @param [Symbol] event_name The name of the event.
|
117
176
|
# @param [Symbol[ hook_name The name of the hook
|
118
177
|
# @return [#call] The requested hook.
|
178
|
+
# @example
|
179
|
+
# my_hooks = Pry::Hooks.new.add_hook(:before_session, :say_hi) { puts "hi!" }
|
180
|
+
# my_hooks.get_hook(:before_session, :say_hi).call #=> "hi!"
|
119
181
|
def get_hook(event_name, hook_name)
|
120
182
|
@hooks[event_name] ||= []
|
121
183
|
hook = @hooks[event_name].find { |current_hook_name, callable| current_hook_name == hook_name }
|
@@ -127,6 +189,9 @@ class Pry
|
|
127
189
|
# alter the hooks, use add_hook/delete_hook for that).
|
128
190
|
# @param [Symbol] event_name The name of the event.
|
129
191
|
# @return [Hash] The hash of hook names / hook functions.
|
192
|
+
# @example
|
193
|
+
# my_hooks = Pry::Hooks.new.add_hook(:before_session, :say_hi) { puts "hi!" }
|
194
|
+
# my_hooks.get_hooks(:before_session) #=> {:say_hi=>#<Proc:0x00000101645e18@(pry):9>}
|
130
195
|
def get_hooks(event_name)
|
131
196
|
@hooks[event_name] ||= []
|
132
197
|
Hash[@hooks[event_name]]
|
@@ -137,6 +202,9 @@ class Pry
|
|
137
202
|
# @param [Symbol] hook_name The name of the hook.
|
138
203
|
# to delete.
|
139
204
|
# @return [#call] The deleted hook.
|
205
|
+
# @example
|
206
|
+
# my_hooks = Pry::Hooks.new.add_hook(:before_session, :say_hi) { puts "hi!" }
|
207
|
+
# my_hooks.delete_hook(:before_session, :say_hi)
|
140
208
|
def delete_hook(event_name, hook_name)
|
141
209
|
@hooks[event_name] ||= []
|
142
210
|
deleted_callable = nil
|
@@ -154,16 +222,27 @@ class Pry
|
|
154
222
|
|
155
223
|
# Clear all hooks functions for a given event.
|
156
224
|
# @param [String] event_name The name of the event.
|
225
|
+
# @example
|
226
|
+
# my_hooks = Pry::Hooks.new.add_hook(:before_session, :say_hi) { puts "hi!" }
|
227
|
+
# my_hooks.delete_hook(:before_session)
|
157
228
|
def delete_hooks(event_name)
|
158
229
|
@hooks[event_name] = []
|
159
230
|
end
|
160
231
|
|
161
232
|
alias_method :clear, :delete_hooks
|
162
233
|
|
234
|
+
# Remove all events and hooks, clearing out the Pry::Hooks
|
235
|
+
# instance completely.
|
236
|
+
# @example
|
237
|
+
# my_hooks = Pry::Hooks.new.add_hook(:before_session, :say_hi) { puts "hi!" }
|
238
|
+
# my_hooks.clear_all
|
239
|
+
def clear_all
|
240
|
+
@hooks = {}
|
241
|
+
end
|
242
|
+
|
163
243
|
# @param [Symbol] event_name Name of the event.
|
164
244
|
# @param [Symbol] hook_name Name of the hook.
|
165
245
|
# @return [Boolean] Whether the hook by the name `hook_name`
|
166
|
-
# is defined for the event.
|
167
246
|
def hook_exists?(event_name, hook_name)
|
168
247
|
!!@hooks[event_name].find { |name, _| name == hook_name }
|
169
248
|
end
|