pry 0.11.3 → 0.12.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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +139 -1
- data/LICENSE +1 -1
- data/README.md +13 -30
- data/bin/pry +0 -4
- data/lib/pry.rb +17 -47
- data/lib/pry/cli.rb +17 -24
- data/lib/pry/code.rb +6 -6
- data/lib/pry/code/code_file.rb +5 -4
- data/lib/pry/code/code_range.rb +3 -3
- data/lib/pry/code/loc.rb +14 -8
- data/lib/pry/code_object.rb +4 -4
- data/lib/pry/color_printer.rb +1 -0
- data/lib/pry/command.rb +36 -29
- data/lib/pry/command_set.rb +17 -52
- data/lib/pry/commands/amend_line.rb +3 -4
- data/lib/pry/commands/bang.rb +1 -1
- data/lib/pry/commands/cat.rb +7 -6
- data/lib/pry/commands/cat/exception_formatter.rb +9 -8
- data/lib/pry/commands/cat/input_expression_formatter.rb +1 -1
- data/lib/pry/commands/change_prompt.rb +29 -9
- data/lib/pry/commands/clear_screen.rb +14 -0
- data/lib/pry/commands/code_collector.rb +9 -9
- data/lib/pry/commands/easter_eggs.rb +3 -3
- data/lib/pry/commands/edit.rb +8 -7
- data/lib/pry/commands/exit.rb +2 -1
- data/lib/pry/commands/find_method.rb +11 -13
- data/lib/pry/commands/gem_cd.rb +1 -1
- data/lib/pry/commands/gem_install.rb +2 -2
- data/lib/pry/commands/gem_list.rb +2 -2
- data/lib/pry/commands/gem_open.rb +1 -1
- data/lib/pry/commands/gem_search.rb +2 -2
- data/lib/pry/commands/gem_stats.rb +83 -0
- data/lib/pry/commands/gist.rb +7 -6
- data/lib/pry/commands/help.rb +3 -3
- data/lib/pry/commands/hist.rb +9 -8
- data/lib/pry/commands/import_set.rb +2 -1
- data/lib/pry/commands/install_command.rb +7 -6
- data/lib/pry/commands/list_inspectors.rb +2 -2
- data/lib/pry/commands/ls.rb +27 -30
- data/lib/pry/commands/ls/constants.rb +4 -4
- data/lib/pry/commands/ls/formatter.rb +3 -2
- data/lib/pry/commands/ls/globals.rb +0 -2
- data/lib/pry/commands/ls/grep.rb +0 -2
- data/lib/pry/commands/ls/instance_vars.rb +0 -1
- data/lib/pry/commands/ls/local_names.rb +0 -2
- data/lib/pry/commands/ls/local_vars.rb +0 -2
- data/lib/pry/commands/ls/ls_entity.rb +0 -1
- data/lib/pry/commands/ls/methods.rb +0 -3
- data/lib/pry/commands/ls/methods_helper.rb +1 -1
- data/lib/pry/commands/ls/self_methods.rb +0 -1
- data/lib/pry/commands/play.rb +1 -2
- data/lib/pry/commands/pry_backtrace.rb +1 -1
- data/lib/pry/commands/raise_up.rb +2 -1
- data/lib/pry/commands/ri.rb +5 -4
- data/lib/pry/commands/shell_command.rb +3 -2
- data/lib/pry/commands/shell_mode.rb +6 -6
- data/lib/pry/commands/show_doc.rb +5 -7
- data/lib/pry/commands/show_info.rb +25 -18
- data/lib/pry/commands/show_source.rb +5 -2
- data/lib/pry/commands/stat.rb +1 -1
- data/lib/pry/commands/watch_expression.rb +9 -7
- data/lib/pry/commands/whereami.rb +4 -4
- data/lib/pry/commands/wtf.rb +15 -2
- data/lib/pry/config.rb +33 -9
- data/lib/pry/config/behavior.rb +229 -205
- data/lib/pry/config/convenience.rb +24 -21
- data/lib/pry/config/default.rb +153 -143
- data/lib/pry/config/memoization.rb +41 -37
- data/lib/pry/core_extensions.rb +4 -3
- data/lib/pry/editor.rb +5 -12
- data/lib/pry/exceptions.rb +0 -2
- data/lib/pry/helpers.rb +1 -0
- data/lib/pry/helpers/base_helpers.rb +133 -4
- data/lib/pry/helpers/command_helpers.rb +5 -4
- data/lib/pry/helpers/documentation_helpers.rb +2 -2
- data/lib/pry/helpers/options_helpers.rb +5 -5
- data/lib/pry/helpers/platform.rb +58 -0
- data/lib/pry/helpers/table.rb +20 -15
- data/lib/pry/helpers/text.rb +3 -4
- data/lib/pry/history.rb +21 -8
- data/lib/pry/hooks.rb +3 -3
- data/lib/pry/indent.rb +15 -17
- data/lib/pry/input_completer.rb +12 -7
- data/lib/pry/input_lock.rb +0 -2
- data/lib/pry/last_exception.rb +1 -1
- data/lib/pry/method.rb +37 -31
- data/lib/pry/method/disowned.rb +2 -1
- data/lib/pry/method/patcher.rb +2 -2
- data/lib/pry/method/weird_method_locator.rb +7 -8
- data/lib/pry/object_path.rb +5 -4
- data/lib/pry/output.rb +3 -2
- data/lib/pry/pager.rb +4 -3
- data/lib/pry/platform.rb +79 -81
- data/lib/pry/plugins.rb +7 -3
- data/lib/pry/prompt.rb +144 -25
- data/lib/pry/pry_class.rb +53 -29
- data/lib/pry/pry_instance.rb +88 -55
- data/lib/pry/repl.rb +33 -4
- data/lib/pry/repl_file_loader.rb +1 -2
- data/lib/pry/ring.rb +84 -0
- data/lib/pry/rubygem.rb +6 -6
- data/lib/pry/slop.rb +17 -17
- data/lib/pry/slop/commands.rb +3 -4
- data/lib/pry/slop/option.rb +19 -21
- data/lib/pry/terminal.rb +2 -1
- data/lib/pry/testable/mockable.rb +2 -2
- data/lib/pry/testable/pry_tester.rb +1 -1
- data/lib/pry/testable/utility.rb +2 -2
- data/lib/pry/testable/variables.rb +1 -1
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +15 -15
- data/lib/pry/wrapped_module/candidate.rb +2 -2
- metadata +17 -29
- data/lib/pry/commands/list_prompts.rb +0 -35
- data/lib/pry/commands/simple_prompt.rb +0 -22
- data/lib/pry/history_array.rb +0 -121
- data/lib/pry/rbx_path.rb +0 -22
data/lib/pry/version.rb
CHANGED
data/lib/pry/wrapped_module.rb
CHANGED
@@ -26,7 +26,7 @@ class Pry
|
|
26
26
|
# @return [Module, nil] The module or `nil` (if conversion failed).
|
27
27
|
# @example
|
28
28
|
# Pry::WrappedModule.from_str("Pry::Code")
|
29
|
-
def self.from_str(mod_name, target=TOPLEVEL_BINDING)
|
29
|
+
def self.from_str(mod_name, target = TOPLEVEL_BINDING)
|
30
30
|
if safe_to_evaluate?(mod_name, target)
|
31
31
|
Pry::WrappedModule.new(target.eval(mod_name))
|
32
32
|
else
|
@@ -49,6 +49,7 @@ class Pry
|
|
49
49
|
def safe_to_evaluate?(str, target)
|
50
50
|
return true if str.strip == "self"
|
51
51
|
return false if str =~ /%/
|
52
|
+
|
52
53
|
kind = target.eval("defined?(#{str})")
|
53
54
|
kind =~ /variable|constant/
|
54
55
|
end
|
@@ -58,6 +59,7 @@ class Pry
|
|
58
59
|
# @param [Module] mod
|
59
60
|
def initialize(mod)
|
60
61
|
raise ArgumentError, "Tried to initialize a WrappedModule with a non-module #{mod.inspect}" unless ::Module === mod
|
62
|
+
|
61
63
|
@wrapped = mod
|
62
64
|
@memoized_candidates = []
|
63
65
|
@host_file_lines = nil
|
@@ -109,10 +111,6 @@ class Pry
|
|
109
111
|
def singleton_class?
|
110
112
|
if Pry::Method.safe_send(wrapped, :respond_to?, :singleton_class?)
|
111
113
|
Pry::Method.safe_send(wrapped, :singleton_class?)
|
112
|
-
elsif defined?(Rubinius)
|
113
|
-
# https://github.com/rubinius/rubinius/commit/2e71722dba53d1a92c54d5e3968d64d1042486fe singleton_class? added 30 Jul 2014
|
114
|
-
# https://github.com/rubinius/rubinius/commit/4310f6b2ef3c8fc88135affe697db4e29e4621c4 has been around since 2011
|
115
|
-
!!Rubinius::Type.singleton_class_object(wrapped)
|
116
114
|
else
|
117
115
|
wrapped != Pry::Method.safe_send(wrapped, :ancestors).first
|
118
116
|
end
|
@@ -138,10 +136,10 @@ class Pry
|
|
138
136
|
def singleton_instance
|
139
137
|
raise ArgumentError, "tried to get instance of non singleton class" unless singleton_class?
|
140
138
|
|
141
|
-
if Helpers::
|
139
|
+
if Helpers::Platform.jruby?
|
142
140
|
wrapped.to_java.attached
|
143
141
|
else
|
144
|
-
@singleton_instance ||= ObjectSpace.each_object(wrapped).detect{ |x| (class << x; self; end) == wrapped }
|
142
|
+
@singleton_instance ||= ObjectSpace.each_object(wrapped).detect { |x| (class << x; self; end) == wrapped }
|
145
143
|
end
|
146
144
|
end
|
147
145
|
|
@@ -150,7 +148,7 @@ class Pry
|
|
150
148
|
wrapped.send(method_name, *args, &block)
|
151
149
|
end
|
152
150
|
|
153
|
-
def respond_to?(method_name, include_all=false)
|
151
|
+
def respond_to?(method_name, include_all = false)
|
154
152
|
super || wrapped.respond_to?(method_name, include_all)
|
155
153
|
end
|
156
154
|
|
@@ -253,7 +251,7 @@ class Pry
|
|
253
251
|
y.yield candidate(num)
|
254
252
|
end
|
255
253
|
end
|
256
|
-
|
254
|
+
Helpers::Platform.jruby_19? ? enum.to_a : enum
|
257
255
|
end
|
258
256
|
|
259
257
|
# @return [Boolean] Whether YARD docs are available for this module.
|
@@ -267,7 +265,7 @@ class Pry
|
|
267
265
|
# When `self` is a `Module` then return the
|
268
266
|
# nth ancestor, otherwise (in the case of classes) return the
|
269
267
|
# nth ancestor that is a class.
|
270
|
-
def super(times=1)
|
268
|
+
def super(times = 1)
|
271
269
|
return self if times.zero?
|
272
270
|
|
273
271
|
if wrapped.is_a?(Class)
|
@@ -302,7 +300,7 @@ class Pry
|
|
302
300
|
# speed up source code extraction.
|
303
301
|
def method_candidates
|
304
302
|
@method_candidates ||= all_source_locations_by_popularity.map do |group|
|
305
|
-
methods_sorted_by_source_line
|
303
|
+
methods_sorted_by_source_line = group.last.sort_by(&:source_line)
|
306
304
|
[methods_sorted_by_source_line.first, methods_sorted_by_source_line.last]
|
307
305
|
end
|
308
306
|
end
|
@@ -315,7 +313,7 @@ class Pry
|
|
315
313
|
@all_source_locations_by_popularity = ims.group_by { |v| Array(v.source_location).first }.
|
316
314
|
sort_by do |path, methods|
|
317
315
|
expanded = File.expand_path(path)
|
318
|
-
load_order = $LOADED_FEATURES.index{ |file| expanded.end_with?(file) }
|
316
|
+
load_order = $LOADED_FEATURES.index { |file| expanded.end_with?(file) }
|
319
317
|
|
320
318
|
[-methods.size, load_order || (1.0 / 0.0)]
|
321
319
|
end
|
@@ -323,16 +321,16 @@ class Pry
|
|
323
321
|
|
324
322
|
# We only want methods that have a non-nil `source_location`. We also
|
325
323
|
# skip some spooky internal methods.
|
326
|
-
#
|
324
|
+
#
|
327
325
|
# @return [Array<Pry::Method>]
|
328
326
|
def all_relevant_methods_for(mod)
|
329
327
|
methods = all_methods_for(mod).select(&:source_location).
|
330
|
-
reject{ |x|
|
328
|
+
reject { |x| method_defined_by_forwardable_module?(x) }
|
331
329
|
|
332
330
|
return methods unless methods.empty?
|
333
331
|
|
334
332
|
safe_send(mod, :constants).flat_map do |const_name|
|
335
|
-
if const = nested_module?(mod, const_name)
|
333
|
+
if (const = nested_module?(mod, const_name))
|
336
334
|
all_relevant_methods_for(const)
|
337
335
|
else
|
338
336
|
[]
|
@@ -349,9 +347,11 @@ class Pry
|
|
349
347
|
|
350
348
|
def nested_module?(parent, name)
|
351
349
|
return if safe_send(parent, :autoload?, name)
|
350
|
+
|
352
351
|
child = safe_send(parent, :const_get, name)
|
353
352
|
return unless Module === child
|
354
353
|
return unless safe_send(child, :name) == "#{safe_send(parent, :name)}::#{name}"
|
354
|
+
|
355
355
|
child
|
356
356
|
end
|
357
357
|
|
@@ -2,7 +2,6 @@ require 'pry/helpers/documentation_helpers'
|
|
2
2
|
|
3
3
|
class Pry
|
4
4
|
class WrappedModule
|
5
|
-
|
6
5
|
# This class represents a single candidate for a module/class definition.
|
7
6
|
# It provides access to the source, documentation, line and file
|
8
7
|
# for a monkeypatch (reopening) of a class/module.
|
@@ -64,6 +63,7 @@ class Pry
|
|
64
63
|
# @return [String] The documentation for the candidate.
|
65
64
|
def doc
|
66
65
|
return nil if file.nil?
|
66
|
+
|
67
67
|
@doc ||= get_comment_content(Pry::Code.from_file(file).comment_describing(line))
|
68
68
|
end
|
69
69
|
|
@@ -76,7 +76,7 @@ class Pry
|
|
76
76
|
file, line = first_method_source_location
|
77
77
|
return nil if !file.is_a?(String)
|
78
78
|
|
79
|
-
@source_location = [file,
|
79
|
+
@source_location = [file, first_line_of_module_definition(file, line)]
|
80
80
|
rescue Pry::RescuableException
|
81
81
|
nil
|
82
82
|
end
|
metadata
CHANGED
@@ -1,64 +1,52 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mair (banisterfiend)
|
8
8
|
- Conrad Irwin
|
9
9
|
- Ryan Fitzgerald
|
10
|
-
|
10
|
+
- Kyrylo Silin
|
11
|
+
autorequire:
|
11
12
|
bindir: bin
|
12
13
|
cert_chain: []
|
13
|
-
date:
|
14
|
+
date: 2018-11-04 00:00:00.000000000 Z
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
|
-
name: coderay
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 1.1.0
|
22
|
-
|
22
|
+
name: coderay
|
23
23
|
prerelease: false
|
24
|
+
type: :runtime
|
24
25
|
version_requirements: !ruby/object:Gem::Requirement
|
25
26
|
requirements:
|
26
27
|
- - "~>"
|
27
28
|
- !ruby/object:Gem::Version
|
28
29
|
version: 1.1.0
|
29
30
|
- !ruby/object:Gem::Dependency
|
30
|
-
name: method_source
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: 0.9.0
|
36
|
-
|
36
|
+
name: method_source
|
37
37
|
prerelease: false
|
38
|
+
type: :runtime
|
38
39
|
version_requirements: !ruby/object:Gem::Requirement
|
39
40
|
requirements:
|
40
41
|
- - "~>"
|
41
42
|
- !ruby/object:Gem::Version
|
42
43
|
version: 0.9.0
|
43
|
-
- !ruby/object:Gem::Dependency
|
44
|
-
name: bundler
|
45
|
-
requirement: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '1.0'
|
50
|
-
type: :development
|
51
|
-
prerelease: false
|
52
|
-
version_requirements: !ruby/object:Gem::Requirement
|
53
|
-
requirements:
|
54
|
-
- - "~>"
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: '1.0'
|
57
44
|
description: An IRB alternative and runtime developer console
|
58
45
|
email:
|
59
46
|
- jrmair@gmail.com
|
60
47
|
- conrad.irwin@gmail.com
|
61
48
|
- rwfitzge@gmail.com
|
49
|
+
- silin@kyrylo.org
|
62
50
|
executables:
|
63
51
|
- pry
|
64
52
|
extensions: []
|
@@ -91,6 +79,7 @@ files:
|
|
91
79
|
- lib/pry/commands/cd.rb
|
92
80
|
- lib/pry/commands/change_inspector.rb
|
93
81
|
- lib/pry/commands/change_prompt.rb
|
82
|
+
- lib/pry/commands/clear_screen.rb
|
94
83
|
- lib/pry/commands/code_collector.rb
|
95
84
|
- lib/pry/commands/disable_pry.rb
|
96
85
|
- lib/pry/commands/disabled_commands.rb
|
@@ -109,6 +98,7 @@ files:
|
|
109
98
|
- lib/pry/commands/gem_open.rb
|
110
99
|
- lib/pry/commands/gem_readme.rb
|
111
100
|
- lib/pry/commands/gem_search.rb
|
101
|
+
- lib/pry/commands/gem_stats.rb
|
112
102
|
- lib/pry/commands/gist.rb
|
113
103
|
- lib/pry/commands/help.rb
|
114
104
|
- lib/pry/commands/hist.rb
|
@@ -116,7 +106,6 @@ files:
|
|
116
106
|
- lib/pry/commands/install_command.rb
|
117
107
|
- lib/pry/commands/jump_to.rb
|
118
108
|
- lib/pry/commands/list_inspectors.rb
|
119
|
-
- lib/pry/commands/list_prompts.rb
|
120
109
|
- lib/pry/commands/ls.rb
|
121
110
|
- lib/pry/commands/ls/constants.rb
|
122
111
|
- lib/pry/commands/ls/formatter.rb
|
@@ -146,7 +135,6 @@ files:
|
|
146
135
|
- lib/pry/commands/show_info.rb
|
147
136
|
- lib/pry/commands/show_input.rb
|
148
137
|
- lib/pry/commands/show_source.rb
|
149
|
-
- lib/pry/commands/simple_prompt.rb
|
150
138
|
- lib/pry/commands/stat.rb
|
151
139
|
- lib/pry/commands/switch_to.rb
|
152
140
|
- lib/pry/commands/toggle_color.rb
|
@@ -168,10 +156,10 @@ files:
|
|
168
156
|
- lib/pry/helpers/command_helpers.rb
|
169
157
|
- lib/pry/helpers/documentation_helpers.rb
|
170
158
|
- lib/pry/helpers/options_helpers.rb
|
159
|
+
- lib/pry/helpers/platform.rb
|
171
160
|
- lib/pry/helpers/table.rb
|
172
161
|
- lib/pry/helpers/text.rb
|
173
162
|
- lib/pry/history.rb
|
174
|
-
- lib/pry/history_array.rb
|
175
163
|
- lib/pry/hooks.rb
|
176
164
|
- lib/pry/indent.rb
|
177
165
|
- lib/pry/input_completer.rb
|
@@ -190,9 +178,9 @@ files:
|
|
190
178
|
- lib/pry/prompt.rb
|
191
179
|
- lib/pry/pry_class.rb
|
192
180
|
- lib/pry/pry_instance.rb
|
193
|
-
- lib/pry/rbx_path.rb
|
194
181
|
- lib/pry/repl.rb
|
195
182
|
- lib/pry/repl_file_loader.rb
|
183
|
+
- lib/pry/ring.rb
|
196
184
|
- lib/pry/rubygem.rb
|
197
185
|
- lib/pry/slop.rb
|
198
186
|
- lib/pry/slop/LICENSE
|
@@ -212,7 +200,7 @@ homepage: http://pryrepl.org
|
|
212
200
|
licenses:
|
213
201
|
- MIT
|
214
202
|
metadata: {}
|
215
|
-
post_install_message:
|
203
|
+
post_install_message:
|
216
204
|
rdoc_options: []
|
217
205
|
require_paths:
|
218
206
|
- lib
|
@@ -227,9 +215,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
227
215
|
- !ruby/object:Gem::Version
|
228
216
|
version: '0'
|
229
217
|
requirements: []
|
230
|
-
rubyforge_project:
|
231
|
-
rubygems_version: 2.6
|
232
|
-
signing_key:
|
218
|
+
rubyforge_project:
|
219
|
+
rubygems_version: 2.7.6
|
220
|
+
signing_key:
|
233
221
|
specification_version: 4
|
234
222
|
summary: An IRB alternative and runtime developer console
|
235
223
|
test_files: []
|
@@ -1,35 +0,0 @@
|
|
1
|
-
class Pry::Command::ListPrompts < Pry::ClassCommand
|
2
|
-
match 'list-prompts'
|
3
|
-
group 'Input and Output'
|
4
|
-
description 'List the prompts available for use.'
|
5
|
-
banner <<-BANNER
|
6
|
-
Usage: list-prompts
|
7
|
-
|
8
|
-
List the available prompts. You can use change-prompt to switch between
|
9
|
-
them.
|
10
|
-
BANNER
|
11
|
-
|
12
|
-
def process
|
13
|
-
output.puts heading("Available prompts") + "\n"
|
14
|
-
prompt_map.each do |name, prompt|
|
15
|
-
output.write "Name: #{text.bold(name)}"
|
16
|
-
output.puts selected_prompt?(prompt) ? selected_text : ""
|
17
|
-
output.puts prompt[:description]
|
18
|
-
output.puts
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
def prompt_map
|
24
|
-
Pry::Prompt::MAP
|
25
|
-
end
|
26
|
-
|
27
|
-
def selected_text
|
28
|
-
text.red " (selected) "
|
29
|
-
end
|
30
|
-
|
31
|
-
def selected_prompt?(prompt)
|
32
|
-
_pry_.prompt == prompt[:value]
|
33
|
-
end
|
34
|
-
Pry::Commands.add_command(self)
|
35
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
class Command::SimplePrompt < Pry::ClassCommand
|
3
|
-
match 'simple-prompt'
|
4
|
-
group 'prompts'
|
5
|
-
description 'Toggle the simple prompt.'
|
6
|
-
|
7
|
-
banner <<-'BANNER'
|
8
|
-
Toggle the simple prompt.
|
9
|
-
BANNER
|
10
|
-
|
11
|
-
def process
|
12
|
-
case _pry_.prompt
|
13
|
-
when Pry::SIMPLE_PROMPT
|
14
|
-
_pry_.pop_prompt
|
15
|
-
else
|
16
|
-
_pry_.push_prompt Pry::SIMPLE_PROMPT
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
Pry::Commands.add_command(Pry::Command::SimplePrompt)
|
22
|
-
end
|
data/lib/pry/history_array.rb
DELETED
@@ -1,121 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
# A history array is an array to which you can only add elements. Older
|
3
|
-
# entries are removed progressively, so that the array never contains more than
|
4
|
-
# N elements.
|
5
|
-
#
|
6
|
-
# History arrays are used by Pry to store the output of the last commands.
|
7
|
-
#
|
8
|
-
# @example
|
9
|
-
# ary = Pry::HistoryArray.new 10
|
10
|
-
# ary << 1 << 2 << 3
|
11
|
-
# ary[0] # => 1
|
12
|
-
# ary[1] # => 2
|
13
|
-
# 10.times { |n| ary << n }
|
14
|
-
# ary[0] # => nil
|
15
|
-
# ary[-1] # => 9
|
16
|
-
class HistoryArray
|
17
|
-
include Enumerable
|
18
|
-
|
19
|
-
# @param [Integer] size Maximum amount of objects in the array
|
20
|
-
def initialize(size)
|
21
|
-
@max_size = size
|
22
|
-
|
23
|
-
@hash = {}
|
24
|
-
@count = 0
|
25
|
-
end
|
26
|
-
|
27
|
-
# Pushes an object at the end of the array
|
28
|
-
# @param [Object] value Object to be added
|
29
|
-
def <<(value)
|
30
|
-
@hash[@count] = value
|
31
|
-
|
32
|
-
if @hash.size > max_size
|
33
|
-
@hash.delete(@count - max_size)
|
34
|
-
end
|
35
|
-
|
36
|
-
@count += 1
|
37
|
-
|
38
|
-
self
|
39
|
-
end
|
40
|
-
|
41
|
-
# @overload [](index)
|
42
|
-
# @param [Integer] index Index of the item to access.
|
43
|
-
# @return [Object, nil] Item at that index or nil if it has been removed.
|
44
|
-
# @overload [](index, size)
|
45
|
-
# @param [Integer] index Index of the first item to access.
|
46
|
-
# @param [Integer] size Amount of items to access
|
47
|
-
# @return [Array, nil] The selected items. Nil if index is greater than
|
48
|
-
# the size of the array.
|
49
|
-
# @overload [](range)
|
50
|
-
# @param [Range<Integer>] range Range of indices to access.
|
51
|
-
# @return [Array, nil] The selected items. Nil if index is greater than
|
52
|
-
# the size of the array.
|
53
|
-
def [](index_or_range, size = nil)
|
54
|
-
if index_or_range.is_a? Integer
|
55
|
-
index = convert_index(index_or_range)
|
56
|
-
|
57
|
-
if size
|
58
|
-
end_index = index + size
|
59
|
-
index > @count ? nil : (index...[end_index, @count].min).map do |n|
|
60
|
-
@hash[n]
|
61
|
-
end
|
62
|
-
else
|
63
|
-
@hash[index]
|
64
|
-
end
|
65
|
-
else
|
66
|
-
range = convert_range(index_or_range)
|
67
|
-
range.begin > @count ? nil : range.map { |n| @hash[n] }
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# @return [Integer] Amount of objects in the array
|
72
|
-
def size
|
73
|
-
@count
|
74
|
-
end
|
75
|
-
alias count size
|
76
|
-
alias length size
|
77
|
-
|
78
|
-
def empty?
|
79
|
-
size == 0
|
80
|
-
end
|
81
|
-
|
82
|
-
def each
|
83
|
-
((@count - size)...@count).each do |n|
|
84
|
-
yield @hash[n]
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def to_a
|
89
|
-
((@count - size)...@count).map { |n| @hash[n] }
|
90
|
-
end
|
91
|
-
|
92
|
-
# @return [Hash] copy of the internal @hash history
|
93
|
-
def to_h
|
94
|
-
@hash.dup
|
95
|
-
end
|
96
|
-
|
97
|
-
def pop!
|
98
|
-
@hash.delete @count - 1
|
99
|
-
@count -= 1
|
100
|
-
end
|
101
|
-
|
102
|
-
def inspect
|
103
|
-
"#<#{self.class} size=#{size} first=#{@count - size} max_size=#{max_size}>"
|
104
|
-
end
|
105
|
-
|
106
|
-
# @return [Integer] Maximum amount of objects in the array
|
107
|
-
attr_reader :max_size
|
108
|
-
|
109
|
-
private
|
110
|
-
def convert_index(n)
|
111
|
-
n >= 0 ? n : @count + n
|
112
|
-
end
|
113
|
-
|
114
|
-
def convert_range(range)
|
115
|
-
end_index = convert_index(range.end)
|
116
|
-
end_index += 1 unless range.exclude_end?
|
117
|
-
|
118
|
-
Range.new(convert_index(range.begin), [end_index, @count].min, true)
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|