Class: Travis::Client::Session

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

Constant Summary collapse

SSL_OPTIONS =
{ :ca_file => File.expand_path("../../cacert.pem", __FILE__) }

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Methods

#api_endpoint, #api_endpoint=, #artifact, #build, #explicit_api_endpoint?, #github_auth, #job, #repo, #repos, #restart, #user

Constructor Details

#initialize(options = Travis::Client::ORG_URI) ⇒ Session

Returns a new instance of Session.

Raises:

  • (ArgumentError)


14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/travis/client/session.rb', line 14

def initialize(options = Travis::Client::ORG_URI)
  @headers     = {}
  @cache       = {}
  @instruments = []
  @config      = nil

  options = { :uri => options } unless options.respond_to? :each_pair
  options.each_pair { |key, value| public_send("#{key}=", value) }

  raise ArgumentError, "neither :uri nor :connection specified" unless connection
  headers['Accept'] ||= 'application/vnd.travis-ci.2+json, */*; q=0.01'
end

Instance Attribute Details

#access_tokenObject

Returns the value of attribute access_token.



12
13
14
# File 'lib/travis/client/session.rb', line 12

def access_token
  @access_token
end

#connectionObject

Returns the value of attribute connection.



12
13
14
# File 'lib/travis/client/session.rb', line 12

def connection
  @connection
end

#headersObject

Returns the value of attribute headers.



12
13
14
# File 'lib/travis/client/session.rb', line 12

def headers
  @headers
end

#instrumentsObject (readonly)

Returns the value of attribute instruments.



12
13
14
# File 'lib/travis/client/session.rb', line 12

def instruments
  @instruments
end

Instance Method Details

#clear_cacheObject



141
142
143
144
145
# File 'lib/travis/client/session.rb', line 141

def clear_cache
  reset_entities
  clear_find_cache
  self
end

#clear_cache!Object



147
148
149
150
151
# File 'lib/travis/client/session.rb', line 147

def clear_cache!
  reset_entities
  @cache.clear
  self
end

#configObject



102
103
104
# File 'lib/travis/client/session.rb', line 102

def config
  @config ||= get_raw('/config')['config']
end

#find_many(entity, args = {}) ⇒ Object

Raises:

  • (Travis::Error)


69
70
71
72
# File 'lib/travis/client/session.rb', line 69

def find_many(entity, args = {})
  raise Travis::Error, "cannot fetch #{entity}" unless entity.respond_to?(:many) and entity.many
  cached(entity, :many, args) { fetch_many(entity, args) }
end

#find_one(entity, id = nil) ⇒ Object

Raises:

  • (Travis::Error)


63
64
65
66
67
# File 'lib/travis/client/session.rb', line 63

def find_one(entity, id = nil)
  raise Travis::Error, "cannot fetch #{entity}" unless entity.respond_to?(:many) and entity.many
  return create_entity(entity, "id" => id) if id.is_a? Integer
  cached(entity, :by, id) { fetch_one(entity, id) }
end

#find_one_or_many(entity, args = nil) ⇒ Object

Raises:

  • (Travis::Error)


74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/travis/client/session.rb', line 74

def find_one_or_many(entity, args = nil)
  raise Travis::Error, "cannot fetch #{entity}" unless entity.respond_to?(:many) and entity.many
  cached(entity, :one_or_many, args) do
    path       = "/#{entity.many}"
    path, args = "#{path}/#{args}", {} unless args.is_a? Hash
    result     = get(path, args)
    one        = result[entity.one]

    if result.include? entity.many
      Array(one) + Array(result[entity.many])
    else
      one
    end
  end
end

#get(*args) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/travis/client/session.rb', line 106

def get(*args)
  result = {}
  get_raw(*args).each_pair do |key, value|
    type = Entity.subclass_for(key)
    if value.respond_to? :to_ary
      result[key] = value.to_ary.map { |e| create_entity(type, e) }
    else
      result[key] = create_entity(type, value)
    end
  end
  result
end

#get_raw(*args) ⇒ Object



119
120
121
# File 'lib/travis/client/session.rb', line 119

def get_raw(*args)
  raw(:get, *args)
end

#inspectObject



137
138
139
# File 'lib/travis/client/session.rb', line 137

def inspect
  "#<#{self.class}: #{uri}>"
end

#instrument(&block) ⇒ Object



157
158
159
# File 'lib/travis/client/session.rb', line 157

def instrument(&block)
  instruments << block
end

#post_raw(*args) ⇒ Object



123
124
125
# File 'lib/travis/client/session.rb', line 123

def post_raw(*args)
  raw(:post, *args)
end

#put_raw(*args) ⇒ Object



127
128
129
# File 'lib/travis/client/session.rb', line 127

def put_raw(*args)
  raw(:put, *args)
end

#raw(verb, *args) ⇒ Object



131
132
133
134
135
# File 'lib/travis/client/session.rb', line 131

def raw(verb, *args)
  instrumented(verb.to_s.upcase, *args) { connection.public_send(verb, *args).body }
rescue Faraday::Error::ClientError => e
  handle_error(e)
end

#reload(entity) ⇒ Object



95
96
97
98
99
100
# File 'lib/travis/client/session.rb', line 95

def reload(entity)
  reset(entity)
  result = fetch_one(entity.class, entity.id)
  entity.update_attributes(result.attributes) if result.attributes != entity.attributes
  result
end

#reset(entity) ⇒ Object



90
91
92
93
# File 'lib/travis/client/session.rb', line 90

def reset(entity)
  entity.attributes.clear
  entity
end

#sessionObject



153
154
155
# File 'lib/travis/client/session.rb', line 153

def session
  self
end

#uriObject



27
28
29
# File 'lib/travis/client/session.rb', line 27

def uri
  connection.url_prefix.to_s if connection
end

#uri=(uri) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'lib/travis/client/session.rb', line 31

def uri=(uri)
  clear_cache!
  self.connection = Faraday.new(:url => uri, :ssl => SSL_OPTIONS) do |faraday|
    faraday.request  :url_encoded
    faraday.response  :json
    faraday.response  :follow_redirects
    faraday.response  :raise_error
    faraday.adapter(*faraday_adapter)
  end
end