Add basic representations for the Github API results
This commit is contained in:
parent
fc42f3dffa
commit
b43ecca906
7 changed files with 270 additions and 0 deletions
13
lib/github/representation/base.rb
Normal file
13
lib/github/representation/base.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
module Github
|
||||||
|
module Representation
|
||||||
|
class Base
|
||||||
|
def initialize(raw)
|
||||||
|
@raw = raw
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
attr_reader :raw
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
52
lib/github/representation/branch.rb
Normal file
52
lib/github/representation/branch.rb
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
module Github
|
||||||
|
module Representation
|
||||||
|
class Branch < Representation::Base
|
||||||
|
attr_reader :repository
|
||||||
|
|
||||||
|
def initialize(repository, raw)
|
||||||
|
@repository = repository
|
||||||
|
@raw = raw
|
||||||
|
end
|
||||||
|
|
||||||
|
def user
|
||||||
|
raw.dig('user', 'login') || 'unknown'
|
||||||
|
end
|
||||||
|
|
||||||
|
def repo
|
||||||
|
return @repo if defined?(@repo)
|
||||||
|
|
||||||
|
@repo = Github::Representation::Repo.new(raw['repo']) if raw['repo'].present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def ref
|
||||||
|
raw['ref']
|
||||||
|
end
|
||||||
|
|
||||||
|
def sha
|
||||||
|
raw['sha']
|
||||||
|
end
|
||||||
|
|
||||||
|
def short_sha
|
||||||
|
Commit.truncate_sha(sha)
|
||||||
|
end
|
||||||
|
|
||||||
|
def exists?
|
||||||
|
branch_exists? && commit_exists?
|
||||||
|
end
|
||||||
|
|
||||||
|
def valid?
|
||||||
|
sha.present? && ref.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def branch_exists?
|
||||||
|
repository.branch_exists?(ref)
|
||||||
|
end
|
||||||
|
|
||||||
|
def commit_exists?
|
||||||
|
repository.branch_names_contains(sha).include?(ref)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
17
lib/github/representation/label.rb
Normal file
17
lib/github/representation/label.rb
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
module Github
|
||||||
|
module Representation
|
||||||
|
class Label < Representation::Base
|
||||||
|
def color
|
||||||
|
"##{raw['color']}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def title
|
||||||
|
raw['name']
|
||||||
|
end
|
||||||
|
|
||||||
|
def url
|
||||||
|
raw['url']
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
37
lib/github/representation/milestone.rb
Normal file
37
lib/github/representation/milestone.rb
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
module Github
|
||||||
|
module Representation
|
||||||
|
class Milestone < Representation::Base
|
||||||
|
def iid
|
||||||
|
raw['number']
|
||||||
|
end
|
||||||
|
|
||||||
|
def title
|
||||||
|
raw['title']
|
||||||
|
end
|
||||||
|
|
||||||
|
def description
|
||||||
|
raw['description']
|
||||||
|
end
|
||||||
|
|
||||||
|
def due_date
|
||||||
|
raw['due_on']
|
||||||
|
end
|
||||||
|
|
||||||
|
def state
|
||||||
|
raw['state'] == 'closed' ? 'closed' : 'active'
|
||||||
|
end
|
||||||
|
|
||||||
|
def url
|
||||||
|
raw['url']
|
||||||
|
end
|
||||||
|
|
||||||
|
def created_at
|
||||||
|
raw['created_at']
|
||||||
|
end
|
||||||
|
|
||||||
|
def updated_at
|
||||||
|
raw['updated_at']
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
123
lib/github/representation/pull_request.rb
Normal file
123
lib/github/representation/pull_request.rb
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
module Github
|
||||||
|
module Representation
|
||||||
|
class PullRequest < Representation::Base
|
||||||
|
attr_reader :project
|
||||||
|
|
||||||
|
delegate :user, :repo, :ref, :sha, to: :source_branch, prefix: true
|
||||||
|
delegate :user, :exists?, :repo, :ref, :sha, :short_sha, to: :target_branch, prefix: true
|
||||||
|
|
||||||
|
def initialize(project, raw)
|
||||||
|
@project = project
|
||||||
|
@raw = raw
|
||||||
|
end
|
||||||
|
|
||||||
|
def iid
|
||||||
|
raw['number']
|
||||||
|
end
|
||||||
|
|
||||||
|
def title
|
||||||
|
raw['title']
|
||||||
|
end
|
||||||
|
|
||||||
|
def description
|
||||||
|
raw['body'] || ''
|
||||||
|
end
|
||||||
|
|
||||||
|
def source_project
|
||||||
|
project
|
||||||
|
end
|
||||||
|
|
||||||
|
def source_branch_exists?
|
||||||
|
!cross_project? && source_branch.exists?
|
||||||
|
end
|
||||||
|
|
||||||
|
def source_branch_name
|
||||||
|
@source_branch_name ||=
|
||||||
|
if cross_project? || !source_branch_exists?
|
||||||
|
source_branch_name_prefixed
|
||||||
|
else
|
||||||
|
source_branch_ref
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def target_project
|
||||||
|
project
|
||||||
|
end
|
||||||
|
|
||||||
|
def target_branch_name
|
||||||
|
@target_branch_name ||= target_branch_exists? ? target_branch_ref : target_branch_name_prefixed
|
||||||
|
end
|
||||||
|
|
||||||
|
def milestone
|
||||||
|
return unless raw['milestone'].present?
|
||||||
|
|
||||||
|
@milestone ||= Github::Representation::Milestone.new(raw['milestone'])
|
||||||
|
end
|
||||||
|
|
||||||
|
def author
|
||||||
|
@author ||= Github::Representation::User.new(raw['user'])
|
||||||
|
end
|
||||||
|
|
||||||
|
def assignee
|
||||||
|
return unless assigned?
|
||||||
|
|
||||||
|
@assignee ||= Github::Representation::User.new(raw['assignee'])
|
||||||
|
end
|
||||||
|
|
||||||
|
def state
|
||||||
|
return 'merged' if raw['state'] == 'closed' && raw['merged_at'].present?
|
||||||
|
return 'closed' if raw['state'] == 'closed'
|
||||||
|
|
||||||
|
'opened'
|
||||||
|
end
|
||||||
|
|
||||||
|
def url
|
||||||
|
raw['url']
|
||||||
|
end
|
||||||
|
|
||||||
|
def created_at
|
||||||
|
raw['created_at']
|
||||||
|
end
|
||||||
|
|
||||||
|
def updated_at
|
||||||
|
raw['updated_at']
|
||||||
|
end
|
||||||
|
|
||||||
|
def assigned?
|
||||||
|
raw['assignee'].present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def opened?
|
||||||
|
state == 'opened'
|
||||||
|
end
|
||||||
|
|
||||||
|
def valid?
|
||||||
|
source_branch.valid? && target_branch.valid?
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def source_branch
|
||||||
|
@source_branch ||= Representation::Branch.new(project.repository, raw['head'])
|
||||||
|
end
|
||||||
|
|
||||||
|
def source_branch_name_prefixed
|
||||||
|
"gh-#{target_branch_short_sha}/#{iid}/#{source_branch_user}/#{source_branch_ref}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def target_branch
|
||||||
|
@target_branch ||= Representation::Branch.new(project.repository, raw['base'])
|
||||||
|
end
|
||||||
|
|
||||||
|
def target_branch_name_prefixed
|
||||||
|
"gl-#{target_branch_short_sha}/#{iid}/#{target_branch_user}/#{target_branch_ref}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def cross_project?
|
||||||
|
return true if source_branch_repo.nil?
|
||||||
|
|
||||||
|
source_branch_repo.id != target_branch_repo.id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
9
lib/github/representation/repo.rb
Normal file
9
lib/github/representation/repo.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
module Github
|
||||||
|
module Representation
|
||||||
|
class Repo < Representation::Base
|
||||||
|
def id
|
||||||
|
raw['id']
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
19
lib/github/representation/user.rb
Normal file
19
lib/github/representation/user.rb
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
module Github
|
||||||
|
module Representation
|
||||||
|
class User < Representation::Base
|
||||||
|
def id
|
||||||
|
raw['id']
|
||||||
|
end
|
||||||
|
|
||||||
|
def email
|
||||||
|
return @email if defined?(@email)
|
||||||
|
|
||||||
|
@email = Github::User.new(username).get.fetch('email', nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
def username
|
||||||
|
raw['login']
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue