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

  if api_key.nil?
    fail Unauthorized, "Invalid auth credentials. Check api_key."
  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

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


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

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

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



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

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)


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

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

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



53
54
55
56
57
58
59
60
# File 'lib/fastly/client.rb', line 53

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



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

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



105
106
107
108
109
110
# File 'lib/fastly/client.rb', line 105

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



73
74
75
# File 'lib/fastly/client.rb', line 73

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

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



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/fastly/client.rb', line 88

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



77
78
79
# File 'lib/fastly/client.rb', line 77

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

#require_key!Object



35
36
37
38
# File 'lib/fastly/client.rb', line 35

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)


40
41
42
# File 'lib/fastly/client.rb', line 40

def require_key?
  !!@require_key
end