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.



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 16

def initialize(opts)
  @api_key            = opts.fetch(:api_key, nil)
  @base_url           = opts.fetch(:base_url, DEFAULT_URL)
  @customer           = opts.fetch(:customer, nil)
  @oldpurge           = opts.fetch(:use_old_purge_method, false)
  @password           = opts.fetch(:password, nil)
  @user               = opts.fetch(:user, nil)
  @debug              = opts.fetch(:debug, nil)
  @thread_http_client = if defined?(Concurrent::ThreadLocalVar)
                          Concurrent::ThreadLocalVar.new { build_http_client }
                        end

  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), 
    {'Content-Type' =>  'application/x-www-form-urlencoded'}
  )
  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.



14
15
16
# File 'lib/fastly/client.rb', line 14

def api_key
  @api_key
end

#base_urlObject

Returns the value of attribute base_url.



14
15
16
# File 'lib/fastly/client.rb', line 14

def base_url
  @base_url
end

Returns the value of attribute cookie.



14
15
16
# File 'lib/fastly/client.rb', line 14

def cookie
  @cookie
end

#customerObject

Returns the value of attribute customer.



14
15
16
# File 'lib/fastly/client.rb', line 14

def customer
  @customer
end

#debugObject

Returns the value of attribute debug.



14
15
16
# File 'lib/fastly/client.rb', line 14

def debug
  @debug
end

#passwordObject

Returns the value of attribute password.



14
15
16
# File 'lib/fastly/client.rb', line 14

def password
  @password
end

#userObject

Returns the value of attribute user.



14
15
16
# File 'lib/fastly/client.rb', line 14

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



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

def delete(path, params = {})
  extras = params.delete(:headers) || {}
  include_auth = params.key?(:include_auth) ? params.delete(:include_auth) : true
  resp  = http.delete(path, headers(extras, include_auth))
  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
70
# File 'lib/fastly/client.rb', line 63

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

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



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

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

#httpObject



115
116
117
118
119
120
# File 'lib/fastly/client.rb', line 115

def http
  return @thread_http_client.value if @thread_http_client
  return Thread.current[:fastly_net_http] if Thread.current[:fastly_net_http]

  Thread.current[:fastly_net_http] = build_http_client
end

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



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

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

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



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

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



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

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