vast 1.0 → 1.0.1

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.
@@ -21,9 +21,9 @@ Parse a VAST document and access its contents using an easy-to-understand model.
21
21
 
22
22
  document = VAST::Document.parse(File.read("vast_document.xml"))
23
23
  inline_ad = document.inline_ads.first
24
- puts document.linear_creative.mediafile.type
24
+ puts inline_ad.linear_creative.mediafiles.first.type
25
25
  => "video/x-flv"
26
- puts document.linear_creative.mediafile.url
26
+ puts inline_ad.linear_creative.mediafiles.first.url
27
27
  => #<URI::HTTP:0x1015ad5f0 URL:http://creativeurl.ca/mediafile>
28
28
 
29
29
  See the documentation for the individual classes for an overview of what information available for each class.
@@ -8,8 +8,8 @@ module VAST
8
8
  # The VAST response does not contain information on the placement or timing of each ad. It is up
9
9
  # to the Video Player to determine the optimal inclusion points of the ads.
10
10
  #
11
- # Can either be of type InlineAd, meaning it contains all the elements necessary to display the
12
- # visual experience, or of type WrapperAd, which points to a downstream VAST document that must be
11
+ # Can either be a InlineAd, meaning it contains all the elements necessary to display the
12
+ # visual experience, or a WrapperAd, which points to a downstream VAST document that must be
13
13
  # requested from another server.
14
14
  #
15
15
  # An Ad may include one or more pieces of creative that are part of a single execution. For example, an Ad
@@ -17,7 +17,7 @@ module VAST
17
17
  # elements, one LinearCreative and one CompanionCreative.
18
18
  class Ad < Element
19
19
 
20
- # Create proper ad type
20
+ # Creates proper ad type
21
21
  def self.create(node)
22
22
  if node.at('InLine')
23
23
  InlineAd.new(node)
@@ -33,7 +33,7 @@ module VAST
33
33
  source_node[:id]
34
34
  end
35
35
 
36
- # Name of source ad server
36
+ # Returns name of source ad server
37
37
  def ad_system
38
38
  ad_system_node = source_node.at("AdSystem")
39
39
  if ad_system_node
@@ -43,33 +43,33 @@ module VAST
43
43
  end
44
44
  end
45
45
 
46
- # URI to request if ad does not play due to error
46
+ # Returns URI to request if ad does not play due to error.
47
47
  def error_url
48
48
  error_url_node = source_node.at("Error")
49
49
  URI.parse(error_url_node.content) if error_url_node
50
50
  end
51
51
 
52
- # Returns an array containing all linear creatives
52
+ # Returns an array containing all linear creatives.
53
53
  def linear_creatives
54
54
  source_node.xpath('.//Creative/Linear').to_a.collect do |node|
55
55
  LinearCreative.new(node)
56
56
  end
57
57
  end
58
58
 
59
- # It's common for an ad to contain only one piece of linear creative. This is a
60
- # convenience method for when only the first piece of linear creative is needed.
59
+ # This is a convenience method for when only the first piece of linear creative is needed.
60
+ # It's common for an ad to contain only one piece of linear creative.
61
61
  def linear_creative
62
62
  linear_creatives.first
63
63
  end
64
64
 
65
- # Returns an array containing all non linear creatives
65
+ # Returns an array containing all non linear creatives.
66
66
  def non_linear_creatives
67
67
  source_node.xpath('.//Creative/NonLinearAds/NonLinear').to_a.collect do |node|
68
68
  NonLinearCreative.new(node)
69
69
  end
70
70
  end
71
71
 
72
- # Returns an array containing all companion creatives
72
+ # Returns an array containing all companion creatives.
73
73
  def companion_creatives
74
74
  source_node.xpath('.//Creative/CompanionAds/Companion').to_a.collect do |node|
75
75
  CompanionCreative.new(node)
@@ -89,7 +89,7 @@ module VAST
89
89
  end
90
90
  end
91
91
 
92
- # Extensions included in the
92
+ # All extensions included with this ad.
93
93
  def extensions
94
94
  source_node.xpath('.//Extension').to_a.collect do |node|
95
95
  Extension.new(node)
@@ -35,9 +35,9 @@ module VAST
35
35
  source_node.xpath('.//Tracking').to_a.collect do |node|
36
36
  underscored_name = underscore(node[:event])
37
37
  if tracking_urls[underscored_name.to_sym]
38
- tracking_urls[underscored_name.to_sym] << URI.parse(node.content)
38
+ tracking_urls[underscored_name.to_sym] << URI.parse(node.content.strip)
39
39
  else
40
- tracking_urls[underscored_name.to_sym] = [URI.parse(node.content)]
40
+ tracking_urls[underscored_name.to_sym] = [URI.parse(node.content.strip)]
41
41
  end
42
42
  end
43
43
  tracking_urls
@@ -1,4 +1,5 @@
1
1
  module VAST
2
+ # A complete VAST document
2
3
  class Document < Nokogiri::XML::Document
3
4
 
4
5
  # Parse a VAST XML document
@@ -20,8 +21,11 @@ module VAST
20
21
  xsd.valid?(self)
