vidly 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,24 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
22
+ .autotest
23
+ .document
24
+ examples/wynn.rb
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Wynn Netherland
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,18 @@
1
+ # vidly
2
+
3
+ Upload and share videos to Twitter with Vid.ly
4
+
5
+ ## Note on Patches/Pull Requests
6
+
7
+ * Fork the project.
8
+ * Make your feature addition or bug fix.
9
+ * Add tests for it. This is important so I don't break it in a
10
+ future version unintentionally.
11
+ * Commit, do not mess with rakefile, version, or history.
12
+ (if you want to have your own version, that is fine but
13
+ bump version in a commit by itself I can ignore when I pull)
14
+ * Send me a pull request. Bonus points for topic branches.
15
+
16
+ ## Copyright
17
+
18
+ Copyright (c) 2009 [Wynn Netherland](http://wynnnetherland.com). See LICENSE for details.
@@ -0,0 +1,60 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "vidly"
8
+ gem.summary = %Q{Ruby wrapper for the Vid.ly API}
9
+ gem.description = %Q{Post your videos to Twitter with Vid.ly}
10
+ gem.email = "wynn.netherland@gmail.com"
11
+ gem.homepage = "http://github.com/pengwynn/vidly"
12
+ gem.authors = ["Wynn Netherland"]
13
+
14
+ gem.add_dependency('hashie', '~> 0.1.3')
15
+ gem.add_dependency('httparty', '~> 0.4.5')
16
+
17
+ gem.add_development_dependency('thoughtbot-shoulda', '>= 2.10.1')
18
+ gem.add_development_dependency('jnunemaker-matchy', '0.4.0')
19
+ gem.add_development_dependency('mocha', '0.9.4')
20
+ gem.add_development_dependency('fakeweb', '>= 1.2.5')
21
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
22
+ end
23
+ Jeweler::GemcutterTasks.new
24
+ rescue LoadError
25
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
26
+ end
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ begin
36
+ require 'rcov/rcovtask'
37
+ Rcov::RcovTask.new do |test|
38
+ test.libs << 'test'
39
+ test.pattern = 'test/**/test_*.rb'
40
+ test.verbose = true
41
+ end
42
+ rescue LoadError
43
+ task :rcov do
44
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
45
+ end
46
+ end
47
+
48
+ task :test => :check_dependencies
49
+
50
+ task :default => :test
51
+
52
+ require 'rake/rdoctask'
53
+ Rake::RDocTask.new do |rdoc|
54
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
55
+
56
+ rdoc.rdoc_dir = 'rdoc'
57
+ rdoc.title = "vidly #{version}"
58
+ rdoc.rdoc_files.include('README*')
59
+ rdoc.rdoc_files.include('lib/**/*.rb')
60
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,5 @@
1
+ ## Changelog
2
+
3
+ ### 0.1.0 November 30, 2009
4
+ * Initial version
5
+ * TODO: Implement chunked upload methods
@@ -0,0 +1,13 @@
1
+ require 'lib/vidly'
2
+
3
+ # create a client
4
+ vidly = Vidly.new('twitter_user', 'twitter_pass')
5
+
6
+ # upload a file
7
+ vidly.upload("path/to/file.m4v", :status => "Testing from the ruby gem")
8
+
9
+ # check the status of a previous upload
10
+ vidly.status('bHXX')
11
+
12
+ # get all the videos for a user
13
+ Vidly.videos("pengwynn")
@@ -0,0 +1,117 @@
1
+ require 'rubygems'
2
+
3
+ gem 'hashie', '~> 0.1.3'
4
+ require 'hashie'
5
+
6
+ gem 'httparty', '~> 0.4.3'
7
+ require 'httparty'
8
+
9
+ require 'cgi'
10
+
11
+ class Vidly
12
+ include HTTParty
13
+ base_uri 'api.vidly.com/0.1'
14
+ format :json
15
+
16
+ def initialize(username, password)
17
+ @auth = {:username => username, :password => password}
18
+ end
19
+
20
+ def upload(file, options={})
21
+ upload_file("/upload.json", file, options)
22
+ end
23
+
24
+ def upload_and_post(file, options={})
25
+ upload_file("/uploadAndPost.json", file, options)
26
+ end
27
+
28
+ def import(url, options={})
29
+ self.class.mashup(self.class.post("/import.json", {:basic_auth => @auth, :body => default_video_options.merge(options.merge({:url => url})) }))
30
+ end
31
+
32
+ def import_and_post(url, options={})
33
+ self.class.mashup(self.class.post("/importAndPost.json", {:basic_auth => @auth, :body => default_video_options.merge(options.merge({:url => url})) }))
34
+ end
35
+
36
+ def status(id)
37
+ info = self.class.mashup(self.class.post("/status.json", {:basic_auth => @auth, :body => {:id => id}}))
38
+ %w(views retweets likes).each do |key|
39
+ info.meta[key] = info.meta[key].to_i
40
+ end
41
+ info
42
+ end
43
+
44
+ def self.videos(username)
45
+ mashup(get("/videos/#{username}.json"))
46
+ end
47
+
48
+ def self.meta(url)
49
+ mashup(get("/import/meta.json", :query => {:url => url}))
50
+ end
51
+
52
+ def self.url(id)
53
+ "http://vid.ly/#{id}"
54
+ end
55
+
56
+
57
+ protected
58
+
59
+ def default_video_options
60
+ {:source => "Ruby gem"}
61
+ end
62
+
63
+ # yerked from Twitter gem
64
+
65
+ def self.mime_type(file)
66
+ case
67
+ when file =~ /\.jpg/ then 'image/jpg'
68
+ when file =~ /\.gif$/ then 'image/gif'
69
+ when file =~ /\.png$/ then 'image/png'
70
+ else 'application/octet-stream'
71
+ end
72
+ end
73
+ def mime_type(f) self.class.mime_type(f) end
74
+
75
+ CRLF = "\r\n"
76
+ def self.build_multipart_bodies(parts)
77
+ boundary = Time.now.to_i.to_s(16)
78
+ body = ""
79
+ parts.each do |key, value|
80
+ esc_key = CGI.escape(key.to_s)
81
+ body << "--#{boundary}#{CRLF}"
82
+ if value.respond_to?(:read)
83
+ body << "Content-Disposition: form-data; name=\"#{esc_key}\"; filename=\"#{File.basename(value.path)}\"#{CRLF}"
84
+ body << "Content-Type: #{mime_type(value.path)}#{CRLF*2}"
85
+ body << value.read
86
+ else
87
+ body << "Content-Disposition: form-data; name=\"#{esc_key}\"#{CRLF*2}#{value}"
88
+ end
89
+ body << CRLF
90
+ end
91
+ body << "--#{boundary}--#{CRLF*2}"
92
+ {
93
+ :body => body,
94
+ :headers => {"Content-Type" => "multipart/form-data; boundary=#{boundary}"}
95
+ }
96
+ end
97
+
98
+ def build_multipart_bodies(parts) self.class.build_multipart_bodies(parts) end
99
+
100
+ private
101
+
102
+ def self.raise_errors(data)
103
+ raise(StandardError.new(data), data.inspect) if data.keys.include?('code')
104
+ end
105
+
106
+ def self.mashup(data)
107
+ raise_errors(data)
108
+ Hashie::Mash.new(data['response'])
109
+ end
110
+
111
+ def upload_file(path, file, options={})
112
+ file = File.new(file) if file.is_a?(String)
113
+ body_options = default_video_options.merge(options).merge({:media => file})
114
+ opts = build_multipart_bodies(body_options).merge({:basic_auth => @auth})
115
+ self.class.mashup(self.class.post(path, opts))
116
+ end
117
+ end
@@ -0,0 +1,159 @@
1
+ {
2
+ "status": "ok",
3
+ "response": {
4
+ "videos": [{
5
+ "title": "Speaking to the troops in Baghdad. What a fantastic trip.",
6
+ "image": "http:\/\/imgs.vidly-cdn.com\/2kglrTg4-large-1.jpg",
7
+ "id": "bH7u",
8
+ "entered": "2009-11-19 15:10:18",
9
+ "since": "1 week ago",
10
+ "views": false
11
+ },
12
+ {
13
+ "title": "in case you missed it, here is a clip from our water press conf. That's what I call bipartisan.",
14
+ "image": "http:\/\/imgs.vidly-cdn.com\/Il1GChVs-large-1.jpg",
15
+ "id": "afSs",
16
+ "entered": "2009-11-04 14:51:14",
17
+ "since": "3 weeks ago",
18
+ "views": false
19
+ },
20
+ {
21
+ "title": "At the grand opening of a great new green car plant in Stockton.",
22
+ "image": "http:\/\/imgs.vidly-cdn.com\/fa4HUdc6-large-1.jpg",
23
+ "id": "afSo",
24
+ "entered": "2009-11-04 14:26:06",
25
+ "since": "3 weeks ago",
26
+ "views": false
27
+ },
28
+ {
29
+ "title": "Just now answering questions after restoring funding to keep domestic violence shelters open",
30
+ "image": "http:\/\/imgs.vidly-cdn.com\/G5MwMfPJ-large-1.jpg",
31
+ "id": "af4L",
32
+ "entered": "2009-10-21 16:07:24",
33
+ "since": "1 month ago",
34
+ "views": false
35
+ },
36
+ {
37
+ "title": "Signed a memorandum of understanding with Gov Osuna frm Baja",
38
+ "image": "http:\/\/imgs.vidly-cdn.com\/xFmWa5dY-large-1.jpg",
39
+ "id": "af2W",
40
+ "entered": "2009-10-20 15:45:55",
41
+ "since": "1 month ago",
42
+ "views": false
43
+ },
44
+ {
45
+ "title": "Checking out the hydrogen fuel cell electric truck",
46
+ "image": "http:\/\/imgs.vidly-cdn.com\/sRQW5ciO-large-1.jpg",
47
+ "id": "af2F",
48
+ "entered": "2009-10-20 12:14:36",
49
+ "since": "1 month ago",
50
+ "views": false
51
+ },
52
+ {
53
+ "title": "Signing bills to fight drunk driving just now",
54
+ "image": "http:\/\/imgs.vidly-cdn.com\/dTzvaPKC-large-1.jpg",
55
+ "id": "aer4",
56
+ "entered": "2009-10-13 14:11:22",
57
+ "since": "1 month ago",
58
+ "views": false
59
+ },
60
+ {
61
+ "title": "Video of my closing remarks at the #climate summit \u2013 thanks to so many fantastic people for making the summit a success!",
62
+ "image": "http:\/\/imgs.vidly-cdn.com\/O71Hfcl4-large-1.jpg",
63
+ "id": "aeVz",
64
+ "entered": "2009-10-02 19:02:32",
65
+ "since": "1 month ago",
66
+ "views": false
67
+ },
68
+ {
69
+ "title": "Check out the video of the port we visited yesterday to announce millions for cleaner technology to create a healthier CA",
70
+ "image": "http:\/\/imgs.vidly-cdn.com\/mUiTK8Zp-large-1.jpg",
71
+ "id": "aeVV",
72
+ "entered": "2009-10-02 15:09:05",
73
+ "since": "1 month ago",
74
+ "views": false
75
+ },
76
+ {
77
+ "title": "Surprised @edbegleyjr w\/ a special award - he's the king of practicing what he preaches about going green",
78
+ "image": "http:\/\/imgs.vidly-cdn.com\/1gUl2Z0Z-large-1.jpg",
79
+ "id": "aeRK",
80
+ "entered": "2009-09-30 22:31:23",
81
+ "since": "1 month ago",
82
+ "views": false
83
+ },
84
+ {
85
+ "title": "Here's a short clip of an interview I just did with Judy Woodruff abt our regional approach to climate change.",
86
+ "image": "http:\/\/imgs.vidly-cdn.com\/QXZdcFAp-large-1.jpg",
87
+ "id": "aeQu",
88
+ "entered": "2009-09-30 18:47:04",
89
+ "since": "2 months ago",
90
+ "views": false
91
+ },
92
+ {
93
+ "title": "Video abt my Exec. Order requiring 33% of CA energy to come from renewable sources by 2020. This is for a cleaner world.",
94
+ "image": "http:\/\/imgs.vidly-cdn.com\/gfUqZNFJ-large-1.jpg",
95
+ "id": "adU8",
96
+ "entered": "2009-09-18 17:55:07",
97
+ "since": "2 months ago",
98
+ "views": false
99
+ },
100
+ {
101
+ "title": "Happy Birthday Patrick",
102
+ "image": "http:\/\/imgs.vidly-cdn.com\/mLddaOei-large-1.jpg",
103
+ "id": "adSm",
104
+ "entered": "2009-09-18 14:00:08",
105
+ "since": "2 months ago",
106
+ "views": false
107
+ },
108
+ {
109
+ "title": "Join me & serve your community. If you already volunteer, inspire others & tweet what you do, use #volunteer.",
110
+ "image": "http:\/\/imgs.vidly-cdn.com\/588WINUW-large-1.jpg",
111
+ "id": "ad4A",
112
+ "entered": "2009-09-13 01:13:07",
113
+ "since": "2 months ago",
114
+ "views": false
115
+ },
116
+ {
117
+ "title": "A video message to our brave firefighters \u2013 thank you for keeping us safe.",
118
+ "image": "http:\/\/imgs.vidly-cdn.com\/qRuIzyip-large-1.jpg",
119
+ "id": "actM",
120
+ "entered": "2009-09-04 18:39:34",
121
+ "since": "2 months ago",
122
+ "views": false
123
+ },
124
+ {
125
+ "title": "Here's a video of my tour with @biz and @ev at Twitter HQ today.",
126
+ "image": "http:\/\/imgs.vidly-cdn.com\/CWgCvW3K-large-1.jpg",
127
+ "id": "acgO",
128
+ "entered": "2009-08-26 20:41:26",
129
+ "since": "3 months ago",
130
+ "views": false
131
+ },
132
+ {
133
+ "title": "Check out my weekly video address about fundamentally reforming & fixing the California education system.",
134
+ "image": "http:\/\/imgs.vidly-cdn.com\/TUW9HpNv-large-1.jpg",
135
+ "id": "acat",
136
+ "entered": "2009-08-21 19:17:02",
137
+ "since": "3 months ago",
138
+ "views": false
139
+ },
140
+ {
141
+ "title": "Here I am updating the press about the budget today.",
142
+ "image": "http:\/\/imgs.vidly-cdn.com\/iaXQTEX9-large-1.jpg",
143
+ "id": "abwf",
144
+ "entered": "2009-07-22 16:37:35",
145
+ "since": "4 months ago",
146
+ "views": false
147
+ },
148
+ {
149
+ "title": "Here\u2019s a video I just shot for my twitter followers.",
150
+ "image": "http:\/\/imgs.vidly-cdn.com\/7WVfIq5a-large-1.jpg",
151
+ "id": "abv1",
152
+ "entered": "2009-07-21 14:19:36",
153
+ "since": "4 months ago",
154
+ "views": false
155
+ }],
156
+ "real_name": "Gov. Schwarzenegger",
157
+ "total": "19"
158
+ }
159
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "status": "ok",
3
+ "response": {
4
+ "url": "http:\/\/vid.ly\/bHXp",
5
+ "id": "bHXp",
6
+ "embed": "http:\/\/vidly.com\/embed\/bHXp"
7
+ }
8
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "status": "ok",
3
+ "response": {
4
+ "title": "Evolution of Dance",
5
+ "description": "The funniest 6 minutes you will ever see! Remember how many of these you have done! Follow @ http:\/\/www.twitter.com\/judsonlaipply Check my book out at http:\/\/www.mightaswelldance.com \nhttp:\/\/www.theevolutionofdance.com -\nfor more info including song list!",
6
+ "keywords": ["Dancing, comedy"],
7
+ "url": "http:\/\/www.youtube.com\/watch?v=dMH0bHeiRNg&feature=youtube_gdata",
8
+ "thumbnails": ["http:\/\/i.ytimg.com\/vi\/dMH0bHeiRNg\/default.jpg", "http:\/\/i.ytimg.com\/vi\/dMH0bHeiRNg\/2.jpg", "http:\/\/i.ytimg.com\/vi\/dMH0bHeiRNg\/1.jpg", "http:\/\/i.ytimg.com\/vi\/dMH0bHeiRNg\/3.jpg", "http:\/\/i.ytimg.com\/vi\/dMH0bHeiRNg\/hqdefault.jpg"],
9
+ "source": "youtube"
10
+ }
11
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "status": "ok",
3
+ "response": {
4
+ "twitter_status": "Test video",
5
+ "state": "ready",
6
+ "meta": {
7
+ "views": "399293",
8
+ "retweets": "1323",
9
+ "likes": "1423"
10
+ },
11
+ "id": "bHXX",
12
+ "url": "http:\/\/vid.ly\/bHXX",
13
+ "image": "http:\/\/vim.gs\/bHXX-large-1.jpg"
14
+ }
15
+ }
Binary file
@@ -0,0 +1,8 @@
1
+ {
2
+ "status": "ok",
3
+ "response": {
4
+ "url": "http:\/\/vid.ly\/bHXN",
5
+ "id": "bHXN",
6
+ "embed": "http:\/\/vidly.com\/embed\/bHXN"
7
+ }
8
+ }
@@ -0,0 +1,54 @@
1
+ require 'test/unit'
2
+ require 'pathname'
3
+ require 'rubygems'
4
+
5
+ gem 'thoughtbot-shoulda', '>= 2.10.1'
6
+ gem 'jnunemaker-matchy', '0.4.0'
7
+ gem 'mocha', '0.9.4'
8
+ gem 'fakeweb', '>= 1.2.5'
9
+
10
+ require 'shoulda'
11
+ require 'matchy'
12
+ require 'mocha'
13
+ require 'fakeweb'
14
+
15
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
17
+ require 'vidly'
18
+
19
+ class Test::Unit::TestCase
20
+ end
21
+
22
+ FakeWeb.allow_net_connect = false
23
+
24
+
25
+ class Test::Unit::TestCase
26
+ end
27
+
28
+ def binary_file_fixture(filename)
29
+ File.expand_path(File.dirname(__FILE__) + '/fixtures/' + filename)
30
+ end
31
+
32
+ def fixture_file(filename)
33
+ return '' if filename == ''
34
+ file_path = File.expand_path(File.dirname(__FILE__) + '/fixtures/' + filename)
35
+ File.read(file_path)
36
+ end
37
+
38
+ def vidly_url(url)
39
+ url =~ /^http/ ? url : "http://vidly.com:80#{url}"
40
+ end
41
+
42
+ def stub_post(url, filename, status=nil)
43
+ options = {:body => fixture_file(filename)}
44
+ options.merge!({:status => status}) unless status.nil?
45
+
46
+ FakeWeb.register_uri(:post, vidly_url(url), options)
47
+ end
48
+
49
+ def stub_get(url, filename, status=nil)
50
+ options = {:body => fixture_file(filename)}
51
+ options.merge!({:status => status}) unless status.nil?
52
+
53
+ FakeWeb.register_uri(:get, vidly_url(url), options)
54
+ end
@@ -0,0 +1,64 @@
1
+ require 'helper'
2
+
3
+ class TestVidly < Test::Unit::TestCase
4
+ context "When hitting the Vid.ly API" do
5
+
6
+ should "return a Vid.ly url based on video id" do
7
+ Vidly.url('af2W').should == 'http://vid.ly/af2W'
8
+ end
9
+
10
+ should "should retrieve the videos for a user" do
11
+ stub_get 'http://api.vidly.com/0.1/videos/Schwarzenegger.json', 'Schwarzenegger.json'
12
+ results = Vidly.videos('Schwarzenegger')
13
+ results.videos.size.should == 19
14
+ results.videos.last.image.should == 'http://imgs.vidly-cdn.com/7WVfIq5a-large-1.jpg'
15
+ results.real_name.should == 'Gov. Schwarzenegger'
16
+
17
+ end
18
+
19
+ should "import the meta information of videos from external services" do
20
+ stub_get 'http://api.vidly.com/0.1/import/meta.json?url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdMH0bHeiRNg', 'meta.json'
21
+ results = Vidly.meta('http://www.youtube.com/watch?v=dMH0bHeiRNg')
22
+ results.title.should == 'Evolution of Dance'
23
+ results.source.should == 'youtube'
24
+ end
25
+
26
+ context "when authenticated" do
27
+ setup do
28
+ @vidly = Vidly.new('myuser', 'mypass')
29
+ end
30
+
31
+ should "upload a file" do
32
+ stub_post "http://myuser:mypass@api.vidly.com/0.1/upload.json", "upload.json"
33
+ result = @vidly.upload(File.new(binary_file_fixture('test.m4v')), {:source => 'ruby gem', :status => 'Test video'})
34
+ result.url.should == 'http://vid.ly/bHXN'
35
+ end
36
+
37
+ should "upload a file and update twitter status" do
38
+ stub_post "http://myuser:mypass@api.vidly.com/0.1/uploadAndPost.json", "upload.json"
39
+ result = @vidly.upload_and_post(File.new(binary_file_fixture('test.m4v')), {:source => 'ruby gem', :status => 'Test video'})
40
+ result.url.should == 'http://vid.ly/bHXN'
41
+ end
42
+
43
+ should "import a video from a url" do
44
+ stub_post "http://myuser:mypass@api.vidly.com/0.1/import.json", "import.json"
45
+ result = @vidly.import("http://www.youtube.com/watch?v=dMH0bHeiRNg", :source => 'ruby gem', :status => "Evolution of dance")
46
+ result.url.should == "http://vid.ly/bHXp"
47
+ end
48
+
49
+ should "import a video from a url and update twitter status" do
50
+ stub_post "http://myuser:mypass@api.vidly.com/0.1/importAndPost.json", "import.json"
51
+ result = @vidly.import_and_post("http://www.youtube.com/watch?v=dMH0bHeiRNg", :source => 'ruby gem', :status => "Evolution of dance")
52
+ result.url.should == "http://vid.ly/bHXp"
53
+ end
54
+
55
+ should "get the current status of a video" do
56
+ stub_post "http://myuser:mypass@api.vidly.com/0.1/status.json", "status.json"
57
+ result = @vidly.status("bHXX")
58
+ result.meta.retweets.should == 1323
59
+ end
60
+ end
61
+
62
+ end
63
+
64
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vidly
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Wynn Netherland
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-30 00:00:00 -06:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hashie
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 0.1.3
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: httparty
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.4.5
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: thoughtbot-shoulda
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 2.10.1
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: jnunemaker-matchy
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.4.0
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: mocha
57
+ type: :development
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.9.4
64
+ version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: fakeweb
67
+ type: :development
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 1.2.5
74
+ version:
75
+ description: Post your videos to Twitter with Vid.ly
76
+ email: wynn.netherland@gmail.com
77
+ executables: []
78
+
79
+ extensions: []
80
+
81
+ extra_rdoc_files:
82
+ - LICENSE
83
+ - README.markdown
84
+ files:
85
+ - .document
86
+ - .gitignore
87
+ - LICENSE
88
+ - README.markdown
89
+ - Rakefile
90
+ - VERSION
91
+ - changelog.markdown
92
+ - examples/upload.rb
93
+ - lib/vidly.rb
94
+ - test/fixtures/Schwarzenegger.json
95
+ - test/fixtures/import.json
96
+ - test/fixtures/meta.json
97
+ - test/fixtures/status.json
98
+ - test/fixtures/test.m4v
99
+ - test/fixtures/upload.json
100
+ - test/helper.rb
101
+ - test/test_vidly.rb
102
+ has_rdoc: true
103
+ homepage: http://github.com/pengwynn/vidly
104
+ licenses: []
105
+
106
+ post_install_message:
107
+ rdoc_options:
108
+ - --charset=UTF-8
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: "0"
116
+ version:
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: "0"
122
+ version:
123
+ requirements: []
124
+
125
+ rubyforge_project:
126
+ rubygems_version: 1.3.5
127
+ signing_key:
128
+ specification_version: 3
129
+ summary: Ruby wrapper for the Vid.ly API
130
+ test_files:
131
+ - test/helper.rb
132
+ - test/test_vidly.rb
133
+ - examples/upload.rb