saber 0.0.1 → 0.0.3
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/.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: []
|