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
-
#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.
-
#pry_instance ⇒ Object
readonly
Returns the value of attribute pry_instance.
Class Method Summary collapse
-
.inject_options(opt) ⇒ Object
Add the
--lines
,-o
,-i
,-s
,-d
options.
Instance Method Summary collapse
- #bad_option_combination? ⇒ Boolean private
-
#code_object ⇒ Pry::WrappedModule, ...
The code object.
- #code_object_doc ⇒ Object private
- #code_object_source_or_file ⇒ Object private
-
#content ⇒ String
The content (i.e code/docs) for the selected object.
- #convert_to_range(range) ⇒ Object private
- #could_not_locate(name) ⇒ Object private
- #file_content ⇒ Object private
-
#initialize(args, opts, pry_instance) ⇒ 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_array_content_as_string(array, ranges) ⇒ Object private
-
#pry_input_content ⇒ String
The selected
pry_instance.input_ring
as a string, as specified by the-i
switch. -
#pry_output_content ⇒ String
The selected
pry_instance.output_ring
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, #get_method_or_raise, #internal_binding?, #one_index_number, #one_index_range, #one_index_range_or_number, #set_file_and_dir_locals, #temp_file, #unindent
Methods included from Helpers::OptionsHelpers
method_object, #method_object, method_options, #method_options
Constructor Details
#initialize(args, opts, pry_instance) ⇒ CodeCollector
Returns a new instance of CodeCollector.
23 24 25 26 27 |
# File 'lib/pry/commands/code_collector.rb', line 23 def initialize(args, opts, pry_instance) @args = args @opts = opts @pry_instance = pry_instance end |
Class Attribute Details
.input_expression_ranges ⇒ Object
Returns the value of attribute input_expression_ranges.
16 17 18 |
# File 'lib/pry/commands/code_collector.rb', line 16 def input_expression_ranges @input_expression_ranges end |
.output_result_ranges ⇒ Object
Returns the value of attribute output_result_ranges.
17 18 19 |
# File 'lib/pry/commands/code_collector.rb', line 17 def output_result_ranges @output_result_ranges end |
Instance Attribute Details
#args ⇒ Object (readonly)
Returns the value of attribute args.
8 9 10 |
# File 'lib/pry/commands/code_collector.rb', line 8 def args @args end |
#file ⇒ Object
The name of the explicitly given file (if any).
13 14 15 |
# File 'lib/pry/commands/code_collector.rb', line 13 def file @file end |
#opts ⇒ Object (readonly)
Returns the value of attribute opts.
9 10 11 |
# File 'lib/pry/commands/code_collector.rb', line 9 def opts @opts end |
#pry_instance ⇒ Object (readonly)
Returns the value of attribute pry_instance.
10 11 12 |
# File 'lib/pry/commands/code_collector.rb', line 10 def pry_instance @pry_instance end |
Class Method Details
.inject_options(opt) ⇒ Object
Add the --lines
, -o
, -i
, -s
, -d
options.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/pry/commands/code_collector.rb', line 30 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
#bad_option_combination? ⇒ Boolean (private)
134 135 136 137 |
# File 'lib/pry/commands/code_collector.rb', line 134 def bad_option_combination? [opts.present?(:in), opts.present?(:out), !args.empty?].count(true) > 1 end |
#code_object ⇒ Pry::WrappedModule, ...
The code object
86 87 88 |
# File 'lib/pry/commands/code_collector.rb', line 86 def code_object Pry::CodeObject.lookup(obj_name, pry_instance, super: opts[:super]) end |
#code_object_doc ⇒ Object (private)
153 154 155 |
# File 'lib/pry/commands/code_collector.rb', line 153 def code_object_doc (code_object && code_object.doc) || could_not_locate(obj_name) end |
#code_object_source_or_file ⇒ Object (private)
157 158 159 |
# File 'lib/pry/commands/code_collector.rb', line 157 def code_object_source_or_file (code_object && code_object.source) || file_content 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.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/pry/commands/code_collector.rb', line 60 def content @content ||= begin if bad_option_combination? raise CommandError, "Only one of --out, --in, --doc and CODE_OBJECT may " \ "be specified." end content = if opts.present?(:o) pry_output_content elsif opts.present?(:i) pry_input_content elsif opts.present?(:d) code_object_doc else code_object_source_or_file end restrict_to_lines(content, line_range) end end |
#convert_to_range(range) ⇒ Object (private)
175 176 177 178 179 |
# File 'lib/pry/commands/code_collector.rb', line 175 def convert_to_range(range) return range if range.is_a?(Range) (range..range) end |
#could_not_locate(name) ⇒ Object (private)
171 172 173 |
# File 'lib/pry/commands/code_collector.rb', line 171 def could_not_locate(name) raise CommandError, "Cannot locate: #{name}!" end |
#file_content ⇒ Object (private)
161 162 163 164 165 166 167 168 169 |
# File 'lib/pry/commands/code_collector.rb', line 161 def file_content if File.exist?(obj_name) # Set the file accessor. self.file = obj_name File.read(obj_name) else could_not_locate(obj_name) end end |
#line_range ⇒ Object
The line range passed to --lines
, converted to a 0-indexed range.
123 124 125 |
# File 'lib/pry/commands/code_collector.rb', line 123 def line_range opts.present?(:lines) ? one_index_range_or_number(opts[:lines]) : 0..-1 end |
#obj_name ⇒ Object
Name of the object argument
128 129 130 |
# File 'lib/pry/commands/code_collector.rb', line 128 def obj_name @obj_name ||= args.empty? ? "" : args.join(" ") end |
#pry_array_content_as_string(array, ranges) ⇒ Object (private)
139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/pry/commands/code_collector.rb', line 139 def pry_array_content_as_string(array, ranges) all = '' ranges.each do |range| if convert_to_range(range).first == 0 raise CommandError, "Minimum value for range is 1, not 0." end ranged_array = Array(array[range]) || [] ranged_array.compact.each { |v| all += yield(v) } end all end |
#pry_input_content ⇒ String
The selected pry_instance.input_ring
as a string, as specified by
the -i
switch.
116 117 118 119 120 |
# File 'lib/pry/commands/code_collector.rb', line 116 def pry_input_content pry_array_content_as_string( pry_instance.input_ring, self.class.input_expression_ranges ) { |v| v } end |
#pry_output_content ⇒ String
The selected pry_instance.output_ring
as a string, as specified by
the -o
switch.
104 105 106 107 108 109 110 |
# File 'lib/pry/commands/code_collector.rb', line 104 def pry_output_content pry_array_content_as_string( pry_instance.output_ring, self.class.output_result_ranges, &:pretty_inspect ) end |
#restrict_to_lines(content, range) ⇒ String
Given a string and a range, return the range
lines of that
string.
96 97 98 |
# File 'lib/pry/commands/code_collector.rb', line 96 def restrict_to_lines(content, range) Array(content.lines.to_a[range]).join end |