ruby-vast 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +55 -0
  4. data/lib/ruby-vast.rb +1 -0
  5. data/lib/vast.rb +33 -0
  6. data/lib/vast/ad.rb +103 -0
  7. data/lib/vast/companion_creative.rb +81 -0
  8. data/lib/vast/creative.rb +62 -0
  9. data/lib/vast/document.rb +71 -0
  10. data/lib/vast/element.rb +9 -0
  11. data/lib/vast/extension.rb +18 -0
  12. data/lib/vast/icon.rb +87 -0
  13. data/lib/vast/inline_ad.rb +22 -0
  14. data/lib/vast/linear_creative.rb +57 -0
  15. data/lib/vast/mediafile.rb +56 -0
  16. data/lib/vast/non_linear_creative.rb +97 -0
  17. data/lib/vast/version.rb +3 -0
  18. data/lib/vast/wrapper_ad.rb +19 -0
  19. data/lib/vast3_draft.xsd +1036 -0
  20. data/lib/vast_2.0.1.xsd +643 -0
  21. data/test/ad_test.rb +122 -0
  22. data/test/companion_creative_test.rb +38 -0
  23. data/test/creative_test.rb +35 -0
  24. data/test/document_test.rb +72 -0
  25. data/test/examples/document_with_no_ads.xml +3 -0
  26. data/test/examples/document_with_one_inline_ad.xml +121 -0
  27. data/test/examples/document_with_one_inline_and_one_wrapper_ad.xml +105 -0
  28. data/test/examples/document_with_one_wrapper_ad.xml +40 -0
  29. data/test/examples/document_with_two_inline_ads.xml +120 -0
  30. data/test/examples/invalid_document.xml +3 -0
  31. data/test/examples/invalid_document_with_missing_ad_type.xml +58 -0
  32. data/test/examples/invalid_document_with_missing_creative_type.xml +39 -0
  33. data/test/examples/vast3_inline.xml +86 -0
  34. data/test/extension_test.rb +20 -0
  35. data/test/inline_ad_test.rb +14 -0
  36. data/test/linear_creative_test.rb +26 -0
  37. data/test/mediafile_test.rb +20 -0
  38. data/test/non_linear_creative_test.rb +39 -0
  39. data/test/test_helper.rb +13 -0
  40. data/test/vast3_inline_ad_test.rb +23 -0
  41. data/test/wrapper_ad_test.rb +16 -0
  42. metadata +99 -0
