Class: Fastly::Client

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

Overview

The UserAgent to communicate with the API

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ Client

Returns a new instance of Client.



11
12
13
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
# File 'lib/fastly/client.rb', line 11

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, 'https://api.fastly.com')
  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

:nodoc: all



9
10
11
# File 'lib/fastly/client.rb', line 9

def api_key
  @api_key
end

:nodoc: all



9
10
11
# File 'lib/fastly/client.rb', line 9

def cookie
  @cookie
end

#customerObject

:nodoc: all



9
10
11
# File 'lib/fastly/client.rb', line 9

def customer
  @customer
end

#httpObject

:nodoc: all



9
10
11
# File 'lib/fastly/client.rb', line 9

def http
  @http
end

#passwordObject

:nodoc: all



9
10
11
# File 'lib/fastly/client.rb', line 9

def password
  @password
end

#userObject

:nodoc: all



9
10
11
# File 'lib/fastly/client.rb', line 9

def user
  @user
end

Instance Method Details

#authed?Boolean

Returns:

  • (Boolean)


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

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

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



90
91
92
93
94
# File 'lib/fastly/client.rb', line 90

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)


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

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

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



63
64
65
66
67
68
69
# File 'lib/fastly/client.rb', line 63

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



71
72
73
74
75
76
77
78
79
80
# File 'lib/fastly/client.rb', line 71

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



82
83
84
# File 'lib/fastly/client.rb', line 82

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

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



96
97
98
99
100
101
102
103
104
105
106
# File 'lib/fastly/client.rb', line 96

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)
  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



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

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

#require_key!Object



45
46
47
48
# File 'lib/fastly/client.rb', line 45

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)


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

def require_key?
  !!@require_key
end