Sha256: 8af2fa778f29faec899dc2ecdf2183d43b70ad3496a7754ee2e41faf86f096a0

Contents?: true

Size: 1.86 KB

Versions: 6

Compression:

Stored size: 1.86 KB

Contents

module Machinery
  class Ui
    class DiffWidget
      def initialize(diff_text)
        diff = Machinery.scrub(diff_text)
        @lines = diff.lines[2..-1]
        @widget = {
          file: diff[/--- a(.*)/, 1],
          additions: @lines.select { |l| l.start_with?("+") }.length,
          deletions: @lines.select { |l| l.start_with?("-") }.length
        }

        @original_line_number = 0
        @new_line_number = 0
      end

      def widget
        @widget[:lines] = @lines.map do |line|
          line = ERB::Util.html_escape(line.chomp).gsub("\\", "\").gsub("\t", " " * 8)
          case line
          when /^@.*/
            entry = header_entry(line)
            @original_line_number = line[/-(\d+)/, 1].to_i
            @new_line_number = line[/\+(\d+)/, 1].to_i
          when /^ .*/, ""
            entry = common_entry(line)
            @new_line_number += 1
            @original_line_number += 1
          when /^\+.*/
            entry = addition_entry(line)
            @new_line_number += 1
          when /^\-.*/
            entry = deletion_entry(line)
            @original_line_number += 1
          end

          entry
        end
        @widget
      end

      private

      def header_entry(line)
        {
          type: "header",
          content: line
        }
      end

      def common_entry(line)
        {
          type: "common",
          new_line_number: @new_line_number,
          original_line_number: @original_line_number,
          content: line[1..-1]
        }
      end

      def addition_entry(line)
        {
          type: "addition",
          new_line_number: @new_line_number,
          content: line[1..-1]
        }
      end

      def deletion_entry(line)
        {
          type: "deletion",
          original_line_number: @original_line_number,
          content: line[1..-1]
        }
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
machinery-tool-1.24.1 lib/diff_widget.rb
machinery-tool-1.24.0 lib/diff_widget.rb
machinery-tool-1.23.1 lib/diff_widget.rb
machinery-tool-1.23.0 lib/diff_widget.rb
machinery-tool-1.22.3 lib/diff_widget.rb
machinery-tool-1.22.2 lib/diff_widget.rb