Class: Ace::Git::Models::DiffResult

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/git/models/diff_result.rb

Overview

Data structure representing the result of a diff operation Migrated from ace-git-diff

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(content:, stats:, files:, metadata: {}, filtered: false) ⇒ DiffResult

Returns a new instance of DiffResult.

Parameters:

  • content (String)

    The diff content

  • stats (Hash)

    Statistics about the diff (additions, deletions, files)

  • files (Array<String>)

    List of files in the diff

  • metadata (Hash) (defaults to: {})

    Additional metadata (range, since, options, etc)

  • filtered (Boolean) (defaults to: false)

    Whether the diff has been filtered



16
17
18
19
20
21
22
# File 'lib/ace/git/models/diff_result.rb', line 16

def initialize(content:, stats:, files:, metadata: {}, filtered: false)
  @content = content
  @stats = stats
  @files = files
  @metadata = 
  @filtered = filtered
end

Instance Attribute Details

#contentObject (readonly)

Returns the value of attribute content.



9
10
11
# File 'lib/ace/git/models/diff_result.rb', line 9

def content
  @content
end

#filesObject (readonly)

Returns the value of attribute files.



9
10
11
# File 'lib/ace/git/models/diff_result.rb', line 9

def files
  @files
end

#filteredObject (readonly)

Returns the value of attribute filtered.



9
10
11
# File 'lib/ace/git/models/diff_result.rb', line 9

def filtered
  @filtered
end

#metadataObject (readonly)

Returns the value of attribute metadata.



9
10
11
# File 'lib/ace/git/models/diff_result.rb', line 9

def 
  @metadata
end

#statsObject (readonly)

Returns the value of attribute stats.



9
10
11
# File 'lib/ace/git/models/diff_result.rb', line 9

def stats
  @stats
end

Class Method Details

.empty(metadata: {}) ⇒ DiffResult

Create an empty DiffResult

Parameters:

  • metadata (Hash) (defaults to: {})

    Optional metadata

Returns:



82
83
84
85
86
87
88
89
90
# File 'lib/ace/git/models/diff_result.rb', line 82

def self.empty(metadata: {})
  new(
    content: "",
    stats: {additions: 0, deletions: 0, files: 0, total_changes: 0, line_count: 0},
    files: [],
    metadata: ,
    filtered: false
  )
end

.from_parsed(parsed_data, metadata: {}, filtered: false) ⇒ DiffResult

Create a DiffResult from parsed diff data

Parameters:

  • parsed_data (Hash)

    Parsed diff data from DiffParser

  • metadata (Hash) (defaults to: {})

    Additional metadata

  • filtered (Boolean) (defaults to: false)

    Whether the diff was filtered

Returns:



69
70
71
72
73
74
75
76
77
# File 'lib/ace/git/models/diff_result.rb', line 69

def self.from_parsed(parsed_data, metadata: {}, filtered: false)
  new(
    content: parsed_data[:content],
    stats: parsed_data[:stats].merge(line_count: parsed_data[:line_count]),
    files: parsed_data[:files],
    metadata: ,
    filtered: filtered
  )
end

Instance Method Details

#empty?Boolean

Check if the diff is empty

Returns:

  • (Boolean)

    True if diff has no content



26
27
28
# File 'lib/ace/git/models/diff_result.rb', line 26

def empty?
  content.nil? || content.strip.empty?
end

#has_changes?Boolean

Check if the diff has changes

Returns:

  • (Boolean)

    True if diff contains additions or deletions



32
33
34
# File 'lib/ace/git/models/diff_result.rb', line 32

def has_changes?
  stats[:total_changes].to_i > 0
end

#line_countInteger

Get the number of lines in the diff

Returns:

  • (Integer)

    Line count



38
39
40
# File 'lib/ace/git/models/diff_result.rb', line 38

def line_count
  stats[:line_count] || content&.count("\n")&.+(1) || 0
end

#summaryString

Get human-readable summary

Returns:

  • (String)

    Summary string



44
45
46
# File 'lib/ace/git/models/diff_result.rb', line 44

def summary
  "#{files.length} files, +#{stats[:additions]} -#{stats[:deletions]}"
end

#to_hHash

Convert to hash representation

Returns:

  • (Hash)

    Hash representation of the diff result



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/ace/git/models/diff_result.rb', line 50

def to_h
  {
    content: content,
    stats: stats,
    files: files,
    metadata: ,
    filtered: filtered,
    empty: empty?,
    has_changes: has_changes?,
    line_count: line_count,
    summary: summary
  }
end