twog 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/LICENSE +20 -0
- data/README.textile +47 -0
- data/Rakefile +68 -0
- data/VERSION.yml +5 -0
- data/bin/twog +41 -2
- data/lib/twog.rb +13 -0
- data/lib/twog/blog_posts_handler.rb +1 -3
- data/lib/twog/rss_parser.rb +0 -3
- data/lib/twog/twitter_handler.rb +0 -6
- data/spec/blog_posts_handler_spec.rb +33 -0
- data/spec/rss_parser_spec.rb +18 -0
- data/spec/spec_helper.rb +62 -0
- data/spec/twitter_handler_spec.rb +60 -0
- data/spec/twog_spec.rb +40 -0
- data/twog.gemspec +69 -0
- metadata +27 -11
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Jason Meridth
|
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.
|
data/README.textile
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
h1. twog
|
2
|
+
|
3
|
+
h2. Install
|
4
|
+
|
5
|
+
sudo gem install twog
|
6
|
+
|
7
|
+
h2. OAuth
|
8
|
+
|
9
|
+
Please read "this":http://blog.jasonmeridth.com/2010/04/02/oauth.html if you want to know how to get your Twitter OAuth consumer key/secret and access token/secret.
|
10
|
+
One you have those, run the rake command:
|
11
|
+
|
12
|
+
bq. rake generate_config
|
13
|
+
|
14
|
+
and a hidden configuration file will be created in the your home folder (~/.twog.yaml). Once there, please fill it out with the information necessary to use this tool.
|
15
|
+
|
16
|
+
h2. Bitly API
|
17
|
+
|
18
|
+
In order to use Bitly for URL shortening, you'll need to go to http://bit.ly and click the "Sign Up":http://bit.ly/account/register?rd=/ link on the top right and get an account. Once you are logged-in you click the "Account":http://bit.ly/account link in the same top right area. You will see your API Key in the middle of the page.
|
19
|
+
|
20
|
+
Put your bit.ly username and api key into the ~/.twog.yaml file to be used in the code.
|
21
|
+
|
22
|
+
h2. cron
|
23
|
+
|
24
|
+
The idea is to setup cron to run the bin/twog script.
|
25
|
+
|
26
|
+
"Crontab HowTo":http://www.unixgeeks.org/security/newbie/unix/cron-1.html
|
27
|
+
|
28
|
+
For example, I run 'crontab -e' and this lets me edit my user's crontab file and I put the following:
|
29
|
+
|
30
|
+
bq. */15 * * * * jmeridth twog
|
31
|
+
|
32
|
+
Will be wiring up the cronedit gem later
|
33
|
+
|
34
|
+
h2. TODO
|
35
|
+
|
36
|
+
Please check the TODO file for items that are to be done in the near future.
|
37
|
+
|
38
|
+
h2. Technical Reviewers
|
39
|
+
|
40
|
+
Chris MacGown ("ChristopherMacGown":http://github.com/ChristopherMacGown)
|
41
|
+
Matt Dietz ("cerberus98":http://github.com/cerberus98)
|
42
|
+
Paul Voccio ("pvo":http://github.com/pvo)
|
43
|
+
Joe Ocampo ("agilejoe":http://github.com/agilejoe)
|
44
|
+
|
45
|
+
h2. Copyright
|
46
|
+
|
47
|
+
Copyright (c) 2010 Jason Meridth. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec/rake/spectask'
|
3
|
+
require 'rake/gempackagetask'
|
4
|
+
|
5
|
+
|
6
|
+
namespace :twog do
|
7
|
+
desc "Generate .twog.yaml file"
|
8
|
+
task :conf_create do
|
9
|
+
AUTH_FILE_NAME = "#{ENV['HOME']}/.twog.yaml"
|
10
|
+
|
11
|
+
AUTH_CONFIG_FILE = <<-EOS
|
12
|
+
rss_feed: 'http://url.com/feed.rss'
|
13
|
+
consumer_key: 'consumer key'
|
14
|
+
consumer_secret: 'consumer secret'
|
15
|
+
access_token: 'access token'
|
16
|
+
access_secret: 'access secret'
|
17
|
+
bitly_username: 'username'
|
18
|
+
bitly_api_key: 'api key'
|
19
|
+
last_blog_post_tweeted:
|
20
|
+
EOS
|
21
|
+
|
22
|
+
abort "#{ENV['HOME']}/.twog.yaml already exists" if File.exists?(AUTH_FILE_NAME)
|
23
|
+
|
24
|
+
File.open(AUTH_FILE_NAME, 'w') {|f| f.write(AUTH_CONFIG_FILE) }
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Clean out the coverage and the pkg"
|
28
|
+
task :clean do
|
29
|
+
rm_rf 'coverage'
|
30
|
+
rm_rf 'pkg'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "Run all specs in spec directory"
|
35
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
36
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
37
|
+
t.spec_opts = ['--color']
|
38
|
+
end
|
39
|
+
|
40
|
+
namespace :spec do
|
41
|
+
desc "Run rcov on the spec files"
|
42
|
+
Spec::Rake::SpecTask.new(:coverage) do |t|
|
43
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
44
|
+
t.spec_opts = ['--color']
|
45
|
+
t.rcov = true
|
46
|
+
t.rcov_opts = ['--exclude', 'spec']
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
begin
|
51
|
+
gem 'jeweler', '>= 0.11.0'
|
52
|
+
require 'jeweler'
|
53
|
+
Jeweler::Tasks.new do |s|
|
54
|
+
s.name = "twog"
|
55
|
+
s.summary = %Q{Tool to tweet blog posts}
|
56
|
+
s.email = "jmeridth@gmail.com"
|
57
|
+
s.homepage = "http://github.com/armmer/twog"
|
58
|
+
s.description = "Tool to tweet blog posts"
|
59
|
+
s.authors = ["Jason Meridth"]
|
60
|
+
s.rubyforge_project = "twog"
|
61
|
+
s.add_dependency('twitter_oauth', '>= 0.3.3')
|
62
|
+
s.add_dependency('bitly', '>= 0.4.0')
|
63
|
+
end
|
64
|
+
rescue LoadError
|
65
|
+
puts "Jeweler not available. Install it with: sudo gem install jeweler --version '>= 0.11.0'"
|
66
|
+
exit(1)
|
67
|
+
end
|
68
|
+
|
data/VERSION.yml
ADDED
data/bin/twog
CHANGED
@@ -1,9 +1,48 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
4
|
+
|
4
5
|
require 'twog'
|
6
|
+
require 'optparse'
|
7
|
+
|
8
|
+
help = <<HELP
|
9
|
+
Twog is a tool to tweet blog posts.
|
10
|
+
|
11
|
+
Configuration is read from your home directory in the file '.twog.yaml'
|
12
|
+
|
13
|
+
SAMPLE cong.yaml:
|
14
|
+
rss_feed: 'http://url.com/feed.rss'
|
15
|
+
consumer_key: 'consumer key'
|
16
|
+
consumer_secret: 'consumer secret'
|
17
|
+
access_token: 'access token'
|
18
|
+
access_secret: 'access secret'
|
19
|
+
bitly_username: 'username'
|
20
|
+
bitly_api_key: 'api key'
|
21
|
+
last_blog_post_tweeted:
|
22
|
+
|
23
|
+
HELP
|
24
|
+
|
25
|
+
options = {}
|
26
|
+
opts = OptionParser.new do |opts|
|
27
|
+
opts.banner = help
|
28
|
+
|
29
|
+
opts.on("--version", "Display current version") do
|
30
|
+
puts "Jekyll " + Twog.version
|
31
|
+
exit 0
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Read command line options into `options` hash
|
36
|
+
opts.parse!
|
37
|
+
|
38
|
+
# Get args from the command line
|
39
|
+
case ARGV.size
|
40
|
+
when > 0
|
41
|
+
puts "Invalid options. Run `twog --help` for assistance."
|
42
|
+
exit(1)
|
43
|
+
end
|
5
44
|
|
6
|
-
raise "please run 'rake
|
45
|
+
raise "please run 'rake twog:conf_create' to create the ~/.twog.yaml file" unless File.exists?("#{ENV['HOME']}/.twog.yaml")
|
7
46
|
conf = YAML.load_file("#{ENV['HOME']}/.twog.yaml")
|
8
47
|
|
9
48
|
Twog.run(conf)
|
data/lib/twog.rb
CHANGED
@@ -1,5 +1,13 @@
|
|
1
|
+
#rubygems
|
1
2
|
require 'rubygems'
|
3
|
+
|
4
|
+
# 3rd party
|
5
|
+
require 'twitter_oauth'
|
2
6
|
require 'yaml'
|
7
|
+
require 'rss'
|
8
|
+
require 'bitly'
|
9
|
+
|
10
|
+
# internal requires
|
3
11
|
require 'twog/rss_parser'
|
4
12
|
require 'twog/blog_posts_handler'
|
5
13
|
require 'twog/twitter_handler'
|
@@ -24,4 +32,9 @@ class Twog
|
|
24
32
|
return nil unless (bitly_username && bitly_api_key)
|
25
33
|
Bitly.new(bitly_username, bitly_api_key)
|
26
34
|
end
|
35
|
+
|
36
|
+
def self.version
|
37
|
+
yml = YAML.load(File.read(File.join(File.dirname(__FILE__), *%w[.. VERSION.yml])))
|
38
|
+
"#{yml[:major]}.#{yml[:minor]}.#{yml[:patch]}"
|
39
|
+
end
|
27
40
|
end
|
data/lib/twog/rss_parser.rb
CHANGED
data/lib/twog/twitter_handler.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
|
3
|
+
describe BlogPostsHandler do
|
4
|
+
include TwogSpecHelper
|
5
|
+
include BlogPostsHandler
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
entry = rss_entry
|
9
|
+
entry.updated.content = Time.new
|
10
|
+
@posts = [entry]
|
11
|
+
@last_blog_post_tweeted = test_conf['last_blog_post_tweeted']
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should determine that there is one new blog post to tweet" do
|
15
|
+
posts = get_new_blog_posts(@posts, @last_blog_post_tweeted)
|
16
|
+
posts.length.should == 1
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should return zero if posts are nil" do
|
20
|
+
posts = get_new_blog_posts(nil, @last_blog_post_tweeted)
|
21
|
+
posts.length.should == 0
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return zero if no posts are passed" do
|
25
|
+
posts = get_new_blog_posts([], @last_blog_post_tweeted)
|
26
|
+
posts.length.should == 0
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return the posts if there is no last_blog_post_tweeted in the conf file" do
|
30
|
+
posts = get_new_blog_posts(@posts, nil)
|
31
|
+
posts.length.should == 1
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
|
3
|
+
describe RssParser do
|
4
|
+
include TwogSpecHelper
|
5
|
+
include RssParser
|
6
|
+
|
7
|
+
it "should throw exception if rss_feed isn't provided" do
|
8
|
+
lambda { parse(nil) }.should raise_error('RSS feed missing')
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should read the rss_feed_url and parse the items" do
|
12
|
+
self.stub!(:open).and_return(rss_feed_url_content)
|
13
|
+
items = parse(test_conf)
|
14
|
+
items.length.should == 1
|
15
|
+
items[0].title.content.should == "Pair Programming"
|
16
|
+
items[0].link.href.should == "http://blog.jasonmeridth.com/2009/01/29/pair-programming.html"
|
17
|
+
end
|
18
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require "lib/twog"
|
2
|
+
require 'rss'
|
3
|
+
|
4
|
+
module TwogSpecHelper
|
5
|
+
def test_conf
|
6
|
+
@conf = {'rss_feed' => 'rss feed',
|
7
|
+
'bitly_username' => 'username',
|
8
|
+
'bitly_api_key' => 'api key',
|
9
|
+
'consumer_key' => 'consumerkey',
|
10
|
+
'consumer_secret' => 'consumersecret',
|
11
|
+
'access_token' => 'accesstoken',
|
12
|
+
'access_secret' => 'accesssecret',
|
13
|
+
'last_blog_post_tweeted' => '31 Mar 2010 07:52:17 -0600'}
|
14
|
+
end
|
15
|
+
|
16
|
+
def rss_feed_entry
|
17
|
+
entry=<<-EOS
|
18
|
+
<entry>
|
19
|
+
<title>Pair Programming</title>
|
20
|
+
<link href="http://blog.jasonmeridth.com/2009/01/29/pair-programming.html"/>
|
21
|
+
<updated>2009-01-29T00:00:00-08:00</updated>
|
22
|
+
<id>http://blog.jasonmeridth.com/2009/01/29/pair-programming</id>
|
23
|
+
<content type="html"><h1>Pair Programming</h1>
|
24
|
+
<p class="meta">29 Jan 2009 &#8211; San Antonio</p>
|
25
|
+
<p>I recently found this post, <a href="http://blog.jayfields.com/2008/02/pair-programming-all-time.html">Pair Programming all the time</a>, by <a href="http://blog.jayfields.com/">Jay Fields</a> and loved it. I&#8217;ve felt the same way about pair programming.</p>
|
26
|
+
<blockquote>
|
27
|
+
<p>&#8220;I define all the time (in terms of pairing) as when I&#8217;m writing code that I&#8217;m going to commit.&#8221;</p>
|
28
|
+
</blockquote>
|
29
|
+
<p>That is perfect. Common sense but stated explicitly. I worked in an Agile shop for 2 1/2 years and the environment was setup to highlight pair programming. Pictures and little explanation <a href="http://www.lostechies.com/blogs/joe_ocampo/archive/2007/12/09/where-the-magic-happens-our-dev-lap.aspx">here</a> (Thanks Joe). We even marked tasks in the stories as low (L) or high (H) to dictate whether a pair was necessary (this was decided during our modeling week by the two developers who tasked the story, but always up for discussion during the iteration). It worked out pretty well.</p>
|
30
|
+
<p>I understand and have heard all the reasons to not pair program. Sometimes it works and sometimes it doesn&#8217;t. I&#8217;ve personally experienced the benefits. You learn to work with different personalities and that can only benefit you in your professional career. And, the obvious reason, is immediate code review. But, as my friend Scott C. Reynolds <a href="http://www.lostechies.com/blogs/scottcreynolds/archive/2009/01/23/on-teaching-learning-and-being-honest-with-ourselves.aspx">says</a> (more or less):</p>
|
31
|
+
<blockquote>
|
32
|
+
<p>&#8220;Not everyone is cut from the same cloth&#8221;</p>
|
33
|
+
</blockquote>
|
34
|
+
<p>That is true and that is life. I hope this helps someone understand that not all pair programming enthusiasts are zealots. I know it&#8217;s a fine line though.</p></content>
|
35
|
+
</entry>
|
36
|
+
EOS
|
37
|
+
return entry
|
38
|
+
end
|
39
|
+
|
40
|
+
def rss_entry
|
41
|
+
rss = RSS::Parser.parse(rss_feed_url_content)
|
42
|
+
rss.items[0]
|
43
|
+
end
|
44
|
+
|
45
|
+
def rss_feed_url_content
|
46
|
+
post=<<-EOS
|
47
|
+
<?xml version="1.0" encoding="utf-8"?>
|
48
|
+
<feed xmlns="http://www.w3.org/2005/Atom">
|
49
|
+
|
50
|
+
<title>Jason Meridth</title>
|
51
|
+
<link href="http://blog.jasonmeridth.com/atom.xml" rel="self"/>
|
52
|
+
<link href="http://blog.jasonmeridth.com/"/>
|
53
|
+
<updated>2010-04-04T13:15:31-07:00</updated>
|
54
|
+
<id>http://blog.jasonmeridth.com/</id>
|
55
|
+
<author>
|
56
|
+
<name>Jason Meridth</name>
|
57
|
+
<email>jmeridth@gmail.com</email>
|
58
|
+
</author>
|
59
|
+
EOS
|
60
|
+
return "#{post}#{rss_feed_entry}"
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rss'
|
4
|
+
|
5
|
+
describe TwitterHandler do
|
6
|
+
include TwogSpecHelper
|
7
|
+
include TwitterHandler
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
@posts = [rss_entry]
|
11
|
+
@conf = test_conf
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should do nothing if no posts are provided" do
|
15
|
+
tweet(nil, nil, nil)
|
16
|
+
tweet([], nil, nil)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should throw exception if oauth consumer key isn't provided" do
|
20
|
+
@conf['consumer_key'] = nil
|
21
|
+
lambda { tweet(@posts, @conf, nil) }.should raise_error('OAuth Consumer Key missing')
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should throw exception if oauth consumer secret isn't provided" do
|
25
|
+
@conf['consumer_secret'] = nil
|
26
|
+
lambda { tweet(@posts, @conf, nil) }.should raise_error('OAuth Consumer Secret missing')
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should throw exception if oauth access token isn't provided" do
|
30
|
+
@conf['access_token'] = nil
|
31
|
+
lambda { tweet(@posts, @conf, nil) }.should raise_error('OAuth Access Token missing')
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should throw exception if oauth access secret isn't provided" do
|
35
|
+
@conf['access_secret'] = nil
|
36
|
+
lambda { tweet(@posts, @conf, nil) }.should raise_error('OAuth Access Secret missing')
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should shorten the blog post url with bitly when bitly handler is provided" do
|
40
|
+
bitly = mock 'bitly'
|
41
|
+
bitly_url = mock 'bitly_url'
|
42
|
+
bitly.should_receive(:shorten).and_return(bitly_url)
|
43
|
+
bitly_url.should_receive(:short_url)
|
44
|
+
self.stub!(:use_twitter_oauth)
|
45
|
+
self.stub!(:update_config_file_with_latest_tweet_date)
|
46
|
+
tweet(@posts, @conf, bitly)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should make sure the text that is tweeted is at or less than 140 chars when the title is at or greater than 140 chars" do
|
50
|
+
text = ensure_text_is_of_length(140, "1234567890"*14, "http://bit.ly/Afr8s9")
|
51
|
+
text.should == "blogged: 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 http://bit.ly/Afr8s9"
|
52
|
+
text.length.should == 140
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should make sure the text that is tweeted is at or less than 140 chars when the title is less than 140 chars" do
|
56
|
+
text = ensure_text_is_of_length(140, "1234567890", "http://bit.ly/Afr8s9")
|
57
|
+
text.should == "blogged: 1234567890 http://bit.ly/Afr8s9"
|
58
|
+
text.length.should == 40
|
59
|
+
end
|
60
|
+
end
|
data/spec/twog_spec.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
|
3
|
+
describe Twog do
|
4
|
+
include TwogSpecHelper
|
5
|
+
|
6
|
+
it "should not tweet if there are no new blog posts" do
|
7
|
+
Twog.stub!(:parse).with(test_conf['rss_feed']).and_return(1)
|
8
|
+
Twog.stub!(:get_new_blog_posts).with(1, test_conf['last_blog_post_tweeted']).and_return([])
|
9
|
+
Twog.stub!(:tweet).and_return(1)
|
10
|
+
result = Twog.run(test_conf)
|
11
|
+
result.should be nil
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should parse the rss feed and tweet new blog posts" do
|
15
|
+
entry = rss_entry
|
16
|
+
Twog.stub!(:parse).with(test_conf['rss_feed']).and_return(1)
|
17
|
+
Twog.stub!(:get_new_blog_posts).with(1, test_conf['last_blog_post_tweeted']).and_return([entry])
|
18
|
+
Twog.stub!(:get_bitly_from)
|
19
|
+
Twog.stub!(:tweet).and_return(1)
|
20
|
+
result = Twog.run(test_conf)
|
21
|
+
result.should == 1
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return nil if bitly username is nil" do
|
25
|
+
conf = test_conf
|
26
|
+
conf['bitly_username'] = nil
|
27
|
+
Twog.get_bitly_from(conf).should be nil
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return nil if bitly api key is nil" do
|
31
|
+
conf = test_conf
|
32
|
+
conf['bitly_username'] = nil
|
33
|
+
Twog.get_bitly_from(conf).should be nil
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return nil if bitly api key is nil" do
|
37
|
+
Bitly.stub!(:new).and_return("hello")
|
38
|
+
Twog.get_bitly_from(test_conf).should == "hello"
|
39
|
+
end
|
40
|
+
end
|
data/twog.gemspec
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{twog}
|
8
|
+
s.version = "0.2.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Jason Meridth"]
|
12
|
+
s.date = %q{2010-04-08}
|
13
|
+
s.default_executable = %q{twog}
|
14
|
+
s.description = %q{Tool to tweet blog posts}
|
15
|
+
s.email = %q{jmeridth@gmail.com}
|
16
|
+
s.executables = ["twog"]
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE",
|
19
|
+
"README.textile"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".gitignore",
|
23
|
+
"LICENSE",
|
24
|
+
"README.textile",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION.yml",
|
27
|
+
"bin/twog",
|
28
|
+
"lib/twog.rb",
|
29
|
+
"lib/twog/blog_posts_handler.rb",
|
30
|
+
"lib/twog/rss_parser.rb",
|
31
|
+
"lib/twog/twitter_handler.rb",
|
32
|
+
"spec/blog_posts_handler_spec.rb",
|
33
|
+
"spec/rss_parser_spec.rb",
|
34
|
+
"spec/spec_helper.rb",
|
35
|
+
"spec/twitter_handler_spec.rb",
|
36
|
+
"spec/twog_spec.rb",
|
37
|
+
"twog.gemspec"
|
38
|
+
]
|
39
|
+
s.homepage = %q{http://github.com/armmer/twog}
|
40
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
41
|
+
s.require_paths = ["lib"]
|
42
|
+
s.rubyforge_project = %q{twog}
|
43
|
+
s.rubygems_version = %q{1.3.6}
|
44
|
+
s.summary = %q{Tool to tweet blog posts}
|
45
|
+
s.test_files = [
|
46
|
+
"spec/blog_posts_handler_spec.rb",
|
47
|
+
"spec/rss_parser_spec.rb",
|
48
|
+
"spec/spec_helper.rb",
|
49
|
+
"spec/twitter_handler_spec.rb",
|
50
|
+
"spec/twog_spec.rb"
|
51
|
+
]
|
52
|
+
|
53
|
+
if s.respond_to? :specification_version then
|
54
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
55
|
+
s.specification_version = 3
|
56
|
+
|
57
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
58
|
+
s.add_runtime_dependency(%q<twitter_oauth>, [">= 0.3.3"])
|
59
|
+
s.add_runtime_dependency(%q<bitly>, [">= 0.4.0"])
|
60
|
+
else
|
61
|
+
s.add_dependency(%q<twitter_oauth>, [">= 0.3.3"])
|
62
|
+
s.add_dependency(%q<bitly>, [">= 0.4.0"])
|
63
|
+
end
|
64
|
+
else
|
65
|
+
s.add_dependency(%q<twitter_oauth>, [">= 0.3.3"])
|
66
|
+
s.add_dependency(%q<bitly>, [">= 0.4.0"])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 2
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jason Meridth
|
@@ -41,8 +41,8 @@ dependencies:
|
|
41
41
|
segments:
|
42
42
|
- 0
|
43
43
|
- 4
|
44
|
-
-
|
45
|
-
version: 0.4.
|
44
|
+
- 0
|
45
|
+
version: 0.4.0
|
46
46
|
type: :runtime
|
47
47
|
version_requirements: *id002
|
48
48
|
description: Tool to tweet blog posts
|
@@ -51,21 +51,33 @@ executables:
|
|
51
51
|
- twog
|
52
52
|
extensions: []
|
53
53
|
|
54
|
-
extra_rdoc_files:
|
55
|
-
|
54
|
+
extra_rdoc_files:
|
55
|
+
- LICENSE
|
56
|
+
- README.textile
|
56
57
|
files:
|
58
|
+
- .gitignore
|
59
|
+
- LICENSE
|
60
|
+
- README.textile
|
61
|
+
- Rakefile
|
62
|
+
- VERSION.yml
|
57
63
|
- bin/twog
|
64
|
+
- lib/twog.rb
|
58
65
|
- lib/twog/blog_posts_handler.rb
|
59
66
|
- lib/twog/rss_parser.rb
|
60
67
|
- lib/twog/twitter_handler.rb
|
61
|
-
-
|
68
|
+
- spec/blog_posts_handler_spec.rb
|
69
|
+
- spec/rss_parser_spec.rb
|
70
|
+
- spec/spec_helper.rb
|
71
|
+
- spec/twitter_handler_spec.rb
|
72
|
+
- spec/twog_spec.rb
|
73
|
+
- twog.gemspec
|
62
74
|
has_rdoc: true
|
63
75
|
homepage: http://github.com/armmer/twog
|
64
76
|
licenses: []
|
65
77
|
|
66
78
|
post_install_message:
|
67
|
-
rdoc_options:
|
68
|
-
|
79
|
+
rdoc_options:
|
80
|
+
- --charset=UTF-8
|
69
81
|
require_paths:
|
70
82
|
- lib
|
71
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -89,5 +101,9 @@ rubygems_version: 1.3.6
|
|
89
101
|
signing_key:
|
90
102
|
specification_version: 3
|
91
103
|
summary: Tool to tweet blog posts
|
92
|
-
test_files:
|
93
|
-
|
104
|
+
test_files:
|
105
|
+
- spec/blog_posts_handler_spec.rb
|
106
|
+
- spec/rss_parser_spec.rb
|
107
|
+
- spec/spec_helper.rb
|
108
|
+
- spec/twitter_handler_spec.rb
|
109
|
+
- spec/twog_spec.rb
|