tw 0.2.6 → 0.3.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/History.txt CHANGED
@@ -1,3 +1,10 @@
1
+ === 0.3.0 2012-10-10
2
+
3
+ * silent mode option : --silent
4
+ * pipe tweet each line from STDIN
5
+ * add Tw API sample
6
+ * update README
7
+
1
8
  === 0.2.6 2012-10-10
2
9
 
3
10
  * bugfix merging users and lists
data/Manifest.txt CHANGED
@@ -18,6 +18,7 @@ lib/tw/client/stream.rb
18
18
  lib/tw/client/tweet.rb
19
19
  lib/tw/conf.rb
20
20
  samples/README.md
21
+ samples/sample.rb
21
22
  samples/update_profile_image.rb
22
23
  script/console
23
24
  script/destroy
data/README.rdoc CHANGED
@@ -30,7 +30,7 @@ read Timeline
30
30
  % tw --timeline
31
31
  % tw --search=ruby
32
32
  % tw --stream
33
- % tw --stream:filter=ruby,java
33
+ % tw --stream:filter=ruby,java --silent
34
34
 
35
35
  DM
36
36
 
@@ -58,6 +58,13 @@ Format
58
58
  % tw --stream --format="@#{user} #{text} - http://twitter.com/#{user}/#{id}"
59
59
 
60
60
 
61
+ == Make Twitter Bot
62
+
63
+ stream reply bot
64
+
65
+ % tw --silent --stream:filter=BOT_NAME --user=BOT_NAME --format="@#{user} OK" | tw --pipe --user=BOT_NAME
66
+
67
+
61
68
  == LICENSE:
62
69
 
63
70
  (The MIT License)
data/bin/tw CHANGED
@@ -3,6 +3,7 @@ $:.unshift File.expand_path '../lib', File.dirname(__FILE__)
3
3
  require 'rubygems'
4
4
  require 'tw'
5
5
  require 'tw/app/main'
6
+ $stdout.sync = true
6
7
 
7
8
  app = Tw::App.new
8
9
  app.run ARGV
data/lib/tw.rb CHANGED
@@ -20,7 +20,7 @@ require 'tw/client/stream'
20
20
  require 'tw/client/error'
21
21
 
22
22
  module Tw
23
- VERSION = '0.2.6'
23
+ VERSION = '0.3.0'
24
24
  class Conf
25
25
  REQUIRE_VERSION = '0.1.0'
26
26
  end
data/lib/tw/app/cmds.rb CHANGED
@@ -31,7 +31,7 @@ module Tw::App
31
31
  puts "set default user \"@#{Tw::Conf['default_user']}\""
32
32
  else
33
33
  puts "@"+Tw::Conf['default_user'] if Tw::Conf['default_user']
34
- puts "e.g. tw --user:default=USERNAME"
34
+ STDERR.puts "e.g. tw --user:default=USERNAME"
35
35
  end
36
36
  on_exit
37
37
  end
@@ -82,7 +82,7 @@ module Tw::App
82
82
 
83
83
  cmd :stream do |v, opts|
84
84
  stream = Tw::Client::Stream.new @parser.has_param?(:user) ? @parser[:user] : nil
85
- puts "-- waiting stream.."
85
+ Render.puts "-- waiting stream.."
86
86
  loop do
87
87
  begin
88
88
  stream.user_stream do |s|
@@ -106,7 +106,7 @@ module Tw::App
106
106
  else
107
107
  track_words = v.split(/\s*,\s*/)
108
108
  stream = Tw::Client::Stream.new @parser.has_param?(:user) ? @parser[:user] : nil
109
- puts "-- waiting stream.. track \"#{track_words.join(',')}\""
109
+ Render.puts "-- waiting stream.. track \"#{track_words.join(',')}\""
110
110
  loop do
111
111
  begin
112
112
  stream.filter track_words do |s|
@@ -126,9 +126,13 @@ module Tw::App
126
126
 
127
127
  cmd :pipe do |v, opts|
128
128
  auth
129
- STDIN.read.split(/[\r\n]+/).each do |line|
129
+ while line = STDIN.gets do
130
130
  line.split(/(.{140})/u).select{|m|m.size>0}.each do |message|
