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 ADDED
@@ -0,0 +1,2 @@
1
+ /rfrom/
2
+ /*.gem
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile CHANGED
@@ -1,14 +1,17 @@
1
1
  source :rubygems
2
2
 
3
- gem "optimism", :path => "/home/guten/dev/one/optimism"
4
- gem "pa", :path => "/home/guten/dev/one/pa"
5
- gem "retort"
6
- gem "thor"
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
- #gem "rag"
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
- optimism!
34
- pa!
35
- retort
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
- thor
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
- Foo, a very good library
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
- Overview
12
- --------
11
+ the saber.
13
12
 
14
- still under very early development.
13
+ ### Is It Good?
15
14
 
16
- Features
17
- --------
15
+ Yes.
16
+
17
+ ### Is It "Production Ready™"?
18
18
 
19
- a clearly list of features.
19
+ No.
20
20
 
21
21
  Usage
22
22
  -----
23
23
 
24
- how to use
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
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
-
3
2
  require_relative "../lib/saber"
4
3
 
5
4
  begin
data/bin/saber-drb_add ADDED
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+
3
+ saber drb_add $* &
4
+
5
+ # event.download.finishied debug
6
+ #saber drb_add $* 2>&1 >/dev/pts/6 &
data/extconf.rb ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ require "fileutils"
3
+ require "mkmf"
4
+
5
+ FileUtils.install File.expand_path("../bin/saber-drb_add", __FILE__), Gem.bindir
6
+
7
+ create_makefile("saber")
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 :CLI, "saber/cli"
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", "~/.saberrc"
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
- Bundler.ui = UI::Shell.new(the_shell)
15
- Bundler.ui.debug! if options["verbose"]
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.new.clean
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
- private
24
- # helper methods
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
@@ -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
- download_dir = Pa.join(ENV["HOME"], "bt")
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
@@ -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
- def initialize
4
- Retort::Service.configure do |c|
5
- c.url = Rc.scgi_server
6
- end
7
- end
3
+ class << self
4
+ def clean
5
+ Retort::Service.configure do |c|
6
+ c.url = Rc.scgi_server
7
+ end
8
8
 
9
- def clean
10
- disk_files = Rc.download_dir.ls2(:absolute => true)
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
- (disk_files - bt_files).each { |file|
14
- Pa.rm_r file, :verbose => true
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
@@ -15,6 +15,11 @@ module Saber
15
15
  def confirm(message)
16
16
  end
17
17
 
18
+ # alias to info
19
+ def say(message)
20
+ info(message)
21
+ end
22
+
18
23
  class Shell < UI
19
24
  attr_writer :shell
20
25
 
data/lib/saber/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Saber
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.3"
3
3
  end
data/saber.gemspec CHANGED
@@ -1,7 +1,7 @@
1
- $: << "."
2
- require "lib/saber/version"
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
- #s.executables = ["x"]
18
+ s.executables = ["saber"]
19
+ s.extensions << "extconf.rb"
19
20
 
20
- #s.add_dependency "x"
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,7 @@
1
+ require "spec_helper"
2
+
3
+
4
+
5
+
6
+
7
+
@@ -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.1
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-01-30 00:00:00.000000000 Z
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
- extensions: []
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: []