pry 0.10.4 → 0.12.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +251 -16
  3. data/LICENSE +1 -1
  4. data/README.md +35 -51
  5. data/bin/pry +3 -11
  6. data/lib/pry/basic_object.rb +6 -0
  7. data/lib/pry/cli.rb +50 -52
  8. data/lib/pry/code/code_file.rb +13 -6
  9. data/lib/pry/code/code_range.rb +3 -3
  10. data/lib/pry/code/loc.rb +14 -8
  11. data/lib/pry/code.rb +11 -6
  12. data/lib/pry/code_object.rb +27 -4
  13. data/lib/pry/color_printer.rb +20 -10
  14. data/lib/pry/command.rb +76 -45
  15. data/lib/pry/command_set.rb +17 -45
  16. data/lib/pry/commands/amend_line.rb +3 -4
  17. data/lib/pry/commands/bang.rb +1 -1
  18. data/lib/pry/commands/cat/exception_formatter.rb +10 -8
  19. data/lib/pry/commands/cat/file_formatter.rb +7 -3
  20. data/lib/pry/commands/cat/input_expression_formatter.rb +1 -1
  21. data/lib/pry/commands/cat.rb +7 -6
  22. data/lib/pry/commands/change_prompt.rb +29 -9
  23. data/lib/pry/commands/clear_screen.rb +14 -0
  24. data/lib/pry/commands/code_collector.rb +25 -23
  25. data/lib/pry/commands/easter_eggs.rb +12 -12
  26. data/lib/pry/commands/edit/file_and_line_locator.rb +1 -1
  27. data/lib/pry/commands/edit.rb +15 -10
  28. data/lib/pry/commands/exit.rb +2 -1
  29. data/lib/pry/commands/find_method.rb +12 -14
  30. data/lib/pry/commands/gem_cd.rb +1 -1
  31. data/lib/pry/commands/gem_install.rb +2 -2
  32. data/lib/pry/commands/gem_list.rb +2 -2
  33. data/lib/pry/commands/gem_open.rb +2 -2
  34. data/lib/pry/commands/gem_readme.rb +25 -0
  35. data/lib/pry/commands/gem_search.rb +40 -0
  36. data/lib/pry/commands/gem_stats.rb +83 -0
  37. data/lib/pry/commands/gist.rb +7 -6
  38. data/lib/pry/commands/help.rb +3 -3
  39. data/lib/pry/commands/hist.rb +11 -10
  40. data/lib/pry/commands/import_set.rb +2 -1
  41. data/lib/pry/commands/install_command.rb +7 -6
  42. data/lib/pry/commands/jump_to.rb +7 -7
  43. data/lib/pry/commands/list_inspectors.rb +2 -2
  44. data/lib/pry/commands/ls/constants.rb +14 -3
  45. data/lib/pry/commands/ls/formatter.rb +4 -2
  46. data/lib/pry/commands/ls/globals.rb +0 -2
  47. data/lib/pry/commands/ls/grep.rb +0 -2
  48. data/lib/pry/commands/ls/instance_vars.rb +0 -1
  49. data/lib/pry/commands/ls/jruby_hacks.rb +2 -2
  50. data/lib/pry/commands/ls/local_names.rb +0 -2
  51. data/lib/pry/commands/ls/local_vars.rb +0 -2
  52. data/lib/pry/commands/ls/ls_entity.rb +0 -1
  53. data/lib/pry/commands/ls/methods.rb +0 -3
  54. data/lib/pry/commands/ls/methods_helper.rb +1 -1
  55. data/lib/pry/commands/ls/self_methods.rb +2 -1
  56. data/lib/pry/commands/ls.rb +30 -31
  57. data/lib/pry/commands/play.rb +3 -4
  58. data/lib/pry/commands/pry_backtrace.rb +1 -1
  59. data/lib/pry/commands/raise_up.rb +2 -1
  60. data/lib/pry/commands/reload_code.rb +2 -2
  61. data/lib/pry/commands/ri.rb +9 -4
  62. data/lib/pry/commands/shell_command.rb +36 -9
  63. data/lib/pry/commands/shell_mode.rb +6 -6
  64. data/lib/pry/commands/show_doc.rb +5 -7
  65. data/lib/pry/commands/show_info.rb +35 -20
  66. data/lib/pry/commands/show_source.rb +5 -2
  67. data/lib/pry/commands/stat.rb +1 -1
  68. data/lib/pry/commands/watch_expression/expression.rb +1 -1
  69. data/lib/pry/commands/watch_expression.rb +9 -7
  70. data/lib/pry/commands/whereami.rb +11 -10
  71. data/lib/pry/commands/wtf.rb +15 -2
  72. data/lib/pry/config/behavior.rb +230 -114
  73. data/lib/pry/config/convenience.rb +24 -21
  74. data/lib/pry/config/default.rb +151 -153
  75. data/lib/pry/config/memoization.rb +48 -0
  76. data/lib/pry/config.rb +30 -19
  77. data/lib/pry/core_extensions.rb +15 -4
  78. data/lib/pry/editor.rb +5 -12
  79. data/lib/pry/exceptions.rb +1 -3
  80. data/lib/pry/forwardable.rb +23 -0
  81. data/lib/pry/helpers/base_helpers.rb +197 -110
  82. data/lib/pry/helpers/command_helpers.rb +5 -4
  83. data/lib/pry/helpers/documentation_helpers.rb +3 -2
  84. data/lib/pry/helpers/options_helpers.rb +6 -6
  85. data/lib/pry/helpers/platform.rb +58 -0
  86. data/lib/pry/helpers/table.rb +20 -15
  87. data/lib/pry/helpers/text.rb +82 -74
  88. data/lib/pry/helpers.rb +1 -0
  89. data/lib/pry/history.rb +43 -9
  90. data/lib/pry/hooks.rb +50 -109
  91. data/lib/pry/indent.rb +21 -19
  92. data/lib/pry/input_completer.rb +146 -123
  93. data/lib/pry/input_lock.rb +0 -2
  94. data/lib/pry/last_exception.rb +2 -2
  95. data/lib/pry/method/disowned.rb +3 -1
  96. data/lib/pry/method/patcher.rb +2 -5
  97. data/lib/pry/method/weird_method_locator.rb +21 -11
  98. data/lib/pry/method.rb +44 -38
  99. data/lib/pry/object_path.rb +5 -4
  100. data/lib/pry/output.rb +37 -37
  101. data/lib/pry/pager.rb +195 -184
  102. data/lib/pry/platform.rb +91 -0
  103. data/lib/pry/plugins.rb +27 -8
  104. data/lib/pry/prompt.rb +144 -25
  105. data/lib/pry/pry_class.rb +83 -33
  106. data/lib/pry/pry_instance.rb +94 -59
  107. data/lib/pry/repl.rb +70 -11
  108. data/lib/pry/repl_file_loader.rb +2 -3
  109. data/lib/pry/ring.rb +84 -0
  110. data/lib/pry/rubygem.rb +9 -7
  111. data/lib/pry/slop/LICENSE +20 -0
  112. data/lib/pry/slop/commands.rb +195 -0
  113. data/lib/pry/slop/option.rb +206 -0
  114. data/lib/pry/slop.rb +661 -0
  115. data/lib/pry/terminal.rb +18 -6
  116. data/lib/pry/testable/evalable.rb +15 -0
  117. data/lib/pry/testable/mockable.rb +14 -0
  118. data/lib/pry/testable/pry_tester.rb +73 -0
  119. data/lib/pry/testable/utility.rb +26 -0
  120. data/lib/pry/testable/variables.rb +46 -0
  121. data/lib/pry/testable.rb +70 -0
  122. data/lib/pry/version.rb +1 -1
  123. data/lib/pry/{module_candidate.rb → wrapped_module/candidate.rb} +8 -14
  124. data/lib/pry/wrapped_module.rb +21 -21
  125. data/lib/pry.rb +21 -50
  126. metadata +29 -40
  127. data/lib/pry/commands/list_prompts.rb +0 -35
  128. data/lib/pry/commands/simple_prompt.rb +0 -22
  129. data/lib/pry/history_array.rb +0 -121
  130. data/lib/pry/rbx_path.rb +0 -22
  131. data/lib/pry/test/helper.rb +0 -170
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.4
4
+ version: 0.12.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mair (banisterfiend)
8
8
  - Conrad Irwin
