twat 0.5.4 → 0.6.0
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/lib/twat.rb +4 -2
- data/lib/twat/actions.rb +6 -6
- data/lib/twat/actions/follow.rb +40 -20
- data/lib/twat/actions/follow_user.rb +2 -2
- data/twat.gemspec +1 -0
- metadata +18 -7
data/lib/twat.rb
CHANGED
@@ -6,6 +6,8 @@ require 'yaml'
|
|
6
6
|
require 'optparse'
|
7
7
|
require 'oauth'
|
8
8
|
|
9
|
+
require 'readline-ng'
|
10
|
+
|
9
11
|
%w[config exceptions argparse actions migration options endpoint].each do |filename|
|
10
12
|
require "twat/#{filename}"
|
11
13
|
end
|
@@ -48,8 +50,8 @@ end
|
|
48
50
|
|
49
51
|
module Twat
|
50
52
|
VERSION_MAJOR = 0
|
51
|
-
VERSION_MINOR =
|
52
|
-
VERSION_PATCH =
|
53
|
+
VERSION_MINOR = 6
|
54
|
+
VERSION_PATCH = 0
|
53
55
|
|
54
56
|
VERSION = "#{VERSION_MAJOR}.#{VERSION_MINOR}.#{VERSION_PATCH}"
|
55
57
|
class Twat
|
data/lib/twat/actions.rb
CHANGED
@@ -22,17 +22,17 @@ module Twat
|
|
22
22
|
idx = pad(idx) if idx
|
23
23
|
text = deentitize(twt.text)
|
24
24
|
if config.colors?
|
25
|
-
|
25
|
+
buf = idx ? "#{idx.cyan}:" : ""
|
26
26
|
if twt.user.screen_name == config.account_name.to_s
|
27
|
-
|
27
|
+
buf += "#{twt.user.screen_name.bold.blue}: #{text}"
|
28
28
|
elsif text.mentions?(config.account_name)
|
29
|
-
|
29
|
+
buf += "#{twt.user.screen_name.bold.red}: #{text}"
|
30
30
|
else
|
31
|
-
|
31
|
+
buf += "#{twt.user.screen_name.bold.cyan}: #{text}"
|
32
32
|
end
|
33
33
|
else
|
34
|
-
|
35
|
-
|
34
|
+
buf = idx ? "#{idx}: " : ""
|
35
|
+
buf += "#{twt.user.screen_name}: #{text}"
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
data/lib/twat/actions/follow.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
module Twat
|
2
|
+
POLLING_RESOLUTION = 20
|
2
3
|
|
3
4
|
class NoSuchTweet < Exception; end
|
4
5
|
|
@@ -42,10 +43,24 @@ module Twat
|
|
42
43
|
|
43
44
|
class Actions
|
44
45
|
|
46
|
+
def initialize
|
47
|
+
@reader = ReadlineNG::Reader.new
|
48
|
+
|
49
|
+
def @reader.filter
|
50
|
+
case @buf.length
|
51
|
+
when 140
|
52
|
+
_print "[31m"
|
53
|
+
when 139
|
54
|
+
_print "[39m"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
45
59
|
def follow
|
46
|
-
#
|
47
|
-
|
48
|
-
|
60
|
+
# Probably belongs to readline-ng
|
61
|
+
$stty_saved = `stty -g`
|
62
|
+
`stty -echo raw`
|
63
|
+
|
49
64
|
twitter_auth
|
50
65
|
failcount = 0
|
51
66
|
@tweetstack = TweetStack.new
|
@@ -55,30 +70,29 @@ module Twat
|
|
55
70
|
while true do
|
56
71
|
begin
|
57
72
|
last_id = process_followed(tweets) if tweets.any?
|
58
|
-
config.polling_interval.times do
|
73
|
+
(config.polling_interval * POLLING_RESOLUTION).times do
|
59
74
|
begin
|
60
|
-
|
61
|
-
|
62
|
-
nil
|
75
|
+
@reader.tick
|
76
|
+
@reader.each_line { |inp| handle_input(inp) }
|
63
77
|
rescue TweetTooLong
|
64
78
|
puts "Too long".red
|
65
79
|
end
|
66
|
-
sleep 1
|
80
|
+
sleep 1.0/POLLING_RESOLUTION
|
67
81
|
end
|
68
82
|
tweets = Twitter.home_timeline(:since_id => last_id)
|
69
83
|
failcount = 0
|
70
84
|
rescue Interrupt
|
71
85
|
break
|
72
|
-
rescue Twitter::ServiceUnavailable
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
86
|
+
# rescue Twitter::ServiceUnavailable
|
87
|
+
# if failcount > 2
|
88
|
+
# puts "3 consecutive failures, giving up"
|
89
|
+
# else
|
90
|
+
# sleeptime = 60 * (failcount + 1)
|
91
|
+
# print "(__-){".red
|
92
|
+
# puts ": the fail whale has been rolled out, sleeping for #{sleeptime} seconds"
|
93
|
+
# sleep sleeptime
|
94
|
+
# failcount += 1
|
95
|
+
# end
|
82
96
|
rescue Errno::ECONNRESET
|
83
97
|
rescue Errno::ETIMEDOUT
|
84
98
|
if failcount > 2
|
@@ -88,6 +102,8 @@ module Twat
|
|
88
102
|
end
|
89
103
|
end
|
90
104
|
end
|
105
|
+
ensure
|
106
|
+
`stty #{$stty_saved}`
|
91
107
|
end
|
92
108
|
|
93
109
|
private
|
@@ -102,7 +118,7 @@ module Twat
|
|
102
118
|
tweets.reverse.each do |tweet|
|
103
119
|
id = @tweetstack << tweet
|
104
120
|
beep if config.beep? && tweet.text.mentions?(config.account_name)
|
105
|
-
format(tweet, @tweetstack.last)
|
121
|
+
@reader.puts_above format(tweet, @tweetstack.last)
|
106
122
|
last_id = tweet.id
|
107
123
|
end
|
108
124
|
|
@@ -115,8 +131,12 @@ module Twat
|
|
115
131
|
begin
|
116
132
|
retweet($1.to_i)
|
117
133
|
rescue NoSuchTweet
|
118
|
-
|
134
|
+
print "No such tweet\n".red
|
119
135
|
end
|
136
|
+
when /follow (.*)/
|
137
|
+
follow_user($1)
|
138
|
+
when /test/
|
139
|
+
@reader.puts_above "Testline!"
|
120
140
|
else
|
121
141
|
# Assume they want to tweet something
|
122
142
|
raise TweetTooLong if inp.length > 140
|
data/twat.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
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: 2012-02-11 00:00:00.
|
12
|
+
date: 2012-02-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: twitter
|
16
|
-
requirement: &
|
16
|
+
requirement: &10151740 !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: *
|
24
|
+
version_requirements: *10151740
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: oauth
|
27
|
-
requirement: &
|
27
|
+
requirement: &10150460 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,18 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *10150460
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: readline-ng
|
38
|
+
requirement: &10149800 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *10149800
|
36
47
|
description: Command line tool for tweeting and whatnot
|
37
48
|
email:
|
38
49
|
- richo@psych0tik.net
|
@@ -91,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
102
|
version: '0'
|
92
103
|
requirements: []
|
93
104
|
rubyforge_project:
|
94
|
-
rubygems_version: 1.8.
|
105
|
+
rubygems_version: 1.8.10
|
95
106
|
signing_key:
|
96
107
|
specification_version: 3
|
97
108
|
summary: Command line tool for tweeting and whatnot
|