pry 0.10.2-i386-mingw32 → 1.0.0.pre1-i386-mingw32

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.
Files changed (189) hide show
  1. data/.document +2 -0
  2. data/.gitignore +16 -0
  3. data/.travis.yml +21 -0
  4. data/.yardopts +3 -0
  5. data/CHANGELOG +503 -0
  6. data/CONTRIBUTORS +55 -0
  7. data/Gemfile +9 -0
  8. data/Guardfile +62 -0
  9. data/LICENSE +2 -2
  10. data/{README.md → README.markdown} +31 -37
  11. data/Rakefile +144 -0
  12. data/TODO +117 -0
  13. data/lib/pry.rb +146 -33
  14. data/lib/pry/cli.rb +13 -35
  15. data/lib/pry/code.rb +63 -24
  16. data/lib/pry/code/loc.rb +2 -2
  17. data/lib/pry/code_object.rb +21 -40
  18. data/lib/pry/command.rb +6 -9
  19. data/lib/pry/command_set.rb +37 -80
  20. data/lib/pry/commands.rb +1 -1
  21. data/lib/pry/commands/amend_line.rb +1 -1
  22. data/lib/pry/commands/bang.rb +1 -1
  23. data/lib/pry/commands/cat.rb +2 -11
  24. data/lib/pry/commands/cat/abstract_formatter.rb +1 -1
  25. data/lib/pry/commands/cat/exception_formatter.rb +7 -6
  26. data/lib/pry/commands/cat/file_formatter.rb +32 -15
  27. data/lib/pry/commands/cat/input_expression_formatter.rb +1 -1
  28. data/lib/pry/commands/cd.rb +3 -14
  29. data/lib/pry/commands/code_collector.rb +4 -4
  30. data/lib/pry/commands/easter_eggs.rb +3 -3
  31. data/lib/pry/commands/edit.rb +22 -10
  32. data/lib/pry/commands/edit/exception_patcher.rb +1 -1
  33. data/lib/pry/commands/edit/file_and_line_locator.rb +2 -0
  34. data/lib/pry/{method/patcher.rb → commands/edit/method_patcher.rb} +37 -40
  35. data/lib/pry/commands/find_method.rb +22 -16
  36. data/lib/pry/commands/gem_install.rb +2 -5
  37. data/lib/pry/commands/gem_open.rb +1 -1
  38. data/lib/pry/commands/gist.rb +11 -10
  39. data/lib/pry/commands/help.rb +14 -14
  40. data/lib/pry/commands/hist.rb +5 -24
  41. data/lib/pry/commands/ls.rb +287 -56
  42. data/lib/pry/commands/play.rb +10 -44
  43. data/lib/pry/commands/pry_backtrace.rb +2 -1
  44. data/lib/pry/commands/raise_up.rb +1 -1
  45. data/lib/pry/commands/reload_code.rb +15 -31
  46. data/lib/pry/commands/ri.rb +3 -7
  47. data/lib/pry/commands/shell_command.rb +12 -17
  48. data/lib/pry/commands/shell_mode.rb +2 -2
  49. data/lib/pry/commands/show_doc.rb +0 -5
  50. data/lib/pry/commands/show_info.rb +10 -11
  51. data/lib/pry/commands/show_source.rb +3 -15
  52. data/lib/pry/commands/simple_prompt.rb +1 -1
  53. data/lib/pry/commands/toggle_color.rb +4 -8
  54. data/lib/pry/commands/whereami.rb +10 -18
  55. data/lib/pry/completion.rb +293 -0
  56. data/lib/pry/config.rb +233 -20
  57. data/lib/pry/core_extensions.rb +19 -29
  58. data/lib/pry/custom_completions.rb +6 -0
  59. data/lib/pry/editor.rb +103 -109
  60. data/lib/pry/helpers/base_helpers.rb +109 -22
  61. data/lib/pry/helpers/command_helpers.rb +8 -10
  62. data/lib/pry/helpers/documentation_helpers.rb +2 -1
  63. data/lib/pry/helpers/text.rb +5 -4
  64. data/lib/pry/history.rb +10 -21
  65. data/lib/pry/history_array.rb +0 -5
  66. data/lib/pry/hooks.rb +29 -9
  67. data/lib/pry/indent.rb +10 -5
  68. data/lib/pry/method.rb +86 -81
  69. data/lib/pry/method/weird_method_locator.rb +2 -4
  70. data/lib/pry/module_candidate.rb +14 -5
  71. data/lib/pry/pager.rb +48 -193
  72. data/lib/pry/plugins.rb +2 -2
  73. data/lib/pry/pry_class.rb +193 -104
  74. data/lib/pry/pry_instance.rb +154 -152
  75. data/lib/pry/rbx_method.rb +13 -0
  76. data/lib/pry/rbx_path.rb +1 -1
  77. data/lib/pry/repl.rb +14 -17
  78. data/lib/pry/repl_file_loader.rb +3 -8
  79. data/lib/pry/rubygem.rb +3 -3
  80. data/lib/pry/terminal.rb +3 -4
  81. data/lib/pry/test/helper.rb +11 -6
  82. data/lib/pry/version.rb +1 -1
  83. data/lib/pry/wrapped_module.rb +56 -49
  84. data/man/pry.1 +195 -0
  85. data/man/pry.1.html +204 -0
  86. data/man/pry.1.ronn +141 -0
  87. data/pry.gemspec +31 -0
  88. data/spec/Procfile +3 -0
  89. data/spec/cli_spec.rb +78 -0
  90. data/spec/code_object_spec.rb +277 -0
  91. data/spec/code_spec.rb +219 -0
  92. data/spec/command_helpers_spec.rb +29 -0
  93. data/spec/command_integration_spec.rb +562 -0
  94. data/spec/command_set_spec.rb +627 -0
  95. data/spec/command_spec.rb +821 -0
  96. data/spec/commands/amend_line_spec.rb +247 -0
  97. data/spec/commands/bang_spec.rb +18 -0
  98. data/spec/commands/cat_spec.rb +164 -0
  99. data/spec/commands/cd_spec.rb +250 -0
  100. data/spec/commands/disable_pry_spec.rb +25 -0
  101. data/spec/commands/edit_spec.rb +725 -0
  102. data/spec/commands/exit_all_spec.rb +27 -0
  103. data/spec/commands/exit_program_spec.rb +19 -0
  104. data/spec/commands/exit_spec.rb +28 -0
  105. data/spec/commands/find_method_spec.rb +70 -0
  106. data/spec/commands/gem_list_spec.rb +26 -0
  107. data/spec/commands/gist_spec.rb +79 -0
  108. data/spec/commands/help_spec.rb +56 -0
  109. data/spec/commands/hist_spec.rb +172 -0
  110. data/spec/commands/jump_to_spec.rb +15 -0
  111. data/spec/commands/ls_spec.rb +189 -0
  112. data/spec/commands/play_spec.rb +136 -0
  113. data/spec/commands/raise_up_spec.rb +56 -0
  114. data/spec/commands/save_file_spec.rb +177 -0
  115. data/spec/commands/show_doc_spec.rb +488 -0
  116. data/spec/commands/show_input_spec.rb +17 -0
  117. data/spec/commands/show_source_spec.rb +760 -0
  118. data/spec/commands/whereami_spec.rb +203 -0
  119. data/spec/completion_spec.rb +221 -0
  120. data/spec/control_d_handler_spec.rb +62 -0
  121. data/spec/documentation_helper_spec.rb +73 -0
  122. data/spec/editor_spec.rb +79 -0
  123. data/spec/exception_whitelist_spec.rb +21 -0
  124. data/spec/fixtures/candidate_helper1.rb +11 -0
  125. data/spec/fixtures/candidate_helper2.rb +8 -0
  126. data/spec/fixtures/example.erb +5 -0
  127. data/spec/fixtures/example_nesting.rb +33 -0
  128. data/spec/fixtures/show_source_doc_examples.rb +15 -0
  129. data/spec/fixtures/testlinkrc +2 -0
  130. data/spec/fixtures/testrc +2 -0
  131. data/spec/fixtures/testrcbad +2 -0
  132. data/spec/fixtures/whereami_helper.rb +6 -0
  133. data/spec/helper.rb +35 -0
  134. data/spec/helpers/bacon.rb +86 -0
  135. data/spec/helpers/mock_pry.rb +44 -0
  136. data/spec/helpers/repl_tester.rb +112 -0
  137. data/spec/helpers/table_spec.rb +105 -0
  138. data/spec/history_array_spec.rb +67 -0
  139. data/spec/hooks_spec.rb +522 -0
  140. data/spec/indent_spec.rb +301 -0
  141. data/spec/method_spec.rb +482 -0
  142. data/spec/prompt_spec.rb +61 -0
  143. data/spec/pry_defaults_spec.rb +420 -0
  144. data/spec/pry_history_spec.rb +69 -0
  145. data/spec/pry_output_spec.rb +95 -0
  146. data/spec/pry_repl_spec.rb +86 -0
  147. data/spec/pry_spec.rb +394 -0
  148. data/spec/pryrc_spec.rb +97 -0
  149. data/spec/run_command_spec.rb +25 -0
  150. data/spec/sticky_locals_spec.rb +147 -0
  151. data/spec/syntax_checking_spec.rb +81 -0
  152. data/spec/wrapped_module_spec.rb +261 -0
  153. data/wiki/Customizing-pry.md +397 -0
  154. data/wiki/Home.md +4 -0
  155. metadata +272 -61
  156. checksums.yaml +0 -7
  157. data/CHANGELOG.md +0 -714
  158. data/lib/pry/code/code_file.rb +0 -103
  159. data/lib/pry/color_printer.rb +0 -55
  160. data/lib/pry/commands/change_inspector.rb +0 -27
  161. data/lib/pry/commands/change_prompt.rb +0 -26
  162. data/lib/pry/commands/list_inspectors.rb +0 -35
  163. data/lib/pry/commands/list_prompts.rb +0 -35
  164. data/lib/pry/commands/ls/constants.rb +0 -47
  165. data/lib/pry/commands/ls/formatter.rb +0 -49
  166. data/lib/pry/commands/ls/globals.rb +0 -48
  167. data/lib/pry/commands/ls/grep.rb +0 -21
  168. data/lib/pry/commands/ls/instance_vars.rb +0 -39
  169. data/lib/pry/commands/ls/interrogatable.rb +0 -18
  170. data/lib/pry/commands/ls/jruby_hacks.rb +0 -49
  171. data/lib/pry/commands/ls/local_names.rb +0 -35
  172. data/lib/pry/commands/ls/local_vars.rb +0 -39
  173. data/lib/pry/commands/ls/ls_entity.rb +0 -70
  174. data/lib/pry/commands/ls/methods.rb +0 -57
  175. data/lib/pry/commands/ls/methods_helper.rb +0 -46
  176. data/lib/pry/commands/ls/self_methods.rb +0 -32
  177. data/lib/pry/commands/watch_expression.rb +0 -105
  178. data/lib/pry/commands/watch_expression/expression.rb +0 -38
  179. data/lib/pry/config/behavior.rb +0 -139
  180. data/lib/pry/config/convenience.rb +0 -25
  181. data/lib/pry/config/default.rb +0 -161
  182. data/lib/pry/exceptions.rb +0 -78
  183. data/lib/pry/input_completer.rb +0 -242
  184. data/lib/pry/input_lock.rb +0 -132
  185. data/lib/pry/inspector.rb +0 -27
  186. data/lib/pry/last_exception.rb +0 -61
  187. data/lib/pry/object_path.rb +0 -82
  188. data/lib/pry/output.rb +0 -50
  189. data/lib/pry/prompt.rb +0 -26
