saber 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.rspec +1 -0
- data/Gemfile +8 -5
- data/Gemfile.lock +25 -15
- data/README.md +29 -14
- data/bin/saber +0 -1
- data/bin/saber-drb_add +6 -0
- data/extconf.rb +7 -0
- data/lib/saber.rb +11 -2
- data/lib/saber/cli.rb +28 -8
- data/lib/saber/client.rb +51 -0
- data/lib/saber/downloader.rb +47 -0
- data/lib/saber/rc.rb +29 -1
- data/lib/saber/server.rb +69 -0
- data/lib/saber/task.rb +11 -11
- data/lib/saber/ui.rb +5 -0
- data/lib/saber/version.rb +1 -1
- data/saber.gemspec +12 -5
- data/spec/data/bt/lost.mkv +0 -0
- data/spec/data/bt/lost/01.lost.mkv +0 -0
- data/spec/data/bt/lost/02.lost.mkv +0 -0
- data/spec/data/bt/prison.break.mkv +0 -0
- data/spec/data/bt/prison.break/01.prison.break.mkv +0 -0
- data/spec/data/bt/prison.break/02.prison.break.mkv +0 -0
- data/spec/data/bt/terra.nova.mkv +0 -0
- data/spec/data/bt/terra.nova/01.terra.nova.mkv +0 -0
- data/spec/data/bt/terra.nova/02.terra.nova.mkv +0 -0
- data/spec/saber/client_spec.rb +7 -0
- data/spec/saber/downloader_spec.rb +17 -0
- data/spec/saber/server_spec.rb +18 -0
- data/spec/spec_helper.rb +60 -0
- metadata +103 -5
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
source :rubygems
|
2
2
|
|
3
|
-
gem "
|
4
|
-
gem "
|
5
|
-
gem "
|
6
|
-
gem "
|
3
|
+
gem "tagen", "~>1.1.5"
|
4
|
+
gem "optimism", "~>3.1.2"
|
5
|
+
gem "pa", "~>1.2.2"
|
6
|
+
gem "retort", "~>0.0.6"
|
7
|
+
gem "thor", "~>0.14.6"
|
8
|
+
gem "net-ssh", "~>2.3.0", :require => "net/ssh"
|
9
|
+
gem "xmpp4r", "~>0.5"
|
7
10
|
|
8
11
|
group :development do
|
9
12
|
gem "rspec"
|
10
13
|
gem "watchr"
|
11
|
-
|
14
|
+
gem "rag"
|
12
15
|
end
|
13
16
|
|
14
17
|
# gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,19 +1,21 @@
|
|
1
|
-
PATH
|
2
|
-
remote: /home/guten/dev/one/optimism
|
3
|
-
specs:
|
4
|
-
optimism (3.0.4)
|
5
|
-
hike (~> 1.2.0)
|
6
|
-
|
7
|
-
PATH
|
8
|
-
remote: /home/guten/dev/one/pa
|
9
|
-
specs:
|
10
|
-
pa (1.1.4)
|
11
|
-
|
12
1
|
GEM
|
13
2
|
remote: http://rubygems.org/
|
14
3
|
specs:
|
4
|
+
activesupport (3.1.3)
|
5
|
+
multi_json (~> 1.0)
|
15
6
|
diff-lcs (1.1.3)
|
16
7
|
hike (1.2.1)
|
8
|
+
i18n (0.6.0)
|
9
|
+
multi_json (1.0.4)
|
10
|
+
net-ssh (2.3.0)
|
11
|
+
optimism (3.1.2)
|
12
|
+
hike (~> 1.2.0)
|
13
|
+
pa (1.2.2)
|
14
|
+
rag (1.2.1)
|
15
|
+
optimism (~> 3.1.0)
|
16
|
+
pa (~> 1.2.0)
|
17
|
+
tagen (~> 1.1.0)
|
18
|
+
thor
|
17
19
|
retort (0.0.6)
|
18
20
|
rspec (2.8.0)
|
19
21
|
rspec-core (~> 2.8.0)
|
@@ -23,16 +25,24 @@ GEM
|
|
23
25
|
rspec-expectations (2.8.0)
|
24
26
|
diff-lcs (~> 1.1.2)
|
25
27
|
rspec-mocks (2.8.0)
|
28
|
+
tagen (1.1.5)
|
29
|
+
activesupport (~> 3.1.0)
|
30
|
+
i18n
|
26
31
|
thor (0.14.6)
|
27
32
|
watchr (0.7)
|
33
|
+
xmpp4r (0.5)
|
28
34
|
|
29
35
|
PLATFORMS
|
30
36
|
ruby
|
31
37
|
|
32
38
|
DEPENDENCIES
|
33
|
-
|
34
|
-
|
35
|
-
|
39
|
+
net-ssh (~> 2.3.0)
|
40
|
+
optimism (~> 3.1.2)
|
41
|
+
pa (~> 1.2.2)
|
42
|
+
rag
|
43
|
+
retort (~> 0.0.6)
|
36
44
|
rspec
|
37
|
-
|
45
|
+
tagen (~> 1.1.5)
|
46
|
+
thor (~> 0.14.6)
|
38
47
|
watchr
|
48
|
+
xmpp4r (~> 0.5)
|
data/README.md
CHANGED
@@ -1,30 +1,45 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
Saber, a complete solution for PT users.
|
2
|
+
========================================
|
3
3
|
|
4
4
|
| Homepage: | https://github.com/GutenYe/saber |
|
5
|
-
|
6
|
-
| Author: | Guten Ye
|
7
|
-
| License: | MIT-LICENSE
|
8
|
-
| Documentation: | http://rubydoc.info/gems/saber/frames
|
5
|
+
|----------------|-----------------------------------------|
|
6
|
+
| Author: | Guten Ye |
|
7
|
+
| License: | MIT-LICENSE |
|
8
|
+
| Documentation: | http://rubydoc.info/gems/saber/frames |
|
9
9
|
| Issue Tracker: | https://github.com/GutenYe/saber/issues |
|
10
10
|
|
11
|
-
|
12
|
-
--------
|
11
|
+
the saber.
|
13
12
|
|
14
|
-
|
13
|
+
### Is It Good?
|
15
14
|
|
16
|
-
|
17
|
-
|
15
|
+
Yes.
|
16
|
+
|
17
|
+
### Is It "Production Ready™"?
|
18
18
|
|
19
|
-
|
19
|
+
No.
|
20
20
|
|
21
21
|
Usage
|
22
22
|
-----
|
23
23
|
|
24
|
-
|
24
|
+
Task: manually download file from server.
|
25
|
+
|
26
|
+
# start aria2 user daemon
|
27
|
+
$ ~/etc/rc.d/aria2 start
|
28
|
+
$ saber download "Prison Break"
|
29
|
+
# aria2 will begin download.
|
30
|
+
|
31
|
+
Task: clean up undownload files, all files remains in disk, but don't in rtorrent client.
|
32
|
+
|
33
|
+
$ saber clean
|
25
34
|
|
26
35
|
Install
|
27
|
-
|
36
|
+
--------
|
37
|
+
|
38
|
+
server side
|
39
|
+
|
40
|
+
begin ssh
|
41
|
+
|
42
|
+
client side
|
28
43
|
|
29
44
|
gem install saber
|
30
45
|
|
data/bin/saber
CHANGED
data/bin/saber-drb_add
ADDED
data/extconf.rb
ADDED
data/lib/saber.rb
CHANGED
@@ -5,15 +5,24 @@ ENV["BUNDLE_GEMFILE"] = File.expand_path("../../Gemfile", __FILE__)
|
|
5
5
|
require "bundler/setup"
|
6
6
|
Bundler.require
|
7
7
|
|
8
|
+
Retort::Service.configure do |c|
|
9
|
+
c.url = "http://localhost/RPC2"
|
10
|
+
end
|
11
|
+
|
8
12
|
module Saber
|
9
13
|
autoload :VERSION, "saber/version"
|
14
|
+
autoload :CLI, "saber/cli"
|
10
15
|
autoload :UI, "saber/ui"
|
11
16
|
autoload :Task, "saber/task"
|
12
|
-
autoload :
|
17
|
+
autoload :Downloader, "saber/downloader"
|
18
|
+
autoload :Server, "saber/server"
|
19
|
+
autoload :Client, "saber/client"
|
20
|
+
autoload :DRbServer, "saber/server"
|
21
|
+
autoload :DRbClient, "saber/client"
|
13
22
|
|
14
23
|
Error = Class.new Exception
|
15
24
|
FatalError = Class.new Exception
|
16
|
-
Rc = Optimism.require "saber/rc", "
|
25
|
+
Rc = Optimism.require "saber/rc", "/etc/saber"
|
17
26
|
|
18
27
|
class << self
|
19
28
|
attr_accessor :ui
|
data/lib/saber/cli.rb
CHANGED
@@ -1,27 +1,47 @@
|
|
1
|
+
require "xmlrpc/client"
|
2
|
+
|
1
3
|
module Saber
|
2
4
|
class CLI < Thor
|
3
5
|
include Thor::Actions
|
4
6
|
|
5
|
-
# check_unknown_options!
|
6
|
-
|
7
|
-
# default_task :install
|
8
7
|
class_option "no-color", :type => :boolean, :banner => "Disable colorization in output"
|
9
8
|
class_option "verbose", :aliases => "-V", :type => :boolean, :banner => "Enable verbose output mode"
|
10
9
|
|
11
10
|
def initialize(*)
|
12
11
|
super
|
13
12
|
the_shell = (options["no-color"] ? Thor::Shell::Basic.new : shell)
|
14
|
-
|
15
|
-
|
13
|
+
Saber.ui = UI::Shell.new(the_shell)
|
14
|
+
Saber.ui.debug! if options["verbose"]
|
16
15
|
end
|
17
16
|
|
18
17
|
desc "clean", "clean up files doesn't in rtorrent client"
|
19
18
|
def clean
|
20
|
-
Task.
|
19
|
+
Task.clean
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "add <file ..>", "begin download file or directory via aria2 daemon."
|
23
|
+
def add(*names)
|
24
|
+
Downloader.new.add_names(*names)
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "server", "start saber-server daemon"
|
28
|
+
def server
|
29
|
+
Server.start
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "client", "start saber-client daemon"
|
33
|
+
def client
|
34
|
+
Client.start
|
21
35
|
end
|
22
36
|
|
23
|
-
|
24
|
-
|
37
|
+
desc "drb_add <ids> [label]", "add a file to saber-server daemon via drb"
|
38
|
+
# drb_add "id1,id2", "foo"
|
39
|
+
def drb_add(ids_str, label=Rc.label)
|
40
|
+
return if label != Rc.label
|
25
41
|
|
42
|
+
names = ids_str.split(",").map{|v| Retort::Torrent.action("name", v)}
|
43
|
+
|
44
|
+
DRbClient.new.add(*names)
|
45
|
+
end
|
26
46
|
end
|
27
47
|
end
|
data/lib/saber/client.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require "xmpp4r/client"
|
2
|
+
require "drb"
|
3
|
+
|
4
|
+
module Saber
|
5
|
+
class Client
|
6
|
+
class << self
|
7
|
+
def start
|
8
|
+
Client.new.start
|
9
|
+
sleep
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_reader :client, :downloader
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@client = Jabber::Client.new(Jabber::JID.new(Rc.client.xmpp.jid))
|
17
|
+
@downloader = Downloader.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def start
|
21
|
+
client.connect Rc.client.xmpp.host, Rc.client.xmpp.port
|
22
|
+
client.auth Rc.client.xmpp.password
|
23
|
+
|
24
|
+
client.add_message_callback { |msg|
|
25
|
+
pd msg.from.bare
|
26
|
+
if msg.from.bare == Rc.server.xmpp.jid
|
27
|
+
files = msg.body.split("\n")
|
28
|
+
Saber.ui.say "::recv files::\n #{files.join("\n")}\n\n"
|
29
|
+
#downloader.add *files
|
30
|
+
end
|
31
|
+
}
|
32
|
+
|
33
|
+
client.send Jabber::Presence.new
|
34
|
+
Saber.ui.say ">> Connected to xmpp with #{Rc.client.xmpp.jid}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class DRbClient
|
39
|
+
attr_reader :server
|
40
|
+
|
41
|
+
def initialize
|
42
|
+
DRb.start_service
|
43
|
+
@server = DRbObject.new_with_uri(Rc.drb_uri)
|
44
|
+
Saber.ui.debug "DRbClient connected to #{Rc.drb_uri}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def add(*names)
|
48
|
+
server.add(*names)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "xmlrpc/client"
|
2
|
+
|
3
|
+
module Saber
|
4
|
+
class Downloader
|
5
|
+
def initialize
|
6
|
+
@aria2 = XMLRPC::Client.new2(Rc.aria2.rpc)
|
7
|
+
end
|
8
|
+
|
9
|
+
def aria2_add(uris, o={}, &blk)
|
10
|
+
@aria2.call("aria2.addUri", uris, o, &blk)
|
11
|
+
end
|
12
|
+
|
13
|
+
def add(*files)
|
14
|
+
files.each { |file|
|
15
|
+
uri = "#{Rc.server.ftp}/#{file}"
|
16
|
+
gid = aria2_add([uri], :dir => Pa.dir2("#{Rc.p.download}/#{file}"))
|
17
|
+
Saber.ui.say "DOWNLOAD #{gid}:: #{uri}"
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_names(*names)
|
22
|
+
files = retrive_files(*names)
|
23
|
+
add(*files)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def retrive_files(*names)
|
29
|
+
files = []
|
30
|
+
Net::SSH.start(Rc.server.host, Rc.server.user) do |s|
|
31
|
+
name = "'#{names.join("' '")}'"
|
32
|
+
cmd = "cd #{Rc.server.download.p} && find #{name} -type f"
|
33
|
+
|
34
|
+
rst = s.exec!(cmd)
|
35
|
+
if rst =~ /^find: `|^cd:cd:/
|
36
|
+
raise Error, rst
|
37
|
+
elsif rst.nil?
|
38
|
+
raise Error, "remote `#{name}' is an empty directory."
|
39
|
+
end
|
40
|
+
|
41
|
+
files = rst.split("\n")
|
42
|
+
end
|
43
|
+
|
44
|
+
files
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/saber/rc.rb
CHANGED
@@ -1,3 +1,31 @@
|
|
1
1
|
scgi_server = "http://localhost/RPC2"
|
2
2
|
|
3
|
-
|
3
|
+
p:
|
4
|
+
download = Pa("~/download") # local download directory.
|
5
|
+
|
6
|
+
aria2:
|
7
|
+
rpc = "http://localhost:6800/rpc"
|
8
|
+
|
9
|
+
label = "saber" # default auto-download label.
|
10
|
+
port = 3014
|
11
|
+
token = "641a16655dad688ab681c0279a4369b5"
|
12
|
+
drb_uri = "druby://localhost:3015"
|
13
|
+
|
14
|
+
server:
|
15
|
+
download = Pa("/home/foo/download") # remote download directory.
|
16
|
+
ftp = "ftp://seedbox/download" # download from "#{ftp}/<file>"
|
17
|
+
host = "seedbox"
|
18
|
+
user = "foo"
|
19
|
+
|
20
|
+
xmpp:
|
21
|
+
jid = "foo@jabber.org"
|
22
|
+
password = "y"
|
23
|
+
host = nil
|
24
|
+
port = nil
|
25
|
+
|
26
|
+
client:
|
27
|
+
xmpp:
|
28
|
+
jid = "bar@jabber.org"
|
29
|
+
password = "y"
|
30
|
+
host = nil
|
31
|
+
port = nil
|
data/lib/saber/server.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
require "xmpp4r/client"
|
2
|
+
require "drb"
|
3
|
+
|
4
|
+
module Saber
|
5
|
+
class Server
|
6
|
+
def self.start
|
7
|
+
# register on_finished event.
|
8
|
+
Retort::Service.call("system.method.set_key", "event.download.closed", "saber-download", "execute= /usr/bin/saber-drb_add, $d.get_hash=, $d.get_custom1=")
|
9
|
+
|
10
|
+
s = Server.new
|
11
|
+
s.start
|
12
|
+
DRbServer.start(s)
|
13
|
+
DRb.thread.join
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader :client
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@client = Jabber::Client.new(Jabber::JID.new(Rc.server.xmpp.jid))
|
20
|
+
end
|
21
|
+
|
22
|
+
def start
|
23
|
+
client.connect Rc.server.xmpp.host, Rc.server.xmpp.port
|
24
|
+
client.auth Rc.server.xmpp.password
|
25
|
+
client.send Jabber::Presence.new
|
26
|
+
Saber.ui.say ">> Connected to xmpp with #{Rc.server.xmpp.jid}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def send(files)
|
30
|
+
Saber.ui.say %~::send::\n #{files.join("\n")}\n\n~
|
31
|
+
client.send Jabber::Message.new(Rc.client.xmpp.jid, files.join("\n"))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class DRbServer
|
36
|
+
class << self
|
37
|
+
def start(saber_server)
|
38
|
+
DRbServer.new(saber_server).start
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
attr_reader :saber_server
|
43
|
+
|
44
|
+
# @params [Server] server
|
45
|
+
def initialize(saber_server)
|
46
|
+
@saber_server = saber_server
|
47
|
+
end
|
48
|
+
|
49
|
+
def start
|
50
|
+
DRb.start_service Rc.drb_uri, self
|
51
|
+
Saber.ui.say ">> DRbSever listening on #{Rc.drb_uri}"
|
52
|
+
end
|
53
|
+
|
54
|
+
# drb. add a complete torrent.
|
55
|
+
def add(*names)
|
56
|
+
Saber.ui.debug "::DRbServer add:: #{names.inspect}"
|
57
|
+
files = build_files(*names)
|
58
|
+
|
59
|
+
saber_server.send(files)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# ["filea", "foo/filea", "foo/fileb"]
|
65
|
+
def build_files(*names)
|
66
|
+
Pa.ls2_r(*names, :base_dir => Rc.server.download, :file => true, :include => true) { |path| not Pa.directory?(path) }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/saber/task.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
module Saber
|
2
2
|
class Task
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
class << self
|
4
|
+
def clean
|
5
|
+
Retort::Service.configure do |c|
|
6
|
+
c.url = Rc.scgi_server
|
7
|
+
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
bt_files = Retort::Torrent.all.map{|t| Retort::Torrent.action("name", t.info_hash) }.map{|n| Rc.download_dir.join2(n)}
|
9
|
+
disk_files = Rc.p.download.ls2(:absolute => true)
|
10
|
+
bt_files = Retort::Torrent.all.map{|t| Retort::Torrent.action("name", t.info_hash) }.map{|n| Rc.p.download.join2(n)}
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
(disk_files - bt_files).each { |file|
|
13
|
+
Pa.rm_r file, :verbose => true
|
14
|
+
}
|
15
|
+
end
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/saber/ui.rb
CHANGED
data/lib/saber/version.rb
CHANGED
data/saber.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
$: << "
|
2
|
-
require "
|
1
|
+
$: << "lib"
|
2
|
+
require "saber/version"
|
3
3
|
|
4
|
-
Gem::Specification.new do |s|
|
4
|
+
spec = Gem::Specification.new do |s|
|
5
5
|
s.name = "saber"
|
6
6
|
s.version = Saber::VERSION
|
7
7
|
s.summary = "the saber"
|
@@ -15,7 +15,14 @@ the saber
|
|
15
15
|
s.rubyforge_project = "xx"
|
16
16
|
|
17
17
|
s.files = `git ls-files`.split("\n")
|
18
|
-
|
18
|
+
s.executables = ["saber"]
|
19
|
+
s.extensions << "extconf.rb"
|
19
20
|
|
20
|
-
|
21
|
+
s.add_dependency "tagen", "~>1.1.5"
|
22
|
+
s.add_dependency "optimism", "~>3.1.2"
|
23
|
+
s.add_dependency "pa", "~>1.2.2"
|
24
|
+
s.add_dependency "retort","~>0.0.6"
|
25
|
+
s.add_dependency "thor", "~>0.14.6"
|
26
|
+
s.add_dependency "net-ssh", "~>2.3.0"
|
27
|
+
s.add_dependency "xmpp4r", "~>0.5"
|
21
28
|
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
Downloader = Saber::Downloader
|
4
|
+
|
5
|
+
describe Downloader do
|
6
|
+
describe "test everyting" do
|
7
|
+
it "works" do
|
8
|
+
XMLRPC::Client.stub(:new2)
|
9
|
+
|
10
|
+
d = Downloader.new
|
11
|
+
|
12
|
+
d.should_receive(:aria2_add).with(["ftp://seedbox/bt/foo/bar.mkv"], {dir: "#{$spec_data}/download/foo"})
|
13
|
+
d.add("foo/bar.mkv")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
Server = Saber::Server
|
4
|
+
DRbServer = Saber::DRbServer
|
5
|
+
class DRbServer
|
6
|
+
public :build_files
|
7
|
+
end
|
8
|
+
|
9
|
+
describe DRbServer do
|
10
|
+
describe "#build_files" do
|
11
|
+
it "works" do
|
12
|
+
s = DRbServer.new(nil)
|
13
|
+
s.build_files("prison.break", "terra.nova.mkv").sort.should == %w[prison.break/01.prison.break.mkv prison.break/02.prison.break.mkv terra.nova.mkv]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
require "saber"
|
2
|
+
|
3
|
+
$spec_dir = File.expand_path("..", __FILE__)
|
4
|
+
$spec_data = File.expand_path("../data", __FILE__)
|
5
|
+
|
6
|
+
Saber::Rc._merge! Optimism <<EOF
|
7
|
+
p:
|
8
|
+
download = Pa("#{$spec_data}/download")
|
9
|
+
|
10
|
+
server:
|
11
|
+
download = Pa("#{$spec_data}/bt")
|
12
|
+
ftp = "ftp://seedbox/bt"
|
13
|
+
host = "localhost"
|
14
|
+
user = "foo"
|
15
|
+
|
16
|
+
port = 8914
|
17
|
+
token = "token"
|
18
|
+
drb_uri = "druby://localhost:8915"
|
19
|
+
EOF
|
20
|
+
|
21
|
+
RSpec.configure do |config|
|
22
|
+
def capture(stream)
|
23
|
+
begin
|
24
|
+
stream = stream.to_s
|
25
|
+
eval "$#{stream} = StringIO.new"
|
26
|
+
yield
|
27
|
+
result = eval("$#{stream}").string
|
28
|
+
ensure
|
29
|
+
eval("$#{stream} = #{stream.upcase}")
|
30
|
+
end
|
31
|
+
|
32
|
+
result
|
33
|
+
end
|
34
|
+
|
35
|
+
alias :silence :capture
|
36
|
+
end
|
37
|
+
|
38
|
+
module Kernel
|
39
|
+
private
|
40
|
+
|
41
|
+
def xdescribe(*args, &blk)
|
42
|
+
describe *args do
|
43
|
+
pending "xxxxxxxxx"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def xcontext(*args, &blk)
|
48
|
+
context *args do
|
49
|
+
pending "xxxxxxxxx"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def xit(*args, &blk)
|
54
|
+
it *args do
|
55
|
+
pending "xxxxxxxx"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: saber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,29 +9,127 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
dependencies:
|
12
|
+
date: 2012-02-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: tagen
|
16
|
+
requirement: &17018160 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.1.5
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *17018160
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: optimism
|
27
|
+
requirement: &17031380 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.1.2
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *17031380
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: pa
|
38
|
+
requirement: &17028780 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.2.2
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *17028780
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: retort
|
49
|
+
requirement: &17516180 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.0.6
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *17516180
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: thor
|
60
|
+
requirement: &17510260 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.14.6
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *17510260
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: net-ssh
|
71
|
+
requirement: &17528700 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.3.0
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *17528700
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: xmpp4r
|
82
|
+
requirement: &17526300 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ~>
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0.5'
|
88
|
+
type: :runtime
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *17526300
|
14
91
|
description: ! 'the saber
|
15
92
|
|
16
93
|
'
|
17
94
|
email: ywzhaifei@gmail.com
|
18
|
-
executables:
|
19
|
-
|
95
|
+
executables:
|
96
|
+
- saber
|
97
|
+
extensions:
|
98
|
+
- extconf.rb
|
20
99
|
extra_rdoc_files: []
|
21
100
|
files:
|
101
|
+
- .gitignore
|
102
|
+
- .rspec
|
22
103
|
- Gemfile
|
23
104
|
- Gemfile.lock
|
24
105
|
- README.md
|
25
106
|
- Ragfile
|
26
107
|
- bin/saber
|
108
|
+
- bin/saber-drb_add
|
109
|
+
- extconf.rb
|
27
110
|
- lib/saber.rb
|
28
111
|
- lib/saber/cli.rb
|
112
|
+
- lib/saber/client.rb
|
113
|
+
- lib/saber/downloader.rb
|
29
114
|
- lib/saber/rc.rb
|
115
|
+
- lib/saber/server.rb
|
30
116
|
- lib/saber/task.rb
|
31
117
|
- lib/saber/ui.rb
|
32
118
|
- lib/saber/version.rb
|
33
119
|
- saber.gemspec
|
34
120
|
- saber.watchr
|
121
|
+
- spec/data/bt/lost.mkv
|
122
|
+
- spec/data/bt/lost/01.lost.mkv
|
123
|
+
- spec/data/bt/lost/02.lost.mkv
|
124
|
+
- spec/data/bt/prison.break.mkv
|
125
|
+
- spec/data/bt/prison.break/01.prison.break.mkv
|
126
|
+
- spec/data/bt/prison.break/02.prison.break.mkv
|
127
|
+
- spec/data/bt/terra.nova.mkv
|
128
|
+
- spec/data/bt/terra.nova/01.terra.nova.mkv
|
129
|
+
- spec/data/bt/terra.nova/02.terra.nova.mkv
|
130
|
+
- spec/saber/client_spec.rb
|
131
|
+
- spec/saber/downloader_spec.rb
|
132
|
+
- spec/saber/server_spec.rb
|
35
133
|
- spec/spec_helper.rb
|
36
134
|
homepage: http://github.com/GutenYe/saber
|
37
135
|
licenses: []
|