9
9
  - Ryan Fitzgerald
10
+ - Kyrylo Silin
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2016-07-11 00:00:00.000000000 Z
14
+ date: 2018-11-12 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: coderay
@@ -26,53 +27,26 @@ dependencies:
26
27
  - - "~>"
27
28
  - !ruby/object:Gem::Version
28
29
  version: 1.1.0
29
- - !ruby/object:Gem::Dependency
30
- name: slop
31
- requirement: !ruby/object:Gem::Requirement
32
- requirements:
33
- - - "~>"
34
- - !ruby/object:Gem::Version
35
- version: '3.4'
36
- type: :runtime
37
- prerelease: false
38
- version_requirements: !ruby/object:Gem::Requirement
39
- requirements:
40
- - - "~>"
41
- - !ruby/object:Gem::Version
42
- version: '3.4'
43
30
  - !ruby/object:Gem::Dependency
44
31
  name: method_source
45
32
  requirement: !ruby/object:Gem::Requirement
46
33
  requirements:
47
34
  - - "~>"
48
35
  - !ruby/object:Gem::Version
49
- version: 0.8.1
36
+ version: 0.9.0
50
37
  type: :runtime
51
38
  prerelease: false
52
39
  version_requirements: !ruby/object:Gem::Requirement
53
40
  requirements:
