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.



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

def initialize(repo, revision:'master', dir:nil)
  @repo = repo
  @revision = revision
  @dir = dir
end

Instance Attribute Details

#dirObject

Returns the value of attribute dir.



13
14
15
# File 'lib/gh-diff.rb', line 13

def dir
  @dir
end

#repoObject

Returns the value of attribute repo.



13
14
15
# File 'lib/gh-diff.rb', line 13

def repo
  @repo
end

#revisionObject

Returns the value of attribute revision.



13
14
15
# File 'lib/gh-diff.rb', line 13

def revision
  @revision
end

Instance Method Details

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



26
27
28
29
30
31
32
33
34
35
# File 'lib/gh-diff.rb', line 26

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



37
38
39
40
41
42
43
44
# File 'lib/gh-diff.rb', line 37

def dir_diff(directory, repo:@repo, revision:@revision, dir:@dir)
  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



20
21
22
23
24
# File 'lib/gh-diff.rb', line 20

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



46
47
48
49
50
51
# File 'lib/gh-diff.rb', line 46

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