Class: Travis::Client::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/travis/client/session.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection, access_token: nil, request_headers: {}) ⇒ Session

Returns a new instance of Session.



9
10
11
12
13
14
15
# 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

Instance Attribute Details

#connectionObject (readonly)

Returns the value of attribute connection.



7
8
9
# File 'lib/travis/client/session.rb', line 7

def connection
  @connection
end

#request_headersObject (readonly)

Returns the value of attribute request_headers.



7
8
9
# File 'lib/travis/client/session.rb', line 7

def request_headers
  @request_headers
end

#response_cacheObject (readonly)

Returns the value of attribute response_cache.



7
8
9
# File 'lib/travis/client/session.rb', line 7

def response_cache
  @response_cache
end

Instance Method Details

#call(resource_type, action_name, variables = {}) ⇒ Object



31
32
33
# 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) ⇒ Object



49
50
51
52
53
54
55
56
57
# 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_typesObject



35
36
37
38
# 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) ⇒ Object



59
60
61
# File 'lib/travis/client/session.rb', line 59

def fetch(link)
  response_cache.fetch(link) { request('GET', link) }
end

#inspectObject



17
18
19
# File 'lib/travis/client/session.rb', line 17

def inspect
  "#<#{Session}>"
end

#request(method, uri, params = {}) ⇒ Object



21
22
23
24
25
26
27
28
29
# 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_typesObject



40
41
42
43
# 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_typesObject



45
46
47
# 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