Class: GhDiff::Diff

Inherits:
Object
  • Object
show all
Defined in:
lib/gh-diff.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(repo, revision: 'master', dir: nil) ⇒ Diff

Returns a new instance of Diff.



16
17
18
19
20
21
# File 'lib/gh-diff.rb', line 16

def initialize(repo, revision:'master', dir:nil)
  raise RepositoryNameError if repo.nil? || repo.empty?
  @repo = repo
  @revision = revision
  @dir = dir
end

Instance Attribute Details

#dirObject

Returns the value of attribute dir.



15
16
17
# File 'lib/gh-diff.rb', line 15

def dir
  @dir
end

#repoObject

Returns the value of attribute repo.



15
16
17
# File 'lib/gh-diff.rb', line 15

def repo
  @repo
end

#revisionObject

Returns the value of attribute revision.



15
16
17
# File 'lib/gh-diff.rb', line 15

def revision
  @revision
end

Instance Method Details

#diff(file1, file2 = file1, commentout: false, comment_tag: 'original', **opts) ⇒ Object



29
30
31
32
33
34
35
36
37
38
# File 'lib/gh-diff.rb', line 29

def diff(file1, file2=file1, commentout:false,
                             comment_tag:'original', **opts)
  opts = {context:3}.merge(opts)
  is_dir = File.directory?(file1)

  file_pairs = build_file_pairs(file1, file2, dir:is_dir)
  diffs = parallel(file_pairs) { |file1, file2|
            _diff(file1, file2, commentout, comment_tag, opts) }
  diffs
end

#dir_diff(directory, repo: @repo, revision: @revision, dir: @dir) ⇒ Object

Raises:



40
41
42
43
44
45
46
47
48
# File 'lib/gh-diff.rb', line 40

def dir_diff(directory, repo:@repo, revision:@revision, dir:@dir)
  raise NoDirectoryError unless Dir.exist?(directory)
  local_files = Dir.glob("#{directory}/*").map { |f| File.basename f }
  remote_path = build_path(dir, directory)
  remote_files = get_contents(repo, remote_path, revision).map(&:name)
  added = remote_files - local_files
  removed = local_files - remote_files
  [added, removed]
end

#get(file, repo: @repo, revision: @revision, dir: @dir, **opts) ⇒ Object



23
24
25
26
27
# File 'lib/gh-diff.rb', line 23

def get(file, repo:@repo, revision:@revision, dir:@dir, **opts)
  path = build_path(dir, file)
  f = get_contents(repo, path, revision)
  Base64.decode64(f.content)
end

#ref(ref = 'master', repo: @repo) ⇒ Object



50
51
52
53
54
55
# File 'lib/gh-diff.rb', line 50

def ref(ref='master', repo:@repo)
  type = ref.match(/^v\d/) ? :tags : :heads
  get_ref(repo, "#{type}/#{ref}")
rescue Octokit::NotFound
  {ref:'', object:{sha:ref}}
end