vidly 0.1.0

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