54
41
  - - "~>"
55
42
  - !ruby/object:Gem::Version
56
- version: 0.8.1
57
- - !ruby/object:Gem::Dependency
58
- name: bundler
59
- requirement: !ruby/object:Gem::Requirement
60
- requirements:
61
- - - "~>"
62
- - !ruby/object:Gem::Version
63
- version: '1.0'
64
- type: :development
65
- prerelease: false
66
- version_requirements: !ruby/object:Gem::Requirement
67
- requirements:
68
- - - "~>"
69
- - !ruby/object:Gem::Version
70
- version: '1.0'
43
+ version: 0.9.0
71
44
  description: An IRB alternative and runtime developer console
72
45
  email:
73
46
  - jrmair@gmail.com
74
47
  - conrad.irwin@gmail.com
75
48
  - rwfitzge@gmail.com
49
+ - silin@kyrylo.org
76
50
  executables:
77
51
  - pry
78
52
  extensions: []
@@ -83,6 +57,7 @@ files:
83
57
  - README.md
84
58
  - bin/pry
85
59
  - lib/pry.rb
60
+ - lib/pry/basic_object.rb
86
61
  - lib/pry/cli.rb
87
62
  - lib/pry/code.rb
88
63
  - lib/pry/code/code_file.rb
@@ -104,6 +79,7 @@ files:
104
79
  - lib/pry/commands/cd.rb
105
80
  - lib/pry/commands/change_inspector.rb
106
81
  - lib/pry/commands/change_prompt.rb
82
+ - lib/pry/commands/clear_screen.rb
107
83
  - lib/pry/commands/code_collector.rb
108
84
  - lib/pry/commands/disable_pry.rb
109
85
  - lib/pry/commands/disabled_commands.rb
@@ -120,6 +96,9 @@ files:
120
96
  - lib/pry/commands/gem_install.rb
121
97
  - lib/pry/commands/gem_list.rb
122
98
  - lib/pry/commands/gem_open.rb
99
+ - lib/pry/commands/gem_readme.rb
100
+ - lib/pry/commands/gem_search.rb
101
+ - lib/pry/commands/gem_stats.rb
123
102
  - lib/pry/commands/gist.rb
124
103
  - lib/pry/commands/help.rb
125
104
  - lib/pry/commands/hist.rb
@@ -127,7 +106,6 @@ files:
127
106
  - lib/pry/commands/install_command.rb
128
107
  - lib/pry/commands/jump_to.rb
129
108
  - lib/pry/commands/list_inspectors.rb
130
- - lib/pry/commands/list_prompts.rb
131
109
  - lib/pry/commands/ls.rb
132
110
  - lib/pry/commands/ls/constants.rb
133
111
  - lib/pry/commands/ls/formatter.rb
@@ -157,7 +135,6 @@ files:
157
135
  - lib/pry/commands/show_info.rb
158
136
  - lib/pry/commands/show_input.rb
159
137
  - lib/pry/commands/show_source.rb
160
- - lib/pry/commands/simple_prompt.rb
161
138
  - lib/pry/commands/stat.rb
162
139
  - lib/pry/commands/switch_to.rb
163
140
  - lib/pry/commands/toggle_color.rb
@@ -169,18 +146,20 @@ files:
169
146
  - lib/pry/config/behavior.rb
170
147
  - lib/pry/config/convenience.rb
171
148
  - lib/pry/config/default.rb
149
+ - lib/pry/config/memoization.rb
172
150
  - lib/pry/core_extensions.rb
173
151
  - lib/pry/editor.rb
174
152
  - lib/pry/exceptions.rb
153
+ - lib/pry/forwardable.rb
175
154
  - lib/pry/helpers.rb