21
22
  end
22
23
 
23
- # All ads in the document If no ads of any type are available, it should ould be indicated
24
- # by the absence of any Ads.
24
+ # A single VAST response may include multiple Ads from multiple advertisers. It will be up to the
25
+ # Video Player to determine the order, timing, placement, etc for the multiple ads. However, the
26
+ # player should generally respect the sequential order of the Ad elements within the ad.
27
+ #
28
+ # If no ads of any type are available, it would be indicated by the absence of any ads.
25
29
  def ads
26
30
  self.root.xpath('.//Ad').to_a.collect do |node|
27
31
  Ad.create(node)
@@ -1,4 +1,6 @@
1
1
  module VAST
2
+ # The VAST allows any valid XML within the extensions element. Use of extensions will necessarily
3
+ # require offline coordination between VAST sender and VAST receiver.
2
4
  class Extension < Element
3
5
 
4
6
  # Extension type
@@ -32,6 +32,10 @@ module VAST
32
32
  custom_click_urls
33
33
  end
34
34
 
35
+ # Returns mediafiles containing the information required to display the linear creative's media
36
+ #
37
+ # It is assumed that all mediafiles accessible represent the same creative unit with the same
38
+ # duration, Ad-ID (ISCI code), etc.
35
39
  def mediafiles
36
40
  source_node.xpath('.//MediaFile').to_a.collect do |node|
37
41
  Mediafile.new(node)
@@ -1,4 +1,6 @@
1
1
  module VAST
2
+ # Any number of Mediafile objects can be provided for a single Ad, but it is assumed that all Mediafiles belongs
3
+ # to a single Ad object represent the same creative unit with the same duration, Ad-ID (ISCI code), etc.
2
4
  class Mediafile < Element
3
5
 
4
6
  # Location of linear file
@@ -18,7 +18,9 @@
18
18
  <TrackingEvents>
19
19
  <Tracking event="creativeView"><![CDATA[http://myTrackingURL/creativeView]]></Tracking>
20
20
 
21
- <Tracking event="start"><![CDATA[http://myTrackingURL/start1]]></Tracking>
21
+ <Tracking event="start">
22
+ <![CDATA[http://myTrackingURL/start1]]>
23
+ </Tracking>
22
24
  <Tracking event="start"><![CDATA[http://myTrackingURL/start2]]></Tracking>
23
25
  <Tracking event="midpoint"><![CDATA[http://myTrackingURL/midpoint]]></Tracking>
24
26
  <Tracking event="firstQuartile"><![CDATA[http://myTrackingURL/firstQuartile]]></Tracking>
@@ -26,7 +26,9 @@
26
26
  </Companion>
27
27
  <Companion width="728" height="90">
28
28
 
29
- <StaticResource creativeType="image/jpeg">http://demo.tremormedia.com/proddev/vast/728x90_banner1.jpg</StaticResource>
29
+ <StaticResource creativeType="image/jpeg">
30
+ http://demo.tremormedia.com/proddev/vast/728x90_banner1.jpg
31
+ </StaticResource>
30
32
  <CompanionClickThrough>http://www.tremormedia.com</CompanionClickThrough>
31
33
  </Companion>
32
34
  </CompanionAds>
metadata CHANGED
@@ -1,11 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vast
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 21
4
5
  prerelease: false
5
6
  segments:
6
7
  - 1
7
8
  - 0
8
- version: "1.0"
9
+ - 1
10
+ version: 1.0.1
9
11
  platform: ruby
10
12
  authors:
11
13
  - Chris Dinn
@@ -13,16 +15,18 @@ autorequire:
13
15
  bindir: bin
14
16
  cert_chain: []
15
17
 
16
- date: 2010-08-23 00:00:00 -04:00
18
+ date: 2011-06-01 00:00:00 -04:00
17
19
  default_executable:
18
20
  dependencies:
19
21
  - !ruby/object:Gem::Dependency
20
22
  name: nokogiri
21
23
  prerelease: false
22
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
29
+ hash: 1
26
30
  segments:
27
31
  - 1
28
32
  - 4
@@ -84,23 +88,27 @@ rdoc_options: []
84
88
  require_paths:
85
89
  - lib
86
90
  required_ruby_version: !ruby/object:Gem::Requirement
91
+ none: false
87
92
  requirements:
88
93
  - - ">="
89
94
  - !ruby/object:Gem::Version
95
+ hash: 3
90
96
  segments:
91
97
  - 0
92
98
  version: "0"
93
99
  required_rubygems_version: !ruby/object:Gem::Requirement
100
+ none: false
94
101
  requirements:
95
102
  - - ">="
96
103
  - !ruby/object:Gem::Version
104
+ hash: 3
97
105
  segments:
98
106
  - 0
99
107
  version: "0"
100
108
  requirements: []
101
109
 
102
110
  rubyforge_project:
103
- rubygems_version: 1.3.6
111
+ rubygems_version: 1.3.7
104
112
  signing_key:
105
113
  specification_version: 3
106
114
  summary: A gem for working with VAST 2.0 documents