twog 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ coverage/
2
+ pkg/
3
+ *.swp
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.
@@ -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.
@@ -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
+
@@ -0,0 +1,5 @@
1
+ ---
2
+ :minor: 2
3
+ :patch: 0
4
+ :build:
5
+ :major: 0
data/bin/twog CHANGED
@@ -1,9 +1,48 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'rubygems'
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 gen_config' to create the ~/.twog.yaml file" unless File.exists?("#{ENV['HOME']}/.twog.yaml")
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)
@@ -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
@@ -1,6 +1,4 @@
1
- require 'rubygems'
2
- require 'twitter_oauth'
3
- require 'yaml'
1
+
4
2
 
5
3
  module BlogPostsHandler
6
4
  def get_new_blog_posts(posts, last_blog_post_tweeted)
@@ -1,6 +1,3 @@
1
- require 'rubygems'
2
- require 'rss'
3
-
4
1
  module RssParser
5
2
  def parse(rss_feed_url)
6
3
  raise Exception.new('RSS feed missing') unless rss_feed_url
@@ -1,9 +1,3 @@
1
- require 'rubygems'
2
- require 'twitter_oauth'
3
- require 'yaml'
4
- require 'rss'
5
- require 'bitly'
6
-
7
1
  class RSS::Atom::Feed::Entry
8
2
  def <=>(other_entry)
9
3
  this_time = Time.parse(updated.content.to_s)
@@ -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
@@ -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">&lt;h1&gt;Pair Programming&lt;/h1&gt;
24
+ &lt;p class=&quot;meta&quot;&gt;29 Jan 2009 &amp;#8211; San Antonio&lt;/p&gt;
25
+ &lt;p&gt;I recently found this post, &lt;a href=&quot;http://blog.jayfields.com/2008/02/pair-programming-all-time.html&quot;&gt;Pair Programming all the time&lt;/a&gt;, by &lt;a href=&quot;http://blog.jayfields.com/&quot;&gt;Jay Fields&lt;/a&gt; and loved it. I&amp;#8217;ve felt the same way about pair programming.&lt;/p&gt;
26
+ &lt;blockquote&gt;
27
+ &lt;p&gt;&amp;#8220;I define all the time (in terms of pairing) as when I&amp;#8217;m writing code that I&amp;#8217;m going to commit.&amp;#8221;&lt;/p&gt;
28
+ &lt;/blockquote&gt;
29
+ &lt;p&gt;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 &lt;a href=&quot;http://www.lostechies.com/blogs/joe_ocampo/archive/2007/12/09/where-the-magic-happens-our-dev-lap.aspx&quot;&gt;here&lt;/a&gt; (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.&lt;/p&gt;
30
+ &lt;p&gt;I understand and have heard all the reasons to not pair program. Sometimes it works and sometimes it doesn&amp;#8217;t. I&amp;#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 &lt;a href=&quot;http://www.lostechies.com/blogs/scottcreynolds/archive/2009/01/23/on-teaching-learning-and-being-honest-with-ourselves.aspx&quot;&gt;says&lt;/a&gt; (more or less):&lt;/p&gt;
31
+ &lt;blockquote&gt;
32
+ &lt;p&gt;&amp;#8220;Not everyone is cut from the same cloth&amp;#8221;&lt;/p&gt;
33
+ &lt;/blockquote&gt;
34
+ &lt;p&gt;That is true and that is life. I hope this helps someone understand that not all pair programming enthusiasts are zealots. I know it&amp;#8217;s a fine line though.&lt;/p&gt;</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
@@ -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
@@ -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
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.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
- - 3
45
- version: 0.4.3
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
- - lib/twog.rb
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