@@ -1,132 +0,0 @@
1
- require 'thread'
2
-
3
- class Pry
4
- # There is one InputLock per input (such as STDIN) as two REPLs on the same
5
- # input makes things delirious. InputLock serializes accesses to the input so
6
- # that threads to not conflict with each other. The latest thread to request
7
- # ownership of the input wins.
8
- class InputLock
9
- class Interrupt < Exception; end
10
-
11
- class << self
12
- attr_accessor :input_locks
13
- attr_accessor :global_lock
14
- end
15
-
16
- self.input_locks = {}
17
- self.global_lock = Mutex.new
18
-
19
- def self.for(input)
20
- # XXX This method leaks memory, as we never unregister an input once we
21
- # are done with it. Fortunately, the leak is tiny (or so we hope). In
22
- # usual scenarios, we would leak the StringIO that is passed to be
23
- # evaluated from the command line.
24
- global_lock.synchronize do
25
- input_locks[input] ||= Pry::InputLock.new
26
- end
27
- end
28
-
29
- def initialize
30
- @mutex = Mutex.new
31
- @cond = ConditionVariable.new
32
- @owners = []
33
- @interruptible = false
34
- end
35
-
36
- # Adds ourselves to the ownership list. The last one in the list may access
37
- # the input through interruptible_region().
38
- def __with_ownership(&block)
39
- @mutex.synchronize do
40
- # Three cases:
41
- # 1) There are no owners, in this case we are good to go.
42
- # 2) The current owner of the input is not reading the input (it might
43
- # just be evaluating some ruby that the user typed).
44
- # The current owner will figure out that it cannot go back to reading
45
- # the input since we are adding ourselves to the @owners list, which
46
- # in turns makes us the current owner.
47
- # 3) The owner of the input is in the interruptible region, reading from
48
- # the input. It's safe to send an Interrupt exception to interrupt
49
- # the owner. It will then proceed like in case 2).
50
- # We wait until the owner sets the interruptible flag back
51
- # to false, meaning that he's out of the interruptible region.
52
- # Note that the owner may receive multiple interrupts since, but that
53
- # should be okay (and trying to avoid it is futile anyway).
54
- while @interruptible
55
- @owners.last.raise Interrupt
56
- @cond.wait(@mutex)
57
- end
58
- @owners << Thread.current
59
- end
60
-
61
- block.call
62
-
63
- ensure
64
- @mutex.synchronize do
65
- # We are releasing any desire to have the input ownership by removing
66
- # ourselves from the list.
67
- @owners.delete(Thread.current)
68
-
69
- # We need to wake up the thread at the end of the @owners list, but
70
- # sadly Ruby doesn't allow us to choose which one we wake up, so we wake
71
- # them all up.
72
- @cond.broadcast
73
- end
74
- end
75
-
76
- def with_ownership(&block)
77
- # If we are in a nested with_ownership() call (nested pry context), we do nothing.
78
- nested = @mutex.synchronize { @owners.include?(Thread.current) }
79
- nested ? block.call : __with_ownership(&block)
80
- end
81
-
82
- def enter_interruptible_region
83
- @mutex.synchronize do
84
- # We patiently wait until we are the owner. This may happen as another
85
- # thread calls with_ownership() because of a binding.pry happening in
86
- # another thread.
87
- @cond.wait(@mutex) until @owners.last == Thread.current
88
-
89
- # We are the legitimate owner of the input. We mark ourselves as
90
- # interruptible, so other threads can send us an Interrupt exception
91
- # while we are blocking from reading the input.
92
- @interruptible = true
93
- end
94
- end
95
-
96
- def leave_interruptible_region
97
- @mutex.synchronize do
98
- # We check if we are still the owner, because we could have received an
99
- # Interrupt right after the following @cond.broadcast, making us retry.
100
- @interruptible = false if @owners.last == Thread.current
101
- @cond.broadcast
102
- end
103
- rescue Interrupt
104
- # We need to guard against a spurious interrupt delivered while we are
105
- # trying to acquire the lock (the rescue block is no longer in our scope).
106
- retry
107
- end
108
-
109
- def interruptible_region(&block)
110
- enter_interruptible_region
111
-
112
- # XXX Note that there is a chance that we get the interrupt right after
113
- # the readline call succeeded, but we'll never know, and we will retry the
114
- # call, discarding that piece of input.
115
- block.call
116
-
117
- rescue Interrupt
118
- # We were asked to back off. The one requesting the interrupt will be
119
- # waiting on the conditional for the interruptible flag to change to false.
120
- # Note that there can be some inefficiency, as we could immediately
121
- # succeed in enter_interruptible_region(), even before the one requesting
122
- # the ownership has the chance to register itself as an owner.
123
- # To mitigate the issue, we sleep a little bit.
124
- leave_interruptible_region
125
- sleep 0.01
126
- retry
127
-
128
- ensure
129
- leave_interruptible_region
130
- end
131
- end
132
- end
@@ -1,27 +0,0 @@
1
- class Pry::Inspector
2
- MAP = {
3
- "default" => {
4
- value: Pry::DEFAULT_PRINT,
5
- description: <<-DESCRIPTION.each_line.map(&:lstrip!)
6
- The default Pry inspector. It has paging and color support, and uses
7
- pretty_inspect when printing an object.
8
- DESCRIPTION
9
- },
10
-
11
- "simple" => {
12
- value: Pry::SIMPLE_PRINT,
13
- description: <<-DESCRIPTION.each_line.map(&:lstrip)
14
- A simple inspector that uses #puts and #inspect when printing an
15
- object. It has no pager, color, or pretty_inspect support.
16
- DESCRIPTION
17
- },
18
-
19
- "clipped" => {
20
- value: Pry::CLIPPED_PRINT,
21
- description: <<-DESCRIPTION.each_line.map(&:lstrip)
22
- The clipped inspector has the same features as the 'simple' inspector
23
- but prints large objects as a smaller string.
24
- DESCRIPTION
25
- }
26
- }
27
- end
@@ -1,61 +0,0 @@
1
- #
2
- # {Pry::LastException} is a proxy class who wraps an Exception object for
3
- # {Pry#last_exception}. it extends the exception object with methods that
4
- # help pry commands be useful.
5
- #
6
- # the original exception object is not modified and method calls are forwarded
7
- # to the wrapped exception object.
8
- #
9
- class Pry::LastException < BasicObject
10
- attr_accessor :bt_index
11
-
12
- def initialize(e)
13
- @e = e
14
- @bt_index = 0
15
- @file, @line = bt_source_location_for(0)
16
- end
17
-
18
- def method_missing(name, *args, &block)
19
- if @e.respond_to?(name)
20
- @e.public_send(name, *args, &block)
21
- else
22
- super
23
- end
24
- end
25
-
26
- def respond_to_missing?(name, include_private = false)
27
- @e.respond_to?(name)
28
- end
29
-
30
- #
31
- # @return [String]
32
- # returns the path to a file for the current backtrace. see {#bt_index}.
33
- #
34
- def file
35
- @file
36
- end
37
-
38
- #
39
- # @return [Fixnum]
40
- # returns the line for the current backtrace. see {#bt_index}.
41
- #
42
- def line
43
- @line
44
- end
45
-
46
- # @return [Exception]
47
- # returns the wrapped exception
48
- #
49
- def wrapped_exception
50
- @e
51
- end
52
-
53
- def bt_source_location_for(index)
54
- backtrace[index] =~ /(.*):(\d+)/
55
- [$1, $2.to_i]
56
- end
57
-
58
- def inc_bt_index
59
- @bt_index = (@bt_index + 1) % backtrace.size
60
- end
61
- end
@@ -1,82 +0,0 @@
1
- class Pry
2
- # `ObjectPath` implements the resolution of "object paths", which are strings
3
- # that are similar to filesystem paths but meant for traversing Ruby objects.
4
- # Examples of valid object paths include:
5
- #
6
- # x
7
- # @foo/@bar
8
- # "string"/upcase
9
- # Pry/Method
10
- #
11
- # Object paths are mostly relevant in the context of the `cd` command.
12
- # @see https://github.com/pry/pry/wiki/State-navigation
13
- class ObjectPath
14
- SPECIAL_TERMS = ["", "::", ".", ".."]
15
-
16
- # @param [String] path_string The object path expressed as a string.
17
- # @param [Array<Binding>] current_stack The current state of the binding
18
- # stack.
19
- def initialize(path_string, current_stack)
20
- @path_string = path_string
21
- @current_stack = current_stack
22
- end
23
-
24
- # @return [Array<Binding>] a new stack resulting from applying the given
25
- # path to the current stack.
26
- def resolve
27
- scanner = StringScanner.new(@path_string.strip)
28
- stack = @current_stack.dup
29
-
30
- begin
31
- next_segment = ""
32
-
33
- loop do
34
- # Scan for as long as we don't see a slash
35
- next_segment << scanner.scan(/[^\/]*/)
36
-
37
- if complete?(next_segment) || scanner.eos?
38
- scanner.getch # consume the slash
39
- break
40
- else
41
- next_segment << scanner.getch # append the slash
42
- end
43
- end
44
-
45
- case next_segment.chomp
46
- when ""
47
- stack = [stack.first]
48
- when "::"
49
- stack.push(TOPLEVEL_BINDING)
50
- when "."
51
- next
52
- when ".."
53
- stack.pop unless stack.size == 1
54
- else
55
- stack.push(Pry.binding_for(stack.last.eval(next_segment)))
56
- end
57
- rescue RescuableException => e
58
- return handle_failure(next_segment, e)
59
- end until scanner.eos?
60
-
61
- stack
62
- end
63
-
64
- private
65
-
66
- def complete?(segment)
67
- SPECIAL_TERMS.include?(segment) || Pry::Code.complete_expression?(segment)
68
- end
69
-
70
- def handle_failure(context, err)
71
- msg = [
72
- "Bad object path: #{@path_string.inspect}",
73
- "Failed trying to resolve: #{context.inspect}",
74
- "Exception: #{err.inspect}"
75
- ].join("\n")
76
-
77
- raise CommandError.new(msg).tap { |e|
78
- e.set_backtrace err.backtrace
79
- }
80
- end
81
- end
82
- end
@@ -1,50 +0,0 @@
1
- class Pry
2
- class Output
3
- attr_reader :_pry_
4
-
5
- def initialize(_pry_)
6
- @_pry_ = _pry_
7
- end
8
-
9
- def puts(*objs)
10
- return print "\n" if objs.empty?
11
-
12
- objs.each do |obj|
13
- if ary = Array.try_convert(obj)
14
- puts(*ary)
15
- else
16
- print "#{obj.to_s.chomp}\n"
17
- end
18
- end
19
-
20
- nil
21
- end
22
-
23
- def print(*objs)
24
- objs.each do |obj|
25
- _pry_.config.output.print decolorize_maybe(obj.to_s)
26
- end
27
-
28
- nil
29
- end
30
- alias << print
31
- alias write print
32
-
33
- # If _pry_.config.color is currently false, removes ansi escapes from the string.
34
- def decolorize_maybe(str)
35
- if _pry_.config.color
36
- str
37
- else
38
- Helpers::Text.strip_color str
39
- end
40
- end
41
-
42
- def method_missing(name, *args, &block)
43
- _pry_.config.output.send(name, *args, &block)
44
- end
45
-
46
- def respond_to_missing?(*a)
47
- _pry_.config.respond_to?(*a)
48
- end
49
- end
50
- end
@@ -1,26 +0,0 @@
1
- class Pry::Prompt
2
- MAP = {
3
- "default" => {
4
- value: Pry::DEFAULT_PROMPT,
5
- description: "The default Pry prompt. Includes information about the\n" \
6
- "current expression number, evaluation context, and nesting\n" \
7
- "level, plus a reminder that you're using Pry."
8
- },
9
-
10
- "simple" => {
11
- value: Pry::SIMPLE_PROMPT,
12
- description: "A simple '>>'."
13
- },
14
-
15
- "nav" => {
16
- value: Pry::NAV_PROMPT,
17
- description: "A prompt that displays the binding stack as a path and\n" \
18
- "includes information about _in_ and _out_."
19
- },
20
-
21
- "none" => {
22
- value: Pry::NO_PROMPT,
23
- description: "Wave goodbye to the Pry prompt."
24
- }
25
- }
26
- end