nyaa_anime 0.3.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7b5f76e31eb304f9bd2da100db4ba61e7e8c7f9e
4
+ data.tar.gz: 98401204f42c1eef222d04311f11d393e8fa3d97
5
+ SHA512:
6
+ metadata.gz: 5bb5df18e96208711349295ff4c72e2a7b29566a8020d6fd1ed0a4a7fe03b454f4f3919e6075db8295617d093f077a08ceb876b56ab338fbdd2dd2735995ef17
7
+ data.tar.gz: 41dd13be4176515d507aa2f2403600f245821a99cf655cd1761d2f4a0c617a69b1e7a9d817db888c559d90b554fe50a93b9cd1cfa3232935f779b7afc57f6cd5
@@ -0,0 +1,23 @@
1
+ *.swp
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ nyaa_anime/tmp
17
+ nyaa_anime/version_tmp
18
+ tmp
19
+ *.bundle
20
+ *.so
21
+ *.o
22
+ *.a
23
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in nyaa_anime.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Joshua Tsubaki Wu
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,46 @@
1
+ # NyaaAnime
2
+
3
+ `nyaa` (short for `nyaa_anime`) is the painless Nyaa Torrents anime command-line tool.
4
+ Search for and download anime torrents and open them automatically.
5
+ Results are color-coded - green for new episodes of previously downloaded torrents, cyan (blue) for previously downloaded torrents.
6
+ Automatically find and downloaded new episodes of previously downloaded anime with `$ nyaa-get`!
7
+
8
+ ## Installation
9
+
10
+ $ gem install nyaa_anime
11
+
12
+ That's all!
13
+
14
+ ## Usage
15
+
16
+ Run `$ nyaa` to see the usage text:
17
+
18
+ ![Screenshot 2014-10-16 06.39.22.png](https://bitbucket.org/repo/yn7dbo/images/3610502476-Screenshot%202014-10-16%2006.39.22.png)
19
+
20
+ For example, try `$ nyaa -m -f ch no game no life`:
21
+
22
+ ![Screenshot 2014-10-16 06.44.21.png](https://bitbucket.org/repo/yn7dbo/images/2797464601-Screenshot%202014-10-16%2006.44.21.png)
23
+
24
+ Downloads are saved to `~/Downloads/nyaa/`. Future queries will check the files there and automatically color-code the search results. Green is for new episodes of previously downloaded torrents, while cyan (blue) is for previously downloaded torrents:
25
+
26
+ ![Screenshot 2014-10-16 06.46.11.png](https://bitbucket.org/repo/yn7dbo/images/157798882-Screenshot%202014-10-16%2006.46.11.png)
27
+
28
+ The `-n` (`--new`) option makes `nyaa` find new episodes of previously downloaded anime (the torrents in `~/Downloads/nyaa/`):
29
+
30
+ ![Screenshot 2014-10-16 06.47.55.png](https://bitbucket.org/repo/yn7dbo/images/2090162283-Screenshot%202014-10-16%2006.47.55.png)
31
+
32
+ You can also run `$ nyaa-get` which is equivalent to `$ nyaa -na`:
33
+
34
+ ![Screenshot 2014-10-16 06.48.33.png](https://bitbucket.org/repo/yn7dbo/images/3719415092-Screenshot%202014-10-16%2006.48.33.png)
35
+
36
+ ## Donations
37
+
38
+ If you like `nyaa`, please donate via PayPal to wujoshuawu@gmail.com to keep me afloat. Thank you!
39
+
40
+ ## Contributing
41
+
42
+ 1. Fork it ( https://bitbucket.org/tsubaki/nyaa_anime/fork )
43
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
44
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
45
+ 4. Push to the branch (`git push origin my-new-feature`)
46
+ 5. Create a new Pull Request
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ load "#{File.dirname(__FILE__)}/nyaa_anime"
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ARGV[0] = "-na"
4
+ load "#{File.dirname(__FILE__)}/nyaa_anime"
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ FANSUBBERS = { "c"=>"Commie",
4
+ "ch"=>"Chihiro",
5
+ "f"=>"FFF",
6
+ "h"=>"Hatsuyuki",
7
+ "hs"=>"HorribleSubs" }
8
+ SPEEDSUBBER = FANSUBBERS["hs"]
9
+ SMALL_RESOLUTION = "480"
10
+ MEDIUM_RESOLUTION = "720"
11
+ LARGE_RESOLUTION = "1080"
12
+
13
+ require 'optparse'
14
+
15
+ if ARGV.size == 0
16
+ ARGV.push "--help"
17
+ end
18
+
19
+ options = {}
20
+ OptionParser.new do |opts|
21
+ opts.banner = "Usage: nyaa [options] anime\n" <<
22
+ " nyaa_anime [options] anime\n" <<
23
+ " nyaa-get\n\n" <<
24
+ " `nyaa` is an alias for `nyaa_anime`.\n" <<
25
+ " `nyaa-get` is equivalent to `nyaa -na`.\n\n" <<
26
+ " (If you like this tool, please donate via PayPal\n" <<
27
+ " to wujoshuawu@gmail.com to keep the developer afloat.)\n\n"
28
+
29
+ opts.on("-n", "--new", "Find all new episodes of",
30
+ "previously downloaded anime") do
31
+ options[:find_new] = true
32
+ end
33
+
34
+ opts.on("-a", "--all", "Download all results without asking") do
35
+ options[:download_all] = true
36
+ end
37
+
38
+ opts.on("-s", "--small-res", "Add '#{SMALL_RESOLUTION}' to the search term") do
39
+ options[:resolution] = SMALL_RESOLUTION
40
+ end
41
+ opts.on("-m", "--medium-res", "Add '#{MEDIUM_RESOLUTION}' to the search term") do
42
+ options[:resolution] = MEDIUM_RESOLUTION
43
+ end
44
+ opts.on("-l", "--large-res", "Add '#{LARGE_RESOLUTION}' to the search term") do
45
+ options[:resolution] = LARGE_RESOLUTION
46
+ end
47
+
48
+ opts.on("-f", "--fansubber [FANSUBBER]",
49
+ "Specify [FANSUBBER] to be added to the search",
50
+ "term. [FANSUBBER] can be abbreviated by",
51
+ *FANSUBBERS.map {|o, f| "#{o} - #{f}"}) do |f|
52
+ if FANSUBBERS[f]
53
+ options[:subber] = FANSUBBERS[f]
54
+ elsif f.nil?
55
+ puts "Error: Expected [FANSUBBER] with the -f option"
56
+ ARGV.push "--help"
57
+ else
58
+ options[:subber] = f
59
+ end
60
+ end
61
+
62
+ opts.on("-S", "--speedsubs", "Equivalent to `--fansubber=#{SPEEDSUBBER}`") do
63
+ options[:subber] = SPEEDSUBBER
64
+ end
65
+ end.parse!
66
+
67
+ require 'nyaa_anime'
68
+ nyaa = NyaaAnime.new
69
+
70
+ if options[:find_new]
71
+ nyaa.find_new_titles
72
+ else
73
+ if ARGV.size == 1
74
+ search_term = ARGV[0]
75
+ else
76
+ search_term = ARGV[0..-1].join " "
77
+ end
78
+ if subber = options[:subber]
79
+ search_term = "[#{subber}] #{search_term}"
80
+ end
81
+ if res = options[:resolution]
82
+ search_term += " #{res}"
83
+ end
84
+ nyaa.search search_term, false
85
+ end
86
+
87
+ if nyaa.download_count == 0
88
+ puts "No downloads found."
89
+ exit
90
+ end
91
+
92
+ require 'os'
93
+
94
+ def get_y_or_n
95
+ while true
96
+ response = $stdin.gets.chomp.downcase
97
+ begin
98
+ if "yes".match(/\A#{response}/)
99
+ return true
100
+ end
101
+ if "no".match(/\A#{response}/)
102
+ return false
103
+ end
104
+ rescue RegexpError
105
+ end
106
+ end
107
+ end
108
+
109
+ def prompt_to_open(torrents)
110
+ print "Open downloaded torrent#{"s" if torrents.count > 1}? (y/n): "
111
+ if get_y_or_n
112
+ if OS.mac?
113
+ `open #{torrents.join " "}`
114
+ elsif OS.windows?
115
+ torrents.each { |torr| `#{torr}` }
116
+ else # POSIX assumed
117
+ torrents.each { |torr| `xdg-open #{torr}` }
118
+ end
119
+ end
120
+ end
121
+
122
+ if options[:download_all]
123
+ prompt_to_open nyaa.download_all
124
+ exit
125
+ end
126
+
127
+ if nyaa.download_count > 1
128
+ prompt = "Download (1-#{nyaa.download_count}, 'a(ll)'"
129
+ prompt << ", 'n(ew)'" if nyaa.new_count > 0 && !options[:find_new]
130
+ prompt << ", or [ENTER] to cancel): "
131
+ else
132
+ print "Download? (y/n): "
133
+ if get_y_or_n
134
+ prompt_to_open [nyaa.download_index(0)]
135
+ end
136
+ exit
137
+ end
138
+
139
+ while true
140
+ print prompt
141
+ index = $stdin.gets.chomp.downcase
142
+ begin
143
+ if index == ""
144
+ exit
145
+ end
146
+ if "new".match(/\A#{index}/) && nyaa.new_count > 0 && !options[:find_new]
147
+ prompt_to_open nyaa.download_all_new
148
+ exit
149
+ end
150
+ if "all".match(/\A#{index}/)
151
+ prompt_to_open nyaa.download_all
152
+ exit
153
+ end
154
+ if (1..nyaa.download_count).include?(index.to_i)
155
+ prompt_to_open [nyaa.download_index(index.to_i-1)]
156
+ exit
157
+ end
158
+ rescue RegexpError
159
+ next
160
+ end
161
+ end
@@ -0,0 +1,179 @@
1
+ require "nyaa_anime/version"
2
+
3
+ class NyaaAnime
4
+
5
+ require 'parallel'
6
+ require 'open-uri'
7
+ require 'nokogiri'
8
+ require 'cgi'
9
+ require 'colorize'
10
+ require 'levenshtein'
11
+ require 'set'
12
+
13
+ NYAA_URI = "http://nyaa.se"
14
+ NYAA_SEARCH = "#{NYAA_URI}/?page=search"
15
+ NYAA_SEARCH_DEFAULT = "#{NYAA_SEARCH}&cats=1_37&filter=2&term="
16
+ NYAA_DL_DIR = "#{Dir.home}/Downloads/nyaa/"
17
+ MAX_PAGE_COUNT = 29
18
+ TITLE_TOLERANCE_RANGE = (1..4)
19
+ NEW_COLOR = :green
20
+ ALREADY_DOWNLOADED_COLOR = :cyan
21
+
22
+ def search(title, quiet=true)
23
+ puts "Searching for \"#{title}\"..." unless quiet
24
+ @downloads = {}
25
+ noko_doc = Nokogiri::HTML(open("#{NYAA_SEARCH_DEFAULT}#{CGI.escape(title)}"))
26
+ results = noko_doc.css('.tlistrow')
27
+ if results.any?
28
+ titles = results.css('.tlistname a').map { |a| a.content }
29
+ dl_urls = results.css('.tlistdownload a').map { |a| a.attr('href') }
30
+ page_urls = noko_doc.css('.pages').first.css('a').map { |a| a.attr('href') }
31
+ if page_urls.count == MAX_PAGE_COUNT - 1
32
+ puts "Truncating at #{MAX_PAGE_COUNT} pages." unless quiet
33
+ end
34
+ Parallel.each(page_urls) do |url|
35
+ results = Nokogiri::HTML(open(url)).css('.tlistrow')
36
+ titles.concat results.css('.tlistname a').map { |a| a.content }
37
+ dl_urls.concat results.css('.tlistdownload a').map { |a| a.attr('href') }
38
+ end
39
+ titles.each_with_index { |t, i| @downloads[t] = dl_urls[i] }
40
+ @titles = titles.sort!
41
+ else
42
+ if title_element = noko_doc.css('.viewtorrentname').first
43
+ title = title_element.content
44
+ @titles = [title]
45
+ @downloads[title] = noko_doc.css('.viewdownloadbutton a').first.attr('href')
46
+ else
47
+ return
48
+ end
49
+ end
50
+ categorize_titles
51
+ colorized_titles.each_with_index { |t, i| puts "#{i+1}: #{t}" } unless quiet
52
+ nil
53
+ end
54
+
55
+ def find_new_titles
56
+ new_titles = Set.new
57
+ new_downloads = {}
58
+ idx = 1
59
+ stripped_episodeless_downloaded_titles.each do |t|
60
+ search t
61
+ new_titles.merge @new_titles
62
+ @new_titles.each do |ti|
63
+ new_downloads[ti] = @downloads[ti]
64
+ puts "#{idx}: #{ti.colorize(NEW_COLOR)}"
65
+ idx += 1
66
+ end
67
+ end
68
+ @new_titles = new_titles
69
+ @titles = new_titles.to_a.sort!
70
+ @downloads = new_downloads
71
+ @already_downloaded_titles = Set.new
72
+ @version_differing_titles = Set.new
73
+ @other_titles = Set.new
74
+ if download_count > 0
75
+ puts "#{download_count} new episode#{"s" if download_count > 1} found!"
76
+ end
77
+ end
78
+
79
+ def colorized_titles
80
+ @titles.map do |t|
81
+ if @already_downloaded_titles.include? t
82
+ t.colorize(ALREADY_DOWNLOADED_COLOR)
83
+ elsif @new_titles.include? t
84
+ t.colorize(NEW_COLOR)
85
+ else
86
+ t
87
+ end
88
+ end
89
+ end
90
+
91
+ def categorize_titles
92
+ @already_downloaded_titles = Set.new
93
+ @new_titles = Set.new
94
+ @other_titles = Set.new
95
+ @version_differing_titles = Set.new
96
+ dls = downloaded_torrents
97
+ stripped_dls = stripped_downloaded_titles
98
+ hashless_dls = dls.map { |t| NyaaAnime.hashless_title t }
99
+ @titles.each do |t|
100
+ stripped_t = NyaaAnime.stripped_title t
101
+ hashless_t = NyaaAnime.hashless_title t
102
+ if dls.include? "#{t}.torrent"
103
+ @already_downloaded_titles.add t
104
+ else
105
+ if stripped_dls.include? stripped_t
106
+ @version_differing_titles.add t
107
+ else
108
+ new_title_pushed = false
109
+ stripped_dls.each_with_index do |dlt, i|
110
+ dist = Levenshtein.distance(dlt, stripped_t)
111
+ if TITLE_TOLERANCE_RANGE.include? dist and
112
+ dist == Levenshtein.distance(hashless_dls[i], hashless_t)
113
+ @new_titles.add t
114
+ new_title_pushed = true
115
+ break
116
+ end
117
+ end
118
+ if !new_title_pushed
119
+ @other_titles.add t
120
+ end
121
+ end
122
+ end
123
+ end
124
+ nil
125
+ end
126
+
127
+ def self.stripped_title(torrent)
128
+ torrent.sub(/(\s*\[\w*\])*(\.\w+)+\z/, "")
129
+ end
130
+
131
+ def self.hashless_title(torrent)
132
+ torrent.sub(/(\s*\[\w{8}\])?(\.\w+)+\z/, "")
133
+ end
134
+
135
+ def downloaded_torrents
136
+ Dir["#{NYAA_DL_DIR}*"].select { |f| File.file? f }.map { |f| File.basename f }
137
+ end
138
+
139
+ def stripped_downloaded_titles
140
+ dls = Set.new
141
+ downloaded_torrents.each { |t| dls.add NyaaAnime.stripped_title(t) }
142
+ dls
143
+ end
144
+
145
+ def stripped_episodeless_downloaded_titles
146
+ dls = Set.new
147
+ downloaded_torrents.each { |t| dls.add NyaaAnime.stripped_title(t)[/\A.+-/] }
148
+ dls
149
+ end
150
+
151
+ def download_index(index)
152
+ if title = @titles[index]
153
+ download(title)
154
+ end
155
+ end
156
+
157
+ def download(title)
158
+ `wget --quiet -N --content-disposition -P #{NYAA_DL_DIR} "#{@downloads[title]}"`
159
+ puts "#{title}.torrent downloaded."
160
+ "#{NYAA_DL_DIR}\"#{title}.torrent\""
161
+ end
162
+
163
+ def download_all
164
+ Parallel.map(@titles) { |t| download(t) }
165
+ end
166
+
167
+ def download_all_new
168
+ Parallel.map(@new_titles) { |t| download(t) }
169
+ end
170
+
171
+ def download_count
172
+ @downloads.count
173
+ end
174
+
175
+ def new_count
176
+ @new_titles.count
177
+ end
178
+
179
+ end
@@ -0,0 +1,3 @@
1
+ class NyaaAnime
2
+ VERSION = "0.3.0"
3
+ end
@@ -0,0 +1,34 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'nyaa_anime/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "nyaa_anime"
8
+ spec.version = NyaaAnime::VERSION
9
+ spec.authors = ["Joshua Tsubaki Wu"]
10
+ spec.email = ["wujoshuawu@gmail.com"]
11
+ spec.summary = %q{the painless Nyaa Torrents anime command-line tool}
12
+ spec.description = "`nyaa` (short for `nyaa_anime`) is the painless Nyaa Torrents anime " <<
13
+ "command-line tool. Search for and download anime torrents and open " <<
14
+ "them automatically. Results are color-coded - green for new episodes of " <<
15
+ "previously downloaded torrents, cyan (blue) for previously downloaded " <<
16
+ "torrents. Automatically find and downloaded new episodes of previously " <<
17
+ "downloaded anime with `$ nyaa-get`!"
18
+ spec.homepage = "https://bitbucket.org/tsubaki/nyaa_anime"
19
+ spec.license = "MIT"
20
+
21
+ spec.files = `git ls-files -z`.split("\x0")
22
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
23
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
24
+ spec.require_paths = ["lib"]
25
+
26
+ spec.add_runtime_dependency 'parallel', '~> 1.2', '>= 1.2.4'
27
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6', '>= 1.6.2.1'
28
+ spec.add_runtime_dependency 'colorize', '~> 0.7', '>= 0.7.3'
29
+ spec.add_runtime_dependency 'levenshtein-ffi', '~> 1.1'
30
+ spec.add_runtime_dependency 'os', '~> 0.9', '>=0.9.6'
31
+
32
+ spec.add_development_dependency "bundler", "~> 1.6"
33
+ spec.add_development_dependency "rake", "~> 0"
34
+ end
metadata ADDED
@@ -0,0 +1,184 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nyaa_anime
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Joshua Tsubaki Wu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: parallel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.2'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.2.4
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.2'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.4
33
+ - !ruby/object:Gem::Dependency
34
+ name: nokogiri
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.6'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.6.2.1
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.6'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.6.2.1
53
+ - !ruby/object:Gem::Dependency
54
+ name: colorize
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.7'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.7.3
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.7'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.7.3
73
+ - !ruby/object:Gem::Dependency
74
+ name: levenshtein-ffi
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.1'
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: '1.1'
87
+ - !ruby/object:Gem::Dependency
88
+ name: os
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '0.9'
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 0.9.6
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.9'
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: 0.9.6
107
+ - !ruby/object:Gem::Dependency
108
+ name: bundler
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '1.6'
114
+ type: :development
115
+ prerelease: false
116
+ version_requirements: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - "~>"
119
+ - !ruby/object:Gem::Version
120
+ version: '1.6'
121
+ - !ruby/object:Gem::Dependency
122
+ name: rake
123
+ requirement: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - "~>"
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ type: :development
129
+ prerelease: false
130
+ version_requirements: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ description: "`nyaa` (short for `nyaa_anime`) is the painless Nyaa Torrents anime
136
+ command-line tool. Search for and download anime torrents and open them automatically.
137
+ Results are color-coded - green for new episodes of previously downloaded torrents,
138
+ cyan (blue) for previously downloaded torrents. Automatically find and downloaded
139
+ new episodes of previously downloaded anime with `$ nyaa-get`!"
140
+ email:
141
+ - wujoshuawu@gmail.com
142
+ executables:
143
+ - nyaa
144
+ - nyaa-get
145
+ - nyaa_anime
146
+ extensions: []
147
+ extra_rdoc_files: []
148
+ files:
149
+ - ".gitignore"
150
+ - Gemfile
151
+ - LICENSE.txt
152
+ - README.md
153
+ - Rakefile
154
+ - bin/nyaa
155
+ - bin/nyaa-get
156
+ - bin/nyaa_anime
157
+ - lib/nyaa_anime.rb
158
+ - lib/nyaa_anime/version.rb
159
+ - nyaa_anime.gemspec
160
+ homepage: https://bitbucket.org/tsubaki/nyaa_anime
161
+ licenses:
162
+ - MIT
163
+ metadata: {}
164
+ post_install_message:
165
+ rdoc_options: []
166
+ require_paths:
167
+ - lib
168
+ required_ruby_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ required_rubygems_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ requirements: []
179
+ rubyforge_project:
180
+ rubygems_version: 2.4.2
181
+ signing_key:
182
+ specification_version: 4
183
+ summary: the painless Nyaa Torrents anime command-line tool
184
+ test_files: []