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 GiteaService.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