animoto 0.0.0.alpha1 → 0.0.0.alpha2

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/README.md CHANGED
@@ -1,39 +1,196 @@
1
- Animoto API Client
2
- ==================
3
-
4
- ## Workflow
5
-
6
- require 'animoto/client'
7
- include Animoto
8
-
9
- client = Client.new("username", "password")
10
-
11
- manifest = DirectingManifest.new(:title => "Amazing Title!", :producer => "Fishy Joe")
12
- manifest << Image.new("http://website.com/picture.png")
13
- manifest << Image.new("http://website.com/hooray.png", :spotlit => true)
14
- manifest << TitleCard.new("Woohoo!", "Hooray for everything!")
15
- manifest << Footage.new("http://website.com/movie.mp4", :duration => 3.5)
16
- manifest << Song.new("http://website.com/song.mp3", :artist => "Fishy Joe")
17
-
18
- directing_job = client.direct!(manifest)
19
- while directing_job.pending?
20
- sleep(30)
21
- client.reload!(directing_job)
22
- end
23
-
24
- if storyboard = directing_job.storyboard
25
- manifest = RenderingManifest.new(storyboard, :resolution => "720p", :framerate => 24, :format => 'h264')
26
- rendering_job = client.render!(manifest)
27
- while rendering_job.pending?
28
- sleep(30)
29
- client.reload!(rendering_job)
30
- end
31
-
32
- if video = rendering_job.video
33
- puts video.url
34
- else
35
- raise rendering_job.errors.first
36
- end
37
- else
38
- raise directing_job.errors.first
39
- end
1
+ Animoto API Ruby Client
2
+ =======================
3
+
4
+ The Animoto API is a RESTful web service that transforms images, videos,
5
+ music, and text into amazing video presentations.
6
+
7
+ The Animoto API Ruby Client provides a convenient Ruby interface for working
8
+ with the Animoto RESTful HTTP API.
9
+
10
+ ### Topics
11
+
12
+ * [Who should read this document](#who_should_read_this_document)
13
+ * [What is covered in this document](#what_is_covered_in_this_document)
14
+ * [Getting Started using the Ruby Client](#getting_started_using_the_ruby_client)
15
+ * [How to contribute to this client](#how_to_contribute)
16
+
17
+ <a name="who_should_read_this_document"></a>
18
+ ## Who should read this document?
19
+
20
+ This document is primarily aimed at developers looking to integrate with
21
+ Animoto services from a Ruby environment or using the Ruby language.
22
+
23
+ <a name="what_is_covered_in_this_document"></a>
24
+ ## What is covered in this document
25
+
26
+ This document covers the technical details of the Animoto API Ruby client and
27
+ provides a general overview of its use.
28
+
29
+ This document does not cover the details of the Animoto API itself. For such information please see the [Animoto API documentation][api_docs]
30
+
31
+ <a name="getting_started_using_the_ruby_client"></a>
32
+ ## Getting Started using the Ruby Client
33
+
34
+ ### Prerequisites
35
+
36
+ #### Readers of this document should be familiar with...
37
+
38
+ * The [the Ruby language](http://ruby-lang.org)
39
+ * The [Animoto API documentation][api_docs]
40
+
41
+ #### Authentication
42
+
43
+ You must have a application key and secret to use the Animoto API. If you
44
+ don't have a key/secret pair, please contact your Animoto representative. Note
45
+ that you may have multiple key/secret pairs at one time.
46
+
47
+ ### Conceptual overview of Animoto
48
+
49
+ Creating a video using the Animoto API consists of two major steps:
50
+ "directing" and "rendering".
51
+
52
+ Directing is the process in which the Animoto system analyzes input visuals
53
+ and music and determines the best way to present those visuals with the
54
+ specified music. The output of directing is stored in the Animoto system for
55
+ later use and is called a "storyboard".
56
+
57
+ The second major phase of creating an Animoto video is called rendering.
58
+ Rendering is the transformation of the artistic choices made by the director
59
+ (and stored in a storyboard) into an actual video file that can be downloaded
60
+ and viewed.
61
+
62
+ Every time a new set of photos is to be transformed into a video, or every
63
+ time a new set of artistic choices is to be made, a new storyboard must be
64
+ created via directing. Once directing happens and a storyboard is created,
65
+ videos can be rendered from that storyboard at any time, each with different
66
+ resolutions, encodings, etc. suitable to different display environments.
67
+
68
+ While directing and rendering are generally speedy processes, they do take
69
+ longer than is appropriate for a typical HTTP request. These long-running
70
+ tasks are represented as "jobs" in the Animoto API. Directing (creating
71
+ storyboards) is accomplished by initiating a directing job, and rendering
72
+ (creating a video file) starts by creating a rendering job. Jobs are a handy
73
+ way to track status and debug problems if the requested operation couldn't be
74
+ completed.
75
+
76
+ ### Creating a video using the Ruby client
77
+
78
+ This example shows how to create an Animoto video in one shot with the Ruby
79
+ client and using HTTP callbacks for status updates.
80
+
81
+ require 'animoto/client'
82
+ include Animoto
83
+
84
+ # Create a new client using our application key and secret
85
+ client = Client.new("application_key", "secret")
86
+
87
+ # create a directing and rendering manifest with the video title and
88
+ # producer. Also include rendering parameters like resolution, framerate,
89
+ # and format.
90
+ manifest = DirectingAndRenderingManifest.new(
91
+ :title => "Amazing Title!",
92
+ :producer => "Fishy Joe",
93
+ :resolution => "720p",
94
+ :framerate => 24,
95
+ :format => 'h264'
96
+ )
97
+
98
+ # Add some images, text, and footage to our manifest.
99
+ manifest << Image.new("http://website.com/picture.png")
100
+ manifest << Image.new("http://website.com/hooray.png", :spotlit => true)
101
+ manifest << TitleCard.new("Woohoo!", "Hooray for everything!")
102
+ manifest << Footage.new("http://website.com/movie.mp4", :duration => 3.5)
103
+
104
+ # Setup the soundtrack.
105
+ manifest << Song.new("http://website.com/song.mp3", :artist => "Fishy Joe")
106
+
107
+ # Setup to get http callbacks for status notification (see below for
108
+ # polling example).
109
+ manifest.http_callback_url = "http://mysite.com/animoto_callback"
110
+ manifest.http_callback_format = "json"
111
+
112
+ # Send the manifest to the API. Your app will be notified of
113
+ # completion/failure via an HTTP POST to
114
+ # "http://mysite.com/animoto_callback"
115
+ client.direct_and_render!(manifest)
116
+
117
+
118
+ ### A basic example using the Ruby client
119
+
120
+ This example shows how to separately direct a storyboard and render a video
121
+ with that storyboard. It also demonstrates how to use polling to check on job
122
+ status.
123
+
124
+ require 'animoto/client'
125
+ include Animoto
126
+
127
+ # Create a new client using our application key and secret
128
+ client = Client.new("application_key", "secret")
129
+
130
+ # Create a directing manifest. The directing manifest controls the images
131
+ # and other visual elements that will be in our final video.
132
+ manifest = DirectingManifest.new(:title => "Amazing Title!", :producer => "Fishy Joe")
133
+
134
+ # Add some images, text, and footage to our manifest.
135
+ manifest << Image.new("http://website.com/picture.png")
136
+ manifest << Image.new("http://website.com/hooray.png", :spotlit => true)
137
+ manifest << TitleCard.new("Woohoo!", "Hooray for everything!")
138
+ manifest << Footage.new("http://website.com/movie.mp4", :duration => 3.5)
139
+
140
+ # Setup the soundtrack.
141
+ manifest << Song.new("http://website.com/song.mp3", :artist => "Fishy Joe")
142
+
143
+ # Request a new directing job by sending the API our directing manifest.
144
+ directing_job = client.direct!(manifest)
145
+
146
+ # Poll the service until the directing job is done.
147
+ while directing_job.pending?
148
+ sleep(30)
149
+ client.reload!(directing_job)
150
+ end
151
+
152
+ # If the directing job finished successfully, there will be a "storyboard"
153
+ # associated with this job.
154
+ if storyboard = directing_job.storyboard
155
+
156
+ # Now it's time to render the storyboard into a video. First we create
157
+ # a rendering manifest.
158
+ manifest = RenderingManifest.new(storyboard, :resolution => "720p", :framerate => 24, :format => 'h264')
159
+
160
+ # Send the manifest to the API.
161
+ rendering_job = client.render!(manifest)
162
+
163
+ # Poll the service until the rendering job is done
164
+ while rendering_job.pending?
165
+ sleep(30)
166
+ client.reload!(rendering_job)
167
+ end
168
+
169
+ # If the job has a video associated with it, everything worked out ok.
170
+ if video = rendering_job.video
171
+ # Print a link to download the video file.
172
+ puts video.url
173
+ else
174
+ # Something happened during rendering...
175
+ raise rendering_job.errors.first
176
+ end
177
+ else
178
+ # Looks like there was a problem. Perhaps one of the assets wasn't
179
+ # retrieved or was corrupt...
180
+ raise directing_job.errors.first
181
+ end
182
+
183
+ <a name="how_to_contribute"></a>
184
+ ## How to contribute to this client
185
+
186
+ 1. [Fork](http://help.github.com/forking/) `animoto_ruby_client`
187
+ 2. Create a topic branch - `git checkout -b my_branch`
188
+ 3. Push to your branch - `git push origin my_branch`
189
+ 4. Create an [Issue](http://github.com/animoto/animoto_ruby_client/issues) with a link to your branch
190
+ 5. That's it!
191
+
192
+ You might want to checkout our [the wiki page](http://wiki.github.com/animoto/animoto_ruby_client) for information
193
+ on coding standards, new features, etc.
194
+
195
+
196
+ [api_docs]: http://animoto.com/developer/api
data/lib/animoto/asset.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  module Animoto
2
2
  class Asset
3
3
 
4
- attr_accessor :source_url
4
+ attr_accessor :source
5
5
 
6
- def initialize source_url, options = {}
7
- @source_url = source_url
6
+ def initialize source, options = {}
7
+ @source = source
8
8
  end
9
9
 
10
10
  # Returns a representation of this asset as a Hash. Used mainly for generating
@@ -12,7 +12,7 @@ module Animoto
12
12
  #
13
13
  # @return [Hash] this asset as a Hash
14
14
  def to_hash
15
- { 'source_url' => @source_url }
15
+ { 'source' => @source }
16
16
  end
17
17
 
18
18
  # Returns a representation of this asset as JSON.
@@ -10,6 +10,7 @@ require 'animoto/standard_envelope'
10
10
  require 'animoto/resource'
11
11
  require 'animoto/asset'
12
12
  require 'animoto/visual'
13
+ require 'animoto/coverable'
13
14
  require 'animoto/footage'
14
15
  require 'animoto/image'
15
16
  require 'animoto/song'
@@ -0,0 +1,29 @@
1
+ module Animoto
2
+ module Coverable
3
+
4
+ # Setter for cover, which makes this visual the cover for the video. Only
5
+ # one image or piece of footage in a manifest can be declared the cover.
6
+ #
7
+ # @param [Boolean] bool true if this visual should be the cover
8
+ def cover= bool
9
+ @cover = bool
10
+ end
11
+
12
+ # Returns true if this visual is the cover.
13
+ #
14
+ # @return [Boolean] whether or not this visual is the cover
15
+ def cover?
16
+ @cover
17
+ end
18
+
19
+ # Returns a representation of this visual as a Hash.
20
+ #
21
+ # @return [Hash] this visual as a Hash
22
+ def to_hash
23
+ hash = super rescue {}
24
+ hash['cover'] = cover? unless @cover.nil?
25
+ hash
26
+ end
27
+
28
+ end
29
+ end
@@ -1,20 +1,18 @@
1
1
  module Animoto
2
2
  class DirectingManifest < Animoto::Manifest
3
3
 
4
- attr_accessor :title, :producer, :pacing, :http_callback_url, :http_callback_format
4
+ attr_accessor :title, :pacing, :http_callback_url, :http_callback_format
5
5
  attr_reader :visuals, :song, :style
6
6
 
7
7
  # Creates a new DirectingManifest.
8
8
  #
9
9
  # @param [Hash] options
10
10
  # @option options [String] :title the title of this project
11
- # @option options [String] :producer the name of the producer of this project
12
11
  # @option options ['default','half','double'] :pacing ('default') the pacing for this project
13
12
  # @option options [String] :http_callback_url a URL to receive a callback when this job is done
14
13
  # @option options ['json','xml'] :http_callback_format the format of the callback
15
14
  def initialize options = {}
16
15
  @title = options[:title]
17
- @producer = options[:producer]
18
16
  @pacing = options[:pacing] || 'default'
19
17
  @style = 'original'
20
18
  @visuals = []
@@ -102,7 +100,6 @@ module Animoto
102
100
  manifest['style'] = style
103
101
  manifest['pacing'] = pacing if pacing
104
102
  manifest['title'] = title if title
105
- manifest['producer_name'] = producer if producer
106
103
  manifest['visuals'] = []
107
104
  visuals.each do |visual|
108
105
  manifest['visuals'] << visual.to_hash
@@ -1,6 +1,7 @@
1
1
  module Animoto
2
2
  class Footage < Animoto::Asset
3
3
  include Animoto::Visual
4
+ include Animoto::Coverable
4
5
 
5
6
  attr_accessor :audio_mix, :start_time, :duration
6
7
 
@@ -9,7 +10,7 @@ module Animoto
9
10
  hash['audio_mix'] = 'MIX' if audio_mix
10
11
  hash['start_time'] = start_time if start_time
11
12
  hash['duration'] = duration if duration
12
- hash
13
+ hash
13
14
  end
14
15
  end
15
16
  end
data/lib/animoto/image.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module Animoto
2
2
  class Image < Animoto::Asset
3
3
  include Animoto::Visual
4
+ include Animoto::Coverable
4
5
 
5
6
  attr_accessor :rotation
6
7
 
@@ -8,6 +9,7 @@ module Animoto
8
9
  hash = super
9
10
  hash['rotation'] = rotation if rotation
10
11
  hash['spotlit'] = spotlit? unless @spotlit.nil?
12
+ hash['cover'] = cover? unless @cover.nil?
11
13
  hash
12
14
  end
13
15
  end
@@ -18,7 +18,7 @@ module Animoto
18
18
  # @return [Hash] this manifest as a Hash
19
19
  # @raise [ArgumentError] if a callback URL was specified but not the format
20
20
  def to_hash
21
- hash = { 'rendering_job' => { 'rendering_manifest' => { 'rendering_profile' => {} } } }
21
+ hash = { 'rendering_job' => { 'rendering_manifest' => { 'rendering_parameters' => {} } } }
22
22
  job = hash['rendering_job']
23
23
  if http_callback_url
24
24
  raise ArgumentError, "You must specify a http_callback_format (either 'xml' or 'json')" if http_callback_format.nil?
@@ -27,10 +27,10 @@ module Animoto
27
27
  end
28
28
  manifest = job['rendering_manifest']
29
29
  manifest['storyboard_url'] = storyboard.url
30
- profile = manifest['rendering_profile']
31
- profile['vertical_resolution'] = resolution
32
- profile['framerate'] = framerate
33
- profile['format'] = format
30
+ params = manifest['rendering_parameters']
31
+ params['resolution'] = resolution
32
+ params['framerate'] = framerate
33
+ params['format'] = format
34
34
  hash
35
35
  end
36
36
  end
data/lib/animoto/song.rb CHANGED
@@ -1,14 +1,12 @@
1
1
  module Animoto
2
2
  class Song < Animoto::Asset
3
3
 
4
- attr_accessor :start_time, :duration, :title, :artist
4
+ attr_accessor :start_time, :duration
5
5
 
6
6
  def to_hash
7
7
  hash = super
8
8
  hash['start_time'] = start_time if start_time
9
9
  hash['duration'] = duration if duration
10
- hash['title'] = title if title
11
- hash['artist'] = artist if artist
12
10
  hash
13
11
  end
14
12
 
data/lib/animoto/video.rb CHANGED
@@ -3,7 +3,7 @@ module Animoto
3
3
 
4
4
  def self.unpack_standard_envelope body
5
5
  super.merge({
6
- :download_url => body['response']['payload'][payload_key]['links']['download'],
6
+ :download_url => body['response']['payload'][payload_key]['links']['file'],
7
7
  :storyboard_url => body['response']['payload'][payload_key]['links']['storyboard'],
8
8
  :duration => body['response']['payload'][payload_key]['metadata']['duration'],
9
9
  :format => body['response']['payload'][payload_key]['metadata']['format'],
data/lib/animoto.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Animoto
2
2
  def self.version
3
- "0.0.0.alpha1"
3
+ "0.0.0.alpha2"
4
4
  end
5
5
  end
@@ -1 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe Animoto::Asset do
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe Animoto::Coverable do
4
+
5
+ end
@@ -8,7 +8,7 @@ describe Animoto::DirectingAndRenderingManifest do
8
8
 
9
9
  describe "generating a hash" do
10
10
  before do
11
- manifest(:title => 'Funderful Wonderment', :producer => 'Senor Spielbergo', :pacing => 'double',
11
+ manifest(:title => 'Funderful Wonderment', :pacing => 'double',
12
12
  :resolution => "720p", :framerate => 24, :format => 'flv')
13
13
  @image = manifest.add_image 'http://website.com/image.png'
14
14
  @title_card = manifest.add_title_card 'woohoo', 'this is awesome'
@@ -69,11 +69,6 @@ describe Animoto::DirectingAndRenderingManifest do
69
69
  @hash['pacing'].should == manifest.pacing
70
70
  end
71
71
 
72
- it "should have a 'producer_name' key in the manifest" do
73
- @hash.should have_key('producer_name')
74
- @hash['producer_name'].should == manifest.producer
75
- end
76
-
77
72
  it "should have a 'visuals' key in the manifest" do
78
73
  @hash.should have_key('visuals')
79
74
  end
@@ -23,14 +23,6 @@ describe Animoto::DirectingManifest do
23
23
  manifest.style.should == 'original'
24
24
  end
25
25
 
26
- it "should default to no producer" do
27
- manifest.producer.should be_nil
28
- end
29
-
30
- it "should be able to specify the producer with a :producer parameter" do
31
- manifest(:producer => "Senor Spielbergo").producer.should == "Senor Spielbergo"
32
- end
33
-
34
26
  it "should default to having to visuals" do
35
27
  manifest.visuals.should be_empty
36
28
  end
@@ -92,7 +84,7 @@ describe Animoto::DirectingManifest do
92
84
 
93
85
  describe "generating a hash" do
94
86
  before do
95
- manifest(:title => 'Funderful Wonderment', :producer => 'Senor Spielbergo', :pacing => 'double')
87
+ manifest(:title => 'Funderful Wonderment', :pacing => 'double')
96
88
  @image = manifest.add_image 'http://website.com/image.png'
97
89
  @title_card = manifest.add_title_card 'woohoo', 'this is awesome'
98
90
  @footage = manifest.add_footage 'http://website.com/movie.mp4'
@@ -119,11 +111,6 @@ describe Animoto::DirectingManifest do
119
111
  manifest.to_hash['directing_job']['directing_manifest']['pacing'].should == manifest.pacing
120
112
  end
121
113
 
122
- it "should have a 'producer_name' key in the manifest" do
123
- manifest.to_hash['directing_job']['directing_manifest'].should have_key('producer_name')
124
- manifest.to_hash['directing_job']['directing_manifest']['producer_name'].should == manifest.producer
125
- end
126
-
127
114
  it "should have a 'visuals' key in the manifest" do
128
115
  manifest.to_hash['directing_job']['directing_manifest'].should have_key('visuals')
129
116
  end
@@ -11,9 +11,9 @@ describe Animoto::Footage do
11
11
  @footage = Animoto::Footage.new 'http://website.com/movie.mp4'
12
12
  end
13
13
 
14
- it "should have a 'source_url' key with the url" do
15
- @footage.to_hash.should have_key('source_url')
16
- @footage.to_hash['source_url'].should == @footage.source_url
14
+ it "should have a 'source' key with the url" do
15
+ @footage.to_hash.should have_key('source')
16
+ @footage.to_hash['source'].should == @footage.source
17
17
  end
18
18
 
19
19
  it "should not have a 'spotlit' key" do
@@ -11,9 +11,9 @@ describe Animoto::Image do
11
11
  @image = Animoto::Image.new 'http://website.com/image.png'
12
12
  end
13
13
 
14
- it "should have a 'source_url' key with the url" do
15
- @image.to_hash.should have_key('source_url')
16
- @image.to_hash['source_url'].should == @image.source_url
14
+ it "should have a 'source' key with the url" do
15
+ @image.to_hash.should have_key('source')
16
+ @image.to_hash['source'].should == @image.source
17
17
  end
18
18
 
19
19
  describe "if rotated" do
@@ -61,18 +61,18 @@ describe Animoto::RenderingManifest do
61
61
  manifest.to_hash['rendering_job']['rendering_manifest']['storyboard_url'].should == @storyboard.url
62
62
  end
63
63
 
64
- it "should have a 'rendering_profile' object in the manifest" do
65
- manifest.to_hash['rendering_job']['rendering_manifest'].should have_key('rendering_profile')
66
- manifest.to_hash['rendering_job']['rendering_manifest']['rendering_profile'].should be_a(Hash)
64
+ it "should have a 'rendering_parameters' object in the manifest" do
65
+ manifest.to_hash['rendering_job']['rendering_manifest'].should have_key('rendering_parameters')
66
+ manifest.to_hash['rendering_job']['rendering_manifest']['rendering_parameters'].should be_a(Hash)
67
67
  end
68
68
 
69
- describe "rendering profile" do
69
+ describe "rendering parameters" do
70
70
  before do
71
- @profile = manifest.to_hash['rendering_job']['rendering_manifest']['rendering_profile']
71
+ @profile = manifest.to_hash['rendering_job']['rendering_manifest']['rendering_parameters']
72
72
  end
73
73
 
74
- it "should have a 'vertical_resolution' key" do
75
- @profile['vertical_resolution'].should == manifest.resolution
74
+ it "should have a 'resolution' key" do
75
+ @profile['resolution'].should == manifest.resolution
76
76
  end
77
77
 
78
78
  it "should have a 'framerate' key" do
@@ -7,9 +7,9 @@ describe Animoto::Song do
7
7
  @song = Animoto::Song.new 'http://website.com/song.mp3'
8
8
  end
9
9
 
10
- it "should have a 'source_url' key with the url" do
11
- @song.to_hash.should have_key('source_url')
12
- @song.to_hash['source_url'].should == @song.source_url
10
+ it "should have a 'source' key with the url" do
11
+ @song.to_hash.should have_key('source')
12
+ @song.to_hash['source'].should == @song.source
13
13
  end
14
14
 
15
15
  describe "if a start time was specified" do
@@ -32,23 +32,6 @@ describe Animoto::Song do
32
32
  @song.to_hash.should have_key('duration')
33
33
  @song.to_hash['duration'].should == @song.duration
34
34
  end
35
- end
36
-
37
- describe "if a title and/or artist was specified" do
38
- before do
39
- @song.title = "Antarctican Drinking Song"
40
- @song.artist = "Gwar"
41
- end
42
-
43
- it "should have an 'artist' key with the artist" do
44
- @song.to_hash.should have_key('artist')
45
- @song.to_hash['artist'].should == @song.artist
46
- end
47
-
48
- it "should have a 'title' key with the title" do
49
- @song.to_hash.should have_key('title')
50
- @song.to_hash['title'].should == @song.title
51
- end
52
- end
35
+ end
53
36
  end
54
37
  end
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe Animoto::StandardEnvelope do
4
+
5
+ end
@@ -1 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe Animoto::Video do
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe Animoto::Visual do
4
+
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: animoto
3
3
  version: !ruby/object:Gem::Version
4
- hash: -1710980557
4
+ hash: -1710980560
5
5
  prerelease: true
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
9
  - 0
10
- - alpha1
11
- version: 0.0.0.alpha1
10
+ - alpha2
11
+ version: 0.0.0.alpha2
12
12
  platform: ruby
13
13
  authors:
14
14
  - Animoto
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-08-13 00:00:00 -04:00
19
+ date: 2010-08-30 00:00:00 -04:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -48,6 +48,7 @@ files:
48
48
  - ./lib/animoto/asset.rb
49
49
  - ./lib/animoto/client.rb
50
50
  - ./lib/animoto/content_type.rb
51
+ - ./lib/animoto/coverable.rb
51
52
  - ./lib/animoto/directing_and_rendering_job.rb
52
53
  - ./lib/animoto/directing_and_rendering_manifest.rb
53
54
  - ./lib/animoto/directing_job.rb
@@ -69,6 +70,7 @@ files:
69
70
  - ./lib/animoto.rb
70
71
  - ./spec/animoto/asset_spec.rb
71
72
  - ./spec/animoto/client_spec.rb
73
+ - ./spec/animoto/coverable_spec.rb
72
74
  - ./spec/animoto/directing_and_rendering_job_spec.rb
73
75
  - ./spec/animoto/directing_and_rendering_manifest_spec.rb
74
76
  - ./spec/animoto/directing_job_spec.rb