class Togglehq::Request
Constants
- ACCESS_TOKEN_KEY
- V1
Attributes
headers[R]
params[RW]
path[RW]
Public Class Methods
new(path="", params={}, version=V1)
click to toggle source
# File lib/togglehq/request.rb, line 14 def initialize(path="", params={}, version=V1) @path = path @params = params @headers = { 'Accept' => version, } end
Public Instance Methods
delete!()
click to toggle source
# File lib/togglehq/request.rb, line 38 def delete! request(:delete, path, params) end
get!()
click to toggle source
# File lib/togglehq/request.rb, line 22 def get! request(:get, path, params) end
patch!()
click to toggle source
# File lib/togglehq/request.rb, line 34 def patch! request(:patch, path, params) end
post!()
click to toggle source
# File lib/togglehq/request.rb, line 26 def post! request(:post, path, params) end
put!()
click to toggle source
# File lib/togglehq/request.rb, line 30 def put! request(:put, path, params) end
Private Instance Methods
authenticated_togglehq_api_connection()
click to toggle source
# File lib/togglehq/request.rb, line 64 def authenticated_togglehq_api_connection token = Togglehq.cache[ACCESS_TOKEN_KEY] conn = Togglehq.connection conn.headers.merge!({'Authorization' => "Bearer #{token["access_token"]}"}) conn end
ensure_togglehq_api_access_token()
click to toggle source
# File lib/togglehq/request.rb, line 71 def ensure_togglehq_api_access_token token = Togglehq.cache[ACCESS_TOKEN_KEY] if !token.nil? expires_at = Time.at(token["created_at"] + token["expires_in"]) if expires_at <= Time.now get_new_access_token! end else get_new_access_token! end end
get_new_access_token!()
click to toggle source
# File lib/togglehq/request.rb, line 83 def get_new_access_token! response = togglehq_api_connection.post do |req| req.url "/oauth/token" req.headers['Content-Type'] = 'application/json' req.body = {grant_type: "client_credentials", scope: "togglehq-lib"}.to_json end begin response_document = JSON.parse(response.body) if response_document.has_key?("error") process_api_error(response_document) else Togglehq.cache[ACCESS_TOKEN_KEY] = response_document end rescue JSON::ParserError raise "Fatal: unexpected response from ToggleHQ API: #{response.body}" end end
process_api_error(response_document)
click to toggle source
# File lib/togglehq/request.rb, line 101 def process_api_error(response_document) if response_document["error"] == "invalid_client" raise "Could not authenticate with ToggleHQ API: invalid client_id and/or client_secret." else raise "Unexpected error from ToggleHQ API: #{response_document["error_description"]}" end end
request(method, path, params)
click to toggle source
# File lib/togglehq/request.rb, line 45 def request(method, path, params) ensure_togglehq_api_access_token conn = authenticated_togglehq_api_connection response = conn.send(method) do |req| req.url path req.headers['Content-Type'] = 'application/json' req.headers.merge!(headers) req.body = params.to_json end response end
togglehq_api_connection()
click to toggle source
# File lib/togglehq/request.rb, line 57 def togglehq_api_connection conn = Togglehq.connection basic = Base64.strict_encode64("#{Togglehq.config.client_id}:#{Togglehq.config.client_secret}") conn.headers.merge!({'Authorization' => "Basic #{basic}"}) conn end