class Travis::Client::Session
Constants
- LINK_ATTRIBUTES
Attributes
connection[R]
request_headers[R]
response_cache[R]
Public Class Methods
new(connection, access_token: nil, request_headers: {})
click to toggle source
# File lib/travis/client/session.rb, line 9 def initialize(connection, access_token: nil, request_headers: {}) @connection = connection @http_connections = {} @response_cache = {} @request_headers = connection.request_headers.merge(request_headers) @request_headers['Authorization'] = "token #{access_token}" if access_token end
Public Instance Methods
call(resource_type, action_name, variables = {})
click to toggle source
# File lib/travis/client/session.rb, line 31 def call(resource_type, action_name, variables = {}) action(resource_type, action_name).call(self, variables) end
define_constants(container)
click to toggle source
# File lib/travis/client/session.rb, line 49 def define_constants(container) set_default_types error_types.merge(resource_types).each do |key, factory| constant = key.split('_').map(&:capitalize).join container.const_set(constant, factory) unless container.const_defined?(constant, false) end container.extend connection.mixin container end
error_types()
click to toggle source
# File lib/travis/client/session.rb, line 35 def error_types # we currently don't allow/need to override error types connection.error_types end
fetch(link)
click to toggle source
# File lib/travis/client/session.rb, line 59 def fetch(link) response_cache.fetch(link) { request('GET', link) } end
inspect()
click to toggle source
# File lib/travis/client/session.rb, line 17 def inspect "#<#{Session}>" end
request(method, uri, params = {})
click to toggle source
# File lib/travis/client/session.rb, line 21 def request(method, uri, params = {}) method = method.to_s.upcase options = {} options[:json] = params if params.any? uri = Addressable::URI.parse(uri) unless uri.is_a? Addressable::URI response = connection.notify(method, uri, params) { http_connection(uri).request(method, uri, options) } payload = JSON.load(response.body) wrap(payload, uri) end
resource_types()
click to toggle source
# File lib/travis/client/session.rb, line 40 def resource_types return @resource_types if defined? @resource_types and @resource_types connection.resource_types end
set_default_types()
click to toggle source
# File lib/travis/client/session.rb, line 45 def set_default_types @resource_types ||= connection.resource_types.map { |k,v| [k,v.for_session(self)] }.to_h end
Private Instance Methods
http_connection(uri)
click to toggle source
# File lib/travis/client/session.rb, line 67 def http_connection(uri) raise ArgumentError, 'request URI needs to be absolute' unless uri.absolute? @http_connections[uri.authority] ||= connection.http_factory.persistent(uri.join('/')).headers(request_headers) end
load(payload, uri)
click to toggle source
# File lib/travis/client/session.rb, line 80 def load(payload, uri) return payload unless payload['@type'] or payload['@href'] if payload['@type'] == 'error' factory = error_types.fetch(payload['error_type']) { resource_types.fetch('error', Error) } error = factory.new(self, payload['error_message'] || factory.default_message) error.merge! payload raise error end if payload['@href'] href = uri.join(payload['@href']) return response_cache[href] || Link.new(self, href, payload) if payload.all? { |a, _| LINK_ATTRIBUTES.include?(a) } current = response_cache[href] end current ||= resource_types.fetch(payload['@type'], Unknown).new(self, href) current.merge! payload response_cache[href] = current end
session()
click to toggle source
# File lib/travis/client/session.rb, line 63 def session self end
wrap(payload, uri)
click to toggle source
# File lib/travis/client/session.rb, line 72 def wrap(payload, uri) case payload when Array then payload.map { |e| wrap(e, uri) } when Hash then load(payload.map { |k,v| [k, wrap(v, uri)] }.to_h, uri) else payload end end