Class: Uniword::Review::InteractiveReview

Inherits:
Object
  • Object
show all
Defined in:
lib/uniword/review/interactive_review.rb

Overview

Text-based user interface for interactively reviewing changes.

Shows comments and revisions one-by-one, prompting the user to accept, reject, skip, or quit. Merges both comments and revisions into a single review queue sorted by position (date).

Examples:

Run interactive review

manager = ReviewManager.new(doc)
session = InteractiveReview.new(manager)
session.run

See Also:

Instance Method Summary collapse

Constructor Details

#initialize(manager, output: $stdout, input: $stdin) ⇒ InteractiveReview

Initialize an interactive review session.

Parameters:

  • manager (ReviewManager)

    The review manager

  • output (IO) (defaults to: $stdout)

    Output stream (default: $stdout)

  • input (IO) (defaults to: $stdin)

    Input stream (default: $stdin)



25
26
27
28
29
30
31
32
# File 'lib/uniword/review/interactive_review.rb', line 25

def initialize(manager, output: $stdout, input: $stdin)
  @manager = manager
  @output = output
  @input = input
  @accepted = 0
  @rejected = 0
  @skipped = 0
end

Instance Method Details

#runHash

Run the interactive review session.

Displays each comment and revision in order, prompting the user for action. Returns a summary hash when done.

Returns:

  • (Hash)

    Summary with :accepted, :rejected, :skipped counts



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/uniword/review/interactive_review.rb', line 40

def run
  queue = @manager.review_queue

  if queue.empty?
    @output.puts "No comments or tracked changes to review."
    return summary
  end

  @output.puts "Reviewing #{queue.size} item(s)..."
  @output.puts "Keys: [a]ccept [r]eject [s]kip [q]uit"
  @output.puts separator

  queue.each_with_index do |entry, idx|
    display_item(entry, idx, queue.size)

    case prompt_user
    when :accept
      handle_accept(entry)
    when :reject
      handle_reject(entry)
    when :skip
      @skipped += 1
      @output.puts "  Skipped."
    when :quit
      @output.puts "Stopping review."
      break
    end

    @output.puts separator
  end

  display_summary
  summary
end

#summaryHash

Get the review session summary.

Returns:

  • (Hash)

    Counts of :accepted, :rejected, :skipped



78
79
80
81
82
83
84
# File 'lib/uniword/review/interactive_review.rb', line 78

def summary
  {
    accepted: @accepted,
    rejected: @rejected,
    skipped: @skipped,
  }
end