jugyo-termtter 0.8.14 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +8 -8
- data/Rakefile +3 -5
- data/lib/{plugin → plugins}/april_fool.rb +0 -0
- data/lib/plugins/bomb.rb +42 -0
- data/lib/{plugin → plugins}/clear.rb +0 -0
- data/lib/{plugin → plugins}/confirm.rb +0 -0
- data/lib/{plugin → plugins}/cool.rb +0 -0
- data/lib/{plugin → plugins}/devel.rb +0 -0
- data/lib/{filter → plugins}/en2ja.rb +1 -1
- data/lib/plugins/english.rb +25 -0
- data/lib/{plugin → plugins}/erb.rb +0 -0
- data/lib/{filter → plugins}/expand-tinyurl.rb +6 -6
- data/lib/plugins/favorite.rb +63 -0
- data/lib/plugins/fib.rb +28 -0
- data/lib/{filter/fib.rb → plugins/fib_filter.rb} +1 -2
- data/lib/{plugin → plugins}/filter.rb +0 -0
- data/lib/{plugin → plugins}/graduatter.rb +1 -2
- data/lib/{plugin → plugins}/grass.rb +2 -2
- data/lib/{plugin → plugins}/group.rb +9 -9
- data/lib/{plugin → plugins}/growl.rb +11 -12
- data/lib/{plugin → plugins}/hatebu.rb +5 -5
- data/lib/{plugin → plugins}/history.rb +13 -13
- data/lib/plugins/ignore.rb +19 -0
- data/lib/plugins/keyword.rb +18 -0
- data/lib/{plugin → plugins}/log.rb +18 -12
- data/lib/{plugin → plugins}/me.rb +1 -2
- data/lib/{plugin → plugins}/modify_arg_hook_sample.rb +0 -0
- data/lib/{plugin → plugins}/msagent.rb +1 -1
- data/lib/plugins/multi_reply.rb +27 -0
- data/lib/{plugin → plugins}/notify-send.rb +1 -1
- data/lib/{plugin → plugins}/otsune.rb +0 -0
- data/lib/plugins/outputz.rb +33 -0
- data/lib/{plugin → plugins}/pause.rb +0 -0
- data/lib/{plugin → plugins}/plugin.rb +0 -0
- data/lib/{plugin → plugins}/post_exec_hook_sample.rb +0 -0
- data/lib/{plugin → plugins}/pre_exec_hook_sample.rb +0 -0
- data/lib/{plugin → plugins}/primes.rb +9 -2
- data/lib/plugins/quicklook.rb +41 -0
- data/lib/{plugin → plugins}/random.rb +0 -0
- data/lib/{plugin → plugins}/reblog.rb +3 -3
- data/lib/{plugin → plugins}/reload.rb +0 -0
- data/lib/{filter → plugins}/reply.rb +0 -0
- data/lib/{filter → plugins}/reverse.rb +1 -1
- data/lib/{plugin → plugins}/say.rb +1 -1
- data/lib/{plugin → plugins}/scrape.rb +4 -4
- data/lib/plugins/screen-notify.rb +13 -0
- data/lib/plugins/screen.rb +24 -0
- data/lib/{plugin → plugins}/shell.rb +0 -0
- data/lib/{plugin → plugins}/sl.rb +4 -4
- data/lib/plugins/spam.rb +13 -0
- data/lib/{plugin → plugins}/standard_plugins.rb +72 -18
- data/lib/plugins/stdout.rb +80 -0
- data/lib/plugins/storage/DB.rb +37 -0
- data/lib/plugins/storage/status.rb +48 -0
- data/lib/plugins/storage/status_mook.rb +30 -0
- data/lib/plugins/storage.rb +47 -0
- data/lib/plugins/system_status.rb +33 -0
- data/lib/{plugin → plugins}/translation.rb +15 -5
- data/lib/{plugin → plugins}/update_editor.rb +6 -6
- data/lib/plugins/uri-open.rb +64 -0
- data/lib/{filter → plugins}/url_addspace.rb +0 -0
- data/lib/{plugin → plugins}/wassr_post.rb +1 -1
- data/lib/{plugin → plugins}/yhara.rb +1 -1
- data/lib/plugins/yhara_filter.rb +8 -0
- data/lib/plugins/yonda.rb +21 -0
- data/lib/termtter/api.rb +28 -2
- data/lib/termtter/client.rb +90 -102
- data/lib/termtter/command.rb +32 -31
- data/lib/termtter/config.rb +64 -0
- data/lib/termtter/connection.rb +9 -7
- data/lib/termtter/hook.rb +11 -2
- data/lib/termtter/optparse.rb +14 -0
- data/lib/termtter/version.rb +1 -1
- data/lib/termtter.rb +19 -22
- data/spec/plugin/english_spec.rb +19 -0
- data/spec/plugin/favorite_spec.rb +10 -0
- data/spec/plugin/fib_spec.rb +1 -2
- data/spec/plugin/pause_spec.rb +8 -0
- data/spec/plugin/plugin_spec.rb +1 -1
- data/spec/plugin/primes_spec.rb +15 -0
- data/spec/plugin/sl_spec.rb +8 -0
- data/spec/plugin/spam_spec.rb +0 -13
- data/spec/plugin/standard_plugins_spec.rb +0 -7
- data/spec/plugin/storage/DB_spec.rb +12 -0
- data/spec/plugin/storage/status_spec.rb +24 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/termtter/client_spec.rb +63 -1
- data/spec/termtter/command_spec.rb +6 -68
- data/spec/termtter/config_spec.rb +111 -0
- data/spec/termtter/hook_spec.rb +69 -0
- data/spec/termtter_spec.rb +22 -34
- metadata +81 -72
- data/lib/filter/english.rb +0 -8
- data/lib/filter/ignore.rb +0 -19
- data/lib/filter/yhara.rb +0 -20
- data/lib/plugin/bomb.rb +0 -29
- data/lib/plugin/english.rb +0 -59
- data/lib/plugin/favorite.rb +0 -75
- data/lib/plugin/fib.rb +0 -8
- data/lib/plugin/follow.rb +0 -60
- data/lib/plugin/keyword.rb +0 -18
- data/lib/plugin/multi_reply.rb +0 -36
- data/lib/plugin/outputz.rb +0 -35
- data/lib/plugin/quicklook.rb +0 -38
- data/lib/plugin/screen.rb +0 -24
- data/lib/plugin/spam.rb +0 -9
- data/lib/plugin/stdout.rb +0 -63
- data/lib/plugin/system_status.rb +0 -33
- data/lib/plugin/uri-open.rb +0 -69
- data/lib/plugin/yonda.rb +0 -20
- data/lib/termtter/status.rb +0 -26
- data/lib/termtter/twitter.rb +0 -188
- data/lib/termtter/user.rb +0 -13
- data/spec/termtter/user_spec.rb +0 -27
- data/test/test_termtter.rb +0 -86
data/lib/termtter/command.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
module Termtter
|
4
|
+
|
4
5
|
class Command
|
6
|
+
|
5
7
|
attr_accessor :name, :aliases, :exec_proc, :completion_proc, :help
|
6
8
|
|
7
9
|
# args
|
@@ -12,43 +14,33 @@ module Termtter
|
|
12
14
|
# help: help text for the command (Optional)
|
13
15
|
def initialize(args)
|
14
16
|
raise ArgumentError, ":name is not given." unless args.has_key?(:name)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
cfg = {
|
18
|
+
:aliases => [],
|
19
|
+
:exec_proc => lambda {|arg| },
|
20
|
+
:comletion_proc => lambda {|command, arg| [] }
|
21
|
+
}.merge(args)
|
22
|
+
|
23
|
+
set cfg
|
20
24
|
end
|
21
25
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
26
|
+
def set(cfg)
|
27
|
+
@name = cfg[:name].to_sym
|
28
|
+
@aliases = cfg[:aliases].map {|e| e.to_sym }
|
29
|
+
@exec_proc = cfg[:exec_proc]
|
30
|
+
@completion_proc = cfg[:completion_proc]
|
31
|
+
@help = cfg[:help]
|
29
32
|
end
|
30
33
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
unless result.nil?
|
37
|
-
return result
|
34
|
+
def complement(input)
|
35
|
+
command_str, command_arg = match?(input)
|
36
|
+
if command_arg
|
37
|
+
if completion_proc
|
38
|
+
[completion_proc.call(command_str, command_arg || '')].flatten.compact
|
38
39
|
else
|
39
|
-
|
40
|
+
[]
|
40
41
|
end
|
41
42
|
else
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# return array like [command, arg]
|
47
|
-
def match?(input)
|
48
|
-
if pattern =~ input
|
49
|
-
[$2 || $3, $4] # $2 or $3 => command, $4 => argument
|
50
|
-
else
|
51
|
-
nil
|
43
|
+
[name.to_s, aliases.to_s].grep(/^#{Regexp.quote(input)}/)
|
52
44
|
end
|
53
45
|
end
|
54
46
|
|
@@ -64,8 +56,17 @@ module Termtter
|
|
64
56
|
exec_proc.call(arg)
|
65
57
|
end
|
66
58
|
|
59
|
+
# return array like [command, arg]
|
60
|
+
def match?(input)
|
61
|
+
if pattern =~ input
|
62
|
+
[$2 || $3, $4] # $2 or $3 => command, $4 => argument
|
63
|
+
else
|
64
|
+
[nil, nil]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
67
68
|
def pattern
|
68
|
-
commands_regex = commands.map {|
|
69
|
+
commands_regex = commands.map {|name| Regexp.quote(name.to_s) }.join('|')
|
69
70
|
/^((#{commands_regex})|(#{commands_regex})\s+(.*?))\s*$/
|
70
71
|
end
|
71
72
|
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
module Termtter
|
4
|
+
class Config
|
5
|
+
def initialize
|
6
|
+
@store = Hash.new(:undefined)
|
7
|
+
end
|
8
|
+
|
9
|
+
def inspect
|
10
|
+
@store.inspect
|
11
|
+
end
|
12
|
+
|
13
|
+
# set_default :: (Symbol | String) -> a -> IO ()
|
14
|
+
def set_default(name, value)
|
15
|
+
match_p, init, last = *name.to_s.match(/^(.+)\.([^\.]+)$/)
|
16
|
+
if match_p
|
17
|
+
tmp = eval(init)
|
18
|
+
if tmp.__refer__(last.to_sym).empty?
|
19
|
+
tmp.__assign__(last.to_sym, value)
|
20
|
+
end
|
21
|
+
else
|
22
|
+
__assign__(name.to_sym, value) if __refer__(name.to_sym).empty?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# empty? :: Boolean
|
27
|
+
def empty?
|
28
|
+
@store.empty?
|
29
|
+
end
|
30
|
+
|
31
|
+
def method_missing(name, *args)
|
32
|
+
case name.to_s
|
33
|
+
when /(.*)=$/
|
34
|
+
__assign__($1.to_sym, args.first)
|
35
|
+
else
|
36
|
+
__refer__(name.to_sym)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# __assign__ :: Symbol -> a -> IO ()
|
41
|
+
def __assign__(name, value)
|
42
|
+
@store[name] = value
|
43
|
+
end
|
44
|
+
|
45
|
+
# __refer__ :: Symbol -> IO a
|
46
|
+
def __refer__(name)
|
47
|
+
@store[name] == :undefined ? @store[name] = Termtter::Config.new : @store[name]
|
48
|
+
end
|
49
|
+
|
50
|
+
__instance = self.new
|
51
|
+
(class << self; self end).
|
52
|
+
__send__(:define_method, :instance) { __instance }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def config
|
57
|
+
Termtter::Config.instance
|
58
|
+
end
|
59
|
+
|
60
|
+
def configatron
|
61
|
+
# remove this method until Termtter-1.2.0
|
62
|
+
warn "configatron method will be removed. Use config instead. (#{caller.first})"
|
63
|
+
Termtter::Config.instance
|
64
|
+
end
|
data/lib/termtter/connection.rb
CHANGED
@@ -5,16 +5,18 @@ module Termtter
|
|
5
5
|
attr_reader :protocol, :port, :proxy_uri
|
6
6
|
|
7
7
|
def initialize
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
unless config.proxy.empty?
|
9
|
+
@proxy_host = config.proxy.host
|
10
|
+
@proxy_port = config.proxy.port
|
11
|
+
@proxy_user = config.proxy.user_name
|
12
|
+
@proxy_password = config.proxy.password
|
13
|
+
@proxy_uri = nil
|
14
|
+
@enable_ssl = config.enable_ssl
|
15
|
+
end
|
14
16
|
@protocol = "http"
|
15
17
|
@port = 80
|
16
18
|
|
17
|
-
|
19
|
+
if @proxy_host
|
18
20
|
@http_class = Net::HTTP::Proxy(@proxy_host, @proxy_port,
|
19
21
|
@proxy_user, @proxy_password)
|
20
22
|
@proxy_uri = "http://" + @proxy_host + ":" + @proxy_port + "/"
|
data/lib/termtter/hook.rb
CHANGED
@@ -7,12 +7,21 @@ module Termtter
|
|
7
7
|
def initialize(args)
|
8
8
|
raise ArgumentError, ":name is not given." unless args.has_key?(:name)
|
9
9
|
@name = args[:name].to_sym
|
10
|
-
@points = args[:points] ? args[:points].map {|i| i
|
10
|
+
@points = args[:points] ? args[:points].map {|i| i } : []
|
11
11
|
@exec_proc = args[:exec_proc] || lambda {}
|
12
12
|
end
|
13
13
|
|
14
14
|
def match?(point)
|
15
|
-
points.
|
15
|
+
!points.select{|pt|
|
16
|
+
case pt
|
17
|
+
when String, Symbol
|
18
|
+
pt.to_s == point.to_s
|
19
|
+
when Regexp
|
20
|
+
(pt =~ point.to_s) ? true : false
|
21
|
+
else
|
22
|
+
false
|
23
|
+
end
|
24
|
+
}.empty?
|
16
25
|
end
|
17
26
|
end
|
18
27
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
OptionParser.new { |opt|
|
2
|
+
opt.on('-f', '--file config_file', 'Set path to configfile') do |val|
|
3
|
+
config.system.__assign__(:conf_file, val)
|
4
|
+
end
|
5
|
+
opt.on('-t', '--termtter-directory directory', 'Set termtter directory') do |val|
|
6
|
+
config.system.__assign__(:conf_dir, val)
|
7
|
+
end
|
8
|
+
opt.on('-d', '--devel', 'Start in developer mode') do |flg|
|
9
|
+
config.system.__assign__(:devel, true) if flg
|
10
|
+
end
|
11
|
+
|
12
|
+
Version = Termtter::VERSION
|
13
|
+
opt.parse!(ARGV)
|
14
|
+
}
|
data/lib/termtter/version.rb
CHANGED
data/lib/termtter.rb
CHANGED
@@ -12,12 +12,12 @@ require 'open-uri'
|
|
12
12
|
require 'cgi'
|
13
13
|
require 'readline'
|
14
14
|
require 'enumerator'
|
15
|
-
require '
|
15
|
+
require 'optparse'
|
16
16
|
|
17
|
-
require 'termtter/
|
17
|
+
require 'termtter/config'
|
18
|
+
require 'termtter/version'
|
19
|
+
require 'termtter/optparse'
|
18
20
|
require 'termtter/connection'
|
19
|
-
require 'termtter/status'
|
20
|
-
require 'termtter/user'
|
21
21
|
require 'termtter/command'
|
22
22
|
require 'termtter/hook'
|
23
23
|
require 'termtter/task'
|
@@ -25,12 +25,15 @@ require 'termtter/task_manager'
|
|
25
25
|
require 'termtter/client'
|
26
26
|
require 'termtter/api'
|
27
27
|
require 'termtter/system_extensions'
|
28
|
-
require 'termtter/version'
|
29
28
|
|
30
29
|
module Termtter
|
31
30
|
APP_NAME = 'termtter'
|
32
|
-
|
33
|
-
|
31
|
+
|
32
|
+
config.system.set_default :conf_dir, File.expand_path('~/.termtter')
|
33
|
+
CONF_DIR = config.system.conf_dir
|
34
|
+
|
35
|
+
config.system.set_default :conf_file, CONF_DIR + '/config'
|
36
|
+
CONF_FILE = config.system.conf_file
|
34
37
|
end
|
35
38
|
|
36
39
|
if RUBY_VERSION < '1.8.7'
|
@@ -39,26 +42,20 @@ if RUBY_VERSION < '1.8.7'
|
|
39
42
|
end
|
40
43
|
end
|
41
44
|
|
42
|
-
def plugin(
|
45
|
+
def plugin(name, init = {})
|
43
46
|
unless init.empty?
|
44
47
|
init.each do |key, value|
|
45
|
-
|
48
|
+
config.plugins.__refer__(name.to_sym).__assign__(key.to_sym, value)
|
46
49
|
end
|
47
50
|
end
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
rescue => e
|
51
|
+
# FIXME: below path should be replaced by optparsed path
|
52
|
+
if File.exist?(path = File.expand_path("~/.termtter/plugins/#{name}"))
|
53
|
+
require path
|
54
|
+
else
|
55
|
+
require "plugins/#{name}"
|
56
|
+
end
|
57
|
+
rescue LoadError => e
|
56
58
|
Termtter::Client.handle_error(e)
|
57
|
-
else
|
58
|
-
Termtter::Client.public_storage[:filters] ||= []
|
59
|
-
Termtter::Client.public_storage[:filters] << s
|
60
|
-
true
|
61
59
|
end
|
62
60
|
|
63
61
|
$:.unshift(Termtter::CONF_DIR) # still does not use
|
64
|
-
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# vim: set fenc=utf-8
|
3
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
4
|
+
|
5
|
+
describe Termtter do
|
6
|
+
it 'english? method' do
|
7
|
+
Termtter::Client.should_receive(:add_filter)
|
8
|
+
plugin 'english'
|
9
|
+
Termtter::English.english?('This is a pen.').should be_true
|
10
|
+
Termtter::English.english?('これはペンです.').should be_false
|
11
|
+
Termtter::English.english?('これはpenです.').should be_false
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'apply filter english only update_friends_timeline'
|
15
|
+
# NOTE: when below code is evaluated,
|
16
|
+
# plugin 'english', :only => [:update_friends_timeline]
|
17
|
+
# in update_friends_timeline there are English posts only but in replies there are both Japanese posts and English posts.
|
18
|
+
# It's too difficult for me to write that spec, so this spec is pending now. Please write this spec, hey, you, a cool hacker!
|
19
|
+
end
|
@@ -0,0 +1,10 @@
|
|
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/plugin/fib_spec.rb
CHANGED
@@ -4,8 +4,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
|
|
4
4
|
|
5
5
|
describe Termtter::Client, 'when the plugin fib is loaded' do
|
6
6
|
it 'should add command fib' do
|
7
|
-
Termtter::Client.should_receive(:
|
8
|
-
Termtter::Client.should_receive(:add_command).with(/^fibyou\s(\w+)\s(\d+)/)
|
7
|
+
Termtter::Client.should_receive(:register_command).twice
|
9
8
|
plugin 'fib'
|
10
9
|
end
|
11
10
|
|
data/spec/plugin/plugin_spec.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
4
|
+
|
5
|
+
describe Termtter::Client, 'when the plugin primes is loaded' do
|
6
|
+
it 'should add command primes' do
|
7
|
+
Termtter::Client.should_receive(:register_command).once
|
8
|
+
plugin 'primes'
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should define primes method' do
|
12
|
+
plugin 'primes'
|
13
|
+
(0..10).map {|i| primes i }.should == ["", "", "", "2, 3", "2, 3", "2, 3, 5", "2, 3, 5", "2, 3, 5, 7", "2, 3, 5, 7", "2, 3, 5, 7", "2, 3, 5, 7"]
|
14
|
+
end
|
15
|
+
end
|
data/spec/plugin/spam_spec.rb
CHANGED
@@ -2,16 +2,3 @@
|
|
2
2
|
|
3
3
|
require File.dirname(__FILE__) + '/../spec_helper'
|
4
4
|
|
5
|
-
describe Termtter::Client, 'when the plugin spam is loaded' do
|
6
|
-
it 'should add command spam and post immediately' do
|
7
|
-
connection = mock('connection', :null_object => true)
|
8
|
-
t = Termtter::Twitter.new('a', 'b', connection)
|
9
|
-
Termtter::Twitter.should_receive(:new).and_return(t)
|
10
|
-
t.should_receive(:update_status).with('*super spam time*')
|
11
|
-
|
12
|
-
Termtter::Client.should_receive(:clear_commands)
|
13
|
-
Termtter::Client.should_receive(:add_command).with(/.+/)
|
14
|
-
plugin 'spam'
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
@@ -19,13 +19,6 @@ module Termtter
|
|
19
19
|
command.aliases.should == aliases
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
23
|
-
it 'should return candidates when call find_status_id_candidates' do
|
24
|
-
Client.public_storage[:status_ids] = %w[1 2 22 3 4 5]
|
25
|
-
Client.find_status_id_candidates("1", "%s").should == ["1"]
|
26
|
-
Client.find_status_id_candidates("2", "%s").should == ["2", "22"]
|
27
|
-
#TODO: more spec for like "jugyo:1113830"
|
28
|
-
end
|
29
22
|
end
|
30
23
|
end
|
31
24
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
4
|
+
require File.dirname(__FILE__) + '/../../../lib/plugins/storage/status'
|
5
|
+
|
6
|
+
module Termtter::Storage
|
7
|
+
describe Status do
|
8
|
+
before do
|
9
|
+
@status = Status.new
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe Status do
|
14
|
+
it 'self.insert should not return false' do
|
15
|
+
Status.insert(
|
16
|
+
:post_id => 1,
|
17
|
+
:created_at => 12345,
|
18
|
+
:in_reply_to_status_id => -1,
|
19
|
+
:in_reply_to_user_id => -1,
|
20
|
+
:post_text => 'bomb',
|
21
|
+
:user_id => 1).should_not be_false
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -142,6 +142,7 @@ module Termtter
|
|
142
142
|
)
|
143
143
|
|
144
144
|
hook_called.should == false
|
145
|
+
Client.should_receive(:puts)
|
145
146
|
Client.exit
|
146
147
|
hook_called.should == true
|
147
148
|
end
|
@@ -154,12 +155,13 @@ module Termtter
|
|
154
155
|
|
155
156
|
hook1_called.should == false
|
156
157
|
hook2_called.should == false
|
158
|
+
Client.should_receive(:puts)
|
157
159
|
Client.exit
|
158
160
|
hook1_called.should == true
|
159
161
|
hook2_called.should == true
|
160
162
|
end
|
161
163
|
|
162
|
-
it 'should able to override hooks' do
|
164
|
+
it 'should be able to override hooks' do
|
163
165
|
hook1_called = false
|
164
166
|
hook2_called = false
|
165
167
|
Client.register_hook(:name => :hook, :points => [:exit], :exec_proc => lambda {hook1_called = true})
|
@@ -167,9 +169,69 @@ module Termtter
|
|
167
169
|
|
168
170
|
hook1_called.should == false
|
169
171
|
hook2_called.should == false
|
172
|
+
Client.should_receive(:puts)
|
170
173
|
Client.exit
|
171
174
|
hook1_called.should == false
|
172
175
|
hook2_called.should == true
|
173
176
|
end
|
177
|
+
|
178
|
+
it 'run' do
|
179
|
+
Client.should_receive(:puts)
|
180
|
+
Client.should_receive(:load_default_plugins)
|
181
|
+
Client.should_receive(:load_config)
|
182
|
+
Termtter::API.should_receive(:setup)
|
183
|
+
Client.should_receive(:pre_config_load)
|
184
|
+
Client.should_receive(:call_hooks)
|
185
|
+
Client.should_receive(:call_new_hooks)
|
186
|
+
Client.should_receive(:setup_update_timeline_task)
|
187
|
+
Client.should_receive(:call_commands)
|
188
|
+
Client.should_receive(:start_input_thread)
|
189
|
+
Client.run
|
190
|
+
end
|
191
|
+
|
192
|
+
it 'load_config'
|
193
|
+
|
194
|
+
it 'should do nothing when ~/.termtter is directory' do
|
195
|
+
File.should_receive(:ftype).and_return('directory')
|
196
|
+
Client.should_not_receive(:move_legacy_config_file)
|
197
|
+
Client.legacy_config_support
|
198
|
+
end
|
199
|
+
|
200
|
+
it 'should do "move_legacy_config_file" when ~/.termtter is file' do
|
201
|
+
File.should_receive(:ftype).and_return('file')
|
202
|
+
Client.should_receive(:move_legacy_config_file)
|
203
|
+
Client.legacy_config_support
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'should move legacy config file' do
|
207
|
+
FileUtils.should_receive(:mv).twice
|
208
|
+
Dir.should_receive(:mkdir)
|
209
|
+
Client.move_legacy_config_file
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'should handle error' do
|
213
|
+
$stderr, old = StringIO.new, $stderr
|
214
|
+
Client.handle_error StandardError.new('error')
|
215
|
+
$stderr.string.should == "[ERROR] Something wrong: error\n"
|
216
|
+
$stderr = old
|
217
|
+
end
|
218
|
+
|
219
|
+
it 'should handle Rubytte::APIError' do
|
220
|
+
$stderr, old = StringIO.new, $stderr
|
221
|
+
class Rubytter::APIError < StandardError; end
|
222
|
+
[
|
223
|
+
['401', "[ERROR] Unauthorized: maybe you tried to show protected user status\n"],
|
224
|
+
['403', "[ERROR] Access denied: maybe that user is protected\n"],
|
225
|
+
['404', "[ERROR] Not found: maybe there is no such user\n"],
|
226
|
+
].each do |code, message|
|
227
|
+
res = mock('res', :code => code)
|
228
|
+
excep = Rubytter::APIError.new('error')
|
229
|
+
excep.should_receive(:response).and_return(res)
|
230
|
+
Client.handle_error excep
|
231
|
+
$stderr.string.should == message
|
232
|
+
$stderr.string = ''
|
233
|
+
end
|
234
|
+
$stderr = old
|
235
|
+
end
|
174
236
|
end
|
175
237
|
end
|