131
- client.tweet message
131
+ begin
132
+ client.tweet message
133
+ rescue => e
134
+ STDERR.puts e.message
135
+ end
132
136
  end
133
137
  sleep 1
134
138
  end
data/lib/tw/app/main.rb CHANGED
@@ -53,6 +53,7 @@ module Tw::App
53
53
  arg :stream, 'show user stream', :alias => :st
54
54
  arg :pipe, 'pipe tweet'
55
55
  arg :format, 'output format', :default => 'text'
56
+ arg :silent, 'silent mode'
56
57
  arg :version, 'show version', :alias => :v
57
58
  arg :help, 'show help', :alias => :h
58
59
 
@@ -89,6 +90,8 @@ module Tw::App
89
90
  on_exit
90
91
  end
91
92
 
93
+ Render.silent = @parser[:silent]
94
+
92
95
  regist_cmds
93
96
 
94
97
  cmds.each do |name, cmd|
@@ -118,7 +121,11 @@ module Tw::App
118
121
  puts '[Y/n]'
119
122
  on_exit if STDIN.gets.strip =~ /^n/i
120
123
  end
121
- client.tweet message
124
+ begin
125
+ client.tweet message
126
+ rescue => e
127
+ STDERR.puts e.message
128
+ end
122
129
  end
123
130
  end
124
131
 
data/lib/tw/app/render.rb CHANGED
@@ -1,6 +1,18 @@
1
-
2
1
  module Tw::App
3
2
  class Render
3
+
4
+ def self.silent=(bool)
5
+ @@silent = bool ? true : false
6
+ end
7
+
8
+ def self.silent
9
+ @@silent ||= false
10
+ end
11
+
12
+ def self.puts(s)
13
+ STDOUT.puts s unless silent
14
+ end
15
+
4
16
  def self.color_code(str)
5
17
  colors = Sickill::Rainbow::TERM_COLORS.keys - [:default, :black, :white]
6
18
  n = str.each_byte.map{|c| c.to_i}.inject{|a,b|a+b}
@@ -14,7 +26,7 @@ module Tw::App
14
26
  }.values.sort{|a,b|
15
27
  a.id <=> b.id
16
28
  }.each{|m|
17
- puts case format
29
+ STDOUT.puts case format
18
30
  when 'text'
19
31
  user = m.user.kind_of?(Hash) ? "@#{m.user[:from]} > @#{m.user[:to]}" : "@#{m.user}"
20
32
  line = "#{m.time.strftime '[%m/%d %a] (%H:%M:%S)'} #{user} : #{CGI.unescapeHTML m.text}"
@@ -22,7 +34,7 @@ module Tw::App
22
34
  when 'json'
23
35
  m.to_json
24
36
  else
25
- m.to_s format
37
+ m.format format
26
38
  end
27
39
  }
28
40
  end
@@ -18,8 +18,16 @@ module Tw
18
18
  }.to_json(*a)
19
19
  end
20
20
 
21
- def to_s(format)
22
- self.instance_eval "\"#{format}\""
21
+ def url
22
+ "http://twitter.com/#{user}/status/#{id}"
23
+ end
24
+
25
+ def to_s
26
+ "@#{user} #{text} - #{time} #{url}"
27
+ end
28
+
29
+ def format(fmt)
30
+ self.instance_eval "\"#{fmt}\""
23
31
  end
24
32
  end
25
33
  end
data/samples/README.md CHANGED
@@ -1,7 +1,12 @@
1
1
  # tw samples
2
2
 
3
+ ## Tw API
4
+
5
+ % tw sample.rb hello woooorld
6
+
3
7
  ## Use Tw as front-end of twitter auth
4
8
 
5
9
  % tw --user:add
6
10
  % ruby upload_profile_image.rb image.jpg
7
11
  % ruby upload_profile_image.rb image.jpg shokai
12
+
data/samples/sample.rb ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift File.expand_path '../lib', File.dirname(__FILE__)
3
+ require 'rubygems'
4
+ require 'tw'
5
+
6
+ if ARGV.empty?
7
+ STDERR.puts "ruby #{$0} hello world"
8
+ exit 1
9
+ end
10
+
11
+ msg = ARGV.join(' ')
12
+
13
+ client = Tw::Client.new
14
+ client.auth
15
+ client.mentions.each do |m|
16
+ puts m
17
+ end
18
+
19
+ begin
20
+ p client.tweet msg
21
+ rescue => e
22
+ STDERR.puts e
23
+ exit 1
24
+ end
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ $:.unshift File.expand_path '../lib', File.dirname(__FILE__)
2
3
  require 'rubygems'
