ADD educode repo api

This commit is contained in:
Jasder 2020-10-22 17:59:07 +08:00
parent 0192fa9f85
commit 1feb238e80
4 changed files with 210 additions and 0 deletions

View File

@ -0,0 +1,112 @@
class Educoder::ClientService < ApplicationService
attr_reader :url, :params
PAGINATE_DEFAULT_PAGE = 1
PAGINATE_DEFAULT_LIMIT = 20
def initialize(options={})
@url = options[:url]
@params = options[:params]
end
def post(url, params={})
puts "[educoder] request params: #{params}"
auth_token = authen_params(params[:token])
response = conn(auth_token).post do |req|
req.url full_url(url)
req.body = params[:data].to_json
end
render_status(response)
end
def get(url, params={})
puts "[educoder] params: #{params}"
conn(api_url(url), params)
end
def delete(url, params={})
auth_token = authen_params(params[:token])
conn(auth_token).delete do |req|
req.url full_url(url)
req.body = params[:data].to_json
end
end
def patch(url, params={})
puts "[educoder] request params: #{params}"
auth_token = authen_params(params[:token])
conn(auth_token).patch do |req|
req.url full_url(url)
req.body = params[:data].to_json
end
end
def put(url, params={})
puts "[educoder] put request params: #{params}"
conn(authen_params(params[:token])).put do |req|
req.url full_url(url)
req.body = params[:data].to_json
end
end
private
def conn(url, hash={})
par = []
hash.each do |k,v|
par << "#{k}=#{v}"
end
uri = URI("#{url}.json?#{par.join('&')}&private_token=#{private_token}")
puts "[educoder] request_url: #{uri}"
response = Net::HTTP.get_response(uri)
puts "[educoder] response code: #{response.code.to_i}"
if response.code.to_i != 200
puts "======= 接口请求失败!"
raise '接口请求失败.'
return nil
end
JSON.parse(response.body)
end
def base_url
Rails.application.config_for(:configuration)['educoder']['base_url']
end
def domain
Rails.application.config_for(:configuration)['educoder']['main_site']
end
def private_token
Rails.application.config_for(:configuration)['educoder']['token']
end
def access_key_secret
Gitea.gitea_config[:access_key_secret]
end
def api_url(url)
[domain, base_url, url].join('/')
end
def full_url(api_rest, action='post')
url = [api_url, api_rest].join('').freeze
url = action === 'get' ? url : URI.escape(url)
puts "[gitea] request url: #{url}"
return url
end
def authen_params(token)
(token.is_a? String) ? {token: token} : Hash(token)
end
def render_data(response)
case response.status
when 201, 200
JSON.parse(response.body)
else
nil
end
end
end

View File

@ -0,0 +1,29 @@
class Educoder::Repository::Commits::ListService < Educoder::ClientService
attr_reader :repo_name, :args
# ref: The name of the commit/branch/tag. Default the repositorys default branch (usually master)
# repo_name: the name of repository
# Educoder::Repository::Commits::ListService.call('fessf/6hiwcb7o20200917174054')
def initialize(repo_name, **args)
@repo_name = repo_name
@args = {ref: 'master'}.merge(args.compact)
end
def call
response = get(url, params)
render_result(response)
end
private
def params
@args.merge(repo_name: repo_name)
end
def url
"commits".freeze
end
def render_result(response)
response['commits'] || []
end
end

View File

@ -0,0 +1,30 @@
class Educoder::Repository::Entries::GetService < Educoder::ClientService
attr_reader :repo_name, :filepath
# filepath: path of the dir, file, symlink or submodule in the repo
# repo_name: the name of repository
def initialize(repo_name, filepath)
@repo_name = repo_name
@filepath = filepath
end
def call
get(url, params)
end
private
def params
Hash.new.merge(repo_name: repo_name, path: filepath)
end
def url
"file_content".freeze
end
def render_result(response)
body = JSON.parse(response.body)
if body['status'].to_i === -1
raise '无权限访问.'
end
end
end

View File

@ -0,0 +1,39 @@
class Educoder::Repository::Entries::ListService < Educoder::ClientService
attr_reader :repo_name, :args
# ref: The name of the commit/branch/tag. Default the repositorys default branch (usually master)
# repo_name: the name of repository
# args:
# {
# "repo_name": "wmov43ez8/5xahe2t7nv20191022173304",
# "path": 'src'
# }
# Educoder::Repository::Entries::ListService.new('wmov43ez8/5xahe2t7nv20191022173304', {path: 'src'}).call
def initialize(repo_name, args={})
@repo_name = repo_name
@args = args.compact
end
def call
get(url, params)
end
private
def params
@args.merge(repo_name: repo_name)
end
def url
"repository".freeze
end
def render_result(response)
body = JSON.parse(response.body)
case response.status
when 200
body
else
[]
end
end
end