oas 0.1.2 → 1.2.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.
- data/.gitignore +6 -6
- data/.travis.yml +9 -3
- data/Gemfile +4 -4
- data/LICENSE +20 -20
- data/README.md +47 -0
- data/Rakefile +11 -8
- data/lib/oas.rb +19 -31
- data/lib/oas/client.rb +39 -17
- data/lib/oas/configuration.rb +45 -45
- data/lib/oas/response.rb +31 -0
- data/lib/oas/version.rb +3 -3
- data/oas.gemspec +30 -29
- data/test/fixtures/successful_response.xml +15 -0
- data/test/helper.rb +6 -0
- data/test/test_client.rb +49 -0
- data/test/test_oas.rb +15 -0
- data/test/test_response.rb +22 -0
- metadata +85 -61
- data/.rspec +0 -2
- data/README.markdown +0 -103
- data/lib/oas/api.rb +0 -56
- data/lib/oas/client/campaigns.rb +0 -25
- data/lib/oas/client/databases.rb +0 -96
- data/lib/oas/client/notifications.rb +0 -15
- data/lib/oas/client/reports.rb +0 -71
- data/lib/oas/client/utils.rb +0 -16
- data/lib/oas/core_ext/hash.rb +0 -57
- data/lib/oas/core_ext/object.rb +0 -6
- data/lib/oas/error.rb +0 -17
- data/spec/fixtures/read_advertiser.xml +0 -49
- data/spec/fixtures/read_agency.xml +0 -49
- data/spec/fixtures/read_campaign.xml +0 -121
- data/spec/fixtures/read_campaign_group.xml +0 -31
- data/spec/fixtures/read_creative.xml +0 -52
- data/spec/fixtures/read_keyname.xml +0 -29
- data/spec/fixtures/read_keyword.xml +0 -27
- data/spec/fixtures/read_notification.xml +0 -31
- data/spec/fixtures/read_page.xml +0 -33
- data/spec/fixtures/read_section.xml +0 -30
- data/spec/fixtures/read_site.xml +0 -32
- data/spec/fixtures/read_site_group.xml +0 -33
- data/spec/fixtures/wsdl.xml +0 -37
- data/spec/oas/client/campaigns_spec.rb +0 -30
- data/spec/oas/client/databases_spec.rb +0 -111
- data/spec/oas/client/notifications_spec.rb +0 -16
- data/spec/oas_spec.rb +0 -14
- data/spec/spec_helper.rb +0 -29
data/lib/oas/api.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
require 'httpclient'
|
3
|
-
require 'savon'
|
4
|
-
|
5
|
-
module Oas
|
6
|
-
class Api
|
7
|
-
attr_accessor *Configuration::VALID_OPTIONS_KEYS
|
8
|
-
|
9
|
-
def initialize(options={})
|
10
|
-
options = Oas.options.merge(options)
|
11
|
-
Configuration::VALID_OPTIONS_KEYS.each do |key|
|
12
|
-
send("#{key}=", options[key])
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def request(request_type, &block)
|
17
|
-
xml = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
18
|
-
xml.AdXML {
|
19
|
-
xml.Request(:type => request_type) {
|
20
|
-
yield(xml) if block_given?
|
21
|
-
}
|
22
|
-
}
|
23
|
-
end
|
24
|
-
response = webservice.request :n1, :oas_xml_request, :"xmlns:n1" => "http://api.oas.tfsm.com/" do
|
25
|
-
soap.body = {
|
26
|
-
"String_1" => account.to_s,
|
27
|
-
"String_2" => username.to_s,
|
28
|
-
"String_3" => password.to_s,
|
29
|
-
"String_4" => xml.to_xml
|
30
|
-
}
|
31
|
-
end
|
32
|
-
response = Hash.from_xml(response.to_hash[:oas_xml_request_response][:result])[:AdXML][:Response]
|
33
|
-
verify_errors(response)
|
34
|
-
response
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
def verify_errors(response)
|
39
|
-
return if ((e = response[:Exception]).nil? && (!response[response.keys.first].is_a?(Hash) || (e = response[response.keys.first][:Exception]).nil?))
|
40
|
-
error_code = e[:errorCode]
|
41
|
-
error_msg = e[:content]
|
42
|
-
case error_code
|
43
|
-
when 550
|
44
|
-
raise Oas::InvalidSite.new(error_msg, error_code)
|
45
|
-
when 551
|
46
|
-
raise Oas::InvalidPage.new(error_msg, error_code)
|
47
|
-
else
|
48
|
-
raise Oas::Error.new(error_msg, error_code)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def webservice
|
53
|
-
@webservice ||= Savon::Client.new(endpoint)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
data/lib/oas/client/campaigns.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
module Oas
|
2
|
-
class Client
|
3
|
-
# Defines methods related to oas campaigns
|
4
|
-
module Campaigns
|
5
|
-
def campaign(id)
|
6
|
-
request("Campaign") do |xml|
|
7
|
-
xml.Campaign(:action => "read") {
|
8
|
-
xml.Overview {
|
9
|
-
xml.Id id
|
10
|
-
}
|
11
|
-
}
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def creative(campaign_id, id)
|
16
|
-
request("Creative") do |xml|
|
17
|
-
xml.Creative(:action => "read") {
|
18
|
-
xml.CampaignId campaign_id
|
19
|
-
xml.Id id
|
20
|
-
}
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/lib/oas/client/databases.rb
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
module Oas
|
2
|
-
class Client
|
3
|
-
# Defines methods related to oas databases section
|
4
|
-
module Databases
|
5
|
-
def advertiser(id)
|
6
|
-
request("Advertiser") do |xml|
|
7
|
-
xml.Database(:action => "read") {
|
8
|
-
xml.Advertiser {
|
9
|
-
xml.Id id
|
10
|
-
}
|
11
|
-
}
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def agency(id)
|
16
|
-
request("Agency") do |xml|
|
17
|
-
xml.Database(:action => "read") {
|
18
|
-
xml.Agency {
|
19
|
-
xml.Id id
|
20
|
-
}
|
21
|
-
}
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def campaign_group(id)
|
26
|
-
request("CampaignGroup") do |xml|
|
27
|
-
xml.Database(:action => "read") {
|
28
|
-
xml.CampaignGroup {
|
29
|
-
xml.Id id
|
30
|
-
}
|
31
|
-
}
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def keyname(name)
|
36
|
-
request("Keyname") do |xml|
|
37
|
-
xml.Database(:action => "read") {
|
38
|
-
xml.Keyname {
|
39
|
-
xml.Name name
|
40
|
-
}
|
41
|
-
}
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def keyword(id)
|
46
|
-
request("Keyword") do |xml|
|
47
|
-
xml.Database(:action => "read") {
|
48
|
-
xml.Keyword {
|
49
|
-
xml.Id id
|
50
|
-
}
|
51
|
-
}
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def page(url)
|
56
|
-
request("Page") do |xml|
|
57
|
-
xml.Database(:action => "read") {
|
58
|
-
xml.Page {
|
59
|
-
xml.Url url
|
60
|
-
}
|
61
|
-
}
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def section(id)
|
66
|
-
request("Section") do |xml|
|
67
|
-
xml.Database(:action => "read") {
|
68
|
-
xml.Section {
|
69
|
-
xml.Id id
|
70
|
-
}
|
71
|
-
}
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def site(id)
|
76
|
-
request("Site") do |xml|
|
77
|
-
xml.Database(:action => "read") {
|
78
|
-
xml.Site {
|
79
|
-
xml.Id id
|
80
|
-
}
|
81
|
-
}
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def site_group(id)
|
86
|
-
request("SiteGroup") do |xml|
|
87
|
-
xml.Database(:action => "read") {
|
88
|
-
xml.SiteGroup {
|
89
|
-
xml.Id id
|
90
|
-
}
|
91
|
-
}
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Oas
|
2
|
-
class Client
|
3
|
-
# Defines methods related to oas campaigns
|
4
|
-
module Notifications
|
5
|
-
def notification(campaign_id, event_name)
|
6
|
-
request("Notification") do |xml|
|
7
|
-
xml.Notification(:action => "read") {
|
8
|
-
xml.CampaignId campaign_id
|
9
|
-
xml.EventName event_name
|
10
|
-
}
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
data/lib/oas/client/reports.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
module Oas
|
2
|
-
class Client
|
3
|
-
# Defines methods related to oas reports section
|
4
|
-
module Reports
|
5
|
-
class MissingTablesError < Client::Error; end
|
6
|
-
|
7
|
-
def advertiser_report(advertiser_id, report_ids, start_date = nil, end_date = Date.today)
|
8
|
-
report_request("Advertiser", advertiser_id, report_ids, start_date, end_date)
|
9
|
-
end
|
10
|
-
|
11
|
-
def campaign_report(campaign_id, report_ids, start_date, end_date = Date.today)
|
12
|
-
report_request("Campaign", campaign_id, report_ids, start_date, end_date)
|
13
|
-
end
|
14
|
-
|
15
|
-
def section_report(section_id, report_ids, start_date = nil, end_date = Date.today)
|
16
|
-
report_request("Section", site_id, report_ids, start_date, end_date)
|
17
|
-
end
|
18
|
-
|
19
|
-
def site_report(site_id, report_ids, start_date = nil, end_date = Date.today)
|
20
|
-
report_request("Site", site_id, report_ids, start_date = Date.today, end_date)
|
21
|
-
end
|
22
|
-
|
23
|
-
def site_performance_report(site_ids = "", start_date = nil, end_date = Date.today)
|
24
|
-
request("SitePerformanceReport") do |xml|
|
25
|
-
xml.SitePerformanceReport {
|
26
|
-
xml.Ids {
|
27
|
-
site_ids.split(",").each do |s|
|
28
|
-
xml.Id s
|
29
|
-
end
|
30
|
-
}
|
31
|
-
xml.StartDate start_date
|
32
|
-
xml.EndDate end_date
|
33
|
-
xml.Table "Performance.Site.Base.T100.03"
|
34
|
-
}
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def page_priority_report(page_url)
|
39
|
-
request("PagePriorityReport") do |xml|
|
40
|
-
xml.PagePriorityReport {
|
41
|
-
xml.Id page_url
|
42
|
-
xml.Table "Delivery.Page.Base.T100.05"
|
43
|
-
}
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def campaign_status_report
|
48
|
-
request("StatusReport") do |xml|
|
49
|
-
xml.StatusReport(:type => "Campaign") {
|
50
|
-
xml.Table "ImpressionCampaignStatusDetail"
|
51
|
-
}
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
private
|
56
|
-
def report_request(type, id, report_ids, start_date, end_date)
|
57
|
-
raise NoReportTablesError.new if report_ids.blank?
|
58
|
-
request("Report") do |xml|
|
59
|
-
xml.Report(:type => type) {
|
60
|
-
xml.Id id
|
61
|
-
xml.StartDate start_date
|
62
|
-
xml.EndDate end_date
|
63
|
-
report_ids.split(",").each do |r|
|
64
|
-
xml.Table r
|
65
|
-
end
|
66
|
-
}
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
data/lib/oas/client/utils.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
module Oas
|
2
|
-
class Client
|
3
|
-
module Utils
|
4
|
-
private
|
5
|
-
def build_attributes(xml, attributes = {})
|
6
|
-
attributes.each do |key,value|
|
7
|
-
if value.is_a?(Hash)
|
8
|
-
build_attributes(xml, value)
|
9
|
-
else
|
10
|
-
xml.send(key.to_sym, value)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/lib/oas/core_ext/hash.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
|
-
class Hash
|
4
|
-
class << self
|
5
|
-
def from_xml(xml_io)
|
6
|
-
result = Nokogiri::XML(xml_io)
|
7
|
-
return { result.root.name.to_sym => xml_node_to_hash(result.root) }
|
8
|
-
end
|
9
|
-
|
10
|
-
def xml_node_to_hash(node)
|
11
|
-
# If we are at the root of the document, start the hash
|
12
|
-
if node.element?
|
13
|
-
result_hash = {}
|
14
|
-
if node.attributes != {}
|
15
|
-
node.attributes.keys.each do |key|
|
16
|
-
result_hash[node.attributes[key].name.to_sym] = prepare(node.attributes[key].value)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
if node.children.size > 0
|
20
|
-
node.children.each do |child|
|
21
|
-
result = xml_node_to_hash(child)
|
22
|
-
|
23
|
-
if child.name == "text"
|
24
|
-
unless child.next_sibling || child.previous_sibling
|
25
|
-
result = prepare(result)
|
26
|
-
return result if result_hash.empty?
|
27
|
-
result_hash[:content] = result
|
28
|
-
return result_hash
|
29
|
-
end
|
30
|
-
elsif result_hash[child.name.to_sym]
|
31
|
-
if result_hash[child.name.to_sym].is_a?(Object::Array)
|
32
|
-
result_hash[child.name.to_sym] << prepare(result)
|
33
|
-
else
|
34
|
-
result_hash[child.name.to_sym] = [result_hash[child.name.to_sym]] << prepare(result)
|
35
|
-
end
|
36
|
-
else
|
37
|
-
result_hash[child.name.to_sym] = prepare(result)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
return result_hash
|
41
|
-
else
|
42
|
-
return nil
|
43
|
-
end
|
44
|
-
else
|
45
|
-
return prepare(node.content.to_s)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def prepare(data)
|
50
|
-
(data.class == String && data.to_i.to_s == data) ? data.to_i : data
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def to_struct(struct_name)
|
55
|
-
Struct.new(struct_name,*keys).new(*values)
|
56
|
-
end
|
57
|
-
end
|
data/lib/oas/core_ext/object.rb
DELETED
data/lib/oas/error.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
module Oas
|
2
|
-
# Custom error class for rescuing from all Oas errors
|
3
|
-
class Error < StandardError
|
4
|
-
attr_reader :error_code
|
5
|
-
|
6
|
-
def initialize(message, error_code)
|
7
|
-
@error_code = error_code
|
8
|
-
super message
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
# Raised when Oas returns the error code 550
|
13
|
-
class InvalidSite < Error; end
|
14
|
-
|
15
|
-
# Raised when Oas returns the error code 551
|
16
|
-
class InvalidUrl < Error; end
|
17
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
|
3
|
-
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
4
|
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
5
|
-
<soapenv:Body>
|
6
|
-
<ns1:OasXmlRequestResponse xmlns:ns1="http://api.oas.tfsm.com/">
|
7
|
-
<result>
|
8
|
-
<![CDATA[
|
9
|
-
<?xml version="1.0"?>
|
10
|
-
<AdXML>
|
11
|
-
<Response>
|
12
|
-
<Advertiser>
|
13
|
-
<Id>advertiser_id</Id>
|
14
|
-
<Organization>A Company Name</Organization>
|
15
|
-
<Notes></Notes>
|
16
|
-
<ContactFirstName></ContactFirstName>
|
17
|
-
<ContactLastName></ContactLastName>
|
18
|
-
<ContactTitle></ContactTitle>
|
19
|
-
<Email></Email>
|
20
|
-
<Phone></Phone>
|
21
|
-
<Fax></Fax>
|
22
|
-
<ExternalUsers/>
|
23
|
-
<BillingInformation>
|
24
|
-
<Method>
|
25
|
-
<Code>O</Code>
|
26
|
-
</Method>
|
27
|
-
<Address>test address2</Address>
|
28
|
-
<City>Philadelphia</City>
|
29
|
-
<State>
|
30
|
-
<Code>US:PA</Code>
|
31
|
-
</State>
|
32
|
-
<Country>
|
33
|
-
<Code>US</Code>
|
34
|
-
</Country>
|
35
|
-
<Zip>20007</Zip>
|
36
|
-
<Email>testmail@247realmeida.com</Email>
|
37
|
-
</BillingInformation>
|
38
|
-
<WhoCreated>realmedia</WhoCreated>
|
39
|
-
<WhenCreated>01/20/2008 20:59:29</WhenCreated>
|
40
|
-
<WhoModified>realmedia</WhoModified>
|
41
|
-
<WhenModified>01/20/2008 21:22:33</WhenModified>
|
42
|
-
</Advertiser>
|
43
|
-
</Response>
|
44
|
-
</AdXML>
|
45
|
-
]]>
|
46
|
-
</result>
|
47
|
-
</ns1:OasXmlRequestResponse>
|
48
|
-
</soapenv:Body>
|
49
|
-
</soapenv:Envelope>
|
@@ -1,49 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
|
3
|
-
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
4
|
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
5
|
-
<soapenv:Body>
|
6
|
-
<ns1:OasXmlRequestResponse xmlns:ns1="http://api.oas.tfsm.com/">
|
7
|
-
<result>
|
8
|
-
<![CDATA[
|
9
|
-
<?xml version="1.0"?>
|
10
|
-
<AdXML>
|
11
|
-
<Response>
|
12
|
-
<Agency>
|
13
|
-
<Id>agency_id</Id>
|
14
|
-
<Organization>A Company Name</Organization>
|
15
|
-
<Notes>This Agency was added through the API.(With Billing Info)</Notes>
|
16
|
-
<ContactFirstName>Nobody</ContactFirstName>
|
17
|
-
<ContactLastName>Kim</ContactLastName>
|
18
|
-
<ContactTitle>Senior Engineer</ContactTitle>
|
19
|
-
<Email>nobody@247realmedia.com</Email>
|
20
|
-
<Phone>123-123-1234</Phone>
|
21
|
-
<Fax>123-123-1235</Fax>
|
22
|
-
<ExternalUsers>
|
23
|
-
<UserId>ExtUser1</UserId>
|
24
|
-
<UserId>ExtUser2</UserId>
|
25
|
-
</ExternalUsers>
|
26
|
-
<BillingInformation>
|
27
|
-
<Method>
|
28
|
-
<Code>M</Code>
|
29
|
-
</Method>
|
30
|
-
<Address>51-12 BANPO 4-DONG SEOCHO-GU, SEOUL, SOUTH KOREA</Address>
|
31
|
-
<City>SEOUL</City>
|
32
|
-
<State>
|
33
|
-
<Code>KR:SOULTUKPYOLS</Code>
|
34
|
-
</State>
|
35
|
-
<Country>
|
36
|
-
<Code>KR</Code>
|
37
|
-
</Country>
|
38
|
-
<Zip>137-802</Zip>
|
39
|
-
</BillingInformation>
|
40
|
-
<InternalQuickReport>short</InternalQuickReport>
|
41
|
-
<ExternalQuickReport>to-date</ExternalQuickReport>
|
42
|
-
</Agency>
|
43
|
-
</Response>
|
44
|
-
</AdXML>
|
45
|
-
]]>
|
46
|
-
</result>
|
47
|
-
</ns1:OasXmlRequestResponse>
|
48
|
-
</soapenv:Body>
|
49
|
-
</soapenv:Envelope>
|