3
4
  require 'tw'
4
5
 
data/test/test_tw.rb CHANGED
@@ -15,10 +15,10 @@ class TestTw < Test::Unit::TestCase
15
15
  def response?(arr)
16
16
  return false unless arr.kind_of? Array
17
17
  arr.each do |i|
18
- return false if !(i[:id].class == Fixnum and
19
- (user? i[:user] or (user? i[:user][:to] and user? i[:user][:from])) and
20
- i[:text].kind_of? String and
21
- i[:time].kind_of? Time)
18
+ return false if !(i.id.class == Fixnum and
19
+ (user? i.user or (user? i.user[:to] and user? i.user[:from])) and
20
+ i.text.kind_of? String and
21
+ i.time.kind_of? Time)
22
22
  end
23
23
  return true
24
24
  end
metadata CHANGED
@@ -1,240 +1,223 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: tw
3
- version: !ruby/object:Gem::Version
4
- hash: 27
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 6
10
- version: 0.2.6
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Sho Hashimoto
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-10-10 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- prerelease: false
22
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2012-10-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: oauth
16
+ requirement: !ruby/object:Gem::Requirement
23
17
  none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 1
28
- segments:
29
- - 0
30
- - 4
31
- - 7
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
32
21
  version: 0.4.7
33
22
  - - <
34
- - !ruby/object:Gem::Version
35
- hash: 23
36
- segments:
37
- - 1
38
- - 0
39
- - 0
23
+ - !ruby/object:Gem::Version
40
24
  version: 1.0.0
41
25
  type: :runtime
42
- name: oauth
43
- version_requirements: *id001
44
- - !ruby/object:Gem::Dependency
45
26
  prerelease: false
46
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.4.7
33
+ - - <
34
+ - !ruby/object:Gem::Version
35
+ version: 1.0.0
36
+ - !ruby/object:Gem::Dependency
37
+ name: twitter
38
+ requirement: !ruby/object:Gem::Requirement
47
39
  none: false
48
- requirements:
49
- - - ">="
50
- - !ruby/object:Gem::Version
51
- hash: 63
52
- segments:
53
- - 4
54
- - 0
55
- - 0
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
56
43
  version: 4.0.0
57
44
  - - <
58
- - !ruby/object:Gem::Version
59
- hash: 55
60
- segments:
61
- - 5
62
- - 0
63
- - 0
45
+ - !ruby/object:Gem::Version
64
46
  version: 5.0.0
65
47
  type: :runtime
66
- name: twitter
67
- version_requirements: *id002
68
- - !ruby/object:Gem::Dependency
69
48
  prerelease: false
70
- requirement: &id003 !ruby/object:Gem::Requirement
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 4.0.0
55
+ - - <
56
+ - !ruby/object:Gem::Version
57
+ version: 5.0.0
58
+ - !ruby/object:Gem::Dependency
59
+ name: userstream
60
+ requirement: !ruby/object:Gem::Requirement
71
61
  none: false
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- hash: 31
76
- segments:
77
- - 1
78
- - 2
79
- - 0
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
80
65
  version: 1.2.0
81
66
  - - <
82
- - !ruby/object:Gem::Version
83
- hash: 27
84
- segments:
85
- - 1
86
- - 3
87
- - 0
67
+ - !ruby/object:Gem::Version
88
68
  version: 1.3.0
89
69
  type: :runtime
90
- name: userstream
91
- version_requirements: *id003
92
- - !ruby/object:Gem::Dependency
93
70
  prerelease: false
94
- requirement: &id004 !ruby/object:Gem::Requirement
71
+ version_requirements: !ruby/object:Gem::Requirement
95
72
  none: false
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- hash: 1
100
- segments:
101
- - 1
102
- - 7
103
- - 5
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 1.2.0
77
+ - - <
78
+ - !ruby/object:Gem::Version
79
+ version: 1.3.0
80
+ - !ruby/object:Gem::Dependency
81
+ name: json
82
+ requirement: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
104
87
  version: 1.7.5
