Class: Github::Repository

Inherits:
Object
  • Object
show all
Defined in:
lib/github/repository.rb

Constant Summary collapse

InvalidRepositoryDirectory =
Class.new(ArgumentError)
MissingRemoteOrigin =
Class.new(RuntimeError)
InvalidRemoteOrigin =
Class.new(RuntimeError)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dir) ⇒ Repository

Returns a new instance of Repository.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/github/repository.rb', line 12

def initialize(dir)
  @repository = Rugged::Repository.new(dir)

  origin = @repository.remotes['origin']
  raise MissingRemoteOrigin unless origin

  matches = origin.url.match(/\A(git@|https:\/\/)([^\/:]+)(\/|:)([^\/:]+)\/([^\/]+)\.git\z/)
  unless matches
    raise InvalidRemoteOrigin, 'Invalid remote url'
  end

  @host, @owner, @name = matches[2], matches[4], matches[5]
  unless Github::CLI.config.keys.include?(@host)
    raise InvalidRemoteOrigin, 'Unrecognized git host'
  end
rescue Rugged::RepositoryError
  raise InvalidRepositoryDirectory
end

Instance Attribute Details

#hostObject (readonly)

Returns the value of attribute host.



10
11
12
# File 'lib/github/repository.rb', line 10

def host
  @host
end

#nameObject (readonly)

Returns the value of attribute name.



10
11
12
# File 'lib/github/repository.rb', line 10

def name
  @name
end

#ownerObject (readonly)

Returns the value of attribute owner.



10
11
12
# File 'lib/github/repository.rb', line 10

def owner
  @owner
end

Instance Method Details

#idObject



31
32
33
# File 'lib/github/repository.rb', line 31

def id
  "#{owner}/#{name}"
end

#issue(number) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/github/repository.rb', line 47

def issue(number)
  client.issues.get(
    user: owner,
    repo: name,
    number: number
  )
end

#issue_comments(number) ⇒ Object



55
56
57
58
59
60
61
# File 'lib/github/repository.rb', line 55

def issue_comments(number)
  client.issues.comments.list(
    user: owner,
    repo: name,
    number: number
  )
end

#issues(state: 'open', sort: 'updated', direction: 'desc', page: 1, per_page: 10) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/github/repository.rb', line 35

def issues(state: 'open', sort: 'updated', direction: 'desc', page: 1, per_page: 10)
  client.issues.list(
    user: owner,
    repo: name,
    state: state,
    sort: sort,
    direction: direction,
    page: page,
    per_page: per_page
  )
end

#pull_request(number) ⇒ Object



75
76
77
78
79
80
81
# File 'lib/github/repository.rb', line 75

def pull_request(number)
  client.pull_requests.get(
    user: owner,
    repo: name,
    number: number
  )
end

#pull_request_comments(number) ⇒ Object



99
100
101
102
103
104
105
# File 'lib/github/repository.rb', line 99

def pull_request_comments(number)
  client.pull_requests.comments(
    user: owner,
    repo: name,
    number: number
  )
end

#pull_request_commits(number) ⇒ Object



83
84
85
86
87
88
89
# File 'lib/github/repository.rb', line 83

def pull_request_commits(number)
  client.pull_requests.commits(
    user: owner,
    repo: name,
    number: number
  )
end

#pull_request_files(number) ⇒ Object



91
92
93
94
95
96
97
# File 'lib/github/repository.rb', line 91

def pull_request_files(number)
  client.pull_requests.files(
    user: owner,
    repo: name,
    number: number
  )
end

#pull_requests(state: 'open', sort: 'updated', direction: 'desc', page: 1, per_page: 10) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
# File 'lib/github/repository.rb', line 63

def pull_requests(state: 'open', sort: 'updated', direction: 'desc', page: 1, per_page: 10)
  client.pull_requests.list(
    user: owner,
    repo: name,
    state: state,
    sort: sort,
    direction: direction,
    page: page,
    per_page: per_page
  )
end