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

  @http = Net::HTTP.new(uri.host, uri.port, :ENV, nil, nil, nil)

  # handle TLS connections outside of development
  @http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  @http.use_ssl = uri.scheme.downcase == 'https'

  # debug http interactions if specified
  @http.set_debug_output(opts[:debug]) if opts[:debug]

  @http.start

  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)


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

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

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



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

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)


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

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

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



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

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



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

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



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

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

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



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

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



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

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

#require_key!Object



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

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)


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

def require_key?
  !!@require_key
end