@@ -0,0 +1,122 @@
1
+ require 'test_helper'
2
+
3
+ class AdTest < Test::Unit::TestCase
4
+
5
+ def test_should_initialize_from_document_ad_node
6
+ document_with_ad = example_file('document_with_one_inline_ad.xml')
7
+ document = VAST::Document.parse!(document_with_ad)
8
+
9
+ ad_node = document.root.xpath('.//Ad').first
10
+ ad = VAST::Ad.create(ad_node)
11
+ assert ad.kind_of?(VAST::Ad), "Ad should be kind of Ad"
12
+ end
13
+
14
+ def test_should_initialize_inline_ad
15
+ document_with_inline_ad = example_file('document_with_one_inline_ad.xml')
16
+ document = VAST::Document.parse!(document_with_inline_ad)
17
+
18
+ ad_node = document.root.xpath('.//Ad').first
19
+ ad = VAST::Ad.create(ad_node)
20
+ assert ad.kind_of?(VAST::InlineAd), "Ad should be kind of InLineAd"
21
+ end
22
+
23
+ def test_should_initialize_wrapper_ad
24
+ document_with_wrapper_ad = example_file('document_with_one_wrapper_ad.xml')
25
+ document = VAST::Document.parse!(document_with_wrapper_ad)
26
+
27
+ ad_node = document.root.xpath('.//Ad').first
28
+ ad = VAST::Ad.create(ad_node)
29
+ assert ad.kind_of?(VAST::WrapperAd), "Ad should be kind of WrapperAd"
30
+ end
31
+
32
+ def test_should_raise_error_if_no_ad_type_specified
33
+ document_with_ad_missing_type = example_file('invalid_document_with_missing_ad_type.xml')
34
+ document = VAST::Document.parse(document_with_ad_missing_type)
35
+
36
+ ad_node = document.root.xpath('.//Ad').first
37
+ assert_raise VAST::InvalidAdError, "should raise error" do
38
+ ad = VAST::Ad.create(ad_node)
39
+ end
40
+ end
41
+
42
+ def test_ad_should_know_attributes
43
+ document_file = example_file('document_with_one_inline_ad.xml')
44
+ document = VAST::Document.parse!(document_file)
45
+ ad = document.inline_ads.first
46
+
47
+ assert_equal "601364", ad.id
48
+ assert_equal "Acudeo Compatible", ad.ad_system
49
+ assert_equal URI.parse('http://myErrorURL/error'), ad.error_url
50
+ end
51
+
52
+ def test_ad_should_know_linear_creatives
53
+ document_file = example_file('document_with_one_inline_ad.xml')
54
+ document = VAST::Document.parse!(document_file)
55
+ ad = document.inline_ads.first
56
+
57
+ assert_equal 1, ad.linear_creatives.count
58
+ ad.linear_creatives.each do |creative|
59
+ assert creative.kind_of?(VAST::LinearCreative)
60
+ end
61
+ end
62
+
63
+ def test_ad_should_know_first_linear_creative
64
+ document_file = example_file('document_with_one_inline_ad.xml')
65
+ document = VAST::Document.parse!(document_file)
66
+ ad = document.inline_ads.first
67
+
68
+ assert_equal ad.linear_creative.id, ad.linear_creatives.first.id
69
+ end
70
+
71
+ def test_ad_should_know_non_linear_creatives
72
+ document_file = example_file('document_with_one_inline_ad.xml')
73
+ document = VAST::Document.parse!(document_file)
74
+ ad = document.inline_ads.first
75
+
76
+ assert_equal 2, ad.non_linear_creatives.count
77
+ ad.non_linear_creatives.each do |creative|
78
+ assert creative.kind_of?(VAST::NonLinearCreative)
79
+ end
80
+ end
81
+
82
+ def test_ad_should_know_companion_creatives
83
+ document_file = example_file('document_with_one_inline_ad.xml')
84
+ document = VAST::Document.parse!(document_file)
85
+ ad = document.inline_ads.first
86
+
87
+ assert_equal 2, ad.companion_creatives.count
88
+ ad.companion_creatives.each do |creative|
89
+ assert creative.kind_of?(VAST::CompanionCreative)
90
+ end
91
+ end
92
+
93
+ def test_ad_should_know_its_main_impression
94
+ document_file = example_file('document_with_one_inline_ad.xml')
95
+ document = VAST::Document.parse!(document_file)
96
+ ad = document.inline_ads.first
97
+
98
+ assert ad.impression.kind_of?(URI)
99
+ assert_equal "http://myTrackingURL/impression", ad.impression.to_s
100
+ end
101
+
102
+ def test_ad_should_know_its_impressions
103
+ document_with_two_impressions = example_file('document_with_one_inline_ad.xml')
104
+ document = VAST::Document.parse!(document_with_two_impressions)
105
+ ad = document.inline_ads.first
106
+
107
+ assert_equal 2, ad.impressions.count
108
+ assert_equal "http://myTrackingURL/impression", ad.impressions.first.to_s
109
+ assert_equal "http://myTrackingURL/anotherImpression", ad.impressions.last.to_s
110
+ end
111
+
112
+ def test_extensions
113
+ document_file = example_file('document_with_one_inline_ad.xml')
114
+ document = VAST::Document.parse!(document_file)
115
+ ad = document.inline_ads.first
116
+
117
+ assert_equal 2, ad.extensions.count
118
+ ad.extensions.each do |extension|
119
+ assert extension.kind_of?(VAST::Extension)
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,38 @@
1
+ require 'test_helper'
2
+
3
+ class CompanionCreativeTest < Test::Unit::TestCase
4
+
5
+ def test_should_know_attributes
6
+ document_file = example_file('document_with_one_inline_ad.xml')
7
+ document = VAST::Document.parse!(document_file)
8
+ creative = document.inline_ads.first.companion_creatives.first
9
+
10
+ assert_equal "big_box", creative.id
11
+ assert_equal 300, creative.width
12
+ assert_equal 250, creative.height
13
+ assert_equal 600, creative.expanded_width
14
+ assert_equal 500, creative.expanded_height
15
+ assert_equal "http://www.tremormedia.com", creative.click_through_url.to_s
16
+ assert_equal "Display this instead of the ad", creative.alt_text
17
+ assert_equal "VPAID", creative.api_framework
18
+ end
19
+
20
+ def test_should_know_static_resource
21
+ document_file = example_file('document_with_one_inline_ad.xml')
22
+ document = VAST::Document.parse!(document_file)
23
+ creative_with_static_resource = document.inline_ads.first.companion_creatives.first
24
+
25
+ assert_equal :static, creative_with_static_resource.resource_type
26
+ assert_equal "image/jpeg", creative_with_static_resource.creative_type
27
+ assert_equal "http://demo.tremormedia.com/proddev/vast/Blistex1.jpg", creative_with_static_resource.resource_url.to_s
28
+ end
29
+
30
+ def test_should_know_iframe_resource
31
+ document_file = example_file('document_with_one_inline_ad.xml')
32
+ document = VAST::Document.parse!(document_file)
33
+ creative_with_iframe_resource = document.inline_ads.first.companion_creatives.last
34
+
35
+ assert_equal :iframe, creative_with_iframe_resource.resource_type
36
+ assert_equal "http://ad3.liverail.com/util/companions.php", creative_with_iframe_resource.resource_url.to_s
37
+ end
38
+ end
@@ -0,0 +1,35 @@
1
+ require 'test_helper'
2
+
3
+ class CreativeTest < Test::Unit::TestCase
4
+
5
+ def test_should_know_attributes
6
+ document_with_creative = example_file('document_with_one_inline_ad.xml')
7
+ document = VAST::Document.parse!(document_with_creative)
8
+ creative = VAST::Creative.new(document.root.at('Linear'))
9
+
10
+ assert_equal "6012", creative.id
11
+ assert_equal "601364", creative.ad_id
12
+ assert_equal "1", creative.sequence
13
+ assert_equal "params=for&request=gohere", creative.ad_parameters
14
+ end
15
+
16
+ def test_should_know_its_ad
17
+ document_with_creative = example_file('document_with_one_inline_ad.xml')
18
+ document = VAST::Document.parse!(document_with_creative)
19
+ creative = VAST::Creative.new(document.root.at('Linear'))
20
+
21
+ assert creative.ad.kind_of?(VAST::Ad), "Creative should know it's Ad"
22
+ assert_equal creative.source_node.ancestors('Ad').first[:id], creative.ad.id
23
+ end
24
+
25
+ def test_should_know_tracking_urls_for_all_events
26
+ document_with_creative = example_file('document_with_one_inline_ad.xml')
27
+ document = VAST::Document.parse!(document_with_creative)
28
+ creative = document.ads.first.linear_creatives.first
29
+
30
+ assert_equal ["http://myTrackingURL/creativeView"], creative.tracking_urls[:creative_view].collect{ |url| url.to_s }
31
+ assert_equal ["http://myTrackingURL/start1", "http://myTrackingURL/start2"], creative.tracking_urls[:start].collect{ |url| url.to_s }
32
+ ## There are more tracking urls, refer to spec for complete list
33
+ end
34
+
35
+ end
@@ -0,0 +1,72 @@
1
+ require 'test_helper'
2
+
3
+ class DocumentTest < Test::Unit::TestCase
4
+
5
+ def test_should_wrap_nokogiri_xml_document
6
+ document = VAST::Document.new
7
+ assert document.kind_of?(Nokogiri::XML::Document)
8
+ end
9
+
10
+ def test_should_create_valid_document_from_valid_xml_file
11
+ valid_vast_document_file = example_file('document_with_no_ads.xml')
12
+ document = VAST::Document.parse(valid_vast_document_file)
13
+ assert document.valid?
14
+ end
15
+
16
+ def test_should_create_invalid_document_from_invalid_xml_file
17
+ invalid_vast_document_file = example_file('invalid_document.xml')
18
+ document = VAST::Document.parse(invalid_vast_document_file)
19
+ assert !document.valid?
20
+ end
21
+
22
+ def test_should_raise_error_when_bang_parsing_invalid_document
23
+ invalid_vast_document_file = example_file('invalid_document.xml')
24
+ assert_raise VAST::InvalidDocumentError do
25
+ document = VAST::Document.parse!(invalid_vast_document_file)
26
+ end
27
+ end
28
+
29
+ def test_empty_document_should_have_no_ads
30
+ document_with_no_ads = example_file('document_with_no_ads.xml')
31
+ document = VAST::Document.parse!(document_with_no_ads)
32
+ assert_equal [], document.ads
33
+ end
34
+
35
+ def test_document_with_one_ad
36
+ document_with_one_ad = example_file('document_with_one_inline_ad.xml')
37
+ document = VAST::Document.parse!(document_with_one_ad)
38
+
39
+ assert_equal 1, document.ads.count
40
+ assert document.ads.first.kind_of?(VAST::InlineAd)
41
+ end
42
+
43
+ def test_document_with_more_than_one_ads
44
+ document_with_two_ads = example_file('document_with_two_inline_ads.xml')
45
+ document = VAST::Document.parse!(document_with_two_ads)
46
+
47
+ assert_equal 2, document.ads.count
48
+ document.ads.each do |ad|
49
+ assert ad.kind_of?(VAST::Ad)
50
+ end
51
+ end
52
+
53
+ def test_document_should_know_inline_ads
54
+ document_file = example_file('document_with_one_inline_and_one_wrapper_ad.xml')
55
+ document = VAST::Document.parse!(document_file)
56
+
57
+ assert_equal 1, document.inline_ads.count
58
+ document.inline_ads.each do |ad|
59
+ assert ad.kind_of?(VAST::InlineAd)
60
+ end
61
+ end
62
+
63
+ def test_document_should_know_wrapper_ads
64
+ document_file = example_file('document_with_one_inline_and_one_wrapper_ad.xml')
65
+ document = VAST::Document.parse!(document_file)
66
+
67
+ assert_equal 1, document.wrapper_ads.count
68
+ document.wrapper_ads.each do |ad|
69
+ assert ad.kind_of?(VAST::WrapperAd)
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,3 @@
1
+ <!-- Most basic valid VAST document -->
2
+ <VAST version="2.0">
3
+ </VAST>
@@ -0,0 +1,121 @@
1
+ <!-- VAST document with one InLine ad -->
2
+ <VAST version="2.0">
3
+
4
+ <Ad id="601364">
5
+ <InLine>
6
+ <AdSystem>Acudeo Compatible</AdSystem>
7
+ <AdTitle>VAST 2.0 Instream Test 1</AdTitle>
8
+ <Description>VAST 2.0 Instream Test 1</Description>
9
+ <Survey>
10
+ <![CDATA[http://mySurveyURL/survey]]>
11
+ </Survey>
12
+ <Error>
13
+ <![CDATA[http://myErrorURL/error]]>
14
+ </Error>
15
+
16
+ <Impression id="first">
17
+ <![CDATA[http://myTrackingURL/impression]]>
18
+ </Impression>
19
+ <Impression id="second">
20
+ <![CDATA[http://myTrackingURL/anotherImpression]]>
21
+ </Impression>
22
+ <Creatives>
23
+ <Creative id="6012" AdID="601364" sequence="1">
24
+ <Linear>
25
+ <Duration>00:00:30</Duration>
26
+ <TrackingEvents>
27
+ <Tracking event="creativeView"><![CDATA[http://myTrackingURL/creativeView]]></Tracking>
28
+
29
+ <Tracking event="start">
30
+ <![CDATA[http://myTrackingURL/start1]]>
31
+ </Tracking>
32
+ <Tracking event="start"><![CDATA[http://myTrackingURL/start2]]></Tracking>
33
+ <Tracking event="midpoint"><![CDATA[http://myTrackingURL/midpoint]]></Tracking>
34
+ <Tracking event="firstQuartile"><![CDATA[http://myTrackingURL/firstQuartile]]></Tracking>
35
+ <Tracking event="thirdQuartile"><![CDATA[http://myTrackingURL/thirdQuartile]]></Tracking>
36
+ <Tracking event="complete"><![CDATA[http://myTrackingURL/complete]]></Tracking>
37
+ <Tracking event="mute"><![CDATA[http://myTrackingURL/mute]]></Tracking>
38
+ <Tracking event="unmute"><![CDATA[http://myTrackingURL/unmute]]></Tracking>
39
+ <Tracking event="pause"><![CDATA[http://myTrackingURL/pause]]></Tracking>
40
+ <Tracking event="rewind"><![CDATA[http://myTrackingURL/rewind]]></Tracking>
41
+ <Tracking event="resume"><![CDATA[http://myTrackingURL/resume]]></Tracking>
42
+ <Tracking event="fullscreen"><![CDATA[http://myTrackingURL/fullscreen]]></Tracking>
43
+ <Tracking event="expand"><![CDATA[http://myTrackingURL/expand]]></Tracking>
44
+ <Tracking event="collapse"><![CDATA[http://myTrackingURL/collapse]]></Tracking>
45
+ <Tracking event="acceptInvitation"><![CDATA[http://myTrackingURL/acceptInvitation]]></Tracking>
46
+ <Tracking event="close"><![CDATA[http://myTrackingURL/close]]></Tracking>
47
+ </TrackingEvents>
48
+ <AdParameters><![CDATA[params=for&request=gohere]]></AdParameters>
49
+ <VideoClicks>
50
+ <ClickThrough>
51
+ <![CDATA[http://www.tremormedia.com]]>
52
+ </ClickThrough>
53
+ <ClickTracking id="first"><![CDATA[http://myTrackingURL/click1]]></ClickTracking>
54
+ <ClickTracking id="second"><![CDATA[http://myTrackingURL/click2]]></ClickTracking>
55
+ <CustomClick id="customOne"><![CDATA[http://myTrackingURL/custom1]]></CustomClick>
56
+ <CustomClick id="customTwo"><![CDATA[http://myTrackingURL/custom2]]></CustomClick>
57
+ </VideoClicks>
58
+ <MediaFiles>
59
+ <MediaFile id="firstFile" delivery="progressive" type="video/x-flv" bitrate="500" width="400" height="300" scalable="true" maintainAspectRatio="true" apiFramework="VPAID">
60
+ <![CDATA[http://cdnp.tremormedia.com/video/acudeo/Carrot_400x300_500kb.flv]]>
61
+ </MediaFile>
62
+ </MediaFiles>
63
+ </Linear>
64
+ </Creative>
65
+ <Creative AdID="601364-Companion">
66
+ <CompanionAds>
67
+ <Companion id="big_box" width="300" height="250" expandedWidth="600" expandedHeight="500" apiFramework="VPAID">
68
+ <StaticResource creativeType="image/jpeg">http://demo.tremormedia.com/proddev/vast/Blistex1.jpg</StaticResource>
69
+ <TrackingEvents>
70
+ <Tracking event="creativeView">http://myTrackingURL/firstCompanionCreativeView</Tracking>
71
+ </TrackingEvents>
72
+ <CompanionClickThrough>http://www.tremormedia.com</CompanionClickThrough>
73
+ <AltText>Display this instead of the ad</AltText>
74
+ </Companion>
75
+ <Companion width="728" height="90">
76
+ <IFrameResource>
77
+ <![CDATA[http://ad3.liverail.com/util/companions.php]]>
78
+ </IFrameResource>
79
+ <CompanionClickThrough>
80
+ http://www.tremormedia.com
81
+ </CompanionClickThrough>
82
+ </Companion>
83
+ </CompanionAds>
84
+ </Creative>
85
+ <Creative AdID="601365">
86
+ <NonLinearAds>
87
+ <NonLinear id="special_overlay" width="300" height="50" expandedWidth="600" expandedHeight="500" apiFramework="VPAID" scalable="true" maintainAspectRatio="true">
88
+ <StaticResource creativeType="image/jpeg">
89
+ <![CDATA[http://cdn.liverail.com/adasset/228/330/overlay.jpg]]>
90
+ </StaticResource>
91
+ <NonLinearClickThrough>
92
+ <![CDATA[http://t3.liverail.com]]>
93
+ </NonLinearClickThrough>
94
+ </NonLinear>
95
+ <NonLinear width="728" height="90">
96
+ <IFrameResource>
97
+ <![CDATA[http://ad3.liverail.com/util/non_linear.php]]>
98
+ </IFrameResource>
99
+ <NonLinearClickThrough>http://www.tremormedia.com</NonLinearClickThrough>
100
+ </NonLinear>
101
+ </NonLinearAds>
102
+ </Creative>
103
+ </Creatives>
104
+ <Extensions>
105
+ <Extension type="DART">
106
+ <AdServingData>
107
+ <DeliveryData>
108
+ <GeoData><![CDATA[ct=CA&st=ON&ac=905&zp=L6V1X9&bw=0&dma=1&city=1869]]></GeoData>
109
+ </DeliveryData>
110
+ </AdServingData>
111
+ </Extension>
112
+ <Extension type="value">
113
+ <CostPerThousand currency="CAD">
114
+ 125.00
115
+ </CostPerThousand>
116
+ </Extension>
117
+ </Extensions>
118
+ </InLine>
119
+ </Ad>
120
+
121
+ </VAST>
@@ -0,0 +1,105 @@
1
+ <!-- VAST document with one InLine ad and one Wrapper ad-->
2
+ <VAST version="2.0">
3
+ <Ad id="601364">
4
+ <InLine>
5
+ <AdSystem>Acudeo Compatible</AdSystem>
6
+ <AdTitle>VAST 2.0 Instream Test 1</AdTitle>
7
+ <Description>VAST 2.0 Instream Test 1</Description>
8
+ <Error>http://myErrorURL/error</Error>
9
+
10
+ <Impression>
11
+ <![CDATA[http://myTrackingURL/impression]]>
12
+ </Impression>
13
+ <Creatives>
14
+ <Creative AdID="601364">
15
+ <Linear>
16
+ <Duration>00:00:30</Duration>
17
+ <TrackingEvents>
18
+ <Tracking event="creativeView">http://myTrackingURL/creativeView</Tracking>
19
+
20
+ <Tracking event="start">
21
+ <![CDATA[http://myTrackingURL/start]]>
22
+ </Tracking>
23
+ <Tracking event="midpoint">http://myTrackingURL/midpoint</Tracking>
24
+ <Tracking event="firstQuartile">http://myTrackingURL/firstQuartile</Tracking>
25
+ <Tracking event="thirdQuartile">http://myTrackingURL/thirdQuartile</Tracking>
26
+ <Tracking event="complete">http://myTrackingURL/complete</Tracking>
27
+ </TrackingEvents>
28
+
29
+ <VideoClicks>
30
+ <ClickThrough>
31
+ <![CDATA[http://www.tremormedia.com]]>
32
+ </ClickThrough>
33
+ <ClickTracking>http://myTrackingURL/click</ClickTracking>
34
+ </VideoClicks>
35
+ <MediaFiles>
36
+ <MediaFile delivery="progressive" type="video/x-flv" bitrate="500" width="400" height="300" scalable="true" maintainAspectRatio="true">
37
+ <![CDATA[http://cdnp.tremormedia.com/video/acudeo/Carrot_400x300_500kb.flv]]>
38
+ </MediaFile>
39
+ </MediaFiles>
40
+
41
+ </Linear>
42
+ </Creative>
43
+ <Creative AdID="601364-Companion">
44
+ <CompanionAds>
45
+ <Companion width="300" height="250">
46
+ <StaticResource creativeType="image/jpeg">http://demo.tremormedia.com/proddev/vast/Blistex1.jpg</StaticResource>
47
+ <TrackingEvents>
48
+ <Tracking event="creativeView">
49
+ <![CDATA[http://myTrackingURL/firstCompanionCreativeView]]>
50
+ </Tracking>
51
+
52
+ </TrackingEvents>
53
+
54
+ <CompanionClickThrough>http://www.tremormedia.com</CompanionClickThrough>
55
+ </Companion>
56
+ <Companion width="728" height="90">
57
+ <StaticResource creativeType="image/jpeg">
58
+ <![CDATA[http://demo.tremormedia.com/proddev/vast/728x90_banner1.jpg]]>
59
+ </StaticResource>
60
+ <CompanionClickThrough>http://www.tremormedia.com</CompanionClickThrough>
61
+ </Companion>
62
+
63
+ </CompanionAds>
64
+ </Creative>
65
+ </Creatives>
66
+ </InLine>
67
+ </Ad>
68
+ <Ad id="602833">
69
+ <Wrapper>
70
+ <AdSystem>Acudeo Compatible</AdSystem>
71
+ <VASTAdTagURI>http://demo.tremormedia.com/proddev/vast/vast_inline_linear.xml</VASTAdTagURI>
72
+ <Impression>
73
+ <![CDATA[http://myTrackingURL/wrapper/impression]]>
74
+ </Impression>
75
+ <Creatives>
76
+
77
+ <Creative AdID="602833">
78
+ <Linear>
79
+ <TrackingEvents>
80
+ </TrackingEvents>
81
+ </Linear>
82
+ </Creative>
83
+ <Creative AdID="602833-Companion">
84
+ <CompanionAds>
85
+ <Companion width="300" height="250">
86
+
87
+ <StaticResource creativeType="image/jpeg">
88
+ <![CDATA[http://demo.tremormedia.com/proddev/vast/300x250_banner1.jpg]]>
89
+ </StaticResource>
90
+ <TrackingEvents>
91
+ <Tracking event="creativeView">http://myTrackingURL/wrapper/firstCompanionCreativeView</Tracking>
92
+ </TrackingEvents>
93
+ <CompanionClickThrough>http://www.tremormedia.com</CompanionClickThrough>
94
+ </Companion>
95
+ <Companion width="728" height="90">
96
+
97
+ <StaticResource creativeType="image/jpeg">http://demo.tremormedia.com/proddev/vast/728x90_banner1.jpg</StaticResource>
98
+ <CompanionClickThrough>http://www.tremormedia.com</CompanionClickThrough>
99
+ </Companion>
100
+ </CompanionAds>
101
+ </Creative>
102
+ </Creatives>
103
+ </Wrapper>
104
+ </Ad>
105
+ </VAST>