tweetlr 0.1.21 → 0.1.22

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/.gitignore CHANGED
@@ -8,4 +8,5 @@ pkg
8
8
  Gemfile.lock
9
9
  tweetlr.tid
10
10
  tweetlr.yml.dev
11
- tweetlr.yml.orig
11
+ tweetlr.yml.orig
12
+ coverage/
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # tweetlr
2
2
 
3
- <a href="http://travis-ci.org/#!/5v3n/tweetlr">![travis-ci](https://api.travis-ci.org/5v3n/tweetlr.png?branch=master)</a>
3
+ <a href="http://travis-ci.org/#!/5v3n/tweetlr">![travis-ci](https://api.travis-ci.org/5v3n/tweetlr.png?branch=master)</a>&nbsp;<a href="https://codeclimate.com/github/5v3n/tweetlr"><img src="https://codeclimate.com/github/5v3n/tweetlr.png" /></a>
4
+
5
+
4
6
 
5
7
  tweetlr crawls twitter for a given term, extracts photos out of the collected tweets' short urls and posts the images to tumblr.
6
8
 
@@ -0,0 +1,18 @@
1
+ results_per_page: 100
2
+ result_type: recent
3
+ search_term: 'cat+dog+unicorn' #find tweets containing any of these terms
4
+ start_at_tweet_id: 61847783463854082 # the tweet id to start searching at
5
+ api_endpoint_twitter: 'http://search.twitter.com/search.json'
6
+ api_endpoint_tumblr: 'http://www.tumblr.com'
7
+ tumblr_oauth_api_key: YOUR APPS TUMBLR API TOKEN
8
+ tumblr_oauth_api_secret: YOUR APPS TUMBLR API SECRET
9
+ tumblr_oauth_access_token_key: YOUR BLOGS OAUTH ACCESS TOKEN KEY
10
+ tumblr_oauth_access_token_secret: YOUR BLOGS OAUTH ACCESS TOKEN SECRE
11
+ tumblr_blog_hostname: YOUR BLOGS HOSTNAME #e.g. myblog.tumblr.com
12
+ embedly_key: '' #tweetlr uses http://embedly.com for link processing. a free plan containing an api key is available & recommended to use in order to ensure full support
13
+ update_period: 300 #check for updates every 300 secs = 5 minutes
14
+ shouts: 'says' # will be concatenated after the username, before the message: @mr_x says: awesome things on a photo!
15
+ loglevel: 1 # 0: debug, 1: info (default), 2: warn, 3: error, 5: fatal
16
+ whitelist: #twitter accounts in that list will have their tweets published immediately. post from others will be saved as drafts. blank list will publish all tweets immediately
17
+ - whitey_mc_whitelist
18
+ - sven_kr
@@ -26,10 +26,9 @@ module Tweetlr::Combinators
26
26
  def self.generate_photo_post_from_tweet(tweet, options = {})
27
27
  log.debug "#{self}.generate_photo_post_from_tweet with options: #{options.inspect}"
28
28
  tumblr_post = nil
29
- message = tweet['text']
30
29
  whitelist = options[:whitelist]
31
30
  whitelist.each {|entry| entry.downcase!} if (whitelist && whitelist.size != 0)
32
- if !Tweetlr::Processors::Twitter::retweet? message
31
+ if !Tweetlr::Processors::Twitter::retweet? tweet['text']
33
32
  log.debug "tweet: #{tweet}"
34
33
  tumblr_post = {}
35
34
  tumblr_post[:tumblr_blog_hostname] = options[:tumblr_blog_hostname] || options[:group]
data/lib/tweetlr/core.rb CHANGED
@@ -17,7 +17,7 @@ class Tweetlr::Core
17
17
  def initialize(args)
18
18
  initialize_logging(args[:loglevel])
19
19
  initialize_attributes(args)
20
- log.info "Tweetlr #{Tweetlr::VERSION} initialized. Ready to roll."
20
+ Tweetlr::LogAware.log.info "Tweetlr #{Tweetlr::VERSION} initialized. Ready to roll."
21
21
  end
22
22
 
23
23
  def self.crawl(config)
@@ -51,7 +51,7 @@ private
51
51
  @whitelist.each {|entry| entry.downcase!} if @whitelist
52
52
  end
53
53
  def initialize_logging(loglevel)
54
- log = Logger.new(STDOUT)
54
+ log = Tweetlr::LogAware.log || Logger.new(STDOUT)
55
55
  if (Logger::DEBUG..Logger::UNKNOWN).to_a.index(loglevel)
56
56
  log.level = loglevel
57
57
  else
@@ -70,16 +70,15 @@ private
70
70
  if tumblr_post.nil? || tumblr_post[:source].nil?
71
71
  log.warn "could not get image source: tweet: #{tweet} --- tumblr post: #{tumblr_post.inspect}"
72
72
  else
73
- post_to_tumblr
73
+ post_to_tumblr tumblr_post, tumblr_config
74
74
  end
75
75
  end
76
76
  end
77
77
  def self.post_to_tumblr(tumblr_post, tumblr_config)
78
78
  log.debug "tumblr post: #{tumblr_post}"
79
79
  res = Tweetlr::Processors::Tumblr.post tumblr_post.merge(tumblr_config)
80
- log.debug "tumblr response: #{res}"
81
80
  if res && res.code == "201"
82
- log.info "tumblr post created (tumblr response: #{res.header} #{res.body}"
81
+ log.info "tumblr post created (tumblr response header: #{res.header}"
83
82
  elsif res
84
83
  log.warn "tumblr response: #{res.header} #{res.body}"
85
84
  else
@@ -17,6 +17,7 @@ module Tweetlr::Processors
17
17
  #optional arguments: :tags, :type (default: 'photo')
18
18
  #
19
19
  def self.post(options={})
20
+ log.info "posting to #{options[:tumblr_blog_hostname] || options[:group]}..."
20
21
  base_hostname = options[:tumblr_blog_hostname] || options[:group]
21
22
  tumblr_oauth_api_key= options[:tumblr_oauth_api_key]
22
23
  tumblr_oauth_api_secret= options[:tumblr_oauth_api_secret]
data/lib/tweetlr.rb CHANGED
@@ -2,7 +2,7 @@ require 'tweetlr/log_aware'
2
2
  require 'tweetlr/core'
3
3
 
4
4
  module Tweetlr
5
- VERSION = '0.1.21'
5
+ VERSION = '0.1.22'
6
6
 
7
7
  API_ENDPOINT_TWITTER = 'http://search.twitter.com/search.json'
8
8
  API_ENDPOINT_TUMBLR = 'http://www.tumblr.com'
data/spec/core_spec.rb CHANGED
@@ -2,17 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  describe Tweetlr::Core do
4
4
 
5
- config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml')
5
+ config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml.test')
6
6
  config = YAML.load_file(config_file)
7
7
  TIMESTAMP = config['twitter_timestamp']
8
8
  WHITELIST = config['whitelist']
9
9
 
10
- before :each do
11
- @first_link = "http://url.com"
12
- @second_link = "http://instagr.am/p/DzCWn/"
13
- @third_link = "https://imageurl.com"
14
- @twitter_response = {"from_user_id_str"=>"1915714", "profile_image_url"=>"http://a0.twimg.com/profile_images/386000279/2_normal.jpg", "created_at"=>"Sun, 17 Apr 2011 16:48:42 +0000", "from_user"=>"whitey_Mc_whIteLIst", "id_str"=>"59659561224765440", "metadata"=>{"result_type"=>"recent"}, "to_user_id"=>nil, "text"=>"Rigaer #wirsounterwegs #{@first_link} @ Augenarzt Dr. Lierow #{@second_link} #{@third_link}", "id"=>59659561224765440, "from_user_id"=>1915714, "geo"=>{"type"=>"Point", "coordinates"=>[52.5182, 13.454]}, "iso_language_code"=>"de", "place"=>{"id"=>"3078869807f9dd36", "type"=>"city", "full_name"=>"Berlin, Berlin"}, "to_user_id_str"=>nil, "source"=>"&lt;a href=&quot;http://instagr.am&quot; rel=&quot;nofollow&quot;&gt;instagram&lt;/a&gt;"}
15
- @tweetlr_config = {
10
+ let(:tweetlr_config) do
11
+ {
16
12
  :since_id => 0,
17
13
  :results_per_page => 3,
18
14
  :search_term => 'coffeediary',
@@ -25,36 +21,55 @@ describe Tweetlr::Core do
25
21
  :tumblr_oauth_api_key => config['tumblr_oauth_api_key'],
26
22
  :tumblr_blog_hostname => config['tumblr_blog_hostname']
27
23
  }
28
- stub_tumblr
29
- stub_twitter
30
- stub_oauth
31
24
  end
32
- it "crawls twitter and posts to tumblr" do
33
- since_id_before = @tweetlr_config[:since_id]
34
- result = Tweetlr::Core.crawl(@tweetlr_config)
35
- since_id_before.should_not == result[:since_id]
25
+ let(:stubbed_tumblr_post) do
26
+ {:tumblr_blog_hostname=>nil, :type=>"photo", :date=>"Sun, 28 Apr 2013 14:10:43 +0000", :source=>"https://irs0.4sqi.net/img/general/600x600/304170_IfHzPdhxs9mpGlPk8jogxdul8q8KhTBNmeAiP9H5TyY.jpg", :tags=>"sven_kr", :state=>"published", :caption=>"<a href=\"http://twitter.com/sven_kr/statuses/328511599881097216\" alt=\"tweet\">@sven_kr</a>: #coffeediary Wanted to stay at home but had to test the new tweetlr ;-) (@ Mamalicious w/ @snoopsmaus) [pic]: http://t.co/7ilE9BDJxJ"}
36
27
  end
37
- it "copes with legacy config that use tumblr v1 api (basic auth)" do
38
- legacy_config = {
39
- :id=>16,
40
- :search_term=>"booga",
41
- :tumblr_email=>"wooga@booga.de",
42
- :tumblr_password=>"boogawooga",
43
- :since_id=>"246543935663661057",
44
- :results_per_page=>3,
45
- :result_type=>nil,
46
- :api_endpoint_twitter=>nil,
47
- :api_endpoint_tumblr=>nil,
48
- :update_period=>900,
49
- :shouts=>nil,
50
- :loglevel=>1,
51
- :whitelist=>["user1", "user2"],
52
- :last_crawl=>"Fri, 14 Sep 2012 09:43:10 UTC +00:00",
53
- :active=>true,
54
- :tumblr_oauth_access_token_key=>nil,
55
- :tumblr_oauth_access_token_secret=>nil}
56
- since_id_before = legacy_config[:since_id]
57
- result = Tweetlr::Core.crawl(legacy_config)
58
- since_id_before.should_not == result[:since_id]
28
+ let(:first_link) { "http://url.com" }
29
+ let(:second_link) { "http://instagr.am/p/DzCWn/" }
30
+ let(:third_link) { "https://imageurl.com" }
31
+ let(:twitter_response) { {"from_user_id_str"=>"1915714", "profile_image_url"=>"http://a0.twimg.com/profile_images/386000279/2_normal.jpg", "created_at"=>"Sun, 17 Apr 2011 16:48:42 +0000", "from_user"=>"whitey_Mc_whIteLIst", "id_str"=>"59659561224765440", "metadata"=>{"result_type"=>"recent"}, "to_user_id"=>nil, "text"=>"Rigaer #wirsounterwegs #{first_link} @ Augenarzt Dr. Lierow #{second_link} #{third_link}", "id"=>59659561224765440, "from_user_id"=>1915714, "geo"=>{"type"=>"Point", "coordinates"=>[52.5182, 13.454]}, "iso_language_code"=>"de", "place"=>{"id"=>"3078869807f9dd36", "type"=>"city", "full_name"=>"Berlin, Berlin"}, "to_user_id_str"=>nil, "source"=>"&lt;a href=&quot;http://instagr.am&quot; rel=&quot;nofollow&quot;&gt;instagram&lt;/a&gt;"} }
32
+
33
+ describe ".new" do
34
+ it "initializes a new instance" do
35
+ new_instance = Tweetlr::Core.new tweetlr_config
36
+ new_instance.should be
37
+ end
38
+ end
39
+ describe ".crawl(config)" do
40
+ before(:each) do
41
+ stub_tumblr
42
+ stub_twitter
43
+ stub_oauth
44
+ end
45
+ it "crawls twitter and posts to tumblr" do
46
+ Tweetlr::Combinators::TwitterTumblr.stub(:generate_photo_post_from_tweet).and_return stubbed_tumblr_post
47
+ since_id_before = tweetlr_config[:since_id]
48
+ result = Tweetlr::Core.crawl(tweetlr_config)
49
+ since_id_before.should_not == result[:since_id]
50
+ end
51
+ it "copes with legacy config that use tumblr v1 api (basic auth)" do
52
+ legacy_config = {
53
+ :id=>16,
54
+ :search_term=>"booga",
55
+ :tumblr_email=>"wooga@booga.de",
56
+ :tumblr_password=>"boogawooga",
57
+ :since_id=>"246543935663661057",
58
+ :results_per_page=>3,
59
+ :result_type=>nil,
60
+ :api_endpoint_twitter=>nil,
61
+ :api_endpoint_tumblr=>nil,
62
+ :update_period=>900,
63
+ :shouts=>nil,
64
+ :loglevel=>1,
65
+ :whitelist=>["user1", "user2"],
66
+ :last_crawl=>"Fri, 14 Sep 2012 09:43:10 UTC +00:00",
67
+ :active=>true,
68
+ :tumblr_oauth_access_token_key=>nil,
69
+ :tumblr_oauth_access_token_secret=>nil}
70
+ since_id_before = legacy_config[:since_id]
71
+ result = Tweetlr::Core.crawl(legacy_config)
72
+ since_id_before.should_not == result[:since_id]
73
+ end
59
74
  end
60
75
  end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tweetlr::Processors::Http do
4
+ it ".http_get copes with errors by retrying, not raising" do
5
+ Curl::Easy.any_instance.stub(:perform).and_raise(Curl::Err::CurlError)
6
+ Tweetlr::Processors::Http.stub!(:sleep) #releasing the sleep handbrake...
7
+ Tweetlr::Processors::Http.should_receive(:sleep).with(3)
8
+ expect { Tweetlr::Processors::Http.http_get('mocky wocky')}.to_not raise_error(Curl::Err::CurlError)
9
+ end
10
+ end
@@ -60,4 +60,10 @@ describe Tweetlr::Processors::PhotoService do
60
60
  link = Tweetlr::Processors::PhotoService::link_url_redirect 'im mocked anyways'
61
61
  link.should == 'http://s3.amazonaws.com/imgly_production/899582/full.jpg'
62
62
  end
63
+ it "copes with redirect errors" do
64
+ Curl::Easy.any_instance.stub(:http_get).and_raise(Curl::Err::CurlError)
65
+ Tweetlr::Processors::PhotoService.stub!(:sleep) #releasing the sleep handbrake...
66
+ Tweetlr::Processors::PhotoService.should_receive(:sleep).with(3)
67
+ expect { Tweetlr::Processors::PhotoService::link_url_redirect 'im mocked anyways'}.to_not raise_error(Curl::Err::CurlError)
68
+ end
63
69
  end
@@ -14,19 +14,36 @@ describe Tweetlr::Processors::Twitter do
14
14
  :api_endpoint_twitter => Tweetlr::API_ENDPOINT_TWITTER
15
15
  }
16
16
  end
17
- it "should search twitter for a given term" do
18
- stub_twitter
19
- response = Tweetlr::Processors::Twitter::lazy_search @twitter_config
20
- tweets = response['results']
21
- tweets.should be
22
- tweets.should_not be_empty
17
+ describe "#search(config)" do
18
+ it "searches twitter for a given term" do
19
+ stub_twitter
20
+ response = Tweetlr::Processors::Twitter::search @twitter_config
21
+ tweets = response['results']
22
+ tweets.should be
23
+ tweets.should_not be_empty
24
+ end
23
25
  end
24
- it "extracts links" do
25
- links = Tweetlr::Processors::Twitter::extract_links ''
26
- links.should be_nil
27
- links = Tweetlr::Processors::Twitter::extract_links @twitter_response
28
- links[0].should == @first_link
29
- links[1].should == @second_link
30
- links[2].should == @third_link
26
+ describe "#lazy_search(config)" do
27
+ it "searches twitter for a given term" do
28
+ stub_twitter
29
+ response = Tweetlr::Processors::Twitter::lazy_search @twitter_config
30
+ tweets = response['results']
31
+ tweets.should be
32
+ tweets.should_not be_empty
33
+ end
34
+ it "copes with nil as input" do
35
+ stub_twitter
36
+ Tweetlr::Processors::Twitter::lazy_search(nil).should be_nil
37
+ end
38
+ end
39
+ describe "#extract_links()" do
40
+ it "extracts links" do
41
+ links = Tweetlr::Processors::Twitter::extract_links ''
42
+ links.should be_nil
43
+ links = Tweetlr::Processors::Twitter::extract_links @twitter_response
44
+ links[0].should == @first_link
45
+ links[1].should == @second_link
46
+ links[2].should == @third_link
47
+ end
31
48
  end
32
49
  end
data/spec/spec_helper.rb CHANGED
@@ -1,14 +1,19 @@
1
1
  #encoding: utf-8
2
+ require 'simplecov'
3
+ SimpleCov.start
4
+
2
5
  require "bundler"
3
6
  require "logger"
4
7
  require "yaml"
5
8
  require "#{File.dirname(__FILE__)}/../lib/tweetlr"
6
9
 
10
+
7
11
  Bundler.require :default, :development, :test
8
12
 
9
- logger = Logger.new(STDOUT)
10
- logger.level = Logger::FATAL
13
+ logger = Logger.new('/dev/null')
14
+ #logger.level = Logger::DEBUG
11
15
  Tweetlr::LogAware.log = logger
16
+ Tweetlr::LogAware.log
12
17
 
13
18
  def check_pic_url_extraction(service)
14
19
  image_url = Tweetlr::Processors::PhotoService.find_image_url @links[service]
@@ -16,7 +21,7 @@ def check_pic_url_extraction(service)
16
21
  end
17
22
 
18
23
  def stub_oauth
19
- OAuth::AccessToken.any_instance.stub(:post).and_return(Net::HTTPCreated.new("Created.", "201", nil))
24
+ OAuth::AccessToken.any_instance.stub(:post).and_return(Net::HTTPCreated.new("Created.", "201", true))
20
25
  end
21
26
 
22
27
  def stub_tumblr
@@ -38,7 +43,7 @@ Content-Type: text/plain; charset=utf-8
38
43
  end
39
44
 
40
45
  def stub_twitter
41
- Curl::Easy.any_instance.stub(:body_str).and_return %|{"results":[{"from_user_id_str":"220650275","profile_image_url":"http://a2.twimg.com/profile_images/668619338/9729_148876458070_505518070_2628895_7160219_n_normal.jpg","created_at":"Sat, 16 Jul 2011 23:20:01 +0000","from_user":"LoMuma","id_str":"92372947855093760","metadata":{"result_type":"recent"},"to_user_id":null,"text":"Need to stop procrastinating! 5 quizzes and personal responses due tomorrow... #fail","id":92372947855093760,"from_user_id":220650275,"geo":null,"iso_language_code":"en","to_user_id_str":null,"source":"&lt;a href=&quot;http://twitter.com/&quot;&gt;web&lt;/a&gt;"},{"from_user_id_str":"129718556","profile_image_url":"http://a2.twimg.com/profile_images/1428268221/twitter_normal.png","created_at":"Sat, 16 Jul 2011 23:20:01 +0000","from_user":"priiislopes","id_str":"92372947846692865","metadata":{"result_type":"recent"},"to_user_id":null,"text":"Esse jogo do Flu foi uma vergonha. Se ele fez o melhor dele no brasileiro semana passada, hj fez o pior de todos os tempos. #Fail","id":92372947846692865,"from_user_id":129718556,"geo":null,"iso_language_code":"pt","to_user_id_str":null,"source":"&lt;a href=&quot;http://twitter.com/&quot;&gt;web&lt;/a&gt;"},{"from_user_id_str":"259930166","profile_image_url":"http://a3.twimg.com/profile_images/1425221519/foto_normal.jpg","created_at":"Sat, 16 Jul 2011 23:20:00 +0000","from_user":"YamiiG4","id_str":"92372943132303360","metadata":{"result_type":"recent"},"to_user_id":null,"text":"vaya que eran 2 minutos..#FAIL!","id":92372943132303360,"from_user_id":259930166,"geo":null,"iso_language_code":"es","to_user_id_str":null,"source":"&lt;a href=&quot;http://www.tweetdeck.com&quot; rel=&quot;nofollow&quot;&gt;TweetDeck&lt;/a&gt;"},{"from_user_id_str":"321557905","profile_image_url":"http://a0.twimg.com/profile_images/1445672626/profile_normal.png","created_at":"Sat, 16 Jul 2011 23:20:00 +0000","from_user":"JasWafer_FFOE","id_str":"92372941379088384","metadata":{"result_type":"recent"},"to_user_id":null,"text":"RT @eye_OFBEHOLDER: RT @JasWafer_FFOE #Oomf said that he'll NEVER eat pussy! O.o --#FAIL","id":92372941379088384,"from_user_id":321557905,"geo":null,"iso_language_code":"en","to_user_id_str":null,"source":"&lt;a href=&quot;http://twidroyd.com&quot; rel=&quot;nofollow&quot;&gt;Twidroyd for Android&lt;/a&gt;"},{"from_user_id_str":"279395613","profile_image_url":"http://a0.twimg.com/profile_images/1334871419/lnnsquare_normal.jpg","created_at":"Sat, 16 Jul 2011 23:19:59 +0000","from_user":"LanguageNewsNet","id_str":"92372940640890881","metadata":{"result_type":"recent"},"to_user_id":null,"text":"Questioning the Inca Paradox: Did the civilization behind Machu Picchu really fail to develop a written la... http://tinyurl.com/5sfos23","id":92372940640890881,"from_user_id":279395613,"geo":null,"iso_language_code":"en","to_user_id_str":null,"source":"&lt;a href=&quot;http://twitterfeed.com&quot; rel=&quot;nofollow&quot;&gt;twitterfeed&lt;/a&gt;"}],"max_id":92372947855093760,"since_id":0,"refresh_url":"?since_id=92372947855093760&q=+fail","next_page":"?page=2&max_id=92372947855093760&rpp=5&q=+fail","results_per_page":5,"page":1,"completed_in":0.022152,"since_id_str":"0","max_id_str":"92372947855093760","query":"+fail"}|
46
+ Curl::Easy.any_instance.stub(:body_str).and_return %^{"completed_in":0.013,"max_id":328511599881097216,"max_id_str":"328511599881097216","next_page":"?page=2&max_id=328511599881097216&q=coffeediary&rpp=3&result_type=recent","page":1,"query":"coffeediary","refresh_url":"?since_id=328511599881097216&q=coffeediary&result_type=recent","results":[{"created_at":"Sun, 28 Apr 2013 14:10:43 +0000","from_user":"sven_kr","from_user_id":61437533,"from_user_id_str":"61437533","from_user_name":"Sven Kr\u00e4uter | 5v3n","geo":{"coordinates":[53.563684,9.959734],"type":"Point"},"id":328511599881097216,"id_str":"328511599881097216","iso_language_code":"en","metadata":{"result_type":"recent"},"place":{"full_name":"Hamburg","id":"171b760b35e47fe5","type":"CITY"},"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2305774679\/am2l5mt563000bt0jwvw_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2305774679\/am2l5mt563000bt0jwvw_normal.jpeg","source":"&lt;a href=&quot;http:\/\/foursquare.com&quot;&gt;foursquare&lt;\/a&gt;","text":"#coffeediary Wanted to stay at home but had to test the new tweetlr ;-) (@ Mamalicious w\/ @snoopsmaus) [pic]: http:\/\/t.co\/7ilE9BDJxJ"}],"results_per_page":1,"since_id":0,"since_id_str":"0"}^
42
47
  Curl::Easy.any_instance.stub(:perform).and_return Curl::Easy.new
43
48
  end
44
49
 
data/tweetlr.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "tweetlr"
3
- s.version = "0.1.21"
3
+ s.version = "0.1.22"
4
4
  s.author = "Sven Kraeuter"
5
5
  s.email = "sven.kraeuter@gmail.com"
6
6
  s.homepage = "http://tweetlr.5v3n.com"
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.add_development_dependency "rake"
21
21
  s.add_development_dependency "rspec"
22
22
  s.add_development_dependency "rdoc"
23
+ s.add_development_dependency "simplecov"
23
24
 
24
25
  s.files = `git ls-files`.split("\n")
25
26
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tweetlr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.21
4
+ version: 0.1.22
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -155,6 +155,22 @@ dependencies:
155
155
  - - ! '>='
156
156
  - !ruby/object:Gem::Version
157
157
  version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: simplecov
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
158
174
  description: tweetlr crawls twitter for a given term, extracts photos out of the collected
159
175
  tweets' short urls and posts the images to tumblr.
160
176
  email: sven.kraeuter@gmail.com
@@ -175,6 +191,7 @@ files:
175
191
  - Rakefile
176
192
  - bin/tweetlr
177
193
  - config/tweetlr.yml
194
+ - config/tweetlr.yml.test
178
195
  - lib/tweetlr.rb
179
196
  - lib/tweetlr/combinators/twitter_tumblr.rb
180
197
  - lib/tweetlr/core.rb
@@ -185,6 +202,7 @@ files:
185
202
  - lib/tweetlr/processors/twitter.rb
186
203
  - spec/combinators/twitter_tumblr_combinator_spec.rb
187
204
  - spec/core_spec.rb
205
+ - spec/processors/http_spec.rb
188
206
  - spec/processors/photo_services_processor_spec.rb
189
207
  - spec/processors/tumblr_processor_spec.rb
190
208
  - spec/processors/twitter_processor_spec.rb
@@ -202,18 +220,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
202
220
  - - ! '>='
203
221
  - !ruby/object:Gem::Version
204
222
  version: '0'
205
- segments:
206
- - 0
207
- hash: 3037405379502590450
208
223
  required_rubygems_version: !ruby/object:Gem::Requirement
209
224
  none: false
210
225
  requirements:
211
226
  - - ! '>='
212
227
  - !ruby/object:Gem::Version
213
228
  version: '0'
214
- segments:
215
- - 0
216
- hash: 3037405379502590450
217
229
  requirements: []
218
230
  rubyforge_project: tweetlr
219
231
  rubygems_version: 1.8.25
@@ -224,6 +236,7 @@ summary: tweetlr crawls twitter for a given term, extracts photos out of the col
224
236
  test_files:
225
237
  - spec/combinators/twitter_tumblr_combinator_spec.rb
226
238
  - spec/core_spec.rb
239
+ - spec/processors/http_spec.rb
227
240
  - spec/processors/photo_services_processor_spec.rb
228
241
  - spec/processors/tumblr_processor_spec.rb
229
242
  - spec/processors/twitter_processor_spec.rb