fastly 0.98 → 0.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Changes +5 -0
- data/README.md +26 -20
- data/bin/fastly_upload_vcl +0 -0
- data/lib/fastly.rb +10 -1
- data/lib/fastly/client.rb +16 -9
- data/lib/fastly/fetcher.rb +2 -2
- metadata +4 -4
data/Changes
CHANGED
data/README.md
CHANGED
@@ -2,13 +2,13 @@ Fastly - client library for interacting with the Fastly web acceleration service
|
|
2
2
|
|
3
3
|
# Example
|
4
4
|
|
5
|
-
fastly = Fastly.new(login_opts)
|
5
|
+
fastly = Fastly.new(login_opts)
|
6
6
|
|
7
|
-
current_user = fastly.current_user
|
8
|
-
current_customer = fastly.current_customer
|
7
|
+
current_user = fastly.current_user
|
8
|
+
current_customer = fastly.current_customer
|
9
9
|
|
10
|
-
user = fastly.get_user(current_user.id)
|
11
|
-
customer = fastly.get_customer(current_customer.id)
|
10
|
+
user = fastly.get_user(current_user.id)
|
11
|
+
customer = fastly.get_customer(current_customer.id)
|
12
12
|
|
13
13
|
puts "Name: #{user.name}"
|
14
14
|
puts "Works for #{user.customer.name}"
|
@@ -16,35 +16,41 @@ Fastly - client library for interacting with the Fastly web acceleration service
|
|
16
16
|
puts "Which has the owner #{customer.owner.name}"
|
17
17
|
|
18
18
|
# Let's see which services we have defined
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
fastly.list_services.each do |service|
|
20
|
+
puts "Service ID: #{service.id}"
|
21
|
+
puts "Service Name: #{service.name}"
|
22
|
+
puts "Service Versions:"
|
23
|
+
service.versions.each do |version|
|
24
|
+
puts "\t#{version.number}"
|
25
|
+
end
|
24
26
|
end
|
25
27
|
|
26
|
-
service = fastly.create_service(:name => "MyFirstService")
|
27
|
-
latest_version = service.version
|
28
|
+
service = fastly.create_service(:name => "MyFirstService")
|
29
|
+
latest_version = service.version
|
28
30
|
|
29
31
|
# Create a domain and a backend for the service ...
|
30
|
-
domain = fastly.create_domain(:service_id => service.id, :version => latest_version.number, :name => "www.example.com")
|
31
|
-
backend = fastly.create_backend(:service_id => service.id, :version => latest_version.number, :ipv4 => "
|
32
|
+
domain = fastly.create_domain(:service_id => service.id, :version => latest_version.number, :name => "www.example.com")
|
33
|
+
backend = fastly.create_backend(:service_id => service.id, :version => latest_version.number, :name => "Backend 1", :ipv4 => "192.0.43.10", :port => 80)
|
32
34
|
|
33
35
|
# ... and activate it. You're now hosted on Fastly.
|
34
36
|
latest_version.activate
|
35
37
|
|
36
38
|
# Let's take a peek at the VCL that Fastly generated for us
|
37
|
-
vcl = latest_version.generated_vcl
|
39
|
+
vcl = latest_version.generated_vcl
|
38
40
|
puts "Generated VCL file is:\n#{vcl.content}"
|
39
41
|
|
40
42
|
# Now let's create a new version ...
|
41
|
-
new_version = latest_version.clone
|
43
|
+
new_version = latest_version.clone
|
42
44
|
# ... add a new backend ...
|
43
|
-
new_backend = fastly.create_backend(:service_id => service.id, :version => new_version.number, :ipv4 => "
|
44
|
-
# ...
|
45
|
-
|
45
|
+
new_backend = fastly.create_backend(:service_id => service.id, :version => new_version.number, :name => "Backend 2", :ipv4 => "74.125.224.136", :port => 8080)
|
46
|
+
# ... add a director to switch between them
|
47
|
+
director = fastly.create_director(:service_id => service.id, :version => new_version.number, :name => "My Director")
|
48
|
+
director.add_backend(backend)
|
49
|
+
director.add_backend(new_backend)
|
50
|
+
# ... and upload some custom vcl (presuming we have permissions)
|
51
|
+
new_version.upload_vcl(vcl_name, File.read(vcl_file))
|
46
52
|
|
47
|
-
new_version.activate
|
53
|
+
new_version.activate
|
48
54
|
|
49
55
|
# Copyright
|
50
56
|
|
data/bin/fastly_upload_vcl
CHANGED
File without changes
|
data/lib/fastly.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# A client library for interacting with the Fastly web acceleration service
|
6
6
|
class Fastly
|
7
7
|
# The current version of the library
|
8
|
-
VERSION = "0.
|
8
|
+
VERSION = "0.99"
|
9
9
|
|
10
10
|
require 'fastly/fetcher'
|
11
11
|
require 'fastly/client'
|
@@ -67,6 +67,15 @@ class Fastly
|
|
67
67
|
@current_user ||= get(User)
|
68
68
|
end
|
69
69
|
|
70
|
+
# Set the current customer to act as.
|
71
|
+
# NOTE: this will only work if you're an admin
|
72
|
+
def set_customer(id)
|
73
|
+
raise Fastly::FullAuthRequired "You must be fully authed to set the customer" unless self.fully_authed?;
|
74
|
+
raise Fastly::AdminRequired "You must be an admin to set the customer" unless self.current_user.can_do?(:admin);
|
75
|
+
@current_customer = nil
|
76
|
+
client.set_customer(id);
|
77
|
+
end
|
78
|
+
|
70
79
|
# Return a hash representing all commands available.
|
71
80
|
#
|
72
81
|
# Useful for information.
|
data/lib/fastly/client.rb
CHANGED
@@ -15,18 +15,19 @@ class Fastly
|
|
15
15
|
CURB_FU=false
|
16
16
|
end
|
17
17
|
|
18
|
-
attr_accessor :http, :api_key, :user, :password, :cookie
|
18
|
+
attr_accessor :http, :api_key, :user, :password, :cookie, :customer
|
19
19
|
|
20
20
|
def initialize(opts)
|
21
21
|
[:api_key, :user, :password].each do |key|
|
22
22
|
self.send("#{key}=", opts[key]) if opts.has_key?(key)
|
23
23
|
end
|
24
|
-
base
|
25
|
-
|
26
|
-
uri
|
27
|
-
scheme
|
28
|
-
host
|
29
|
-
curb
|
24
|
+
base = opts[:base_url] || "https://api.fastly.com"
|
25
|
+
customer = opts[:customer]
|
26
|
+
uri = URI.parse(base)
|
27
|
+
scheme = uri.scheme
|
28
|
+
host = uri.host
|
29
|
+
curb = opts.has_key?(:use_curb) ? !!opts[:use_curb] && CURB_FU : CURB_FU
|
30
|
+
port = opts.has_key?(:base_port) ? opts[:base_port] : (scheme == "https") ? 443 : 80
|
30
31
|
self.http = curb ? Fastly::Client::Curl.new(host, port) : Net::HTTP.new(host, port)
|
31
32
|
self.http.use_ssl = (scheme == "https")
|
32
33
|
return self unless fully_authed?
|
@@ -49,6 +50,10 @@ class Fastly
|
|
49
50
|
def fully_authed?
|
50
51
|
!(user.nil? || password.nil?)
|
51
52
|
end
|
53
|
+
|
54
|
+
def set_customer(id)
|
55
|
+
|
56
|
+
end
|
52
57
|
|
53
58
|
def get(path, params={})
|
54
59
|
path += "?"+make_params(params) unless params.empty?
|
@@ -81,7 +86,9 @@ class Fastly
|
|
81
86
|
end
|
82
87
|
|
83
88
|
def headers
|
84
|
-
|
89
|
+
headers = fully_authed? ? { 'Cookie' => cookie } : { 'X-Fastly-Key' => api_key }
|
90
|
+
headers.merge( 'Fastly-Explicit-Customer' => customer ) if customer
|
91
|
+
headers.merge( 'Content-Accept' => 'application/json')
|
85
92
|
end
|
86
93
|
|
87
94
|
def make_params(params)
|
@@ -102,7 +109,7 @@ class Fastly
|
|
102
109
|
class Curl
|
103
110
|
attr_accessor :host, :port, :protocol
|
104
111
|
|
105
|
-
def initialize(host, port=
|
112
|
+
def initialize(host, port=443)
|
106
113
|
self.host = host
|
107
114
|
self.port = port
|
108
115
|
self.protocol = 'https'
|
data/lib/fastly/fetcher.rb
CHANGED
@@ -7,13 +7,13 @@ class Fastly
|
|
7
7
|
class Error < RuntimeError; end
|
8
8
|
# :nodoc:
|
9
9
|
class Unauthorized < AuthRequired; end
|
10
|
+
# :nodoc:
|
11
|
+
class AdminRequired < AuthRequired; end
|
10
12
|
|
11
13
|
module Fetcher # :nodoc: all
|
12
14
|
|
13
15
|
# Get the current Fastly::Client
|
14
16
|
def client(opts={})
|
15
|
-
opts[:base_url] ||= 'api.fastly.com'
|
16
|
-
opts[:base_port] ||= 80
|
17
17
|
@client ||= Fastly::Client.new(opts)
|
18
18
|
end
|
19
19
|
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 205
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: "0.
|
8
|
+
- 99
|
9
|
+
version: "0.99"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Fastly Inc
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-
|
17
|
+
date: 2012-05-01 00:00:00 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: json
|