jugyo-termtter 1.0.7 → 1.0.8
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/plugins/command_plus.rb +47 -0
- data/lib/plugins/confirm.rb +25 -4
- data/lib/plugins/countter.rb +23 -0
- data/lib/plugins/devel.rb +5 -0
- data/lib/plugins/direct_messages.rb +36 -0
- data/lib/plugins/erb.rb +1 -1
- data/lib/plugins/exec.rb +17 -0
- data/lib/plugins/exec_and_update.rb +14 -0
- data/lib/plugins/growl2.rb +143 -0
- data/lib/plugins/hatebu.rb +2 -2
- data/lib/plugins/hatebu_and_update.rb +58 -0
- data/lib/plugins/l2.rb +25 -0
- data/lib/plugins/notify-send2.rb +23 -10
- data/lib/plugins/notify-send3.rb +45 -0
- data/lib/plugins/open_url.rb +59 -0
- data/lib/plugins/reblog.rb +2 -2
- data/lib/plugins/retweet.rb +46 -0
- data/lib/plugins/standard_plugins.rb +290 -80
- data/lib/plugins/stdout.rb +7 -1
- data/lib/plugins/switch_user.rb +22 -0
- data/lib/plugins/tinyurl.rb +20 -0
- data/lib/plugins/typable_id.rb +94 -0
- data/lib/termtter/api.rb +35 -20
- data/lib/termtter/client.rb +33 -3
- data/lib/termtter/command.rb +3 -4
- data/lib/termtter/config.rb +4 -0
- data/lib/termtter/config_setup.rb +1 -16
- data/lib/termtter/system_extensions.rb +15 -0
- data/lib/termtter/task_manager.rb +1 -1
- data/lib/termtter/version.rb +1 -1
- data/spec/plugins/standard_plugins_spec.rb +0 -1
- data/spec/termtter/client_spec.rb +28 -21
- metadata +16 -6
- data/lib/plugins/favorite.rb +0 -63
- data/lib/plugins/plugin.rb +0 -53
- data/spec/plugins/favorite_spec.rb +0 -10
- data/spec/plugins/plugin_spec.rb +0 -25
data/lib/termtter/api.rb
CHANGED
@@ -13,28 +13,43 @@ config.set_default(:enable_ssl, false)
|
|
13
13
|
module Termtter
|
14
14
|
module API
|
15
15
|
class << self
|
16
|
-
attr_reader :connection, :twitter
|
16
|
+
attr_reader :connection, :twitter
|
17
17
|
def setup
|
18
18
|
@connection = Connection.new
|
19
|
-
@twitter =
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
19
|
+
@twitter = create_twitter(config.user_name, config.password)
|
20
|
+
end
|
21
|
+
|
22
|
+
def restore_user
|
23
|
+
@twitter = create_twitter(config.user_name, config.password)
|
24
|
+
end
|
25
|
+
|
26
|
+
def switch_user(username = nil)
|
27
|
+
highline = create_highline
|
28
|
+
username = highline.ask('your twitter username: ') if username.nil? || username.empty?
|
29
|
+
password = highline.ask('your twitter password: ') { |q| q.echo = false }
|
30
|
+
@twitter = create_twitter(username, password)
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_twitter(user_name, password)
|
34
|
+
Rubytter.new(
|
35
|
+
user_name,
|
36
|
+
password,
|
37
|
+
{
|
38
|
+
:app_name => config.app_name.empty? ? Termtter::APP_NAME : config.app_name,
|
39
|
+
:host => config.host,
|
40
|
+
:header => {
|
41
|
+
'User-Agent' => 'Termtter http://github.com/jugyo/termtter',
|
42
|
+
'X-Twitter-Client' => 'Termtter',
|
43
|
+
'X-Twitter-Client-URL' => 'http://github.com/jugyo/termtter',
|
44
|
+
'X-Twitter-Client-Version' => Termtter::VERSION
|
45
|
+
},
|
46
|
+
:enable_ssl => config.enable_ssl,
|
47
|
+
:proxy_host => config.proxy.host,
|
48
|
+
:proxy_port => config.proxy.port,
|
49
|
+
:proxy_user_name => config.proxy.user_name,
|
50
|
+
:proxy_password => config.proxy.password
|
51
|
+
}
|
52
|
+
)
|
38
53
|
end
|
39
54
|
end
|
40
55
|
end
|
data/lib/termtter/client.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
require 'fileutils'
|
3
3
|
require 'logger'
|
4
|
+
require 'termcolor'
|
4
5
|
|
5
6
|
module Termtter
|
6
7
|
|
@@ -148,7 +149,7 @@ module Termtter
|
|
148
149
|
|
149
150
|
@task_manager.invoke_and_wait do
|
150
151
|
begin
|
151
|
-
call_hooks("pre_exec_#{command.name.to_s}",
|
152
|
+
call_hooks("pre_exec_#{command.name.to_s}", command, modified_arg)
|
152
153
|
# exec command
|
153
154
|
result = command.call(command_str, modified_arg, text)
|
154
155
|
if result
|
@@ -216,7 +217,7 @@ module Termtter
|
|
216
217
|
end
|
217
218
|
|
218
219
|
def post_config_load()
|
219
|
-
if config.
|
220
|
+
if config.devel
|
220
221
|
plugin 'devel'
|
221
222
|
end
|
222
223
|
end
|
@@ -309,7 +310,30 @@ module Termtter
|
|
309
310
|
end
|
310
311
|
|
311
312
|
def setup_logger
|
312
|
-
@logger = config.logger ||
|
313
|
+
@logger = config.logger || default_logger
|
314
|
+
end
|
315
|
+
|
316
|
+
def default_logger
|
317
|
+
logger = Logger.new(STDOUT)
|
318
|
+
logger.formatter = lambda { |severity, time, progname, message|
|
319
|
+
color =
|
320
|
+
case severity
|
321
|
+
when /^DEBUG/
|
322
|
+
'blue'
|
323
|
+
when /^INFO/
|
324
|
+
'cyan'
|
325
|
+
when /^WARN/
|
326
|
+
'magenta'
|
327
|
+
when /^ERROR/
|
328
|
+
'red'
|
329
|
+
when /^FATAL/
|
330
|
+
'on_red'
|
331
|
+
else
|
332
|
+
'white'
|
333
|
+
end
|
334
|
+
TermColor.parse("<#{color}>" + TermColor.escape("[#{severity}] #{message}\n") + "</#{color}>")
|
335
|
+
}
|
336
|
+
logger
|
313
337
|
end
|
314
338
|
|
315
339
|
def run
|
@@ -328,6 +352,12 @@ module Termtter
|
|
328
352
|
end
|
329
353
|
|
330
354
|
def handle_error(e)
|
355
|
+
if logger
|
356
|
+
logger.error("#{e.class.to_s}: #{e.message}")
|
357
|
+
logger.error(e.backtrace.join("\n")) if config.devel
|
358
|
+
else
|
359
|
+
raise e
|
360
|
+
end
|
331
361
|
get_hooks(:on_error).each {|hook| hook.call(e) }
|
332
362
|
rescue Exception => e
|
333
363
|
puts "Error: #{e}"
|
data/lib/termtter/command.rb
CHANGED
@@ -36,9 +36,9 @@ module Termtter
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def complement(input)
|
39
|
-
|
40
|
-
if command_arg
|
39
|
+
if match?(input) && input =~ /^[^\s]+\s/
|
41
40
|
if completion_proc
|
41
|
+
command_str, command_arg = Command.split_command_line(input)
|
42
42
|
[completion_proc.call(command_str, command_arg || '')].flatten.compact
|
43
43
|
else
|
44
44
|
[]
|
@@ -48,7 +48,7 @@ module Termtter
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
def call(cmd, arg, original_text)
|
51
|
+
def call(cmd = nil, arg = nil, original_text = nil)
|
52
52
|
arg = case arg
|
53
53
|
when nil
|
54
54
|
''
|
@@ -78,4 +78,3 @@ module Termtter
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
81
|
-
|
data/lib/termtter/config.rb
CHANGED
@@ -47,6 +47,10 @@ module Termtter
|
|
47
47
|
@store[name] == :undefined ? @store[name] = Termtter::Config.new : @store[name]
|
48
48
|
end
|
49
49
|
|
50
|
+
def __values__
|
51
|
+
@store.dup
|
52
|
+
end
|
53
|
+
|
50
54
|
__instance = self.new
|
51
55
|
(class << self; self end).
|
52
56
|
__send__(:define_method, :instance) { __instance }
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
module Termtter
|
4
4
|
module ConfigSetup
|
5
|
+
module_function
|
5
6
|
def run
|
6
7
|
ui = create_highline
|
7
8
|
username = ui.ask('your twitter username: ')
|
@@ -33,21 +34,5 @@ module Termtter
|
|
33
34
|
puts "generated: ~/.termtter/config"
|
34
35
|
puts "enjoy!"
|
35
36
|
end
|
36
|
-
|
37
|
-
module_function :run
|
38
|
-
|
39
|
-
def self.create_highline
|
40
|
-
HighLine.track_eof = false
|
41
|
-
if $stdin.respond_to?(:getbyte) # for ruby1.9
|
42
|
-
require 'delegate'
|
43
|
-
stdin_for_highline = SimpleDelegator.new($stdin)
|
44
|
-
def stdin_for_highline.getc
|
45
|
-
getbyte
|
46
|
-
end
|
47
|
-
else
|
48
|
-
stdin_for_highline = $stdin
|
49
|
-
end
|
50
|
-
HighLine.new(stdin_for_highline)
|
51
|
-
end
|
52
37
|
end
|
53
38
|
end
|
@@ -144,3 +144,18 @@ unless Symbol.instance_methods.include?('to_proc')
|
|
144
144
|
end
|
145
145
|
end
|
146
146
|
end
|
147
|
+
|
148
|
+
require 'highline'
|
149
|
+
def create_highline
|
150
|
+
HighLine.track_eof = false
|
151
|
+
if $stdin.respond_to?(:getbyte) # for ruby1.9
|
152
|
+
require 'delegate'
|
153
|
+
stdin_for_highline = SimpleDelegator.new($stdin)
|
154
|
+
def stdin_for_highline.getc
|
155
|
+
getbyte
|
156
|
+
end
|
157
|
+
else
|
158
|
+
stdin_for_highline = $stdin
|
159
|
+
end
|
160
|
+
HighLine.new(stdin_for_highline)
|
161
|
+
end
|
data/lib/termtter/version.rb
CHANGED
@@ -7,6 +7,7 @@ module Termtter
|
|
7
7
|
describe Client do
|
8
8
|
|
9
9
|
it 'should take command' do
|
10
|
+
Client.setup_logger
|
10
11
|
command = Command.new(:name => :test)
|
11
12
|
Client.register_command(command)
|
12
13
|
Client.get_command(:test).should == command
|
@@ -207,28 +208,9 @@ module Termtter
|
|
207
208
|
end
|
208
209
|
|
209
210
|
it 'should handle error' do
|
210
|
-
|
211
|
+
logger = Client.instance_eval{@logger}
|
212
|
+
logger.should_receive(:error).with("StandardError: error")
|
211
213
|
Client.handle_error StandardError.new('error')
|
212
|
-
$stderr.string.should == "[ERROR] Something wrong: error\n"
|
213
|
-
$stderr = old
|
214
|
-
end
|
215
|
-
|
216
|
-
it 'should handle Rubytte::APIError' do
|
217
|
-
$stderr, old = StringIO.new, $stderr
|
218
|
-
class Rubytter::APIError < StandardError; end
|
219
|
-
[
|
220
|
-
['401', "[ERROR] Unauthorized: maybe you tried to show protected user status\n"],
|
221
|
-
['403', "[ERROR] Access denied: maybe that user is protected\n"],
|
222
|
-
['404', "[ERROR] Not found: maybe there is no such user\n"],
|
223
|
-
].each do |code, message|
|
224
|
-
res = mock('res', :code => code)
|
225
|
-
excep = Rubytter::APIError.new('error')
|
226
|
-
excep.should_receive(:response).and_return(res)
|
227
|
-
Client.handle_error excep
|
228
|
-
$stderr.string.should == message
|
229
|
-
$stderr.string = ''
|
230
|
-
end
|
231
|
-
$stderr = old
|
232
214
|
end
|
233
215
|
|
234
216
|
it 'should cancel command by hook' do
|
@@ -244,5 +226,30 @@ module Termtter
|
|
244
226
|
command.should_not_receive(:call)
|
245
227
|
Client.call_commands('test')
|
246
228
|
end
|
229
|
+
|
230
|
+
it 'should get default help' do
|
231
|
+
$stdout, old_stdout = StringIO.new, $stdout # FIXME That suspends any debug informations!
|
232
|
+
help_command = Client.get_command(:help)
|
233
|
+
help_command.should_not be_nil
|
234
|
+
help_command.call
|
235
|
+
$stdout.string.should_not == '' # 何がか出力されていること
|
236
|
+
$stdout = old_stdout
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'should get an added help' do
|
240
|
+
Client.register_command(
|
241
|
+
:name => :foo,
|
242
|
+
:help => [
|
243
|
+
['foo USER', 'foo to USER'],
|
244
|
+
['foo list', 'list foo'],
|
245
|
+
]
|
246
|
+
)
|
247
|
+
$stdout, old_stdout = StringIO.new, $stdout # FIXME That suspends any debug informations!
|
248
|
+
help_command = Client.get_command(:help)
|
249
|
+
help_command.should_not be_nil
|
250
|
+
help_command.call
|
251
|
+
$stdout.string.should match(/foo USER/)
|
252
|
+
$stdout.string.should match(/foo list/)
|
253
|
+
end
|
247
254
|
end
|
248
255
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jugyo-termtter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jugyo
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-04-08 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -68,14 +68,18 @@ files:
|
|
68
68
|
- lib/plugins/april_fool.rb
|
69
69
|
- lib/plugins/bomb.rb
|
70
70
|
- lib/plugins/clear.rb
|
71
|
+
- lib/plugins/command_plus.rb
|
71
72
|
- lib/plugins/confirm.rb
|
72
73
|
- lib/plugins/cool.rb
|
74
|
+
- lib/plugins/countter.rb
|
73
75
|
- lib/plugins/devel.rb
|
76
|
+
- lib/plugins/direct_messages.rb
|
74
77
|
- lib/plugins/en2ja.rb
|
75
78
|
- lib/plugins/english.rb
|
76
79
|
- lib/plugins/erb.rb
|
80
|
+
- lib/plugins/exec.rb
|
81
|
+
- lib/plugins/exec_and_update.rb
|
77
82
|
- lib/plugins/expand-tinyurl.rb
|
78
|
-
- lib/plugins/favorite.rb
|
79
83
|
- lib/plugins/fib.rb
|
80
84
|
- lib/plugins/fib_filter.rb
|
81
85
|
- lib/plugins/filter.rb
|
@@ -83,10 +87,13 @@ files:
|
|
83
87
|
- lib/plugins/grass.rb
|
84
88
|
- lib/plugins/group.rb
|
85
89
|
- lib/plugins/growl.rb
|
90
|
+
- lib/plugins/growl2.rb
|
86
91
|
- lib/plugins/hatebu.rb
|
92
|
+
- lib/plugins/hatebu_and_update.rb
|
87
93
|
- lib/plugins/history.rb
|
88
94
|
- lib/plugins/ignore.rb
|
89
95
|
- lib/plugins/keyword.rb
|
96
|
+
- lib/plugins/l2.rb
|
90
97
|
- lib/plugins/log.rb
|
91
98
|
- lib/plugins/me.rb
|
92
99
|
- lib/plugins/modify_arg_hook_sample.rb
|
@@ -94,10 +101,11 @@ files:
|
|
94
101
|
- lib/plugins/multi_reply.rb
|
95
102
|
- lib/plugins/notify-send.rb
|
96
103
|
- lib/plugins/notify-send2.rb
|
104
|
+
- lib/plugins/notify-send3.rb
|
105
|
+
- lib/plugins/open_url.rb
|
97
106
|
- lib/plugins/otsune.rb
|
98
107
|
- lib/plugins/outputz.rb
|
99
108
|
- lib/plugins/pause.rb
|
100
|
-
- lib/plugins/plugin.rb
|
101
109
|
- lib/plugins/post_exec_hook_sample.rb
|
102
110
|
- lib/plugins/pre_exec_hook_sample.rb
|
103
111
|
- lib/plugins/primes.rb
|
@@ -106,6 +114,7 @@ files:
|
|
106
114
|
- lib/plugins/reblog.rb
|
107
115
|
- lib/plugins/reload.rb
|
108
116
|
- lib/plugins/reply.rb
|
117
|
+
- lib/plugins/retweet.rb
|
109
118
|
- lib/plugins/reverse.rb
|
110
119
|
- lib/plugins/say.rb
|
111
120
|
- lib/plugins/scrape.rb
|
@@ -120,9 +129,12 @@ files:
|
|
120
129
|
- lib/plugins/storage/status.rb
|
121
130
|
- lib/plugins/storage/status_mook.rb
|
122
131
|
- lib/plugins/storage.rb
|
132
|
+
- lib/plugins/switch_user.rb
|
123
133
|
- lib/plugins/system_status.rb
|
124
134
|
- lib/plugins/timer.rb
|
135
|
+
- lib/plugins/tinyurl.rb
|
125
136
|
- lib/plugins/translation.rb
|
137
|
+
- lib/plugins/typable_id.rb
|
126
138
|
- lib/plugins/update_editor.rb
|
127
139
|
- lib/plugins/uri-open.rb
|
128
140
|
- lib/plugins/wassr_post.rb
|
@@ -144,11 +156,9 @@ files:
|
|
144
156
|
- lib/termtter.rb
|
145
157
|
- spec/plugins/cool_spec.rb
|
146
158
|
- spec/plugins/english_spec.rb
|
147
|
-
- spec/plugins/favorite_spec.rb
|
148
159
|
- spec/plugins/fib_spec.rb
|
149
160
|
- spec/plugins/filter_spec.rb
|
150
161
|
- spec/plugins/pause_spec.rb
|
151
|
-
- spec/plugins/plugin_spec.rb
|
152
162
|
- spec/plugins/primes_spec.rb
|
153
163
|
- spec/plugins/shell_spec.rb
|
154
164
|
- spec/plugins/sl_spec.rb
|
data/lib/plugins/favorite.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
def create_favorite(id)
|
4
|
-
r = Termtter::API.twitter.favorite id
|
5
|
-
puts "Favorited status ##{r.id} on user @#{r.user.screen_name} #{r.text}"
|
6
|
-
end
|
7
|
-
|
8
|
-
module Termtter::Client
|
9
|
-
register_command(
|
10
|
-
:name => :favorite, :aliases => [:fav],
|
11
|
-
:exec_proc => lambda {|arg|
|
12
|
-
id = 0
|
13
|
-
case arg
|
14
|
-
when /^\d+/
|
15
|
-
id = arg.to_i
|
16
|
-
when /^@([A-Za-z0-9_]+)/
|
17
|
-
user = $1
|
18
|
-
statuses = Termtter::API.twitter.user_timeline(user)
|
19
|
-
return if statuses.empty?
|
20
|
-
id = statuses[0].id
|
21
|
-
when /^\/(.*)$/
|
22
|
-
word = $1
|
23
|
-
raise "Not implemented yet."
|
24
|
-
else
|
25
|
-
return
|
26
|
-
end
|
27
|
-
|
28
|
-
create_favorite id
|
29
|
-
},
|
30
|
-
:completion_proc => lambda {|cmd, arg|
|
31
|
-
case arg
|
32
|
-
when /@(.*)/
|
33
|
-
find_user_candidates $1, "#{cmd} @%s"
|
34
|
-
when /(\d+)/
|
35
|
-
find_status_ids(arg).map{|id| "#{cmd} #{$1}"}
|
36
|
-
else
|
37
|
-
%w(favorite).grep(/^#{Regexp.quote arg}/)
|
38
|
-
end
|
39
|
-
},
|
40
|
-
:help => ['favorite,fav (ID|@USER|/WORD)', 'Favorite a status']
|
41
|
-
)
|
42
|
-
|
43
|
-
# TBD: Implement this when database support comes.
|
44
|
-
#
|
45
|
-
# if public_storage[:log]
|
46
|
-
# add_help 'favorite,fav /WORD', 'Favorite a status by searching'
|
47
|
-
#
|
48
|
-
# add_command %r'^(?:favorite|fav)\s+/(.+)$' do |m, t|
|
49
|
-
# pat = Regexp.new(m[1])
|
50
|
-
# statuses = public_storage[:log].select {|s| pat =~ s.text }
|
51
|
-
# if statuses.size == 1
|
52
|
-
# status = statuses.first
|
53
|
-
# res = t.favorite(status.id)
|
54
|
-
# if res.code == '200'
|
55
|
-
# puts %Q(Favorited "#{status.user.screen_name}: #{status.text}")
|
56
|
-
# else
|
57
|
-
# puts "Failed: #{res}"
|
58
|
-
# end
|
59
|
-
# else
|
60
|
-
# puts "#{pat} does not match single status"
|
61
|
-
# end
|
62
|
-
# end
|
63
|
-
end
|
data/lib/plugins/plugin.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
module Termtter::Client
|
4
|
-
|
5
|
-
public_storage[:plugins] = (Dir["#{File.dirname(__FILE__)}/*.rb"] + Dir["#{Termtter::CONF_DIR}/plugins/*.rb"]).map do |f|
|
6
|
-
f.match(%r|([^/]+).rb$|)[1]
|
7
|
-
end
|
8
|
-
|
9
|
-
register_command(
|
10
|
-
:name => :plugin, :aliases => [],
|
11
|
-
:exec_proc => lambda {|arg|
|
12
|
-
begin
|
13
|
-
result = plugin arg.strip
|
14
|
-
rescue LoadError
|
15
|
-
ensure
|
16
|
-
puts "=> #{result.inspect}"
|
17
|
-
end
|
18
|
-
},
|
19
|
-
:completion_proc => lambda {|cmd, args|
|
20
|
-
find_user_candidates args, "#{cmd} %s"
|
21
|
-
unless args.empty?
|
22
|
-
find_plugin_candidates args, "#{cmd} %s"
|
23
|
-
else
|
24
|
-
public_storage[:plugins].sort
|
25
|
-
end
|
26
|
-
},
|
27
|
-
:help => ['plugin FILE', 'Load a plugin']
|
28
|
-
)
|
29
|
-
|
30
|
-
register_command(
|
31
|
-
:name => :plugins, :aliases => [],
|
32
|
-
:exec_proc => lambda {|arg|
|
33
|
-
puts public_storage[:plugins].sort.join("\n")
|
34
|
-
},
|
35
|
-
:help => ['plugins', 'Show list of plugins']
|
36
|
-
)
|
37
|
-
|
38
|
-
def self.find_plugin_candidates(a, b)
|
39
|
-
public_storage[:plugins].
|
40
|
-
grep(/^#{Regexp.quote a}/i).
|
41
|
-
map {|u| b % u }
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
# plugin.rb
|
46
|
-
# a dynamic plugin loader
|
47
|
-
# example
|
48
|
-
# > u <%= not erbed %>
|
49
|
-
# => <%= not erbed %>
|
50
|
-
# > plugin erb
|
51
|
-
# => true
|
52
|
-
# > u <%= 1 + 2 %>
|
53
|
-
# => 3
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
4
|
-
|
5
|
-
describe Termtter::Client, 'when the plugin favorite is loaded' do
|
6
|
-
it 'should add command favorite' do
|
7
|
-
Termtter::Client.should_receive(:register_command).once
|
8
|
-
plugin 'favorite'
|
9
|
-
end
|
10
|
-
end
|
data/spec/plugins/plugin_spec.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
4
|
-
|
5
|
-
module Termtter
|
6
|
-
describe Client, 'when the plugin plugin is loaded' do
|
7
|
-
it 'should add command plugin and plugins' do
|
8
|
-
Termtter::Client.should_receive(:register_command).twice
|
9
|
-
plugin 'plugin'
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should set public_storage[:plugins]' do
|
13
|
-
plugin 'plugin'
|
14
|
-
Client::public_storage[:plugins].should_not be_empty
|
15
|
-
end
|
16
|
-
|
17
|
-
describe 'after the plugin plugin is loaded' do
|
18
|
-
before { plugin 'plugin' }
|
19
|
-
|
20
|
-
it 'should load the given plugin in the command plugin'
|
21
|
-
# hmm... How can I write it...?
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|