tweetlr 0.1.21 → 0.1.22
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -1
- data/README.md +3 -1
- data/config/tweetlr.yml.test +18 -0
- data/lib/tweetlr/combinators/twitter_tumblr.rb +1 -2
- data/lib/tweetlr/core.rb +4 -5
- data/lib/tweetlr/processors/tumblr.rb +1 -0
- data/lib/tweetlr.rb +1 -1
- data/spec/core_spec.rb +51 -36
- data/spec/processors/http_spec.rb +10 -0
- data/spec/processors/photo_services_processor_spec.rb +6 -0
- data/spec/processors/twitter_processor_spec.rb +30 -13
- data/spec/spec_helper.rb +9 -4
- data/tweetlr.gemspec +2 -1
- metadata +20 -7
data/.gitignore
CHANGED
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> <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?
|
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}
|
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
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
|
-
|
11
|
-
|
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"=>"<a href="http://instagr.am" rel="nofollow">instagram</a>"}
|
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
|
-
|
33
|
-
|
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
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
:
|
56
|
-
|
57
|
-
|
58
|
-
|
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"=>"<a href="http://instagr.am" rel="nofollow">instagram</a>"} }
|
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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
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(
|
10
|
-
logger.level = Logger::
|
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",
|
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
|
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":"<a href="http:\/\/foursquare.com">foursquare<\/a>","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.
|
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.
|
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
|