Class: Pry::Command::CodeCollector
- Includes:
- Helpers::CommandHelpers
- Defined in:
- lib/pry/commands/code_collector.rb
Class Attribute Summary collapse
-
.input_expression_ranges ⇒ Object
Returns the value of attribute input_expression_ranges.
-
.output_result_ranges ⇒ Object
Returns the value of attribute output_result_ranges.
Instance Attribute Summary collapse
-
#_pry_ ⇒ Object
readonly
Returns the value of attribute pry.
-
#args ⇒ Object
readonly
Returns the value of attribute args.
-
#file ⇒ Object
The name of the explicitly given file (if any).
-
#opts ⇒ Object
readonly
Returns the value of attribute opts.
Class Method Summary collapse
-
.inject_options(opt) ⇒ Object
Add the ‘–lines`, `-o`, `-i`, `-s`, `-d` options.
Instance Method Summary collapse
-
#code_object ⇒ Pry::WrappedModule, ...
The code object.
-
#content ⇒ String
The content (i.e code/docs) for the selected object.
-
#initialize(args, opts, _pry_) ⇒ CodeCollector
constructor
A new instance of CodeCollector.
-
#line_range ⇒ Object
The line range passed to ‘–lines`, converted to a 0-indexed range.
-
#obj_name ⇒ Object
Name of the object argument.
-
#pry_input_content ⇒ String
The selected ‘pry.input_array` as a string, as specified by the `-i` switch.
-
#pry_output_content ⇒ String
The selected ‘pry.output_array` as a string, as specified by the `-o` switch.
-
#restrict_to_lines(content, range) ⇒ String
Given a string and a range, return the ‘range` lines of that string.
Methods included from Helpers::CommandHelpers
absolute_index_number, absolute_index_range, command_error, get_method_or_raise, internal_binding?, one_index_number, one_index_range, one_index_range_or_number, restrict_to_lines, set_file_and_dir_locals, temp_file, unindent
Methods included from Helpers::OptionsHelpers
Constructor Details
#initialize(args, opts, _pry_) ⇒ CodeCollector
Returns a new instance of CodeCollector.
20 21 22 23 24 |
# File 'lib/pry/commands/code_collector.rb', line 20 def initialize(args, opts, _pry_) @args = args @opts = opts @_pry_ = _pry_ end |
Class Attribute Details
.input_expression_ranges ⇒ Object
Returns the value of attribute input_expression_ranges.
13 14 15 |
# File 'lib/pry/commands/code_collector.rb', line 13 def input_expression_ranges @input_expression_ranges end |
.output_result_ranges ⇒ Object
Returns the value of attribute output_result_ranges.
14 15 16 |
# File 'lib/pry/commands/code_collector.rb', line 14 def output_result_ranges @output_result_ranges end |
Instance Attribute Details
#_pry_ ⇒ Object (readonly)
Returns the value of attribute pry.
7 8 9 |
# File 'lib/pry/commands/code_collector.rb', line 7 def _pry_ @_pry_ end |
#args ⇒ Object (readonly)
Returns the value of attribute args.
5 6 7 |
# File 'lib/pry/commands/code_collector.rb', line 5 def args @args end |
#file ⇒ Object
The name of the explicitly given file (if any).
10 11 12 |
# File 'lib/pry/commands/code_collector.rb', line 10 def file @file end |
#opts ⇒ Object (readonly)
Returns the value of attribute opts.
6 7 8 |
# File 'lib/pry/commands/code_collector.rb', line 6 def opts @opts end |
Class Method Details
.inject_options(opt) ⇒ Object
Add the ‘–lines`, `-o`, `-i`, `-s`, `-d` options.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/pry/commands/code_collector.rb', line 27 def self.(opt) @input_expression_ranges = [] @output_result_ranges = [] opt.on :l, :lines, "Restrict to a subset of lines. Takes a line number or range", :optional_argument => true, :as => Range, :default => 1..-1 opt.on :o, :out, "Select lines from Pry's output result history. Takes an index or range", :optional_argument => true, :as => Range, :default => -5..-1 do |r| output_result_ranges << (r || (-5..-1)) end opt.on :i, :in, "Select lines from Pry's input expression history. Takes an index or range", :optional_argument => true, :as => Range, :default => -5..-1 do |r| input_expression_ranges << (r || (-5..-1)) end opt.on :s, :super, "Select the 'super' method. Can be repeated to traverse the ancestors", :as => :count opt.on :d, :doc, "Select lines from the code object's documentation" end |
Instance Method Details
#code_object ⇒ Pry::WrappedModule, ...
The code object
74 75 76 |
# File 'lib/pry/commands/code_collector.rb', line 74 def code_object Pry::CodeObject.lookup(obj_name, _pry_, :super => opts[:super]) end |
#content ⇒ String
The content (i.e code/docs) for the selected object. If the user provided a bare code object, it returns the source. If the user provided the ‘-i` or `-o` switches, it returns the selected input/output lines joined as a string. If the user used `-d CODE_OBJECT` it returns the docs for that code object.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/pry/commands/code_collector.rb', line 53 def content return @content if @content raise CommandError, "Only one of --out, --in, --doc and CODE_OBJECT may be specified." if bad_option_combination? content = case when opts.present?(:o) pry_output_content when opts.present?(:i) pry_input_content when opts.present?(:d) code_object_doc else code_object_source_or_file end @content ||= restrict_to_lines(content, line_range) end |
#line_range ⇒ Object
The line range passed to ‘–lines`, converted to a 0-indexed range.
107 108 109 |
# File 'lib/pry/commands/code_collector.rb', line 107 def line_range opts.present?(:lines) ? one_index_range_or_number(opts[:lines]) : 0..-1 end |
#obj_name ⇒ Object
Name of the object argument
112 113 114 |
# File 'lib/pry/commands/code_collector.rb', line 112 def obj_name @obj_name ||= args.empty? ? "" : args.join(" ") end |
#pry_input_content ⇒ String
The selected ‘pry.input_array` as a string, as specified by the `-i` switch.
102 103 104 |
# File 'lib/pry/commands/code_collector.rb', line 102 def pry_input_content pry_array_content_as_string(_pry_.input_array, self.class.input_expression_ranges) { |v| v } end |
#pry_output_content ⇒ String
The selected ‘pry.output_array` as a string, as specified by the `-o` switch.
92 93 94 95 96 |
# File 'lib/pry/commands/code_collector.rb', line 92 def pry_output_content pry_array_content_as_string(_pry_.output_array, self.class.output_result_ranges) do |v| _pry_.config.gist.inspecter.call(v) end end |
#restrict_to_lines(content, range) ⇒ String
Given a string and a range, return the ‘range` lines of that string.
84 85 86 |
# File 'lib/pry/commands/code_collector.rb', line 84 def restrict_to_lines(content, range) Array(content.lines.to_a[range]).join end |