Class: Fastly::Client

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

Overview

The UserAgent to communicate with the API

Constant Summary collapse

DEFAULT_URL =

:nodoc: all

'https://api.fastly.com'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ Client

Returns a new instance of Client.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/fastly/client.rb', line 14

def initialize(opts)
  @api_key  = opts.fetch(:api_key, nil)
  @user     = opts.fetch(:user, nil)
  @password = opts.fetch(:password, nil)
  @customer = opts.fetch(:customer, nil)
  @oldpurge = opts.fetch(:use_old_purge_method, false)

  base    = opts.fetch(:base_url, DEFAULT_URL)
  uri     = URI.parse(base)
  options = if uri.is_a? URI::HTTPS
              {
                use_ssl: true,
                verify_mode: OpenSSL::SSL::VERIFY_PEER
              }
            else
              {}
            end

  @http = Net::HTTP.start(uri.host, uri.port, options)

  return self unless fully_authed?

  # If full auth creds (user/pass) then log in and set a cookie
  resp = http.post('/login', make_params(user: user, password: password))

  if resp.kind_of?(Net::HTTPSuccess)
    @cookie = resp['Set-Cookie']
  else
    fail Unauthorized, "Invalid auth credentials. Check username/password."
  end

  self
end

Instance Attribute Details

#api_keyObject

Returns the value of attribute api_key.



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

def api_key
  @api_key
end

Returns the value of attribute cookie.



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

def cookie
  @cookie
end

#customerObject

Returns the value of attribute customer.



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

def customer
  @customer
end

#httpObject

Returns the value of attribute http.



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

def http
  @http
end

#passwordObject

Returns the value of attribute password.



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

def password
  @password
end

#userObject

Returns the value of attribute user.



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

def user
  @user
end

Instance Method Details

#authed?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/fastly/client.rb', line 57

def authed?
  !api_key.nil? || fully_authed?
end

#delete(path, params = {}) ⇒ Object



93
94
95
96
97
# File 'lib/fastly/client.rb', line 93

def delete(path, params = {})
  extras = params.delete(:headers) || {}
  resp  = http.delete(path, headers(extras))
  resp.kind_of?(Net::HTTPSuccess)
end

#fully_authed?Boolean

Some methods require full username and password rather than just auth token

Returns:

  • (Boolean)


62
63
64
# File 'lib/fastly/client.rb', line 62

def fully_authed?
  !(user.nil? || password.nil?)
end

#get(path, params = {}) ⇒ Object



66
67
68
69
70
71
72
# File 'lib/fastly/client.rb', line 66

def get(path, params = {})
  extras = params.delete(:headers) || {}
  path += "?#{make_params(params)}" unless params.empty?
  resp  = http.get(path, headers(extras))
  fail Error, resp.body unless resp.kind_of?(Net::HTTPSuccess)
  JSON.parse(resp.body)
end

#get_stats(path, params = {}) ⇒ Object



74
75
76
77
78
79
80
81
82
83
# File 'lib/fastly/client.rb', line 74

def get_stats(path, params = {})
  resp = get(path, params)

  # return meta data, not just the actual stats data
  if resp['status'] == 'success'
    resp
  else
    fail Error, resp['msg']
  end
end

#post(path, params = {}) ⇒ Object



85
86
87
# File 'lib/fastly/client.rb', line 85

def post(path, params = {})
  post_and_put(:post, path, params)
end

#purge(url, params = {}) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/fastly/client.rb', line 99

def purge(url, params = {})
  return post("/purge/#{url}", params) if @oldpurge

  extras = params.delete(:headers) || {}
  uri    = URI.parse(url)
  http   = Net::HTTP.new(uri.host, uri.port)

  if uri.is_a? URI::HTTPS
    http.use_ssl = true
  end

  resp   = http.request Net::HTTP::Purge.new(uri.request_uri, headers(extras))

  fail Error, resp.body unless resp.kind_of?(Net::HTTPSuccess)
  JSON.parse(resp.body)
end

#put(path, params = {}) ⇒ Object



89
90
91
# File 'lib/fastly/client.rb', line 89

def put(path, params = {})
  post_and_put(:put, path, params)
end

#require_key!Object



48
49
50
51
# File 'lib/fastly/client.rb', line 48

def require_key!
  raise Fastly::KeyAuthRequired.new("This request requires an API key") if api_key.nil?
  @require_key = true
end

#require_key?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/fastly/client.rb', line 53

def require_key?
  !!@require_key
end