class Rodzilla::JsonRpc::Service
Attributes
credentials[RW]
options[RW]
password[RW]
rpc_request[RW]
rpc_response[RW]
url[RW]
username[RW]
Public Class Methods
new(url, username, password)
click to toggle source
# File lib/rodzilla/json_rpc/service.rb, line 11 def initialize(url, username, password) @url = url @options = {} @username = username @password = password @credentials = { Bugzilla_login: @username, Bugzilla_password: @password } setup_request end
Public Instance Methods
execute_request_and_response(http_method)
click to toggle source
# File lib/rodzilla/json_rpc/service.rb, line 38 def execute_request_and_response(http_method) raw_request(http_method) parse_http_response raise Rodzilla::JsonRpc::Error::InvalidResponseId unless check_cycle_id raise Rodzilla::JsonRpc::Error::ResponseError.new(@rpc_response.error["code"]), @rpc_response.error["message"] if @rpc_response.error @rpc_response.result end
send_raw_request(http_method, url, options={})
click to toggle source
# File lib/rodzilla/json_rpc/service.rb, line 23 def send_raw_request(http_method, url, options={}) http_response = self.class.send(http_method, url, options ) end
send_request!(rpc_method, params={}, http_method=:post)
click to toggle source
# File lib/rodzilla/json_rpc/service.rb, line 27 def send_request!(rpc_method, params={}, http_method=:post) setup_request setup_request_data(rpc_method, params) unless ["post","get"].include?(http_method.to_s.downcase) raise Rodzilla::JsonRpc::Error::UnsupportedHttpMethod, "Error: Only GET and POST request are supported HTTP methods." end execute_request_and_response(http_method) end
Private Instance Methods
check_cycle_id()
click to toggle source
# File lib/rodzilla/json_rpc/service.rb, line 86 def check_cycle_id return false if rpc_request.id != rpc_response.id true end
generate_cycle_id()
click to toggle source
TODO: Consider replacing with Random.rand(1..N) for increased security
# File lib/rodzilla/json_rpc/service.rb, line 84 def generate_cycle_id; 1; end
parse_http_response()
click to toggle source
# File lib/rodzilla/json_rpc/service.rb, line 91 def parse_http_response @rpc_response = Rodzilla::JsonRpc::Response.new @rpc_response.read_http_response(@http_response) @rpc_response end
raw_request(http_method)
click to toggle source
# File lib/rodzilla/json_rpc/service.rb, line 48 def raw_request(http_method) begin request_fields = @options.merge( body: rpc_request.serialize, headers: rpc_request.headers ) @http_response = self.class.send(http_method, @url, request_fields ) rescue => ex raise Rodzilla::JsonRpc::Error::HttpError, ex.message end case @http_response.code when 400...500 raise Rodzilla::JsonRpc::Error::ClientError when 500...600 raise Rodzilla::JsonRpc::Error::ServerError end end
setup_request()
click to toggle source
Sets the Content-Type to application/json-rpc for the Service also adds Bugzilla defined login/password to the request parameters
sets id for the request which is later checked using #check_cycle_id
Return
# File lib/rodzilla/json_rpc/service.rb, line 71 def setup_request @rpc_request = Rodzilla::JsonRpc::Request.new do |request| request.headers = { 'Content-Type' => 'application/json-rpc' } request.id = generate_cycle_id end end
setup_request_data(rpc_method, params={})
click to toggle source
# File lib/rodzilla/json_rpc/service.rb, line 78 def setup_request_data(rpc_method, params={}) @rpc_request.method = rpc_method @rpc_request.params = @credentials.merge(params) end