class Pry::Command::AmendLine

Public Instance Methods

process() click to toggle source
# File lib/pry/commands/amend_line.rb, line 22
def process
  raise CommandError, "No input to amend." if eval_string.empty?

  eval_string.replace(amend_input)
  run "fix-indent"
  run "show-input"
end

Private Instance Methods

amend_input() click to toggle source

@return [String] A new string with the amendments applied to it.

# File lib/pry/commands/amend_line.rb, line 33
def amend_input
  input_array = eval_string.each_line.to_a

  if arg_string == "!"
    delete_from_array(input_array, line_range)
  elsif arg_string.start_with?(">")
    insert_into_array(input_array, line_range)
  else
    replace_in_array(input_array, line_range)
  end

  input_array.join
end
delete_from_array(array, range) click to toggle source
# File lib/pry/commands/amend_line.rb, line 47
def delete_from_array(array, range)
  array.slice!(range)
end
insert_into_array(array, range) click to toggle source
# File lib/pry/commands/amend_line.rb, line 51
def insert_into_array(array, range)
  insert_slot = Array(range).first
  array.insert(insert_slot, arg_string[1..-1] << "\n")
end
line_count() click to toggle source

@return [Fixnum] The number of lines currently in `eval_string` (the

input buffer)
# File lib/pry/commands/amend_line.rb, line 62
def line_count
  eval_string.lines.count
end
line_range() click to toggle source

The lines (or line) that will be modified by the `amend-line`. @return [Range, Fixnum] The lines or line.

# File lib/pry/commands/amend_line.rb, line 90
def line_range
  start_line_number, end_line_number = start_and_end_line_number
  if start_line_number
    zero_indexed_range_from_one_indexed_numbers(start_line_number,
                                                end_line_number)
  else
    line_count - 1
  end
end
replace_in_array(array, range) click to toggle source
# File lib/pry/commands/amend_line.rb, line 56
def replace_in_array(array, range)
  array[range] = arg_string + "\n"
end
start_and_end_line_number() click to toggle source

Returns the (one-indexed) start and end lines given by the user. The lines in this range will be affected by the `amend-line`. Returns `nil` if no lines were specified by the user. @return [Array<Fixnum>, nil]

# File lib/pry/commands/amend_line.rb, line 70
def start_and_end_line_number
  start_line_number, end_line_number = args
  end_line_number ||= start_line_number.to_i

  [start_line_number.to_i, end_line_number.to_i] if start_line_number
end
zero_indexed_range_from_one_indexed_numbers(start_line_number, end_line_number) click to toggle source

Takes two numbers that are 1-indexed, and returns a range (or number) that is 0-indexed. 1-indexed means the first element is indentified by 1 rather than by 0 (as is the case for Ruby arrays). @param [Fixnum] start_line_number One-indexed number. @param [Fixnum] end_line_number One-indexed number. @return [Range] The zero-indexed range.

# File lib/pry/commands/amend_line.rb, line 83
def zero_indexed_range_from_one_indexed_numbers(start_line_number, end_line_number)
  # FIXME: one_index_number is a horrible name for this method
  one_index_number(start_line_number)..one_index_number(end_line_number)
end