earthquake 0.2.5 → 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/README.md +31 -3
- data/VERSION +1 -1
- data/earthquake.gemspec +1 -1
- data/lib/earthquake/core.rb +22 -7
- data/lib/earthquake/output.rb +11 -3
- metadata +1 -1
data/README.md
CHANGED
@@ -59,6 +59,11 @@ The blue is excluded.
|
|
59
59
|
|
60
60
|
デバッグモードで動作しているとき、コードの修正は即座に反映される(正確にはコマンドの実行の直前にリロードされる)。
|
61
61
|
|
62
|
+
### Defining Plugin
|
63
|
+
|
64
|
+
"~/.earthquake/plugin" is the directory for plugins.
|
65
|
+
At launch, Earthquake try to load files under the directory.
|
66
|
+
|
62
67
|
### Defining your commands
|
63
68
|
|
64
69
|
#### A command named 'foo':
|
@@ -90,7 +95,18 @@ The 'm' is a MatchData.
|
|
90
95
|
|
91
96
|
### Handling outputs
|
92
97
|
|
93
|
-
####
|
98
|
+
#### Keyword notifier:
|
99
|
+
|
100
|
+
Earthquake.init do
|
101
|
+
output do |item|
|
102
|
+
next unless item["stream"]
|
103
|
+
if item["text"] =~ /ruby/i
|
104
|
+
notify "#{item["user"]["screen_name"]}: #{item["text"]}"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
#### Favorite notifier:
|
94
110
|
|
95
111
|
Earthquake.init do
|
96
112
|
output do |item|
|
@@ -101,11 +117,23 @@ The 'm' is a MatchData.
|
|
101
117
|
end
|
102
118
|
end
|
103
119
|
|
120
|
+
### Defining filters
|
121
|
+
|
122
|
+
#### Filtering by keywords
|
123
|
+
|
124
|
+
Earthquake.init do
|
125
|
+
filter do |item|
|
126
|
+
if item["stream"] && item["text"]
|
127
|
+
item["text"] =~ /ruby/i
|
128
|
+
else
|
129
|
+
true
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
104
134
|
TODO
|
105
135
|
----
|
106
136
|
|
107
|
-
* filter
|
108
|
-
* plugin system
|
109
137
|
* keyword tracking
|
110
138
|
* more intelligent completion
|
111
139
|
* spec
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/earthquake.gemspec
CHANGED
data/lib/earthquake/core.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
+
require 'fileutils'
|
3
|
+
|
2
4
|
module Earthquake
|
3
5
|
module Core
|
4
6
|
attr_accessor :config
|
@@ -17,6 +19,7 @@ module Earthquake
|
|
17
19
|
|
18
20
|
def _init
|
19
21
|
load_config
|
22
|
+
load_plugins
|
20
23
|
inits.each { |block| class_eval(&block) }
|
21
24
|
inits.clear
|
22
25
|
end
|
@@ -32,13 +35,15 @@ module Earthquake
|
|
32
35
|
# TODO: parse argv
|
33
36
|
self.config = {
|
34
37
|
:dir => File.expand_path('~/.earthquake'),
|
35
|
-
:
|
36
|
-
:
|
38
|
+
:plugin_dir => File.expand_path('~/.earthquake/plugin'),
|
39
|
+
:consumer_key => 'elraaTkvu5Zv6pOitFxyAA',
|
40
|
+
:consumer_secret => '9DlzIvTc7rZ9fQ13NGHQdrqfuAJf9XyoWKrhSnLx0'
|
37
41
|
}
|
38
42
|
|
39
|
-
|
40
|
-
|
41
|
-
|
43
|
+
[config[:dir], config[:plugin_dir]].each do |dir|
|
44
|
+
unless File.exists?(dir)
|
45
|
+
FileUtils.mkdir_p(dir)
|
46
|
+
end
|
42
47
|
end
|
43
48
|
|
44
49
|
config[:file] ||= File.join(config[:dir], 'config')
|
@@ -52,6 +57,16 @@ module Earthquake
|
|
52
57
|
get_access_token unless self.config[:token] && self.config[:secret]
|
53
58
|
end
|
54
59
|
|
60
|
+
def load_plugins
|
61
|
+
Dir[File.join(config[:plugin_dir], '*.rb')].each do |lib|
|
62
|
+
begin
|
63
|
+
require_dependency lib
|
64
|
+
rescue Exception => e
|
65
|
+
puts "<on_red>[ERROR] #{e.message.e}\n#{e.backtrace.join("\n").e}</on_red>".t
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
55
70
|
def start(*argv)
|
56
71
|
_init
|
57
72
|
restore_history
|
@@ -139,8 +154,8 @@ module Earthquake
|
|
139
154
|
end
|
140
155
|
end
|
141
156
|
|
142
|
-
def notify(message)
|
143
|
-
Notify.notify
|
157
|
+
def notify(message, options = {:title => 'earthquake'})
|
158
|
+
Notify.notify options[:title], message
|
144
159
|
end
|
145
160
|
end
|
146
161
|
|
data/lib/earthquake/output.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
module Earthquake
|
3
3
|
module Output
|
4
|
+
def filters
|
5
|
+
@filters ||= []
|
6
|
+
end
|
7
|
+
|
8
|
+
def filter(&block)
|
9
|
+
filters << block
|
10
|
+
end
|
11
|
+
|
4
12
|
def outputs
|
5
13
|
@outputs ||= []
|
6
14
|
end
|
@@ -12,8 +20,8 @@ module Earthquake
|
|
12
20
|
return if item_queue.empty?
|
13
21
|
insert do
|
14
22
|
while item = item_queue.shift
|
15
|
-
item["
|
16
|
-
puts_items(item)
|
23
|
+
item["stream"] = true
|
24
|
+
puts_items(item) if filters.all? { |filter| filter.call(item) }
|
17
25
|
end
|
18
26
|
end
|
19
27
|
end
|
@@ -69,7 +77,7 @@ module Earthquake
|
|
69
77
|
end
|
70
78
|
|
71
79
|
statuses = ["[#{item["id"].to_s}]"]
|
72
|
-
unless item["
|
80
|
+
unless item["stream"]
|
73
81
|
statuses.insert(0, "[#{Time.parse(item["created_at"]).strftime('%Y.%m.%d %X')}]")
|
74
82
|
end
|
75
83
|
|