tweetlr 0.1.5 → 0.1.6

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/README.md CHANGED
@@ -13,8 +13,7 @@ tweetlr supports
13
13
  - twitpic
14
14
  - yfrog
15
15
  - imgly
16
- - lockerz / the service formerly known as plixi
17
- - foursquare
16
+ - twitter / photobucket
18
17
  - t.co shortened links to pictures
19
18
  - every service accessible via embed.ly (see [photo providers](http://embed.ly/providers))
20
19
 
@@ -38,7 +37,7 @@ tumblr_password: YOUR_TUMBLR_PW
38
37
  update_period: 300 #check for updates every 300 secs = 5 minutes
39
38
  shouts: 'says' # will be concatenated after the username, before the message: @mr_x says: awesome things on a photo!
40
39
  loglevel: 1 # 0: debug, 1: info (default), 2: warn, 3: error, 5: fatal
41
- whitelist: #twitter accounts in that list will have their tweets published immediately. post from others will be saved as drafts
40
+ 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.
42
41
  - whitey_mc_whitelist
43
42
  - sven_kr
44
43
  ```
data/config/tweetlr.yml CHANGED
@@ -9,6 +9,6 @@ tumblr_password: YOUR_TUMBLR_PW
9
9
  update_period: 300 #check for updates every 300 secs = 5 minutes
10
10
  shouts: 'says' # will be concatenated after the username, before the message: @mr_x says: awesome things on a photo!
11
11
  loglevel: 0 # 0: debug, 1: info (default), 2: warn, 3: error, 5: fatal
12
- whitelist: #twitter accounts in that list will have their tweets published immediately. post from others will be saved as drafts
12
+ 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
13
13
  - whitey_mc_whitelist
14
14
  - sven_kr
data/lib/tweetlr.rb CHANGED
@@ -6,7 +6,7 @@ require 'json'
6
6
 
7
7
  class Tweetlr
8
8
 
9
- VERSION = '0.1.5'
9
+ VERSION = '0.1.6'
10
10
  GENERATOR = %{tweetlr - http://tweetlr.5v3n.com}
11
11
  USER_AGENT = %{Mozilla/5.0 (compatible; tweetlr/#{VERSION}; +http://tweetlr.5v3n.com)}
12
12
  LOCATION_START_INDICATOR = 'Location: '
@@ -18,6 +18,8 @@ class Tweetlr
18
18
  TWITTER_RESULTS_TYPE = 'recent'
19
19
  UPDATE_PERIOD = 600 #10 minutes
20
20
 
21
+ PIC_REGEXP = /(.*?)\.(jpg|jpeg|png|gif)/i
22
+
21
23
  def initialize(email, password, args={:terms=>nil, :whitelist => nil, :shouts => nil, :since_id=>nil, :results_per_page => nil, :loglevel=>nil, :result_type => nil})
22
24
  @log = Logger.new(STDOUT)
23
25
  if (Logger::DEBUG..Logger::UNKNOWN).to_a.index(args[:loglevel])
@@ -35,10 +37,10 @@ class Tweetlr
35
37
  @result_type = args[:result_type] || TWITTER_RESULTS_TYPE
36
38
  @api_endpoint_twitter = args[:api_endpoint_twitter] || API_ENDPOINT_TWITTER
37
39
  @api_endpoint_tumblr = args[:api_endpoint_tumblr] || API_ENDPOINT_TUMBLR
38
- @whitelist = args[:whitelist] || []
40
+ @whitelist = args[:whitelist]
39
41
  @shouts = args[:shouts]
40
42
  @update_period = args[:update_period] || UPDATE_PERIOD
41
- @whitelist.each {|entry| entry.downcase!}
43
+ @whitelist.each {|entry| entry.downcase!} if @whitelist
42
44
  @refresh_url = "#{@api_endpoint_twitter}?ors=#{@search_term}&since_id=#{@since_id}&rpp=#{@results_per_page}&result_type=#{@result_type}" if (@since_id && @search_term)
43
45
  end
44
46
  #post a tumblr photo entry. required arguments are :type, :date, :source, :caption, :state. optional argument: :tags
@@ -85,14 +87,15 @@ class Tweetlr
85
87
  user = tweet['from_user']
86
88
  tumblr_post[:tags] = user
87
89
  tweet_id = tweet['id']
88
- if @whitelist.member? user.downcase
90
+ if !@whitelist || @whitelist.member?(user.downcase)
89
91
  state = 'published'
90
92
  else
91
93
  state = 'draft'
92
94
  end
93
95
  tumblr_post[:state] = state
94
96
  shouts = " #{@shouts}" if @shouts
95
- tumblr_post[:caption] = %?<a href="http://twitter.com/#{user}/statuses/#{tweet_id}" alt="tweet">@#{user}</a>#{shouts}: #{tweet['text']}? #TODO make this a bigger matter of yml configuration
97
+ tumblr_post[:caption] = %?<a href="http://twitter.com/#{user}/statuses/#{tweet_id}" alt="tweet">@#{user}</a>#{shouts}: #{tweet['text']}?
98
+ #TODO make the caption a bigger matter of yml/ general configuration
96
99
  end
97
100
  tumblr_post
98
101
  end
@@ -120,10 +123,17 @@ class Tweetlr
120
123
  end
121
124
  end
122
125
 
123
- #extract the linked image file's url from a tweet
126
+ #extract a linked image file's url from a tweet. first found image will be used.
124
127
  def extract_image_url(tweet)
125
- link = extract_link tweet
126
- find_image_url link
128
+ links = extract_links tweet
129
+ image_url = nil
130
+ if links
131
+ links.each do |link|
132
+ image_url = find_image_url(link)
133
+ return image_url if image_url =~ PIC_REGEXP
134
+ end
135
+ end
136
+ image_url
127
137
  end
128
138
 
129
139
  #extract the linked image file's url from a tweet
@@ -206,7 +216,7 @@ class Tweetlr
206
216
  tries = 3
207
217
  begin
208
218
  resp = Curl::Easy.http_get(short_url) { |res| res.follow_location = true }
209
- rescue => err
219
+ rescue Curl::Err => err
210
220
  @log.error "Curl::Easy.http_get failed: #{err}"
211
221
  tries -= 1
212
222
  sleep 3
@@ -230,15 +240,11 @@ class Tweetlr
230
240
  link.split('/').last if link.split('/')
231
241
  end
232
242
 
233
- #extract the link from a given tweet
234
- def extract_link(tweet)
243
+ #extract the links from a given tweet
244
+ def extract_links(tweet)
235
245
  if tweet
236
246
  text = tweet['text']
237
- start = text.index('http') if text
238
- if start
239
- stop = text.index(' ', start) || 0
240
- text[start..stop-1]
241
- end
247
+ text.gsub(/https?:\/\/[\S]+/).to_a if text
242
248
  end
243
249
  end
244
250
 
@@ -262,24 +268,6 @@ class Tweetlr
262
268
  return nil
263
269
  end
264
270
  end
265
- rescue Curl::Err::ConnectionFailedError => err
266
- @log.error "Connection failed: #{err}"
267
- tries -= 1
268
- sleep 3
269
- if tries > 0
270
- retry
271
- else
272
- nil
273
- end
274
- rescue Curl::Err::RecvError => err
275
- @log.error "Failure when receiving data from the peer: #{err}"
276
- tries -= 1
277
- sleep 3
278
- if tries > 0
279
- retry
280
- else
281
- nil
282
- end
283
271
  rescue Curl::Err => err
284
272
  @log.error "Failure in Curl call: #{err}"
285
273
  tries -= 1
data/spec/spec_helper.rb CHANGED
@@ -7,6 +7,11 @@ def stub_twitter
7
7
  Curl::Easy.any_instance.stub(:perform).and_return Curl::Easy.new
8
8
  end
9
9
 
10
+ def stub_twitter_pics
11
+ Curl::Easy.any_instance.stub(:body_str).and_return %|{"url": "http://pic.twitter.com/stubbedpic.jpg:large"}|
12
+ Curl::Easy.any_instance.stub(:perform).and_return Curl::Easy.new
13
+ end
14
+
10
15
  def stub_instagram
11
16
  Curl::Easy.any_instance.stub(:body_str).and_return %|{"provider_url": "http://instagram.com/", "title": "Curse you tweets. See what you have done to me?!!!", "url": "http://distillery.s3.amazonaws.com/media/2011/05/02/d25df62b9cec4a138967a3ad027d055b_7.jpg", "author_name": "loswhit", "height": 612, "width": 612, "version": "1.0", "author_url": "http://instagram.com/", "provider_name": "Instagram", "type": "photo"}|
12
17
  Curl::Easy.any_instance.stub(:perform).and_return Curl::Easy.new
@@ -58,7 +63,8 @@ Server: nginx/1.0.0 + Phusion Passenger 3.0.7 (mod_rails/mod_rack)
58
63
  end
59
64
 
60
65
  def stub_twitpic
61
- Curl::Easy.any_instance.stub(:perform).and_return Curl::Easy.new
66
+ curl = Curl::Easy.new
67
+ Curl::Easy.any_instance.stub(:perform).and_return curl
62
68
  Curl::Easy.any_instance.stub(:header_str).and_return %|HTTP/1.1 302 Moved Temporarily
63
69
  Server: nginx
64
70
  Date: Sun, 17 Jul 2011 01:03:43 GMT
@@ -73,6 +79,9 @@ Expires: Sun, 17 Jul 2011 03:50:23 GMT
73
79
  Pragma: public
74
80
  Location: http://s3.amazonaws.com/twitpic/photos/full/249034281.jpg?AWSAccessKeyId=AKIAJF3XCCKACR3QDMOA&Expires=1310865623&Signature=KNFdFAK%2Bu0u3maMaguUjsm2MbaM%3D\r\n
75
81
  |
82
+ #stub redirected call's response
83
+ Curl::Easy.stub!(:http_get).and_return curl
84
+ Curl::Easy.any_instance.stub(:body_str).and_return %|http://s3.amazonaws.com/twitpic/photos/full/249034281.jpg?AWSAccessKeyId=AKIAJF3XCCKACR3QDMOA&Expires=1310865623&Signature=KNFdFAK%2Bu0u3maMaguUjsm2MbaM%3D\r\n|
76
85
  end
77
86
 
78
87
  def stub_tco
data/spec/tweetlr_spec.rb CHANGED
@@ -12,10 +12,6 @@ describe Tweetlr do
12
12
  before :each do
13
13
  @credentials = {:email => USER, :password => PW}
14
14
  @searchterm = 'fail'
15
- @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 @ Augenarzt Dr. Lierow http://instagr.am/p/DzCWn/", "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;"}
16
- @non_whitelist_tweet = @twitter_response.merge 'from_user' => 'nonwhitelist user'
17
- @retweet = @twitter_response.merge "text" => "bla bla RT @fgd: tueddelkram"
18
- @new_style_retweet = @twitter_response.merge "text" => "and it scales! \u201c@moeffju: http://t.co/8gUSPKu #hktbl1 #origami success! :)\u201d"
19
15
  @links = {
20
16
  :instagram => "http://instagr.am/p/DzCWn/",
21
17
  :twitpic => "http://twitpic.com/449o2x",
@@ -24,12 +20,30 @@ describe Tweetlr do
24
20
  :imgly => "http://img.ly/3M1o",
25
21
  :tco => 'http://t.co/MUGNayA',
26
22
  :lockerz => 'http://lockerz.com/s/100269159',
27
- :foursquare => 'http://4sq.com/mLKDdF',
28
- :embedly => 'http://flic.kr/p/973hTv'
23
+ :embedly => 'http://flic.kr/p/973hTv',
24
+ :twitter_pics => 'http://t.co/FmyBGfyY'
29
25
  }
30
- @pic_regexp = /(.*?)\.(jpg|jpeg|png|gif)$/i
26
+ @tweets = {
27
+ :instagram => {'text' => "jadda jadda http://instagr.am/p/DzCWn/"},
28
+ :twitpic => {'text' => "jadda jadda http://twitpic.com/449o2x"},
29
+ :yfrog => {'text' => "jadda jadda http://yfrog.com/h4vlfp"},
30
+ :picplz => {'text' => "jadda jadda http://picplz.com/2hWv"},
31
+ :imgly => {'text' => "jadda jadda http://img.ly/3M1o"},
32
+ :tco => {'text' => "jadda jadda http://t.co/MUGNayA"},
33
+ :lockerz => {'text' => "jadda jadda http://lockerz.com/s/100269159"},
34
+ :embedly => {'text' => "jadda jadda http://flic.kr/p/973hTv"},
35
+ :twitter_pics => {'text' => "jadda jadda http://t.co/FmyBGfyY"}
36
+ }
37
+ @first_link = "http://url.com"
38
+ @second_link = @links[:instagram]
39
+ @third_link = "https://imageurl.com"
40
+ @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;"}
41
+ @non_whitelist_tweet = @twitter_response.merge 'from_user' => 'nonwhitelist user'
42
+ @retweet = @twitter_response.merge "text" => "bla bla RT @fgd: tueddelkram"
43
+ @new_style_retweet = @twitter_response.merge "text" => "and it scales! \u201c@moeffju: http://t.co/8gUSPKu #hktbl1 #origami success! :)\u201d"
44
+ @pic_regexp = /(.*?)\.(jpg|jpeg|png|gif)/i
31
45
  @config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml')
32
- @tweetlr = Tweetlr.new(USER, PW, {:whitelist => WHITELIST, :results_per_page => 5, :since_id => TIMESTAMP, :terms => @searchterm, :loglevel => 4, :cookie => @cookie})
46
+ @tweetlr = Tweetlr.new(USER, PW, {:whitelist => WHITELIST, :results_per_page => 5, :since_id => TIMESTAMP, :terms => @searchterm, :loglevel => 4})
33
47
  end
34
48
  # it "should post to tumblr" do
35
49
  # tumblr_post = @tweetlr.generate_tumblr_photo_post @twitter_response
@@ -46,15 +60,35 @@ describe Tweetlr do
46
60
  tweets.should be
47
61
  tweets.should_not be_empty
48
62
  end
49
- it "should mark whitelist users' tweets as published" do
50
- stub_instagram
51
- post = @tweetlr.generate_tumblr_photo_post @twitter_response
52
- post[:state].should == 'published'
63
+ context "given a user whitelist" do
64
+ it "should mark whitelist users' tweets as published" do
65
+ stub_instagram
66
+ post = @tweetlr.generate_tumblr_photo_post @twitter_response
67
+ post[:state].should == 'published'
68
+ end
69
+ it "should mark non whitelist users' tweets as drafts" do
70
+ stub_instagram
71
+ post = @tweetlr.generate_tumblr_photo_post @non_whitelist_tweet
72
+ post[:state].should == 'draft'
73
+ end
53
74
  end
54
- it "should mark non whitelist users' tweets as drafts" do
55
- stub_instagram
56
- post = @tweetlr.generate_tumblr_photo_post @non_whitelist_tweet
57
- post[:state].should == 'draft'
75
+ context "without a user whitelist" do
76
+ before :each do
77
+ @tweetlr = Tweetlr.new(USER, PW, {
78
+ :whitelist => nil,
79
+ :results_per_page => 5,
80
+ :since_id => TIMESTAMP,
81
+ :terms => @searchterm,
82
+ :loglevel => 4})
83
+ end
84
+ it "should mark every users' posts as published" do
85
+ stub_instagram
86
+ post = @tweetlr.generate_tumblr_photo_post @twitter_response
87
+ post[:state].should == 'published'
88
+ stub_instagram
89
+ post = @tweetlr.generate_tumblr_photo_post @non_whitelist_tweet
90
+ post[:state].should == 'published'
91
+ end
58
92
  end
59
93
  it "should not use retweets which would produce double blog posts" do
60
94
  post = @tweetlr.generate_tumblr_photo_post @retweet
@@ -64,13 +98,13 @@ describe Tweetlr do
64
98
  post = @tweetlr.generate_tumblr_photo_post @new_style_retweet
65
99
  post.should_not be
66
100
  end
67
- describe "image url processing" do
101
+ context "image url processing" do
68
102
  it "should find a picture's url from the supported services" do
69
103
  @links.each do |key,value|
70
104
  send "stub_#{key}"
71
105
  url = @tweetlr.find_image_url value
72
106
  url.should be, "service #{key} not working!"
73
- check_pic_url_extraction key if [:instagram,:picplz,:yfrog,:imgly,:foursquare,:not_listed].index key
107
+ check_pic_url_extraction key if [:instagram,:picplz,:yfrog,:imgly,:not_listed].index key
74
108
  end
75
109
  end
76
110
  it "should not crash if embedly fallback won't find a link" do
@@ -83,23 +117,36 @@ describe Tweetlr do
83
117
  end
84
118
  end
85
119
  describe "tweet api response processing" do
86
- it "should extract links" do
87
- tweetlr = @tweetlr
88
- link = tweetlr.extract_link @twitter_response
89
- link.should == @links[:instagram]
90
- link = tweetlr.extract_link @twitter_response.merge 'text' => @links[:instagram].chop #check if it works w/o the trailing slash
91
- link.should == @links[:instagram].chop
120
+ it "extracts links" do
121
+ links = @tweetlr.extract_links ''
122
+ links.should be_nil
123
+ links = @tweetlr.extract_links @twitter_response
124
+ links[0].should == @first_link
125
+ links[1].should == @second_link
126
+ links[2].should == @third_link
92
127
  end
128
+ it "uses the first image link found in a tweet with multiple links" do
129
+ stub_instagram
130
+ link = @tweetlr.extract_image_url @twitter_response
131
+ link.should == 'http://distillery.s3.amazonaws.com/media/2011/05/02/d25df62b9cec4a138967a3ad027d055b_7.jpg'
132
+ end
93
133
  it "follows redirects" do
94
134
  stub_imgly
95
135
  link = @tweetlr.link_url_redirect 'im mocked anyways'
96
136
  link.should == 'http://s3.amazonaws.com/imgly_production/899582/full.jpg'
97
137
  end
138
+ it "extracts pictures from links" do
139
+ @tweets.each do |key,value|
140
+ send "stub_#{key}"
141
+ url = @tweetlr.extract_image_url value
142
+ url.should be, "service #{key} not working!"
143
+ check_pic_url_extraction key if [:instagram,:picplz,:yfrog,:imgly,:not_listed].index key
144
+ end
145
+ end
98
146
  end
99
147
 
100
148
  def check_pic_url_extraction(service)
101
- tweetlr = @tweetlr
102
- image_url = tweetlr.send "image_url_#{service}".to_sym, @links[service]
149
+ image_url = @tweetlr.send "image_url_#{service}".to_sym, @links[service]
103
150
  image_url.should =~ @pic_regexp
104
151
  end
105
152
 
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.5"
3
+ s.version = "0.1.6"
4
4
  s.author = "Sven Kraeuter"
5
5
  s.email = "sven.kraeuter@gmail.com"
6
6
  s.homepage = "http://tweetlr.5v3n.com"
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.5
4
+ version: 0.1.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-04 00:00:00.000000000Z
12
+ date: 2011-11-05 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: daemons
16
- requirement: &2153779740 !ruby/object:Gem::Requirement
16
+ requirement: &2156339340 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2153779740
24
+ version_requirements: *2156339340
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: eventmachine
27
- requirement: &2153805660 !ruby/object:Gem::Requirement
27
+ requirement: &2156338900 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2153805660
35
+ version_requirements: *2156338900
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: curb
38
- requirement: &2153805240 !ruby/object:Gem::Requirement
38
+ requirement: &2156338480 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2153805240
46
+ version_requirements: *2156338480
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: json
49
- requirement: &2153804820 !ruby/object:Gem::Requirement
49
+ requirement: &2156338060 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2153804820
57
+ version_requirements: *2156338060
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &2153804320 !ruby/object:Gem::Requirement
60
+ requirement: &2156337560 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.8.7
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2153804320
68
+ version_requirements: *2156337560
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &2153803900 !ruby/object:Gem::Requirement
71
+ requirement: &2156337140 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2153803900
79
+ version_requirements: *2156337140
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rdoc
82
- requirement: &2153803440 !ruby/object:Gem::Requirement
82
+ requirement: &2156336680 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2153803440
90
+ version_requirements: *2156336680
91
91
  description: tweetlr crawls twitter for a given term, extracts photos out of the collected
92
92
  tweets' short urls and posts the images to tumblr.
93
93
  email: sven.kraeuter@gmail.com