earthquake 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -8,7 +8,6 @@ gem 'awesome_print'
8
8
  gem 'launchy'
9
9
  gem 'oauth'
10
10
  gem 'twitter_oauth'
11
- gem 'termcolor'
12
11
 
13
12
  group :development do
14
13
  gem "rspec", "~> 2.3.0"
data/README.md CHANGED
@@ -5,6 +5,8 @@ Twitter Client on Terminal with Streaming API.
5
5
 
6
6
  It supports ruby 1.9 only.
7
7
 
8
+ ![http://images.instagram.com/media/2011/03/21/862f3b8d119b4eeb9c52e690a0087f5e_7.jpg](http://images.instagram.com/media/2011/03/21/862f3b8d119b4eeb9c52e690a0087f5e_7.jpg)
9
+
8
10
  Install
9
11
  ----
10
12
 
@@ -149,8 +151,9 @@ TODO
149
151
  ----
150
152
 
151
153
  * more intelligent completion
154
+ * caching statuses
152
155
  * typable id
153
- * keyword highlight
156
+ * request asynchronously
154
157
  * spec
155
158
 
156
159
  Copyright
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.2
1
+ 0.4.3
data/earthquake.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{earthquake}
8
- s.version = "0.4.2"
8
+ s.version = "0.4.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["jugyo"]
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  "bin/earthquake",
31
31
  "earthquake.gemspec",
32
32
  "lib/earthquake.rb",
33
+ "lib/earthquake/cache.rb",
33
34
  "lib/earthquake/commands.rb",
34
35
  "lib/earthquake/core.rb",
35
36
  "lib/earthquake/ext.rb",
data/lib/earthquake.rb CHANGED
@@ -4,18 +4,19 @@
4
4
  readline
5
5
  active_support/core_ext
6
6
  active_support/dependencies
7
+ active_support/cache
7
8
  twitter/json_stream
8
9
  notify
9
10
  ap
10
11
  launchy
11
12
  oauth
12
13
  twitter_oauth
13
- termcolor
14
14
  ).each { |lib| require lib }
15
15
 
