fastly 1.4.3 → 1.5.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +5 -3
- data/lib/fastly.rb +28 -1
- data/lib/fastly/client.rb +4 -1
- data/lib/fastly/dictionary.rb +32 -0
- data/lib/fastly/dictionary_item.rb +40 -0
- data/lib/fastly/gem_version.rb +1 -1
- data/test/fastly/client_test.rb +15 -4
- data/test/fastly/dictionary_test.rb +53 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 303ad518137e3776d1eb3d3c8f01248428cb9cae
|
4
|
+
data.tar.gz: 4eb4cceb4e98c19e9da337df56ab520b271cdb8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efe685e5ffb5ed74d0817ee3fda2a4e9e4239685e817c20df42a56fa6ac7ae5d53d8f21c2a52a05fb6a4a9454a59121c8b6d8cbaa3a311cd7f632f629dcf1551
|
7
|
+
data.tar.gz: e6156561472906f58a67ccd7e6da2586836b6926397371b31732516f05675f32632126d60268d7aa642a2919fcce314af44d2543cb7d841e3ade9b86cf0af288
|
data/.travis.yml
CHANGED
data/lib/fastly.rb
CHANGED
@@ -14,6 +14,7 @@ require 'fastly/cache_setting'
|
|
14
14
|
require 'fastly/condition'
|
15
15
|
require 'fastly/customer'
|
16
16
|
require 'fastly/dictionary'
|
17
|
+
require 'fastly/dictionary_item'
|
17
18
|
require 'fastly/director'
|
18
19
|
require 'fastly/domain'
|
19
20
|
require 'fastly/header'
|
@@ -46,6 +47,10 @@ class Fastly
|
|
46
47
|
#
|
47
48
|
# Some methods require full username and password rather than just auth token.
|
48
49
|
def initialize(opts)
|
50
|
+
if opts[:api_key].nil? && (opts[:password].nil? || opts[:user].nil?)
|
51
|
+
raise ArgumentError, "Required options missing. Please pass either ':api_key' or both ':user' and ':password'."
|
52
|
+
end
|
53
|
+
|
49
54
|
client(opts)
|
50
55
|
self
|
51
56
|
end
|
@@ -138,7 +143,7 @@ class Fastly
|
|
138
143
|
client.get_stats('/stats/regions')
|
139
144
|
end
|
140
145
|
|
141
|
-
[User, Customer, Backend, CacheSetting, Condition, Dictionary, Director, Domain, Header, Healthcheck, Gzip, Match, Origin, RequestSetting, ResponseObject, Service, S3Logging, Syslog, VCL, Version].each do |klass|
|
146
|
+
[User, Customer, Backend, CacheSetting, Condition, Dictionary, DictionaryItem, Director, Domain, Header, Healthcheck, Gzip, Match, Origin, RequestSetting, ResponseObject, Service, S3Logging, Syslog, VCL, Version].each do |klass|
|
142
147
|
type = Util.class_to_path(klass)
|
143
148
|
|
144
149
|
if klass.respond_to?(:pluralize)
|
@@ -182,6 +187,10 @@ class Fastly
|
|
182
187
|
# :method: create_dictionary(opts)
|
183
188
|
# opts must contain service_id, version and name params
|
184
189
|
|
190
|
+
##
|
191
|
+
# :method: create_dictionary_item(opts)
|
192
|
+
# opts must contain service_id, dictionary_id, item_key and item_value params
|
193
|
+
|
185
194
|
##
|
186
195
|
# :method: create_director(opts)
|
187
196
|
# opts must contain service_id, version and name params
|
@@ -262,6 +271,10 @@ class Fastly
|
|
262
271
|
# :method: get_dictionary(service_id, number, name)
|
263
272
|
# Get a single dictionary
|
264
273
|
|
274
|
+
##
|
275
|
+
# :method: get_dictionary_item(service_id, dictionary_id, name)
|
276
|
+
# Get a single dictionary item
|
277
|
+
|
265
278
|
##
|
266
279
|
# :method: get_director(service_id, number, name)
|
267
280
|
# Get a Director
|
@@ -356,6 +369,11 @@ class Fastly
|
|
356
369
|
# You can also call
|
357
370
|
# dictionary.save!
|
358
371
|
|
372
|
+
##
|
373
|
+
# :method: update_dictionary_item(dictionary_item)
|
374
|
+
# You can also call
|
375
|
+
# dictionary_item.save!
|
376
|
+
|
359
377
|
##
|
360
378
|
# :method: update_director(director)
|
361
379
|
# You can also call
|
@@ -466,6 +484,11 @@ class Fastly
|
|
466
484
|
# You can also call
|
467
485
|
# dictionary.delete!
|
468
486
|
|
487
|
+
##
|
488
|
+
# :method: delete_dictionary_item(dictionary_item)
|
489
|
+
# You can also call
|
490
|
+
# dictionary_item.delete!
|
491
|
+
|
469
492
|
##
|
470
493
|
# :method: delete_director(backend)
|
471
494
|
# You can also call
|
@@ -569,6 +592,10 @@ class Fastly
|
|
569
592
|
#
|
570
593
|
# Get a list of all dictionaries
|
571
594
|
|
595
|
+
# :method: list_dictionary_items(:service_id => service.id, :dictionary_id => dictionary.name)
|
596
|
+
#
|
597
|
+
# Get a list of all items belonging to a dictionary
|
598
|
+
|
572
599
|
# :method: list_domains(:service_id => service.id, :version => version.number)
|
573
600
|
#
|
574
601
|
# Get a list of all domains
|
data/lib/fastly/client.rb
CHANGED
@@ -6,6 +6,9 @@ require 'openssl'
|
|
6
6
|
class Fastly
|
7
7
|
# The UserAgent to communicate with the API
|
8
8
|
class Client #:nodoc: all
|
9
|
+
|
10
|
+
DEFAULT_URL = 'https://api.fastly.com'.freeze
|
11
|
+
|
9
12
|
attr_accessor :http, :api_key, :user, :password, :cookie, :customer
|
10
13
|
|
11
14
|
def initialize(opts)
|
@@ -15,7 +18,7 @@ class Fastly
|
|
15
18
|
@customer = opts.fetch(:customer, nil)
|
16
19
|
@oldpurge = opts.fetch(:use_old_purge_method, false)
|
17
20
|
|
18
|
-
base = opts.fetch(:base_url,
|
21
|
+
base = opts.fetch(:base_url, DEFAULT_URL)
|
19
22
|
uri = URI.parse(base)
|
20
23
|
options = if uri.is_a? URI::HTTPS
|
21
24
|
{
|
data/lib/fastly/dictionary.rb
CHANGED
@@ -2,6 +2,38 @@ class Fastly
|
|
2
2
|
class Dictionary < BelongsToServiceAndVersion
|
3
3
|
attr_accessor :id, :name, :service_id
|
4
4
|
|
5
|
+
def items
|
6
|
+
fetcher.list_dictionary_items(:service_id => service_id, :dictionary_id => id)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Returns a Fastly::DictionaryItem corresponding to this dictionary and the +key+
|
10
|
+
#
|
11
|
+
# * +key+ - Key of the dictionary item
|
12
|
+
def item(key)
|
13
|
+
fetcher.get_dictionary_item(service_id, id, key)
|
14
|
+
rescue Fastly::Error => e
|
15
|
+
raise unless e.message =~ /Record not found/
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_item(key, value)
|
19
|
+
fetcher.create_dictionary_item(service_id: service_id, dictionary_id: id, item_key: key, item_value: value)
|
20
|
+
end
|
21
|
+
|
22
|
+
def update_item(key, value)
|
23
|
+
di = items.select {|item| item.item_key.eql? key }.first
|
24
|
+
if di
|
25
|
+
di.item_value = value
|
26
|
+
fetcher.update_dictionary_item(di)
|
27
|
+
else
|
28
|
+
add_item(key, value)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def delete_item(key)
|
33
|
+
di = items.select {|item| item.item_key.eql? key }.first
|
34
|
+
fetcher.delete_dictionary_item(di) if di
|
35
|
+
end
|
36
|
+
|
5
37
|
def self.pluralize
|
6
38
|
'dictionaries'
|
7
39
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
class Fastly
|
4
|
+
class DictionaryItem < Base
|
5
|
+
attr_accessor :dictionary_id, :item_key, :item_value, :service_id
|
6
|
+
|
7
|
+
alias_method :key, :item_key
|
8
|
+
alias_method :value, :item_value
|
9
|
+
|
10
|
+
# Return the Service object this belongs to
|
11
|
+
def service
|
12
|
+
@service ||= fetcher.get(Service, service_id)
|
13
|
+
end
|
14
|
+
|
15
|
+
# :nodoc:
|
16
|
+
def as_hash
|
17
|
+
super.delete_if { |var| %w(service_id dictionary_id).include?(var) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.get_path(service, dictionary_id, item_key, _opts = {})
|
21
|
+
"/service/#{service}/dictionary/#{dictionary_id}/item/#{CGI::escape(item_key)}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.post_path(opts)
|
25
|
+
"/service/#{opts[:service_id]}/dictionary/#{opts[:dictionary_id]}/item"
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.put_path(obj)
|
29
|
+
get_path(obj.service_id, obj.dictionary_id, obj.item_key)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.delete_path(obj)
|
33
|
+
put_path(obj)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.list_path(opts = {})
|
37
|
+
"/service/#{opts[:service_id]}/dictionary/#{opts[:dictionary_id]}/items"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/fastly/gem_version.rb
CHANGED
data/test/fastly/client_test.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
|
1
|
+
require_relative '../test_helper'
|
2
2
|
|
3
3
|
describe Fastly::Client do
|
4
|
-
let(:user)
|
5
|
-
let(:password)
|
6
|
-
let(:api_key)
|
4
|
+
let(:user) { "test@example.com" }
|
5
|
+
let(:password) { "notasecret" }
|
6
|
+
let(:api_key) { "notasecreteither" }
|
7
7
|
|
8
8
|
describe 'initialize' do
|
9
9
|
it 'raises ArgumentError when no options provided' do
|
@@ -45,6 +45,17 @@ describe Fastly::Client do
|
|
45
45
|
client = Fastly::Client.new(user: user, password: pass)
|
46
46
|
assert_equal "tasty!", client.cookie
|
47
47
|
end
|
48
|
+
|
49
|
+
it 'raises an Error if username is used in place of user as an option' do
|
50
|
+
stub_request(:any, /api.fastly.com/).
|
51
|
+
to_return(body: JSON.generate(i: "dont care"), status: 200, headers: { 'Set-Cookie' => 'tasty!' })
|
52
|
+
|
53
|
+
assert_raises(ArgumentError) { Fastly.new(username: user, password: pass) }
|
54
|
+
|
55
|
+
Fastly.new(user: user, password: pass)
|
56
|
+
Fastly.new(api_key: api_key)
|
57
|
+
Fastly.new(api_key: api_key, user: user, password: pass)
|
58
|
+
end
|
48
59
|
end
|
49
60
|
|
50
61
|
describe 'get' do
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
describe Fastly::Dictionary do
|
4
|
+
|
5
|
+
let(:client) { Fastly.new(user: 'test@example.com', password: 'password') }
|
6
|
+
let(:service_id) { SecureRandom.hex(6) }
|
7
|
+
let(:version) { 1 }
|
8
|
+
let(:dictionary) { Fastly::Dictionary.new({id: SecureRandom.hex(6), service_id: service_id, version: 1}, client) }
|
9
|
+
|
10
|
+
before {
|
11
|
+
stub_request(:post, "#{Fastly::Client::DEFAULT_URL}/login").to_return(body: '{}', status: 200, headers: { 'Set-Cookie' => 'tasty!' })
|
12
|
+
}
|
13
|
+
|
14
|
+
describe '#item' do
|
15
|
+
it 'returns the nil when item is not present' do
|
16
|
+
item_key = 'key'
|
17
|
+
get_item_url = "#{Fastly::Client::DEFAULT_URL}/service/#{service_id}/dictionary/#{dictionary.id}/item/#{item_key}"
|
18
|
+
|
19
|
+
response_body = JSON.dump(
|
20
|
+
"msg" => "Record not found",
|
21
|
+
"detail" => "Couldn't find dictionary item '{ service => #{service_id}, dictionary_id => #{dictionary.id}, item_key => #{item_key}, deleted => 0000-00-00 00:00:00'",
|
22
|
+
)
|
23
|
+
|
24
|
+
stub_request(:get, get_item_url).to_return(body: response_body, status: 404)
|
25
|
+
|
26
|
+
assert_nil dictionary.item('key')
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'returns the corresponding dictionary item when present' do
|
30
|
+
item_key = 'key'
|
31
|
+
item_value = 'value'
|
32
|
+
|
33
|
+
response_body = JSON.dump(
|
34
|
+
"dictionary_id" => dictionary.id,
|
35
|
+
"service_id" => service_id,
|
36
|
+
"item_key" => item_key,
|
37
|
+
"item_value" => item_value,
|
38
|
+
"created_at" => "2016-04-21T18:14:32+00:00",
|
39
|
+
"deleted_at" => nil,
|
40
|
+
"updated_at" => "2016-04-21T18:14:32+00:00",
|
41
|
+
)
|
42
|
+
|
43
|
+
get_item_url = "#{Fastly::Client::DEFAULT_URL}/service/#{service_id}/dictionary/#{dictionary.id}/item/#{item_key}"
|
44
|
+
|
45
|
+
stub_request(:get, get_item_url).to_return(body: response_body, status: 200)
|
46
|
+
|
47
|
+
item = dictionary.item('key')
|
48
|
+
|
49
|
+
assert_equal item_key, item.key
|
50
|
+
assert_equal item_value, item.value
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fastly
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Client library for the Fastly acceleration system
|
14
14
|
email:
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- lib/fastly/condition.rb
|
43
43
|
- lib/fastly/customer.rb
|
44
44
|
- lib/fastly/dictionary.rb
|
45
|
+
- lib/fastly/dictionary_item.rb
|
45
46
|
- lib/fastly/director.rb
|
46
47
|
- lib/fastly/domain.rb
|
47
48
|
- lib/fastly/fetcher.rb
|
@@ -66,6 +67,7 @@ files:
|
|
66
67
|
- test/api_key_test.rb
|
67
68
|
- test/common.rb
|
68
69
|
- test/fastly/client_test.rb
|
70
|
+
- test/fastly/dictionary_test.rb
|
69
71
|
- test/fastly/util_test.rb
|
70
72
|
- test/full_login_test.rb
|
71
73
|
- test/helper.rb
|
@@ -101,9 +103,11 @@ test_files:
|
|
101
103
|
- test/api_key_test.rb
|
102
104
|
- test/common.rb
|
103
105
|
- test/fastly/client_test.rb
|
106
|
+
- test/fastly/dictionary_test.rb
|
104
107
|
- test/fastly/util_test.rb
|
105
108
|
- test/full_login_test.rb
|
106
109
|
- test/helper.rb
|
107
110
|
- test/missing_api_key_test.rb
|
108
111
|
- test/stats_test.rb
|
109
112
|
- test/test_helper.rb
|
113
|
+
has_rdoc:
|