maxcdn 0.1.0 → 0.1.1
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/.travis.yml +1 -1
- data/BENCHMARKS.md +20 -0
- data/Gemfile +3 -0
- data/README.md +29 -0
- data/Rakefile +19 -0
- data/lib/ext/hash.rb +47 -0
- data/lib/maxcdn.rb +35 -58
- data/lib/maxcdn/version.rb +1 -1
- data/test/benchmark.rb +0 -0
- data/test/ext_hash_test.rb +32 -0
- data/test/integration.rb +3 -1
- data/test/maxcdn_test.rb +121 -0
- metadata +12 -4
- data/test/test.rb +0 -130
data/.travis.yml
CHANGED
data/BENCHMARKS.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Running benchmarks as follows in order:
|
2
|
+
|
3
|
+
maxcdn.get('zones/pull.json')
|
4
|
+
maxcdn.get('reports/popularfiles.json')
|
5
|
+
maxcdn.post('zones/pull.json', { :name => 'NAM', :url => 'URL' })
|
6
|
+
maxcdn.put('account.json', { :name => 'NAME' })
|
7
|
+
maxcdn.delete('zones/pull.json/ZONEID')
|
8
|
+
maxcdn.purge('ZONEID')
|
9
|
+
maxcdn.purge('ZONEID', 'FILE')
|
10
|
+
maxcdn.purge('ZONEID', [ 'FILE1','FILE2' ])
|
11
|
+
|
12
|
+
user system total real
|
13
|
+
get : 0.050000 0.070000 0.120000 ( 1.004877)
|
14
|
+
get : 0.020000 0.000000 0.020000 ( 0.534179)
|
15
|
+
post : 0.020000 0.000000 0.020000 ( 18.060298)
|
16
|
+
put : 0.030000 0.010000 0.040000 ( 0.981422)
|
17
|
+
delete: 0.020000 0.000000 0.020000 ( 11.770821)
|
18
|
+
purge : 0.020000 0.000000 0.020000 ( 13.584882)
|
19
|
+
purge : 0.020000 0.000000 0.020000 ( 17.310386)
|
20
|
+
purge : 0.030000 0.010000 0.040000 ( 16.446759)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -4,6 +4,8 @@ Do you like building cool stuff? Do APIs keep you up at night? We're looking fo
|
|
4
4
|
|
5
5
|
# MaxCDN REST Web Services Ruby Client
|
6
6
|
|
7
|
+
[](https://travis-ci.org/MaxCDN/ruby-maxcdn) [](http://badge.fury.io/rb/maxcdn)
|
8
|
+
|
7
9
|
## Installation
|
8
10
|
|
9
11
|
``` bash
|
@@ -24,6 +26,11 @@ require 'maxcdn'
|
|
24
26
|
|
25
27
|
api = MaxCDN::Client.new("myalias", "consumer_key", "consumer_secret")
|
26
28
|
|
29
|
+
####
|
30
|
+
# Turn on debugging for underlying Curl::Easy and CurbFu modules
|
31
|
+
#
|
32
|
+
# api.debug = true
|
33
|
+
|
27
34
|
api.get("/account.json")
|
28
35
|
```
|
29
36
|
|
@@ -58,6 +65,14 @@ api.purge(zone_id, '/some_file')
|
|
58
65
|
api.purge(zone_id, ['/some_file', '/another_file'])
|
59
66
|
```
|
60
67
|
|
68
|
+
#### Example: SSL Upload
|
69
|
+
|
70
|
+
```
|
71
|
+
max = MaxCDN::Client.new(alias, key, secret)
|
72
|
+
max.post("zones/pull/12345/ssl.json", {
|
73
|
+
:ssl_crt => File.read("/path/to/server.crt").strip,
|
74
|
+
:ssl_key => File.read("/path/to/server.key").strip })
|
75
|
+
```
|
61
76
|
|
62
77
|
## Development Quick Start
|
63
78
|
|
@@ -79,3 +94,17 @@ export SECRET=<your secret>
|
|
79
94
|
bundle exec ruby ./test/integration.rb # requires host's IP be whitelisted
|
80
95
|
```
|
81
96
|
|
97
|
+
# Change Log
|
98
|
+
|
99
|
+
##### 0.1.1
|
100
|
+
|
101
|
+
* Fixing POST, DELETE and PUT to send data via request body.
|
102
|
+
* Adding debugging for CurbFu and Curl::Easy.
|
103
|
+
* Fixing/enhancing unit tests.
|
104
|
+
* Removing `secure_connection` handling, as all connections should be secure.
|
105
|
+
* Fixing [414 Request-URI Too Large](https://github.com/netdna/netdnarws-ruby/issues/10) from old [netdnarws-ruby](https://github.com/netdna/netdnarws-ruby) client.
|
106
|
+
|
107
|
+
|
108
|
+
##### 0.1.0
|
109
|
+
|
110
|
+
* Initial Release
|
data/Rakefile
CHANGED
@@ -1,2 +1,21 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
require "bundler/gem_tasks"
|
3
|
+
require "rake/testtask"
|
4
|
+
|
5
|
+
Rake::TestTask.new(:test) do |t|
|
6
|
+
t.libs << "test"
|
7
|
+
t.test_files = FileList['test/*_test.rb']
|
8
|
+
t.verbose = true
|
9
|
+
end
|
10
|
+
|
11
|
+
Rake::TestTask.new(:integration) do |t|
|
12
|
+
t.libs << "test"
|
13
|
+
t.test_files = FileList['test/integration.rb']
|
14
|
+
t.verbose = true
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run benchmarks"
|
18
|
+
task :benchmark do
|
19
|
+
require "./test/benchmark"
|
20
|
+
end
|
21
|
+
|
data/lib/ext/hash.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
class Hash
|
2
|
+
RESERVED_CHARACTERS = /[^a-zA-Z0-9\-\.\_\~]/
|
3
|
+
|
4
|
+
def _escape(value)
|
5
|
+
URI::escape(value.to_s, RESERVED_CHARACTERS)
|
6
|
+
rescue ArgumentError
|
7
|
+
URI::escape(value.to_s.force_encoding(Encoding::UTF_8), RESERVED_CHARACTERS)
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_params
|
11
|
+
params = ''
|
12
|
+
stack = []
|
13
|
+
|
14
|
+
each do |k, v|
|
15
|
+
if v.is_a?(Hash)
|
16
|
+
stack << [k,v]
|
17
|
+
elsif v.is_a?(Array)
|
18
|
+
stack << [k,Hash.from_array(v)]
|
19
|
+
else
|
20
|
+
params << "#{_escape(k)}=#{_escape(v)}&"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
stack.each do |parent, hash|
|
25
|
+
parent = _escape(parent) if parent.is_a? String
|
26
|
+
hash.each do |k, v|
|
27
|
+
if v.is_a?(Hash)
|
28
|
+
stack << ["#{parent}[#{k}]", v]
|
29
|
+
else
|
30
|
+
params << "#{parent}[#{k}]=#{_escape(v)}&"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
params.chop!
|
36
|
+
params
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.from_array(array = [])
|
40
|
+
h = Hash.new
|
41
|
+
array.size.times do |t|
|
42
|
+
h[t] = array[t]
|
43
|
+
end
|
44
|
+
h
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
data/lib/maxcdn.rb
CHANGED
@@ -1,33 +1,19 @@
|
|
1
1
|
require "signet/oauth_1/client"
|
2
2
|
require "curb-fu"
|
3
3
|
require "json"
|
4
|
+
require "./lib/ext/hash"
|
5
|
+
require "pp" # for debug
|
4
6
|
|
5
7
|
module MaxCDN
|
6
|
-
module Utils
|
7
|
-
RESERVED_CHARACTERS = /[^a-zA-Z0-9\-\.\_\~]/
|
8
|
-
|
9
|
-
def escape(value)
|
10
|
-
URI::escape(value.to_s, MaxCDN::Utils::RESERVED_CHARACTERS)
|
11
|
-
rescue ArgumentError
|
12
|
-
URI::escape(value.to_s.force_encoding(Encoding::UTF_8), MaxCDN::Utils::RESERVED_CHARACTERS)
|
13
|
-
end
|
14
|
-
|
15
|
-
def encode_params params={}
|
16
|
-
Hash[params.map { |k, v| [escape(k), escape(v)] }]
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
8
|
class APIException < Exception
|
21
9
|
end
|
22
10
|
|
23
11
|
class Client
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
def initialize(company_alias, key, secret, server="rws.maxcdn.com", secure_connection=true)
|
12
|
+
attr_accessor :client, :debug
|
13
|
+
def initialize(company_alias, key, secret, server="rws.maxcdn.com", _debug=false)
|
14
|
+
@debug = _debug
|
28
15
|
@company_alias = company_alias
|
29
16
|
@server = server
|
30
|
-
@secure_connection = secure_connection
|
31
17
|
@request_signer = Signet::OAuth1::Client.new(
|
32
18
|
:client_credential_key => key,
|
33
19
|
:client_credential_secret => secret,
|
@@ -36,84 +22,75 @@ module MaxCDN
|
|
36
22
|
end
|
37
23
|
|
38
24
|
def _connection_type
|
39
|
-
return "http" unless @secure_connection
|
40
25
|
"https"
|
41
26
|
end
|
42
27
|
|
43
|
-
def _encode_params params={}
|
44
|
-
encode_params(params).map { |k, v|
|
45
|
-
"#{k}=#{v}"
|
46
|
-
}.join "&"
|
47
|
-
end
|
48
|
-
|
49
28
|
def _get_url uri, params={}
|
50
|
-
|
51
29
|
url = "#{_connection_type}://#{@server}/#{@company_alias}/#{uri.gsub(/^\//, "")}"
|
52
|
-
if not params.empty?
|
53
|
-
url += "?#{
|
30
|
+
if params and not params.empty?
|
31
|
+
url += "?#{params.to_params}"
|
54
32
|
end
|
55
33
|
|
56
34
|
url
|
57
35
|
end
|
58
36
|
|
59
|
-
def _response_as_json method, uri, options={},
|
60
|
-
if
|
61
|
-
puts "Making #{method.upcase} request to #{_get_url uri}"
|
62
|
-
end
|
37
|
+
def _response_as_json method, uri, options={}, data={}
|
38
|
+
puts "Making #{method.upcase} request to #{_get_url uri}" if debug
|
63
39
|
|
64
|
-
|
65
|
-
:uri => _get_url(uri, options[:body] ? attributes[0] : {}),
|
40
|
+
req_opts = {
|
66
41
|
:method => method
|
67
42
|
}
|
68
43
|
|
69
|
-
|
70
|
-
|
44
|
+
req_opts[:uri] = _get_url(uri, (options[:body] ? {} : data))
|
45
|
+
req_opts[:body] = data.to_params if options[:body]
|
46
|
+
|
47
|
+
request = @request_signer.generate_authenticated_request(req_opts)
|
71
48
|
request.headers["User-Agent"] = "Ruby MaxCDN API Client"
|
72
49
|
|
73
50
|
begin
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
51
|
+
curb_opts = {
|
52
|
+
:url => req_opts[:uri],
|
53
|
+
:headers => request.headers
|
54
|
+
}
|
55
|
+
|
56
|
+
CurbFu.debug = debug
|
57
|
+
|
58
|
+
response = CurbFu.send method, curb_opts, request.body do |curb|
|
59
|
+
curb.verbose = debug
|
60
|
+
|
61
|
+
# Because CurbFu overwrite the content-type header passed
|
62
|
+
# to it
|
63
|
+
curb.headers["Content-Type"] = "application/json" if request.body
|
82
64
|
end
|
83
65
|
|
84
|
-
|
66
|
+
pp response if debug
|
85
67
|
|
86
68
|
response_json = JSON.load(response.body)
|
87
69
|
|
88
|
-
|
70
|
+
pp response_json if debug
|
89
71
|
|
90
|
-
|
72
|
+
unless response.success? or response.redirect?
|
91
73
|
error_message = response_json["error"]["message"]
|
92
74
|
raise MaxCDN::APIException.new("#{response.status}: #{error_message}")
|
93
75
|
end
|
94
76
|
rescue TypeError
|
95
|
-
raise MaxCDN::APIException.new(
|
96
|
-
"#{response.status}: No information supplied by the server"
|
97
|
-
)
|
77
|
+
raise MaxCDN::APIException.new("#{response.status}: No information supplied by the server")
|
98
78
|
end
|
99
79
|
|
100
80
|
response_json
|
101
81
|
end
|
102
82
|
|
103
|
-
[ :
|
83
|
+
[ :post, :get, :put, :delete ].each do |meth|
|
104
84
|
define_method(meth) do |uri, data={}, options={}|
|
105
|
-
options[:body]
|
85
|
+
options[:body] ||= true if meth != :get
|
106
86
|
self._response_as_json meth.to_s, uri, options, data
|
107
87
|
end
|
108
88
|
end
|
109
89
|
|
110
90
|
def purge zone_id, file_or_files=nil, options={}
|
111
91
|
unless file_or_files.nil?
|
112
|
-
return self.delete(
|
113
|
-
|
114
|
-
{"file" => file_or_files},
|
115
|
-
options
|
116
|
-
)
|
92
|
+
return self.delete("/zones/pull.json/#{zone_id}/cache",
|
93
|
+
{ "files" => file_or_files }, options)
|
117
94
|
end
|
118
95
|
|
119
96
|
self.delete("/zones/pull.json/#{zone_id}/cache", {}, options)
|
data/lib/maxcdn/version.rb
CHANGED
data/test/benchmark.rb
CHANGED
File without changes
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "minitest/autorun"
|
3
|
+
require "minitest/reporters"
|
4
|
+
|
5
|
+
require "./lib/ext/hash"
|
6
|
+
|
7
|
+
class Client < Minitest::Test
|
8
|
+
def test_to_params_basic
|
9
|
+
assert_equal "foo=bar", { "foo" => "bar" }.to_params
|
10
|
+
assert_equal "foo=bar&bar=foo", { :foo => "bar", :bar => "foo" }.to_params
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_to_params_escape
|
14
|
+
assert_equal "foo%20bar=bar%20boo", { "foo bar" => "bar boo" }.to_params
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_to_params_array
|
18
|
+
assert_equal "foo[0]=bar&foo[1]=boo", { "foo" => [ "bar", "boo" ] }.to_params
|
19
|
+
assert_equal "foo[0]=bar&foo[1]=boo", { :foo => [ :bar, :boo ] }.to_params
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_to_params_crazy
|
23
|
+
assert_equal "a=1&c=%40%24%5E%24%23%25%26%23%26&%3F%21=asdf&1=FDAS&b[0]=a&b[1]=b&b[2]=c", {
|
24
|
+
:a => 1,
|
25
|
+
:b => [ :a, :b, :c ],
|
26
|
+
:c => "@$^$#%&#&",
|
27
|
+
"?!" => "asdf",
|
28
|
+
1 => "FDAS"
|
29
|
+
}.to_params
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/test/integration.rb
CHANGED
@@ -14,6 +14,8 @@ class Client < Minitest::Test
|
|
14
14
|
|
15
15
|
def setup
|
16
16
|
@max = MaxCDN::Client.new(ENV["ALIAS"], ENV["KEY"], ENV["SECRET"])
|
17
|
+
@max.debug = true if ENV['DEBUG']
|
18
|
+
|
17
19
|
@time = Time.now.to_i.to_s
|
18
20
|
end
|
19
21
|
|
@@ -37,7 +39,7 @@ class Client < Minitest::Test
|
|
37
39
|
}
|
38
40
|
|
39
41
|
zid = @max.post("zones/pull.json", zone)["data"]["pullzone"]["id"]
|
40
|
-
assert zid, "post"
|
42
|
+
assert zid, "post id"
|
41
43
|
|
42
44
|
assert_equal 200, @max.delete("zones/pull.json/#{zid}")["code"], "delete (warning: manually delete zone #{zid} at https://cp.maxcdn.com/zones/pull)."
|
43
45
|
end
|
data/test/maxcdn_test.rb
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "minitest/autorun"
|
3
|
+
require "minitest/reporters"
|
4
|
+
|
5
|
+
require "./lib/maxcdn"
|
6
|
+
|
7
|
+
Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
|
8
|
+
|
9
|
+
require "webmock"
|
10
|
+
include WebMock::API
|
11
|
+
|
12
|
+
host = "https://rws.maxcdn.com/alias"
|
13
|
+
|
14
|
+
headers = {
|
15
|
+
'Authorization' => /.+/,
|
16
|
+
'Cache-Control' => /.+/,
|
17
|
+
'Content-Type' => /application.+/,
|
18
|
+
'Expect' => /.*/,
|
19
|
+
'User-Agent' => "Ruby MaxCDN API Client"
|
20
|
+
}
|
21
|
+
|
22
|
+
stub_request(:post, host+"/zones/pull.json")
|
23
|
+
.with(:body => 'foo=bar&bar=foo', :headers => headers)
|
24
|
+
.to_return(:body => '{"foo": "bar"}')
|
25
|
+
|
26
|
+
stub_request(:post, host+"/zones/pull.json?foo=bar")
|
27
|
+
.with(:headers => headers)
|
28
|
+
.to_return(:body => '{"foo": "bar"}')
|
29
|
+
|
30
|
+
stub_request(:put, host+"/account.json")
|
31
|
+
.with(:body => "foo=bar", :headers => headers)
|
32
|
+
.to_return(:body => '{"foo":"bar"}')
|
33
|
+
|
34
|
+
stub_request(:delete, host+"/zones/pull.json/12345/cache")
|
35
|
+
.with(:body => "files=foo.txt", :headers => headers)
|
36
|
+
.to_return(:body => '{"foo":"bar"}')
|
37
|
+
|
38
|
+
stub_request(:delete, host+"/zones/pull.json/12345/cache")
|
39
|
+
.with(:body => "files[0]=foo.txt&files[1]=bar.txt", :headers => headers)
|
40
|
+
.to_return(:body => '{"foo":"bar"}')
|
41
|
+
|
42
|
+
# stubs below this don't send content-type header
|
43
|
+
headers.delete('Content-Type')
|
44
|
+
|
45
|
+
stub_request(:get, host+"/account.json")
|
46
|
+
.with(:headers => headers)
|
47
|
+
.to_return(:body => '{"foo":"bar"}')
|
48
|
+
|
49
|
+
stub_request(:delete, host+"/zones/pull.json/12345/cache")
|
50
|
+
.with(:headers => headers)
|
51
|
+
.to_return(:body => '{"foo":"bar"}')
|
52
|
+
|
53
|
+
class Client < Minitest::Test
|
54
|
+
|
55
|
+
def setup
|
56
|
+
@max = MaxCDN::Client.new("alias", "key", "secret")
|
57
|
+
@max.debug = true if ENV['DEBUG']
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_initialize
|
61
|
+
assert_equal "alias", @max.instance_variable_get(:@company_alias)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test__connection_type
|
65
|
+
assert_equal "https", @max._connection_type
|
66
|
+
end
|
67
|
+
|
68
|
+
def test__get_url
|
69
|
+
assert_equal "https://rws.maxcdn.com/alias/foo",
|
70
|
+
@max._get_url("/foo")
|
71
|
+
assert_equal "https://rws.maxcdn.com/alias/foo?foo=foo%20bar",
|
72
|
+
@max._get_url("/foo", { :foo => "foo bar" })
|
73
|
+
end
|
74
|
+
|
75
|
+
def test__response_as_json_standard
|
76
|
+
res = @max._response_as_json("get", "account.json")
|
77
|
+
assert_equal({ "foo" => "bar" }, res)
|
78
|
+
|
79
|
+
res = @max._response_as_json("post", "zones/pull.json?foo=bar")
|
80
|
+
assert_equal({ "foo" => "bar" }, res)
|
81
|
+
end
|
82
|
+
|
83
|
+
def test__response_as_json_body
|
84
|
+
res = @max._response_as_json("post", "zones/pull.json", { :body => true }, { "foo"=> "bar", "bar" => "foo" })
|
85
|
+
assert_equal({ "foo" => "bar" }, res)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_get
|
89
|
+
assert_equal({ "foo" => "bar" }, @max.get("account.json"))
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_post
|
93
|
+
assert_equal({ "foo" => "bar" }, @max.post("zones/pull.json", {"foo" => "bar", "bar" => "foo"}))
|
94
|
+
assert_equal({ "foo" => "bar" }, @max.post("zones/pull.json?foo=bar"))
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_put
|
98
|
+
assert_equal({ "foo" => "bar" }, @max.put("account.json", {"foo"=>"bar"}))
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_delete_cache
|
102
|
+
assert_equal({ "foo" => "bar" }, @max.delete("zones/pull.json/12345/cache"))
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_delete_cache_w_files
|
106
|
+
assert_equal({ "foo" => "bar" }, @max.delete("zones/pull.json/12345/cache", { :files => "foo.txt" }))
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_purge
|
110
|
+
assert_equal({ "foo" => "bar" }, @max.purge(12345))
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_purge_file
|
114
|
+
assert_equal({ "foo" => "bar" }, @max.purge(12345, "foo.txt"))
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_purge_files
|
118
|
+
assert_equal({ "foo" => "bar" }, @max.purge(12345, [ "foo.txt", "bar.txt" ]))
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maxcdn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: signet
|
@@ -51,6 +51,7 @@ extra_rdoc_files: []
|
|
51
51
|
files:
|
52
52
|
- .gitignore
|
53
53
|
- .travis.yml
|
54
|
+
- BENCHMARKS.md
|
54
55
|
- Gemfile
|
55
56
|
- LICENSE
|
56
57
|
- README.md
|
@@ -59,12 +60,14 @@ files:
|
|
59
60
|
- examples/cache.rb
|
60
61
|
- examples/report.rb
|
61
62
|
- examples/simple.rb
|
63
|
+
- lib/ext/hash.rb
|
62
64
|
- lib/maxcdn.rb
|
63
65
|
- lib/maxcdn/version.rb
|
64
66
|
- maxcdn.gemspec
|
65
67
|
- test/benchmark.rb
|
68
|
+
- test/ext_hash_test.rb
|
66
69
|
- test/integration.rb
|
67
|
-
- test/
|
70
|
+
- test/maxcdn_test.rb
|
68
71
|
homepage: http://www.maxcdn.com
|
69
72
|
licenses:
|
70
73
|
- MIT
|
@@ -78,12 +81,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
78
81
|
- - ! '>='
|
79
82
|
- !ruby/object:Gem::Version
|
80
83
|
version: '0'
|
84
|
+
segments:
|
85
|
+
- 0
|
86
|
+
hash: -4596852110847613603
|
81
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
88
|
none: false
|
83
89
|
requirements:
|
84
90
|
- - ! '>='
|
85
91
|
- !ruby/object:Gem::Version
|
86
92
|
version: '0'
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
hash: -4596852110847613603
|
87
96
|
requirements: []
|
88
97
|
rubyforge_project:
|
89
98
|
rubygems_version: 1.8.23
|
@@ -91,4 +100,3 @@ signing_key:
|
|
91
100
|
specification_version: 3
|
92
101
|
summary: A Rest Client For MaxCDN Rest Web Services
|
93
102
|
test_files: []
|
94
|
-
has_rdoc:
|
data/test/test.rb
DELETED
@@ -1,130 +0,0 @@
|
|
1
|
-
require "curb-fu"
|
2
|
-
|
3
|
-
require "minitest/autorun"
|
4
|
-
require "minitest/mock"
|
5
|
-
require "minitest/reporters"
|
6
|
-
|
7
|
-
#require "signet/oauth_1/client"
|
8
|
-
require "./lib/maxcdn"
|
9
|
-
|
10
|
-
Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
|
11
|
-
|
12
|
-
class Client < Minitest::Test
|
13
|
-
|
14
|
-
def new_response
|
15
|
-
response = Minitest::Mock.new
|
16
|
-
response.expect(:body, '{ "foo": "bar" }')
|
17
|
-
response.expect(:success?, true)
|
18
|
-
response
|
19
|
-
end
|
20
|
-
|
21
|
-
def setup
|
22
|
-
@max = MaxCDN::Client.new("alias", "key", "secret")
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_initialize
|
26
|
-
assert_equal "alias", @max.instance_variable_get(:@company_alias)
|
27
|
-
end
|
28
|
-
|
29
|
-
def test__connection_type
|
30
|
-
assert_equal "https", @max._connection_type
|
31
|
-
|
32
|
-
m = MaxCDN::Client.new("alias", "key", "secret", "foo", false)
|
33
|
-
assert_equal "http", m._connection_type
|
34
|
-
end
|
35
|
-
|
36
|
-
def test__encode_params
|
37
|
-
assert_equal "foo=foo%20bar&bah=boo",
|
38
|
-
@max._encode_params({ :foo => "foo bar", :bah => "boo" })
|
39
|
-
end
|
40
|
-
|
41
|
-
def test__get_url
|
42
|
-
assert_equal "https://rws.maxcdn.com/alias/foo",
|
43
|
-
@max._get_url("/foo")
|
44
|
-
assert_equal "https://rws.maxcdn.com/alias/foo?foo=foo%20bar",
|
45
|
-
@max._get_url("/foo", { :foo => "foo bar" })
|
46
|
-
end
|
47
|
-
|
48
|
-
def test__response_as_json_standard
|
49
|
-
response = new_response
|
50
|
-
CurbFu::Request.stub :get, response do
|
51
|
-
res = @max._response_as_json("get", "http://example.com")
|
52
|
-
assert res
|
53
|
-
assert response.verify
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def test__response_as_json_standard
|
58
|
-
response = new_response
|
59
|
-
CurbFu::Request.stub :get, response do
|
60
|
-
res = @max._response_as_json("get", "http://example.com",
|
61
|
-
{ :debug_request => true })
|
62
|
-
assert res.body
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_get
|
67
|
-
response = new_response
|
68
|
-
CurbFu::Request.stub :get, response do
|
69
|
-
assert_equal({ "foo" => "bar" }, @max.get("/account.json"))
|
70
|
-
end
|
71
|
-
assert response.verify
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_post
|
75
|
-
response = new_response
|
76
|
-
CurbFu::Request.stub :post, response do
|
77
|
-
assert_equal({ "foo" => "bar" }, @max.post("/zones/pull.json", {'name' => 'test_zone', 'url' => 'http://my-test-site.com'}))
|
78
|
-
end
|
79
|
-
assert response.verify
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_put
|
83
|
-
response = new_response
|
84
|
-
CurbFu::Request.stub :put, response do
|
85
|
-
assert_equal({ "foo" => "bar" }, @max.put("/zones/pull.json/1234", {'name' => 'i_didnt_like_test'}))
|
86
|
-
end
|
87
|
-
assert response.verify
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_delete
|
91
|
-
response = new_response
|
92
|
-
CurbFu::Request.stub :delete, response do
|
93
|
-
assert_equal({ "foo" => "bar" }, @max.delete("/zones/pull.json/1234"))
|
94
|
-
end
|
95
|
-
assert response.verify
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_delete_file
|
99
|
-
response = new_response
|
100
|
-
CurbFu::Request.stub :delete, response do
|
101
|
-
assert_equal({ "foo" => "bar" }, @max.delete("/zones/pull.json/1234/cache", {"file" => "/robots.txt"}))
|
102
|
-
end
|
103
|
-
assert response.verify
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_purge
|
107
|
-
response = new_response
|
108
|
-
CurbFu::Request.stub :delete, response do
|
109
|
-
assert_equal({ "foo" => "bar" }, @max.purge(12345))
|
110
|
-
end
|
111
|
-
assert response.verify
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_purge_file
|
115
|
-
response = new_response
|
116
|
-
CurbFu::Request.stub :delete, response do
|
117
|
-
assert_equal({ "foo" => "bar" }, @max.purge(12345, "/foo.txt"))
|
118
|
-
end
|
119
|
-
assert response.verify
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_purge_files
|
123
|
-
response = new_response
|
124
|
-
CurbFu::Request.stub :delete, response do
|
125
|
-
assert_equal({ "foo" => "bar" }, @max.purge(12345, [ "/foo.txt", "/bar.txt" ]))
|
126
|
-
end
|
127
|
-
assert response.verify
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|