redmine-to-gitea/gitea_api.rb

191 lines
4.4 KiB
Ruby

require 'rest-client'
require 'json'
require 'naught'
require 'pry'
module Gitea
class API
attr_accessor :api_key
attr_accessor :base_url
attr_accessor :http_headers
attr_accessor :rest_client
def initialize(api_key:, base_url:, rest_client: RestClient)
@api_key = api_key
@base_url = base_url
@http_headers = {
"Authorization" => "token #{api_key}",
"Content-Type" => "application/json",
"Accept" => "application/json",
}
@rest_client = rest_client
end
def create_issue(payload:, owner:, repo:, user:)
puts "Gitea::API.create_issue(owner: #{owner}, repo: #{repo})"
rest_client.post(
"#{base_url}/api/v1/repos/#{owner}/#{repo}/issues",
JSON.generate(payload),
http_headers.merge("Sudo" => user)
) { |response, request, result, &block|
case response.code
when 201
if response.body.empty?
{}
else
JSON.parse(response.body)
end
else
binding.pry
end
}
rescue => ex
binding.pry
end
def create_comment(payload:, issue:, owner:, repo:, user:)
puts "Gitea::API.create_comment(issue: #{issue}, owner: #{owner}, repo: #{repo})"
rest_client.post(
"#{base_url}/api/v1/repos/#{owner}/#{repo}/issues/#{issue}/comments",
JSON.generate(payload),
http_headers.merge("Sudo" => user)
) { |response, request, result, &block|
case response.code
when 201
if response.body.empty?
{}
else
JSON.parse(response.body)
end
else
binding.pry
end
}
rescue => ex
binding.pry
end
def get_repo(owner:, repo:)
puts "Gitea::API.get_repository(owner: #{owner}, repo: #{repo})"
rest_client.get(
"#{base_url}/api/v1/repos/#{owner}/#{repo}",
http_headers
) { |response, request, result, &block|
case response.code
when 200
Repository.new(JSON.parse(response.body))
else
NullRepository.new
end
}
rescue => ex
binding.pry
end
def create_user_repository(payload:, user:)
puts "Gitea::API.create_user_repository()"
rest_client.post(
"#{base_url}/api/v1/user/repos",
JSON.generate(payload),
http_headers.merge("Sudo" => user)
) { |response, request, result, &block|
case response.code
when 201
if response.body.empty?
{}
else
JSON.parse(response.body)
end
else
binding.pry
end
}
rescue => ex
binding.pry
end
def create_org_repository(payload:, org:)
puts "Gitea::API.create_org_repository(org: #{org})"
rest_client.post(
"#{base_url}/api/v1/orgs/#{org}/repos",
JSON.generate(payload),
http_headers
) { |response, request, result, &block|
case response.code
when 201
if response.body.empty?
{}
else
JSON.parse(response.body)
end
else
binding.pry
end
}
rescue => ex
binding.pry
end
def delete_repository(owner:, repo:)
puts "Gitea::API.delete_repository(owner: #{owner}, repo: #{repo})"
rest_client.delete(
"#{base_url}/api/v1/repos/#{owner}/#{repo}",
http_headers
) { |response, request, result, &block|
case response.code
when 204
nil
else
binding.pry
end
}
rescue => ex
binding.pry
end
def add_collaborator(payload: {}, owner:, repo:, collaborator:)
puts "Gitea::API.add_collaborator(owner: #{owner}, repo: #{repo}, collaborator: #{collaborator})"
rest_client.put(
"#{base_url}/api/v1/repos/#{owner}/#{repo}/collaborators/#{collaborator}",
JSON.generate(payload),
http_headers
) { |response, request, result, &block|
case response.code
when 204
nil
else
binding.pry
end
}
rescue => ex
binding.pry
end
end
class Repository
attr_reader :id
def initialize(repository)
@repository = repository
end
def id
@repository.fetch("id")
end
end
NullRepository = Naught.build
end