176
155
  - lib/pry/helpers/base_helpers.rb
177
156
  - lib/pry/helpers/command_helpers.rb
178
157
  - lib/pry/helpers/documentation_helpers.rb
179
158
  - lib/pry/helpers/options_helpers.rb
159
+ - lib/pry/helpers/platform.rb
180
160
  - lib/pry/helpers/table.rb
181
161
  - lib/pry/helpers/text.rb
182
162
  - lib/pry/history.rb
183
- - lib/pry/history_array.rb
184
163
  - lib/pry/hooks.rb
185
164
  - lib/pry/indent.rb
186
165
  - lib/pry/input_completer.rb
@@ -191,22 +170,32 @@ files:
191
170
  - lib/pry/method/disowned.rb
192
171
  - lib/pry/method/patcher.rb
193
172
  - lib/pry/method/weird_method_locator.rb
194
- - lib/pry/module_candidate.rb
195
173
  - lib/pry/object_path.rb
196
174
  - lib/pry/output.rb
197
175
  - lib/pry/pager.rb
176
+ - lib/pry/platform.rb
198
177
  - lib/pry/plugins.rb
199
178
  - lib/pry/prompt.rb
200
179
  - lib/pry/pry_class.rb
201
180
  - lib/pry/pry_instance.rb
202
- - lib/pry/rbx_path.rb
203
181
  - lib/pry/repl.rb
204
182
  - lib/pry/repl_file_loader.rb
183
+ - lib/pry/ring.rb
205
184
  - lib/pry/rubygem.rb
185
+ - lib/pry/slop.rb
186
+ - lib/pry/slop/LICENSE
187
+ - lib/pry/slop/commands.rb
188
+ - lib/pry/slop/option.rb
206
189
  - lib/pry/terminal.rb
207
- - lib/pry/test/helper.rb
190
+ - lib/pry/testable.rb
191
+ - lib/pry/testable/evalable.rb
192
+ - lib/pry/testable/mockable.rb
193
+ - lib/pry/testable/pry_tester.rb
194
+ - lib/pry/testable/utility.rb
195
+ - lib/pry/testable/variables.rb
208
196
  - lib/pry/version.rb
209
197
  - lib/pry/wrapped_module.rb
198
+ - lib/pry/wrapped_module/candidate.rb
210
199
  homepage: http://pryrepl.org
211
200
  licenses:
212
201
  - MIT
@@ -219,7 +208,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
219
208
  requirements:
220
209
  - - ">="
221
210
  - !ruby/object:Gem::Version
222
- version: '0'
211
+ version: 1.9.3
223
212
  required_rubygems_version: !ruby/object:Gem::Requirement
224
213
  requirements:
225
214
  - - ">="
@@ -227,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
216
  version: '0'
228
217
  requirements: []
229
218
  rubyforge_project:
230
- rubygems_version: 2.5.1
219
+ rubygems_version: 2.6.13
231
220
  signing_key:
232
221
  specification_version: 4
233
222
  summary: An IRB alternative and runtime developer console
