|
- #coding=utf-8
- #
- # 文档在 https://www.showdoc.cc/127895880302646?page_id=1077512172693249
- #
- require 'faraday'
-
- class GitService
-
- class << self
-
- ['add_repository', 'fork_repository', 'delete_repository', 'file_tree', 'update_file', 'file_content', 'commits',
- 'add_tree', 'delete_file', 'update_file_base64'].each do |method|
- define_method method do |params|
- post(method, params)
- end
- end
-
- def make_new_multipar_file(full_file_path)
- Faraday::FilePart.new(full_file_path, 'application/octet-stream')
- end
-
- #上传二进制文件
- #参数构造形式
- # {a: 'a', file: make_new_multipar_file('1.txt') }
- def update_file_binary(params)
- post_form('update_file', params)
- end
-
- private
-
- def root_url
- new_git_address = EduSetting.get('git_address_domain')
- raise 'error: new_git_address not configuration' unless new_git_address.present?
- new_git_address
- end
-
- def logger
- Rails.logger
- end
-
- def post_form(action,params)
- conn = Faraday.new(root_url) do |f|
- f.request :multipart
- f.request :url_encoded
- f.adapter :net_http
- end
-
- resp = conn.post("/api/#{action}", params)
-
- body = resp.body
- parse_return(body)
- end
-
- def post(action, params)
- uri = URI.parse("#{root_url}/api/#{action}")
- https = Net::HTTP.new(uri.host, uri.port)
- https.use_ssl = root_url.start_with?('https')
- req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' => 'text/plain;charset=utf-8'})
- req.body = params.to_json
- res = https.request(req)
- body = res.body
-
- parse_return(body)
- end
-
- def parse_return(body)
- #logger.info("--uri_exec: .....res is #{body}")
-
- content = JSON.parse(body)
- if content["code"] != 0
- logger.error("repository error: #{content['msg']}")
- raise("版本库异常")
- end
- #raise content["msg"] if content["code"] != 0
-
- content["data"]
- end
- end
-
- end
|