maxcdn 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://travis-ci.org/MaxCDN/ruby-maxcdn.png?branch=master)](https://travis-ci.org/MaxCDN/ruby-maxcdn) [![Gem Version](https://badge.fury.io/rb/maxcdn.png)](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
|
-
|