lib/onebox/engine/github_pullrequest_onebox.rb in onebox-1.5.0 vs lib/onebox/engine/github_pullrequest_onebox.rb in onebox-1.5.1

- old
+ new

@@ -11,18 +11,65 @@ "https://api.github.com/repos/#{match[:owner]}/#{match[:repository]}/pulls/#{match[:number]}" end private + #Make an api JSON request, will attempt to authenticate if provided in the engine options + # Author: Lidlanca + #: self.options[:github_auth_method] = :basic | :oauth | nil + # :oauth is the recommend way for authentication. when generating token you can control privileges, and you do not expose your password + # :basic require username and password provided in options[:github_auth_user , :github_auth_pass] + # nil or false will make a request without any authentication. request rate limit are lower. + + def api_json_request url + box_options = self.options + case box_options[:github_auth_method] + when :basic + auth = [box_options[:github_auth_user] , box_options[:github_auth_pass]] # user name and password + when :oauth + auth = [box_options[:github_auth_token] , "x-oauth-basic"] #oauth does not need password with token + else + #request without auth + return ::MultiJson.load(open(url,"Accept"=>"application/vnd.github.v3.text+json",read_timeout: timeout)) + + end + #Request with auth + return ::MultiJson.load(open(url,"Accept"=>"application/vnd.github.v3.text+json",http_basic_authentication:auth, read_timeout: timeout)) + end + + def raw + @raw ||= api_json_request url + end def match @match ||= @url.match(%r{github\.com/(?<owner>[^/]+)/(?<repository>[^/]+)/pull/(?<number>[^/]+)}) end def data + box_options = self.options result = raw.clone + + pull_status = "Pull Status:" << {:closed=>"closed",:open=>"open"}[raw["state"].to_sym] << (raw["state"] == "closed" ? (raw["merged"] ? " & accepted" : " & declined") : "") #closed , open + result['pull_status_str'] = pull_status + if box_options[:get_build_status] + url2 = raw["statuses_url"] + raw2 = api_json_request url2 #2nd api request to get build status + + result['pull_status'] = raw["state"] + result['pull_status_str'] = pull_status + result['pull_status_str_open'] = raw["state"]=="open" + result['pull_status_closed_accepted'] = raw["state"]=="closed" && raw["merged"] + result['pull_status_closed_declined'] = raw["state"]=="closed" && !raw["merged"] + unless raw2.empty? + result['build_status'] = "Build status: " + raw2[0]["state"].to_s.capitalize + " | " + raw2[0]["description"].to_s + end + end + + result['link'] = link result['created_at'] = Time.parse(result['created_at']).strftime("%I:%M%p - %d %b %y") result end end end end + +