16
16
  %w(
17
17
  ext
18
18
  core
19
+ cache
19
20
  output
20
21
  input
21
22
  get_access_token
@@ -0,0 +1,11 @@
1
+ module Earthquake
2
+ module Cache
3
+ attr_reader :cache
4
+ end
5
+
6
+ init do
7
+ @cache ||= config[:cache] || ActiveSupport::Cache::MemoryStore.new
8
+ end
9
+
10
+ extend Cache
11
+ end
@@ -21,12 +21,14 @@ module Earthquake
21
21
 
22
22
  # update
23
23
  command %r|^[^:].*| do |m|
24
- twitter.update(m[0]) if confirm("update '#{m[0]}'")
24
+ async { twitter.update(m[0]) } if confirm("update '#{m[0]}'")
25
25
  end
26
26
 
27
27
  command %r|^:reply (\d+)\s+(.*)|, :as => :reply do |m|
28
28
  # TODO: fill the user name to reply
29
- twitter.update(m[2], :in_reply_to_status_id => m[1]) if confirm("reply '#{m[2]}' to #{m[1]}")
29
+ async do
30
+ twitter.update(m[2], :in_reply_to_status_id => m[1]) if confirm("reply '#{m[2]}' to #{m[1]}")
31
+ end
30
32
  end
31
33
 
32
34
  command :status do |m|
@@ -34,7 +36,8 @@ module Earthquake
34
36
  end
35
37
 
36
38
  command :delete do |m|
37
- twitter.status_destroy(m[1])
39
+ # TODO: confirm
40
+ async { twitter.status_destroy(m[1]) }
38
41
  end
39
42
 
40
43
  command :mentions do
@@ -42,11 +45,11 @@ module Earthquake
42
45
  end
43
46
 
44
47
  command :follow do |m|
45
- twitter.friend(m[1])
48
+ async { twitter.friend(m[1]) }
46
49
  end
47
50
 
48
51
  command :unfollow do |m|
49
- twitter.unfriend(m[1])
52
+ async { twitter.unfriend(m[1]) }
50
53
  end
51
54
 
52
55
  command :list do |m|
@@ -66,15 +69,15 @@ module Earthquake
66
69
  end
67
70
 
68
71
  command :retweet do |m|
69
- twitter.retweet(m[1])
72
+ async { twitter.retweet(m[1]) }
70
73
  end
71
74
 
72
75
  command :favorite do |m|
73
- twitter.favorite(m[1])
76
+ async { twitter.favorite(m[1]) }
74
77
  end
75
78
 
76
79
  command :unfavorite do |m|
77
- twitter.unfavorite(m[1])
80
+ async { twitter.unfavorite(m[1]) }
78
81
  end
79
82
 
80
83
  command :retweeted_by_me do
@@ -90,15 +93,15 @@ module Earthquake
90
93
  end
91
94
 
92
95
  command :block do |m|
93
- twitter.block(m[1])
96
+ async { twitter.block(m[1]) }
94
97
  end
95
98
 
96
99
  command :unblock do |m|
97
- twitter.unblock(m[1])
100
+ async { twitter.unblock(m[1]) }
98
101
  end
99
102
 
100
103
  command :report_spam do |m|
101
- twitter.report_spam(m[1])
104
+ async { twitter.report_spam(m[1]) }
102
105
  end
103
106
 
104
107
  command :reconnect do
@@ -17,6 +17,18 @@ module Earthquake
17
17
  inits << block
18
18
  end
19
19
 
20
+ def onces
21
+ @once ||= []
22
+ end
23
+
24
+ def once(&block)
25
+ onces << block
26
+ end
27
+
28
+ def _once
29
+ onces.each { |block| class_eval(&block) }
30
+ end
31
+
20
32
  def _init
21
33
  load_config
22
34
  load_plugins
@@ -68,6 +80,7 @@ module Earthquake
68
80
  end
69
81
 
70
82
  def start(*argv)
83
+ _once
71
84
  _init
72
85
  restore_history
73
86
 
@@ -154,6 +167,10 @@ module Earthquake
154
167
  end
155
168
  end
156
169
 
170
+ def async(&block)
171
+ Thread.start(&block)
172
+ end
173
+
157
174
  def error(e)
158
175
  notify "[ERROR] #{e.message}\n#{e.backtrace.join("\n")}"
159
176
  end
@@ -1,7 +1,5 @@
1
1
  class String
2
- alias_method :t, :termcolor
3
-
4
- def e
5
- TermColor.escape(self)
2
+ def c(*codes)
3
+ "\e[#{codes.join;}m#{self}\e[0m"
6
4
  end
7
5
  end
@@ -23,7 +23,7 @@ module Earthquake
23
23
  if command = commands.detect { |c| c[:pattern] =~ text }
24
24
  command[:block].call($~)
25
25
  elsif !text.empty?
26
- puts "<yellow>Command not found</yellow>".t
26
+ puts "Command not found".c(43)
27
27
  end
28
28
  rescue Exception => e
29
29
  error e
@@ -83,24 +83,28 @@ module Earthquake
83
83
 
84
84
  source = item["source"] =~ />(.*)</ ? $1 : 'web'
85
85
  user_color = color_of(item["user"]["screen_name"])
86
- text = item["text"].e.gsub(/[@#]([0-9A-Za-z_]+)/) do |i|
87
- c = color_of($1)
88
- "<#{c}>#{i}</#{c}>"
86
+ text = item["text"].gsub(/[@#]([0-9A-Za-z_]+)/) do |i|
87
+ i.c(color_of($1))
89
88
  end
90
89
 
91
90
  if item["highlights"]
92
91
  item["highlights"].each do |h|
93
92
  c = color_of(h).to_i + 10
94
93
  text = text.gsub(/#{h}/i) do |i|
95
- "<#{c}>#{i}</#{c}>"
94
+ i.c(c)
96
95
  end
97
96
  end
98
97
  end
99
98
 
100
- status = "<90>#{statuses.join(" ").e}</90> " +
101
- "<#{user_color}>#{item["user"]["screen_name"].e}</#{user_color}>: " +
102
- "#{text}<90>#{misc.e} #{source.e}</90>"
103
- puts status.t
99
+ mark = item["mark"] || ""
100
+
101
+ status = [
102
+ "#{mark}#{statuses.join(" ")}".c(90),
103
+ item["user"]["screen_name"].c(user_color),
104
+ "#{text}",
105
+ "#{misc} #{source}".c(90)
106
+ ].join(" ")
107
+ puts status
104
108
  end
105
109
 
106
110
  output do |item|
@@ -7,5 +7,19 @@ module Earthquake
7
7
  @twitter = TwitterOAuth::Client.new(config.slice(:consumer_key, :consumer_secret, :token, :secret))
8
8
  end
9
9
 
10
+ once do
11
+ class ::TwitterOAuth::Client
12
+ def status_with_cache(id)
13
+ key = "status:#{id}"
14
+ unless s = Earthquake.cache.read(key)
15
+ s = status_without_cache(id)
16
+ Earthquake.cache.write(key, s, :expires_in => 1.hour.ago)
17
+ end
18
+ s
19
+ end
20
+ alias_method_chain :status, :cache
21
+ end
22
+ end
23
+
10
24
  extend Twitter
11
25
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: earthquake
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.4.2
5
+ version: 0.4.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - jugyo
@@ -166,6 +166,7 @@ files:
166
166
  - bin/earthquake
167
167
  - earthquake.gemspec
168
168
  - lib/earthquake.rb
169
+ - lib/earthquake/cache.rb
169
170
  - lib/earthquake/commands.rb
170
171
  - lib/earthquake/core.rb
171
172
  - lib/earthquake/ext.rb