@@ -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
@@ -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
- # Returns [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
data/lib/pry/rbx_path.rb DELETED
@@ -1,22 +0,0 @@
1
- class Pry
2
- module RbxPath
3
- module_function
4
- def is_core_path?(path)
5
- Pry::Helpers::BaseHelpers.rbx? && (path.start_with?("kernel") || path.start_with?("lib")) && File.exist?(convert_path_to_full(path))
6
- end
7
-
8
- def convert_path_to_full(path)
9
- if path.start_with?("kernel")
10
- File.join File.dirname(Rubinius::KERNEL_PATH), path
11
- elsif path.start_with?("lib")
12
- File.join File.dirname(Rubinius::LIB_PATH), path
13
- else
14
- path
15
- end
16
- end
17
-
18
- def rvm_ruby?(path)
19
- !!(path =~ /\.rvm/)
20
- end
21
- end
22
- end
@@ -1,170 +0,0 @@
1
- require 'pry'
2
-
3
- # in case the tests call reset_defaults, ensure we reset them to
4
- # amended (test friendly) values
5
- class << Pry
6
- alias_method :orig_reset_defaults, :reset_defaults
7
- def reset_defaults
8
- orig_reset_defaults
9
-
10
- Pry.config.color = false
11
- Pry.config.pager = false
12
- Pry.config.should_load_rc = false
13
- Pry.config.should_load_local_rc= false
14
- Pry.config.should_load_plugins = false
15
- Pry.config.history.should_load = false
16
- Pry.config.history.should_save = false
17
- Pry.config.correct_indent = false
18
- Pry.config.hooks = Pry::Hooks.new
19
- Pry.config.collision_warning = false
20
- end
21
- end
22
- Pry.reset_defaults
23
-
24
- # A global space for storing temporary state during tests.
25
-
26
- module PryTestHelpers
27
-
28
- module_function
29
-
30
- # inject a variable into a binding
31
- def inject_var(name, value, b)
32
- Pry.current[:pry_local] = value
33
- b.eval("#{name} = ::Pry.current[:pry_local]")
34
- ensure
35
- Pry.current[:pry_local] = nil
36
- end
37
-
38
- def constant_scope(*names)
39
- names.each do |name|
40
- Object.remove_const name if Object.const_defined?(name)
41
- end
42
-
43
- yield
44
- ensure
45
- names.each do |name|
46
- Object.remove_const name if Object.const_defined?(name)
47
- end
48
- end
49
-
50
- # Open a temp file and yield it to the block, closing it after
51
- # @return [String] The path of the temp file
52
- def temp_file(ext='.rb')
53
- file = Tempfile.new(['pry', ext])
54
- yield file
55
- ensure
56
- file.close(true) if file
57
- File.unlink("#{file.path}c") if File.exists?("#{file.path}c") # rbx
58
- end
59
-
60
- def unindent(*args)
61
- Pry::Helpers::CommandHelpers.unindent(*args)
62
- end
63
-
64
- def mock_command(cmd, args=[], opts={})
65
- output = StringIO.new
66
- pry = Pry.new(output: output)
67
- ret = cmd.new(opts.merge(pry_instance: pry, :output => output)).call_safely(*args)
68
- Struct.new(:output, :return).new(output.string, ret)
69
- end
70
-
71
- def mock_exception(*mock_backtrace)
72
- StandardError.new.tap do |e|
73
- e.define_singleton_method(:backtrace) { mock_backtrace }
74
- end
75
- end
76
- end
77
-
78
- def pry_tester(*args, &block)
79
- if args.length == 0 || args[0].is_a?(Hash)
80
- args.unshift(Pry.toplevel_binding)
81
- end
82
-
83
- PryTester.new(*args).tap do |t|
84
- (class << t; self; end).class_eval(&block) if block
85
- end
86
- end
87
-
88
- def pry_eval(*eval_strs)
89
- if eval_strs.first.is_a? String
90
- binding = Pry.toplevel_binding
91
- else
92
- binding = Pry.binding_for(eval_strs.shift)
93
- end
94
-
95
- pry_tester(binding).eval(*eval_strs)
96
- end
97
-
98
- class PryTester
99
- extend Forwardable
100
-
101
- attr_reader :pry, :out
102
-
103
- def_delegators :@pry, :eval_string, :eval_string=
104
-
105
- def initialize(target = TOPLEVEL_BINDING, options = {})
106
- @pry = Pry.new(options.merge(:target => target))
107
- @history = options[:history]
108
-
109
- @pry.inject_sticky_locals!
110
- reset_output
111
- end
112
-
113
- def eval(*strs)
114
- reset_output
115
- result = nil
116
-
117
- strs.flatten.each do |str|
118
- str = "#{str.strip}\n"
119
- @history.push str if @history
120
-
121
- if @pry.process_command(str)
122
- result = last_command_result_or_output
123
- else
124
- result = @pry.evaluate_ruby(str)
125
- end
126
- end
127
-
128
- result
129
- end
130
-
131
- def push(*lines)
132
- Array(lines).flatten.each do |line|
133
- @pry.eval(line)
134
- end
135
- end
136
-
137
- def push_binding(context)
138
- @pry.push_binding context
139
- end
140
-
141
- def last_output
142
- @out.string if @out
143
- end
144
-
145
- def process_command(command_str)
146
- @pry.process_command(command_str) or raise "Not a valid command"
147
- last_command_result_or_output
148
- end
149
-
150
- def last_command_result
151
- result = Pry.current[:pry_cmd_result]
152
- result.retval if result
153
- end
154
-
155
- protected
156
-
157
- def last_command_result_or_output
158
- result = last_command_result
159
- if result != Pry::Command::VOID_VALUE
160
- result
161
- else
162
- last_output
163
- end
164
- end
165
-
166
- def reset_output
167
- @out = StringIO.new
168
- @pry.output = @out
169
- end
170
- end