Sha256: ea19ad2b3354e5b58a0fcac27abda210e7d4f09e0053c0ef75cc5caf68914b9a

Contents?: true

Size: 1.61 KB

Versions: 7

Compression:

Stored size: 1.61 KB

Contents

module PrettyDiff
  class BasicGenerator < AbstractGenerator

    def generate
      content_tag :div, :class => 'diff' do
        diff.chunks.map{|c| ChunkGen[c].generate}.join('')
      end
    end

    class ChunkGen < PrettyDiff::AbstractGenerator
      def generate
        content_tag :div, :class => 'diff-chunk' do
          numbers + code
        end
      end

    private

      def numbers
        LineNumbersGen[chunk.line_numbers].generate
      end

      def code
        content_tag :div, :class => 'diff-code' do
          content_tag :pre do
            chunk.lines.map{|l| LineGen[l].generate }.join("\n")        
          end
        end
      end
    end

    class LineNumbersGen < PrettyDiff::AbstractGenerator
      def generate
        column(line_numbers.left_column) + column(line_numbers.right_column)
      end

    private

      def column(clmn)
        content_tag :div, :class => 'diff-line-nums' do
          content_tag :pre do
            fill_whitespace(clmn).join("\n")    
          end
        end
      end
      
      def fill_whitespace(numbers)
        [].tap do |filled|
          numbers.each do |v|
            filled << (v.nil? ? '&nbsp;' : v)
          end
        end
      end
    end

    class LineGen < PrettyDiff::AbstractGenerator
      def generate
        if line.added?
          content_tag(:span, :class => 'diff-line-add') do
            h(line.contents)
          end
        elsif line.deleted?
          content_tag(:span, :class => 'diff-line-del') do
            h(line.contents)
          end
        else
          h(line.contents)
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pretty_diff-2.1.4 lib/pretty_diff/basic_generator.rb
pretty_diff-2.1.3 lib/pretty_diff/basic_generator.rb
pretty_diff-2.1.2 lib/pretty_diff/basic_generator.rb
pretty_diff-2.1.1 lib/pretty_diff/basic_generator.rb
pretty_diff-2.1.0 lib/pretty_diff/basic_generator.rb
pretty_diff-2.0.1 lib/pretty_diff/basic_generator.rb
pretty_diff-2.0.0 lib/pretty_diff/basic_generator.rb