ruby-vast 1.0.6

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.
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>