akamai_api 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/.gitignore +19 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +189 -0
  6. data/Thorfile +30 -0
  7. data/akamai_api.gemspec +27 -0
  8. data/bin/akamai_api +22 -0
  9. data/lib/akamai_api/ccu.rb +71 -0
  10. data/lib/akamai_api/ccu_response.rb +51 -0
  11. data/lib/akamai_api/cli/ccu.rb +11 -0
  12. data/lib/akamai_api/cli/ccu_arl.rb +40 -0
  13. data/lib/akamai_api/cli/ccu_cp_code.rb +48 -0
  14. data/lib/akamai_api/cli/command.rb +24 -0
  15. data/lib/akamai_api/cli/eccu.rb +55 -0
  16. data/lib/akamai_api/cli/template.rb +36 -0
  17. data/lib/akamai_api/cli.rb +3 -0
  18. data/lib/akamai_api/cp_code.rb +26 -0
  19. data/lib/akamai_api/eccu_request.rb +137 -0
  20. data/lib/akamai_api/soap_body.rb +52 -0
  21. data/lib/akamai_api/version.rb +3 -0
  22. data/lib/akamai_api.rb +9 -0
  23. data/spec/fixtures/delete/success.xml +8 -0
  24. data/spec/fixtures/eccu_request.xml +10 -0
  25. data/spec/fixtures/get_cp_codes/sample.xml +21 -0
  26. data/spec/fixtures/get_ids/success.xml +11 -0
  27. data/spec/fixtures/get_info/success.xml +25 -0
  28. data/spec/fixtures/set_notes/success.xml +8 -0
  29. data/spec/fixtures/set_status_change_email/success.xml +8 -0
  30. data/spec/fixtures/upload/fault.xml +13 -0
  31. data/spec/fixtures/upload/success.xml +8 -0
  32. data/spec/fixtures/wsdl:purge_request/success.xml +15 -0
  33. data/spec/lib/akamai_api/ccu_spec.rb +115 -0
  34. data/spec/lib/akamai_api/cp_code_spec.rb +25 -0
  35. data/spec/lib/akamai_api/eccu_request_spec.rb +216 -0
  36. data/spec/lib/akamai_api/soap_body_spec.rb +51 -0
  37. data/spec/spec_helper.rb +13 -0
  38. data/spec/support/savon_tester.rb +18 -0
  39. data/wsdls/ccuapi.wsdl +82 -0
  40. metadata +197 -0