105
88
  - - <
106
- - !ruby/object:Gem::Version
107
- hash: 55
108
- segments:
109
- - 1
110
- - 8
111
- - 0
89
+ - !ruby/object:Gem::Version
112
90
  version: 1.8.0
113
91
  type: :runtime
114
- name: json
115
- version_requirements: *id004
116
- - !ruby/object:Gem::Dependency
117
92
  prerelease: false
118
- requirement: &id005 !ruby/object:Gem::Requirement
93
+ version_requirements: !ruby/object:Gem::Requirement
119
94
  none: false
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- hash: 25
124
- segments:
125
- - 0
126
- - 1
127
- - 1
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: 1.7.5
99
+ - - <
100
+ - !ruby/object:Gem::Version
101
+ version: 1.8.0
102
+ - !ruby/object:Gem::Dependency
103
+ name: args_parser
104
+ requirement: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
128
109
  version: 0.1.1
129
110
  type: :runtime
130
- name: args_parser
131
- version_requirements: *id005
132
- - !ruby/object:Gem::Dependency
133
111
  prerelease: false
134
- requirement: &id006 !ruby/object:Gem::Requirement
112
+ version_requirements: !ruby/object:Gem::Requirement
135
113
  none: false
136
- requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- hash: 27
140
- segments:
141
- - 1
142
- - 1
143
- - 4
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: 0.1.1
118
+ - !ruby/object:Gem::Dependency
119
+ name: rainbow
120
+ requirement: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
144
125
  version: 1.1.4
145
126
  - - <
146
- - !ruby/object:Gem::Version
147
- hash: 15
148
- segments:
149
- - 2
150
- - 0
151
- - 0
127
+ - !ruby/object:Gem::Version
152
128
  version: 2.0.0
153
129
  type: :runtime
154
- name: rainbow
155
- version_requirements: *id006
156
- - !ruby/object:Gem::Dependency
157
130
  prerelease: false
158
- requirement: &id007 !ruby/object:Gem::Requirement
131
+ version_requirements: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: 1.1.4
137
+ - - <
138
+ - !ruby/object:Gem::Version
139
+ version: 2.0.0
140
+ - !ruby/object:Gem::Dependency
141
+ name: parallel
142
+ requirement: !ruby/object:Gem::Requirement
159
143
  none: false
160
- requirements:
161
- - - ">="
162
- - !ruby/object:Gem::Version
163
- hash: 47
164
- segments:
165
- - 0
166
- - 5
167
- - 18
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
168
147
  version: 0.5.18
169
148
  - - <
170
- - !ruby/object:Gem::Version
171
- hash: 23
172
- segments:
173
- - 1
174
- - 0
175
- - 0
149
+ - !ruby/object:Gem::Version
176
150
  version: 1.0.0
177
151
  type: :runtime
178
- name: parallel
179
- version_requirements: *id007
180
- - !ruby/object:Gem::Dependency
181
152
  prerelease: false
182
- requirement: &id008 !ruby/object:Gem::Requirement
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: 0.5.18
159
+ - - <
160
+ - !ruby/object:Gem::Version
161
+ version: 1.0.0
162
+ - !ruby/object:Gem::Dependency
163
+ name: rdoc
164
+ requirement: !ruby/object:Gem::Requirement
183
165
  none: false
184
- requirements:
166
+ requirements:
185
167
  - - ~>
186
- - !ruby/object:Gem::Version
187
- hash: 19
188
- segments:
189
- - 3
190
- - 10
191
- version: "3.10"
168
+ - !ruby/object:Gem::Version
169
+ version: '3.10'
192
170
  type: :development
193
- name: rdoc
194
- version_requirements: *id008
195
- - !ruby/object:Gem::Dependency
196
171
  prerelease: false
197
- requirement: &id009 !ruby/object:Gem::Requirement
172
+ version_requirements: !ruby/object:Gem::Requirement
173
+ none: false
174
+ requirements:
175
+ - - ~>
176
+ - !ruby/object:Gem::Version
177
+ version: '3.10'
178
+ - !ruby/object:Gem::Dependency
179
+ name: newgem
180
+ requirement: !ruby/object:Gem::Requirement
198
181
  none: false
