Class: Garb::Request::Data
- Inherits:
-
Object
- Object
- Garb::Request::Data
- Defined in:
- lib/garb/request/data.rb
Instance Method Summary collapse
- #absolute_uri ⇒ Object
- #handle_response(response) ⇒ Object
-
#initialize(session, base_url, parameters = {}) ⇒ Data
constructor
A new instance of Data.
- #oauth_user_request ⇒ Object
- #parameters ⇒ Object
- #query_string ⇒ Object
- #relative_uri ⇒ Object
- #send_request ⇒ Object
- #single_user_request ⇒ Object
- #single_user_request_evented ⇒ Object
- #uri ⇒ Object
Constructor Details
#initialize(session, base_url, parameters = {}) ⇒ Data
Returns a new instance of Data.
4 5 6 |
# File 'lib/garb/request/data.rb', line 4 def initialize(session, base_url, parameters = {}) @session, @base_url, @parameters = session, base_url, parameters end |
Instance Method Details
#absolute_uri ⇒ Object
23 24 25 |
# File 'lib/garb/request/data.rb', line 23 def absolute_uri uri.to_s + query_string end |
#handle_response(response) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/garb/request/data.rb', line 48 def handle_response(response) unless response.kind_of?(Net::HTTPSuccess) || (response.respond_to?(:status) && response.status == 200) body, parsed = response.body, MultiJson.load(response.body) rescue nil if parsed and error = parsed['error'] klass = case error['code'] when 400 then BadRequestError when 401 then InvalidCredentialsError when 403 then InsufficientPermissionsError when 503 then BackendError else ClientError end raise klass.new(absolute_uri, error['message'], error['code'], error['errors']) else raise ClientError.new(absolute_uri, body) end end response end |
#oauth_user_request ⇒ Object
93 94 95 |
# File 'lib/garb/request/data.rb', line 93 def oauth_user_request @session.access_token.get(absolute_uri, {'GData-Version' => '3'}) end |
#parameters ⇒ Object
8 9 10 11 12 |
# File 'lib/garb/request/data.rb', line 8 def parameters @parameters ||= {} @parameters['key'] ||= @session.api_key unless @session.api_key.nil? @parameters end |
#query_string ⇒ Object
14 15 16 17 |
# File 'lib/garb/request/data.rb', line 14 def query_string params_list = parameters.map { |k, v| "#{k}=#{v}" }.join('&') params_list.empty? ? '' : "?#{params_list}" end |
#relative_uri ⇒ Object
27 28 29 |
# File 'lib/garb/request/data.rb', line 27 def relative_uri uri.path.to_s + query_string end |
#send_request ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/garb/request/data.rb', line 31 def send_request Garb.log "Garb::Request -> #{relative_uri}" response = if @session.single_user? if Garb.use_fibers single_user_request_evented else single_user_request end elsif @session.oauth_user? oauth_user_request end Garb.log "Garb::Response -> #{response.inspect}" handle_response response end |
#single_user_request ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/garb/request/data.rb', line 76 def single_user_request http = Net::HTTP.new(uri.host, uri.port, Garb.proxy_address, Garb.proxy_port) http.open_timeout = Garb.open_timeout http.read_timeout = Garb.read_timeout http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless @session.access_token.nil? http.request_get(relative_uri, {'Authorization' => "Bearer #{@session.access_token.token}"}) else http.request_get(relative_uri, { 'Authorization' => "GoogleLogin auth=#{@session.auth_token}", 'GData-Version' => '3' }) end end |
#single_user_request_evented ⇒ Object
67 68 69 70 71 72 73 74 |
# File 'lib/garb/request/data.rb', line 67 def single_user_request_evented f = Fiber.current fiber = Fiber.new do f.resume single_user_request end fiber.resume Fiber.yield end |
#uri ⇒ Object
19 20 21 |
# File 'lib/garb/request/data.rb', line 19 def uri @uri ||= URI.parse(@base_url) end |