forked from octokit/octokit.rb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrepository.rb
70 lines (60 loc) · 1.56 KB
/
repository.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
module Octokit
# Class to parse GitHub repository owner and name from
# URLs and to generate URLs
class Repository
attr_accessor :owner, :name, :id
# Instantiate from a GitHub repository URL
#
# @return [Repository]
def self.from_url(url)
Repository.new(URI.parse(url).path[1..-1])
end
def initialize(repo)
case repo
when Integer
@id = repo
when String
@owner, @name = repo.split('/')
when Repository
@owner = repo.owner
@name = repo.name
when Hash
@name = repo[:repo] ||= repo[:name]
@owner = repo[:owner] ||= repo[:user] ||= repo[:username]
end
end
# Repository owner/name
# @return [String]
def slug
"#{@owner}/#{@name}"
end
alias :to_s :slug
# @return [String] Repository API path
def path
return named_api_path if @owner && @name
return id_api_path if @id
end
# Get the api path for a repo
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
# @return [String] Api path.
def self.path repo
new(repo).path
end
# @return [String] Api path for owner/name identified repos
def named_api_path
"repos/#{slug}"
end
# @return [String] Api path for id identified repos
def id_api_path
"repositories/#{@id}"
end
# Repository URL based on {Octokit::Client#web_endpoint}
# @return [String]
def url
"#{Octokit.web_endpoint}#{slug}"
end
alias :user :owner
alias :username :owner
alias :repo :name
end
end