199
- requirements:
200
- - - ">="
201
- - !ruby/object:Gem::Version
202
- hash: 5
203
- segments:
204
- - 1
205
- - 5
206
- - 3
182
+ requirements:
183
+ - - ! '>='
184
+ - !ruby/object:Gem::Version
207
185
  version: 1.5.3
208
186
  type: :development
209
- name: newgem
210
- version_requirements: *id009
211
- - !ruby/object:Gem::Dependency
212
187
  prerelease: false
213
- requirement: &id010 !ruby/object:Gem::Requirement
188
+ version_requirements: !ruby/object:Gem::Requirement
214
189
  none: false
215
- requirements:
190
+ requirements:
191
+ - - ! '>='
192
+ - !ruby/object:Gem::Version
193
+ version: 1.5.3
194
+ - !ruby/object:Gem::Dependency
195
+ name: hoe
196
+ requirement: !ruby/object:Gem::Requirement
197
+ none: false
198
+ requirements:
216
199
  - - ~>
217
- - !ruby/object:Gem::Version
218
- hash: 5
219
- segments:
220
- - 3
221
- - 1
222
- version: "3.1"
200
+ - !ruby/object:Gem::Version
201
+ version: '3.1'
223
202
  type: :development
224
- name: hoe
225
- version_requirements: *id010
226
- description: "* twitter client."
227
- email:
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ none: false
206
+ requirements:
207
+ - - ~>
208
+ - !ruby/object:Gem::Version
209
+ version: '3.1'
210
+ description: ! '* twitter client.'
211
+ email:
228
212
  - hashimoto@shokai.org
229
- executables:
213
+ executables:
230
214
  - tw
231
215
  extensions: []
232
-
233
- extra_rdoc_files:
216
+ extra_rdoc_files:
234
217
  - History.txt
235
218
  - Manifest.txt
236
219
  - README.rdoc
237
- files:
220
+ files:
238
221
  - Gemfile
239
222
  - Gemfile.lock
240
223
  - History.txt
@@ -255,6 +238,7 @@ files:
255
238
  - lib/tw/client/tweet.rb
256
239
  - lib/tw/conf.rb
257
240
  - samples/README.md
241
+ - samples/sample.rb
258
242
  - samples/update_profile_image.rb
259
243
  - script/console
260
244
  - script/destroy
@@ -264,38 +248,33 @@ files:
264
248
  - .gemtest
265
249
  homepage: http://shokai.github.com/tw
266
250
  licenses: []
267
-
268
- post_install_message: "!! Installed \"tw\" command. => http://shokai.github.com/tw"
269
- rdoc_options:
251
+ post_install_message: ! '!! Installed "tw" command. => http://shokai.github.com/tw'
252
+ rdoc_options:
270
253
  - --main
271
254
  - README.rdoc
272
- require_paths:
255
+ require_paths:
273
256
  - lib
274
- required_ruby_version: !ruby/object:Gem::Requirement
257
+ required_ruby_version: !ruby/object:Gem::Requirement
275
258
  none: false
276
- requirements:
277
- - - ">="
278
- - !ruby/object:Gem::Version
279
- hash: 3
280
- segments:
259
+ requirements:
260
+ - - ! '>='
261
+ - !ruby/object:Gem::Version
262
+ version: '0'
263
+ segments:
281
264
  - 0
282
- version: "0"
283
- required_rubygems_version: !ruby/object:Gem::Requirement
265
+ hash: 3459005174118460767
266
+ required_rubygems_version: !ruby/object:Gem::Requirement
284
267
  none: false
285
- requirements:
286
- - - ">="
287
- - !ruby/object:Gem::Version
288
- hash: 3
289
- segments:
290
- - 0
291
- version: "0"
268
+ requirements:
269
+ - - ! '>='
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
292
272
  requirements: []
293
-
294
273
  rubyforge_project: tw
295
274
  rubygems_version: 1.8.24
296
275
  signing_key:
297
276
  specification_version: 3
298
- summary: "* twitter client."
299
- test_files:
277
+ summary: ! '* twitter client.'
278
+ test_files:
300
279
  - test/test_helper.rb
301
280
  - test/test_tw.rb