@@ -0,0 +1,216 @@
1
+ require 'spec_helper'
2
+
3
+ module AkamaiApi
4
+ describe EccuRequest do
5
+ include SavonTester
6
+
7
+ before { stub_savon_model EccuRequest }
8
+
9
+ describe '::all_ids' do
10
+ before { savon.expects('getIds').returns(:success) }
11
+
12
+ it 'returns the id list of all available requests' do
13
+ EccuRequest.all_ids.should =~ ['42994282', '43000154']
14
+ end
15
+ end
16
+
17
+ describe '::find' do
18
+ before { savon.expects('getInfo').returns(:success) }
19
+
20
+ context 'when calling the ECCU service' do
21
+ it 'sets the specified code' do
22
+ SoapBody.any_instance.should_receive(:integer).with :fileId, 1234567
23
+ EccuRequest.find('1234567')
24
+ end
25
+
26
+ it 'sets to not return file content by default' do
27
+ SoapBody.any_instance.should_receive(:boolean).with :retrieveContents, false
28
+ EccuRequest.find('1234567')
29
+ end
30
+
31
+ it 'sets to return file content if verbose is specified' do
32
+ SoapBody.any_instance.should_receive(:boolean).with :retrieveContents, true
33
+ EccuRequest.find('1234567', :verbose => true)
34
+ end
35
+ end
36
+
37
+ it 'correctly assign the exact match' do
38
+ r = EccuRequest.find('1234567')
39
+ r.property[:exact_match].should be_true
40
+ end
41
+ end
42
+
43
+ describe '::last' do
44
+ it 'find the most recent entry' do
45
+ EccuRequest.stub! :all_ids => %w(a b)
46
+ EccuRequest.should_receive(:find).with('b', anything()).and_return :a
47
+ EccuRequest.last.should == :a
48
+ end
49
+ end
50
+
51
+ describe '::first' do
52
+ it 'find the oldest entry' do
53
+ EccuRequest.stub! :all_ids => %w(a b)
54
+ EccuRequest.should_receive(:find).with('a', anything()).and_return :a
55
+ EccuRequest.first.should == :a
56
+ end
57
+ end
58
+
59
+ describe '::all' do
60
+ it 'returns the detail for each enlisted id' do
61
+ EccuRequest.stub! :all_ids => %w(a b)
62
+ EccuRequest.should_receive(:find).with('a', anything()).and_return(:a)
63
+ EccuRequest.should_receive(:find).with('b', anything()).and_return(:b)
64
+ EccuRequest.all.should =~ [:a, :b]
65
+ end
66
+ end
67
+
68
+ describe 'publishing' do
69
+ let(:xml_request) { File.expand_path "../../../fixtures/eccu_request.xml", __FILE__ }
70
+ let(:xml_request_content) { File.read xml_request }
71
+
72
+ describe '::publish_file' do
73
+ it 'calls publish with the content of the specified file' do
74
+ args = {}
75
+ EccuRequest.should_receive(:publish).with('foo', xml_request_content, args)
76
+ EccuRequest.publish_file('foo', xml_request, args)
77
+ end
78
+ end
79
+
80
+ describe '::publish' do
81
+ context 'when there is an error' do
82
+ before { savon.expects('upload').returns(:fault) }
83
+
84
+ it 'raises an error' do
85
+ expect { EccuRequest.publish '', xml_request_content }
86
+ end
87
+ end
88
+
89
+ context 'when there are no errors' do
90
+ before { savon.expects('upload').returns(:success) }
91
+
92
+ it 'returns an EccuRequest instance' do
93
+ EccuRequest.publish('', xml_request_content).should be_a Fixnum
94
+ end
95
+
96
+ it 'assigns the fields correctly' do
97
+ soap_body = SoapBody.any_instance
98
+ soap_body.should_receive(:string).with :filename, 'eccu_request.xml'
99
+ soap_body.should_receive(:text).with :contents, xml_request_content
100
+ soap_body.should_receive(:string).with :notes, 'sample notes'
101
+ soap_body.should_receive(:string).with :versionString, 'v2'
102
+ soap_body.should_receive(:string).with :statusChangeEmail, 'foo@foo.com bar@bar.com'
103
+ soap_body.should_receive(:string).with :propertyName, 'foo.com'
104
+ soap_body.should_receive(:string).with :propertyType, 'prop'
105
+ soap_body.should_receive(:boolean).with :propertyNameExactMatch, false
106
+ EccuRequest.publish('foo.com', xml_request_content, {
107
+ :file_name => 'eccu_request.xml',
108
+ :notes => 'sample notes',
109
+ :version => 'v2',
110
+ :emails => %w(foo@foo.com bar@bar.com),
111
+ :property_type => 'prop',
112
+ :property_exact_match => false
113
+ })
114
+ end
115
+
116
+ it 'assigns a default notes field if no notes are specified' do
117
+ SoapBody.any_instance.stub :string => nil
118
+ SoapBody.any_instance.should_receive(:string).with(:notes, kind_of(String))
119
+ EccuRequest.publish '', xml_request_content
120
+ end
121
+
122
+ it 'assigns emails field if specified' do
123
+ SoapBody.any_instance.should_not_receive(:string).with(:statusChangeEmail, anything())
124
+ EccuRequest.publish '', xml_request_content
125
+ end
126
+
127
+ it 'assigns the property type to hostheader by default' do
128
+ SoapBody.any_instance.stub :string => nil
129
+ SoapBody.any_instance.should_receive(:string).with(:propertyType, 'hostheader')
130
+ EccuRequest.publish '', xml_request_content
131
+ end
132
+
133
+ it 'assigns the property exact match to true by default' do
134
+ SoapBody.any_instance.stub :boolean => nil
135
+ SoapBody.any_instance.should_receive(:boolean).with(:propertyNameExactMatch, true)
136
+ EccuRequest.publish '', xml_request_content
137
+ end
138
+ end
139
+ end
140
+ end
141
+
142
+ describe 'instance' do
143
+ describe 'constructor' do
144
+ it 'assigns the attributes hash to the accessors' do
145
+ req = EccuRequest.new :status => 'foo', :notes => 'bar'
146
+ req.status.should == 'foo'
147
+ req.notes.should == 'bar'
148
+ end
149
+ end
150
+
151
+ describe '#update_notes!' do
152
+ before { savon.expects('setNotes').returns(:success) }
153
+
154
+ it 'updates the notes field' do
155
+ req = EccuRequest.new :code => '1234'
156
+ expect {
157
+ req.update_notes! 'foo'
158
+ }.to change(req, :notes).to 'foo'
159
+ end
160
+
161
+ it 'calls the ECCU service using code and notes' do
162
+ req = EccuRequest.new :code => '1234'
163
+ soap_body = SoapBody.any_instance
164
+ soap_body.should_receive(:integer).with :fileId, 1234
165
+ soap_body.should_receive(:string).with :notes, 'foo'
166
+ req.update_notes! 'foo'
167
+ end
168
+
169
+ it 'calls the ECCU service and return the service boolean response' do
170
+ req = EccuRequest.new :code => '1234'
171
+ req.update_notes!('foo').should == true
172
+ end
173
+ end
174
+
175
+ describe '#update_email' do
176
+ before { savon.expects('setStatusChangeEmail').returns(:success) }
177
+
178
+ it 'updates the email field' do
179
+ req = EccuRequest.new :code => '1234'
180
+ expect {
181
+ req.update_email! 'foo'
182
+ }.to change(req, :email).to 'foo'
183
+ end
184
+
185
+ it 'calls the ECCU service using code and email' do
186
+ req = EccuRequest.new :code => '1234'
187
+ soap_body = SoapBody.any_instance
188
+ soap_body.should_receive(:integer).with :fileId, 1234
189
+ soap_body.should_receive(:string).with :statusChangeEmail, 'foo'
190
+ req.update_email! 'foo'
191
+ end
192
+
193
+ it 'calls the ECCU service and return the service boolean response' do
194
+ req = EccuRequest.new :code => '1234'
195
+ req.update_email!('foo').should == true
196
+ end
197
+ end
198
+
199
+ describe '#destroy' do
200
+ before { savon.expects('delete').returns(:success) }
201
+
202
+ it 'calls the ECCU service using code' do
203
+ req = EccuRequest.new :code => '1234'
204
+ soap_body = SoapBody.any_instance
205
+ soap_body.should_receive(:integer).with :fileId, 1234
206
+ req.destroy
207
+ end
208
+
209
+ it 'calls the ECCU service and return the service boolean response' do
210
+ req = EccuRequest.new :code => '1234'
211
+ req.destroy.should == true
212
+ end
213
+ end
214
+ end
215
+ end
216
+ end
@@ -0,0 +1,51 @@
1
+ module AkamaiApi
2
+ describe SoapBody do
3
+ let(:config) { double :env_namespace => '', :soap_version => '2' }
4
+ subject { SoapBody.new Savon::SOAP::XML.new config}
5
+
6
+ it 'adds the soapenc ns' do
7
+ Savon::SOAP::XML.new(config).namespaces.should_not include 'xmlns:soapenc'
8
+ subject.soap.namespaces.should include 'xmlns:soapenc'
9
+ end
10
+
11
+ describe '#string' do
12
+ before { subject.string 'foo', 'sample' }
13
+
14
+ it 'adds a string field' do
15
+ subject.body[:foo].should == 'sample'
16
+ end
17
+
18
+ it 'sets the correct type attribute' do
19
+ subject.body_attributes[:foo]['xsi:type'].should == 'xsd:string'
20
+ end
21
+ end
22
+
23
+ describe '#array' do
24
+ before { subject.array 'foo', ['a', 'b'] }
25
+
26
+ it 'adds an array field' do
27
+ subject.body[:foo].should == { 'item' => ['a', 'b'] }
28
+ end
29
+
30
+ it 'sets the correct type attribute' do
31
+ subject.body_attributes[:foo]['xsi:type'].should == 'wsdl:ArrayOfString'
32
+ end
33
+
34
+ it 'sets the correct arrayType attribute' do
35
+ subject.body_attributes[:foo]['soapenc:arrayType'].should == 'xsd:string[2]'
36
+ end
37
+ end
38
+
39
+ describe '#text' do
40
+ before { subject.text 'foo', 'foo' }
41
+
42
+ it 'adds a base64 encoded string field' do
43
+ Base64.decode64(subject.body[:foo]).should == 'foo'
44
+ end
45
+
46
+ it 'sets the correct type attribute' do
47
+ subject.body_attributes[:foo]['xsi:type'].should == 'xsd:base64Binary'
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path '../../lib/akamai_api', __FILE__
2
+ require File.expand_path '../auth.rb', __FILE__
3
+
4
+ require 'savon_spec'
5
+
6
+ Savon::Spec::Fixture.path = File.expand_path '../fixtures', __FILE__
7
+ Dir[File.expand_path '../support/**/*.rb', __FILE__].each do |f|
8
+ require f
9
+ end
10
+
11
+ RSpec.configure do |config|
12
+ config.include Savon::Spec::Macros
13
+ end
@@ -0,0 +1,18 @@
1
+ require 'active_support/concern'
2
+
3
+ module SavonTester
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ let(:client) do
8
+ Savon::Client.new do
9
+ wsdl.endpoint = "http://example.com"
10
+ wsdl.namespace = "http://users.example.com"
11
+ end
12
+ end
13
+ end
14
+
15
+ def stub_savon_model model
16
+ model.stub :client => client, :basic_auth => nil
17
+ end
18
+ end
data/wsdls/ccuapi.wsdl ADDED
@@ -0,0 +1,82 @@
1
+ <?xml version="1.0" standalone="no"?>
2
+ <definitions name="PurgeRequest"
3
+ targetNamespace="http://www.akamai.com/purge"
4
+ xmlns:tns="http://www.akamai.com/purge"
5
+ xmlns:purgedt="http://www.akamai.com/purge"
6
+ xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
7
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
8
+ xmlns="http://schemas.xmlsoap.org/wsdl/">
9
+
10
+ <types>
11
+ <schema targetNamespace="http://www.akamai.com/purge"
12
+ xmlns:purgedt="http://www.akamai.com/purge"
13
+ xmlns="http://www.w3.org/2000/10/XMLSchema" >
14
+
15
+
16
+ <complexType name="ListOfString" base="soap:Array">
17
+ <sequence>
18
+ <element name="string" type="xsd:string"
19
+ minOccurs="0" maxOccurs="unbounded" />
20
+ </sequence>
21
+ </complexType>
22
+
23
+ <complexType name="PurgeResult">
24
+ <sequence>
25
+ <element name="resultCode" type="xsd:int"/>
26
+ <element name="resultMsg" type="xsd:string"/>
27
+ <element name="sessionID" type="xsd:string"/>
28
+ <element name="estTime" type="xsd:int"/>
29
+ <element name="uriIndex" type="xsd:int"/>
30
+ <element name="modifiers" nullable="true" type="tns:ListOfString"/>
31
+ </sequence>
32
+ </complexType>
33
+
34
+ </schema>
35
+ </types>
36
+
37
+ <message name="purgeRequest" >
38
+ <part name="name" type="xsd:string"/>
39
+ <part name="pwd" type="xsd:string"/>
40
+ <part name="network" type="xsd:string"/>
41
+ <part name="opt" nullable="true" type="tns:ListOfString"/>
42
+ <part name="uri" type="tns:ListOfString"/>
43
+ </message>
44
+ <message name="purgeRequestResponse" >
45
+ <part name="return" type="tns:PurgeResult" />
46
+ </message>
47
+
48
+ <portType name="PurgeApi">
49
+ <operation name="purgeRequest" paramOrder="name pwd network opt uri">
50
+ <input message="tns:purgeRequest"
51
+ name="purgeRequest"/>
52
+ <output message="tns:purgeRequestResponse"/>
53
+ </operation>
54
+ </portType>
55
+
56
+ <binding name="PurgeApiSOAPBinding" type="tns:PurgeApi">
57
+ <soap:binding style="rpc"
58
+ transport="http://schemas.xmlsoap.org/soap/http"/>
59
+ <operation name="purgeRequest">
60
+ <soap:operation soapAction="" style="rpc"/>
61
+ <input>
62
+ <soap:body
63
+ use="encoded"
64
+ namespace="http://www.akamai.com/purge"
65
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
66
+ </input>
67
+ <output>
68
+ <soap:body
69
+ use="encoded"
70
+ namespace="http://www.akamai.com/purge"
71
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
72
+ </output>
73
+ </operation>
74
+ </binding>
75
+ <service name="JavaClasses">
76
+ <documentation>Provides programmatic purge access </documentation>
77
+ <port name="PurgeApi" binding="tns:PurgeApiSOAPBinding">
78
+ <soap:address
79
+ location="https://ccuapi.akamai.com:443/soap/servlet/soap/purge"/>
80
+ </port>
81
+ </service>
82
+ </definitions>
metadata ADDED
@@ -0,0 +1,197 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: akamai_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Nicola Racco
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: active_support
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '2'
30
+ - !ruby/object:Gem::Dependency
31
+ name: thor
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.14.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.14.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: savon
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 1.2.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: builder
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 3.1.3
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 3.1.3
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '2.11'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '2.11'
94
+ - !ruby/object:Gem::Dependency
95
+ name: savon_spec
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: '1.3'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '1.3'
110
+ description: Ruby toolkit to work with Akamai Content Control Utility API
111
+ email:
112
+ - nicola@nicolaracco.com
113
+ executables:
114
+ - akamai_api
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - .rspec
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Thorfile
124
+ - akamai_api.gemspec
125
+ - bin/akamai_api
126
+ - lib/akamai_api.rb
127
+ - lib/akamai_api/ccu.rb
128
+ - lib/akamai_api/ccu_response.rb
129
+ - lib/akamai_api/cli.rb
130
+ - lib/akamai_api/cli/ccu.rb
131
+ - lib/akamai_api/cli/ccu_arl.rb
132
+ - lib/akamai_api/cli/ccu_cp_code.rb
133
+ - lib/akamai_api/cli/command.rb
134
+ - lib/akamai_api/cli/eccu.rb
135
+ - lib/akamai_api/cli/template.rb
136
+ - lib/akamai_api/cp_code.rb
137
+ - lib/akamai_api/eccu_request.rb
138
+ - lib/akamai_api/soap_body.rb
139
+ - lib/akamai_api/version.rb
140
+ - spec/fixtures/delete/success.xml
141
+ - spec/fixtures/eccu_request.xml
142
+ - spec/fixtures/get_cp_codes/sample.xml
143
+ - spec/fixtures/get_ids/success.xml
144
+ - spec/fixtures/get_info/success.xml
145
+ - spec/fixtures/set_notes/success.xml
146
+ - spec/fixtures/set_status_change_email/success.xml
147
+ - spec/fixtures/upload/fault.xml
148
+ - spec/fixtures/upload/success.xml
149
+ - spec/fixtures/wsdl:purge_request/success.xml
150
+ - spec/lib/akamai_api/ccu_spec.rb
151
+ - spec/lib/akamai_api/cp_code_spec.rb
152
+ - spec/lib/akamai_api/eccu_request_spec.rb
153
+ - spec/lib/akamai_api/soap_body_spec.rb
154
+ - spec/spec_helper.rb
155
+ - spec/support/savon_tester.rb
156
+ - wsdls/ccuapi.wsdl
157
+ homepage: ''
158
+ licenses: []
159
+ post_install_message:
160
+ rdoc_options: []
161
+ require_paths:
162
+ - lib
163
+ required_ruby_version: !ruby/object:Gem::Requirement
164
+ none: false
165
+ requirements:
166
+ - - ! '>='
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ required_rubygems_version: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ requirements: []
176
+ rubyforge_project:
177
+ rubygems_version: 1.8.24
178
+ signing_key:
179
+ specification_version: 3
180
+ summary: Ruby toolkit to work with Akamai Content Control Utility API
181
+ test_files:
182
+ - spec/fixtures/delete/success.xml
183
+ - spec/fixtures/eccu_request.xml
184
+ - spec/fixtures/get_cp_codes/sample.xml
185
+ - spec/fixtures/get_ids/success.xml
186
+ - spec/fixtures/get_info/success.xml
187
+ - spec/fixtures/set_notes/success.xml
188
+ - spec/fixtures/set_status_change_email/success.xml
189
+ - spec/fixtures/upload/fault.xml
190
+ - spec/fixtures/upload/success.xml
191
+ - spec/fixtures/wsdl:purge_request/success.xml
192
+ - spec/lib/akamai_api/ccu_spec.rb
193
+ - spec/lib/akamai_api/cp_code_spec.rb
194
+ - spec/lib/akamai_api/eccu_request_spec.rb
195
+ - spec/lib/akamai_api/soap_body_spec.rb
196
+ - spec/spec_helper.rb
197
+ - spec/support/savon_tester.rb