mangdown 0.13.4 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -1
- data/lib/mangdown/adapter/mangareader.rb +94 -30
- data/lib/mangdown/adapter/no_adapter_error.rb +1 -1
- data/lib/mangdown/adapter.rb +39 -101
- data/lib/mangdown/chapter.rb +21 -37
- data/lib/mangdown/{commands.rb → client.rb} +13 -28
- data/lib/mangdown/manga.rb +26 -20
- data/lib/mangdown/manga_list.rb +26 -17
- data/lib/mangdown/md_hash.rb +55 -65
- data/lib/mangdown/page.rb +3 -3
- data/lib/mangdown/properties.rb +27 -16
- data/lib/mangdown/version.rb +1 -1
- data/lib/mangdown.rb +30 -14
- metadata +3 -33
- data/lib/mangdown/adapter/mangafox.rb +0 -47
- data/lib/mangdown/adapter/mangahere.rb +0 -51
- data/lib/mangdown/adapter/mangapanda.rb +0 -13
- data/lib/mangdown/adapter/wiemanga.rb +0 -49
- data/spec/lib/mangdown/cbz_spec.rb +0 -40
- data/spec/lib/mangdown/chapter_spec.rb +0 -79
- data/spec/lib/mangdown/commands_spec.rb +0 -67
- data/spec/lib/mangdown/equality_spec.rb +0 -32
- data/spec/lib/mangdown/manga_list_spec.rb +0 -42
- data/spec/lib/mangdown/manga_spec.rb +0 -61
- data/spec/lib/mangdown/mangdown_hash_spec.rb +0 -72
- data/spec/lib/mangdown/page_spec.rb +0 -59
- data/spec/lib/mangdown/properties_spec.rb +0 -21
- data/spec/lib/mangdown/tools_spec.rb +0 -41
- data/spec/lib/mangdown/uri_spec.rb +0 -22
- data/spec/spec_helper.rb +0 -22
@@ -1,67 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require 'stringio'
|
3
|
-
|
4
|
-
describe M do
|
5
|
-
before do
|
6
|
-
VCR.insert_cassette 'events', record: :new_episodes
|
7
|
-
end
|
8
|
-
|
9
|
-
after do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
describe 'find' do
|
14
|
-
it 'must return an array of MDHash' do
|
15
|
-
results = M.find('Naruto')
|
16
|
-
results.each do |result|
|
17
|
-
result.must_be_instance_of Mangdown::MDHash
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'must only accept good search terms' do
|
22
|
-
bad = ['@#$$#', '........', '@#%@#$%^']
|
23
|
-
good = ["666 Bats", "1 2 3", "Go! For! IT!"]
|
24
|
-
bad.each { |term| -> { M.find(term) }.must_raise ArgumentError }
|
25
|
-
good.each { |term| -> { M.find(term) }.must_be_silent }
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe 'cbz' do
|
30
|
-
# CBZ is tested in cbz_spec.rb
|
31
|
-
it 'must fail if given a bad path' do
|
32
|
-
path = "super_bad_path/that/cant/possibly/exist!!!"
|
33
|
-
-> { M.cbz(path) }.must_raise Errno::ENOENT
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'must not fail if given a good path' do
|
37
|
-
# Before
|
38
|
-
fixtures_dir = File.expand_path('../../../fixtures', __FILE__)
|
39
|
-
tmp_dir = File.expand_path('../../../../tmp', __FILE__)
|
40
|
-
nisekoi_dir = tmp_dir + "/Nisekoi"
|
41
|
-
FileUtils.cp_r(fixtures_dir + '/Nisekoi', tmp_dir)
|
42
|
-
|
43
|
-
-> { M.cbz(nisekoi_dir) }.must_be_silent
|
44
|
-
|
45
|
-
# After
|
46
|
-
FileUtils.rm_r(nisekoi_dir, force: true)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe 'help' do
|
51
|
-
it "must output instructions for the command methods" do
|
52
|
-
output = SpecHelper.stdout_for { M.help }
|
53
|
-
output.length.wont_be :zero?
|
54
|
-
["M.help", "M.cbz", "M.clean_up"].each do |command|
|
55
|
-
output.must_match /#{command}/
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe 'clean_up' do
|
61
|
-
it "must delete the data file" do
|
62
|
-
File.open(M::DATA_FILE_PATH, 'a') { |f| f.write("HELLO!") }
|
63
|
-
M.clean_up
|
64
|
-
File.exist?(M::DATA_FILE_PATH).must_equal false
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper.rb'
|
2
|
-
|
3
|
-
describe Mangdown::Equality do
|
4
|
-
before do
|
5
|
-
VCR.insert_cassette 'events', record: :new_episodes
|
6
|
-
end
|
7
|
-
|
8
|
-
after do
|
9
|
-
VCR.eject_cassette
|
10
|
-
end
|
11
|
-
|
12
|
-
describe 'eql?' do
|
13
|
-
it 'should return true when two objects are symantically equal' do
|
14
|
-
monster1 = M.find('monster').first
|
15
|
-
monster2 = M.find('monster').first
|
16
|
-
(monster1 == monster2).must_equal(true)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should return false when two objects are symantically unequal' do
|
20
|
-
monster1 = M.find('monster').first
|
21
|
-
monster2 = M.find('20th century boys').first
|
22
|
-
(monster1 == monster2).must_equal(false)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'should return true even if different classes' do
|
26
|
-
monster1 = M.find('monster').first
|
27
|
-
monster2 = monster1.to_manga
|
28
|
-
(monster1 == monster2).must_equal(true)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper.rb'
|
2
|
-
|
3
|
-
describe Mangdown::MangaList do
|
4
|
-
before do
|
5
|
-
VCR.insert_cassette 'events', record: :new_episodes
|
6
|
-
end
|
7
|
-
|
8
|
-
after do
|
9
|
-
VCR.eject_cassette
|
10
|
-
end
|
11
|
-
|
12
|
-
describe 'new' do
|
13
|
-
let(:mangareader) {
|
14
|
-
Mangdown::MangaList.new('http://www.mangareader.net/alphabetical')
|
15
|
-
}
|
16
|
-
let(:mangafox) {
|
17
|
-
Mangdown::MangaList.new('http://mangafox.me/manga/')
|
18
|
-
}
|
19
|
-
let(:multiple) { Mangdown::MangaList.new(
|
20
|
-
'http://www.mangareader.net/alphabetical',
|
21
|
-
'http://mangafox.me/manga/'
|
22
|
-
) }
|
23
|
-
|
24
|
-
it 'must have a manga list with mangas (as md hashes)' do
|
25
|
-
[mangareader, mangafox].each do |type|
|
26
|
-
type.mangas.must_be_instance_of Array
|
27
|
-
type.mangas.each do |manga|
|
28
|
-
manga.must_be_instance_of Mangdown::MDHash
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'must raise an ArgumentError if given a bad url' do
|
34
|
-
-> { Mangdown::MangaList.new('garbage-url.com/bogus') }
|
35
|
-
.must_raise ArgumentError
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'must return a manga list with mangas from all input urls' do
|
39
|
-
multiple.mangas.length.must_be :>, (mangareader.mangas.length)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
|
3
|
-
describe Mangdown::Manga do
|
4
|
-
let(:download_path) { File.expand_path('../../../../tmp', __FILE__) }
|
5
|
-
let(:manga_name) { "Romance Dawn" }
|
6
|
-
let(:uri) {
|
7
|
-
"http://mangafox.me/manga/romance_dawn/"
|
8
|
-
}
|
9
|
-
|
10
|
-
before do
|
11
|
-
VCR.insert_cassette 'events', record: :new_episodes
|
12
|
-
@manga = Mangdown::Manga.new(manga_name, uri)
|
13
|
-
end
|
14
|
-
|
15
|
-
after do
|
16
|
-
VCR.eject_cassette
|
17
|
-
FileUtils.rm_r("#{download_path}/#{manga_name}", force: true)
|
18
|
-
end
|
19
|
-
|
20
|
-
describe 'new' do
|
21
|
-
it 'must return a manga' do
|
22
|
-
@manga.must_be_instance_of Mangdown::Manga
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'must have chapters' do
|
26
|
-
@manga.chapters.wont_be :empty?
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe 'download' do
|
31
|
-
it 'must download to default download dir' do
|
32
|
-
@manga.download
|
33
|
-
|
34
|
-
dir = Mangdown::DOWNLOAD_DIR + "/#{manga_name}"
|
35
|
-
Dir.exist?(dir).must_equal true
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'must download to the given dir' do
|
39
|
-
dir = Mangdown::DOWNLOAD_DIR + '/random'
|
40
|
-
FileUtils.rm_r(dir, force: true) if Dir.exist?(dir)
|
41
|
-
|
42
|
-
Dir.mkdir(dir)
|
43
|
-
@manga.download_to(dir)
|
44
|
-
|
45
|
-
Dir.exist?(dir + "/#{manga_name}").must_equal true
|
46
|
-
|
47
|
-
FileUtils.rm_r(dir, force: true)
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'must download the right number of chapters' do
|
51
|
-
manga = Mangdown::Manga
|
52
|
-
.new('Gantz', 'http://www.mangareader.net/97/gantz.html')
|
53
|
-
manga.download(50, 52)
|
54
|
-
|
55
|
-
chapters = Dir[Mangdown::DOWNLOAD_DIR + '/Gantz/*/']
|
56
|
-
chapters.length.must_equal 3
|
57
|
-
|
58
|
-
FileUtils.rm_r(Mangdown::DOWNLOAD_DIR + '/Gantz', force: true)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
|
3
|
-
describe Mangdown::Manga do
|
4
|
-
let(:m_name) { "Romance Dawn" }
|
5
|
-
let(:m_uri) { "http://mangafox.me/manga/romance_dawn/" }
|
6
|
-
|
7
|
-
let(:c_name) { "Onepunch-Man 1" }
|
8
|
-
let(:c_uri) { "http://www.mangareader.net/onepunch-man/1" }
|
9
|
-
|
10
|
-
let(:c2_name) { "Naruto 542" }
|
11
|
-
let(:c2_uri) { "http://mangafox.me/manga/naruto/v57/c542/1.html" }
|
12
|
-
|
13
|
-
let(:p_name) { "Hikaru No Go 1 - Page 1.jpg" }
|
14
|
-
let(:p_uri) {
|
15
|
-
"http://i1.mangareader.net/hikaru-no-go/1/hikaru-no-go-1894067.jpg"
|
16
|
-
}
|
17
|
-
|
18
|
-
before do
|
19
|
-
VCR.insert_cassette 'events', record: :new_episodes
|
20
|
-
@md_page = Mangdown::MDHash.new(uri: p_uri, name: p_name)
|
21
|
-
@md_chapter = Mangdown::MDHash.new(uri: c_uri, name: c_name)
|
22
|
-
@md_manga = Mangdown::MDHash.new(uri: m_uri, name: m_name)
|
23
|
-
end
|
24
|
-
|
25
|
-
after do
|
26
|
-
VCR.eject_cassette
|
27
|
-
end
|
28
|
-
|
29
|
-
describe 'new' do
|
30
|
-
it 'must return a manga' do
|
31
|
-
[@md_page, @md_chapter, @md_manga].each do |type|
|
32
|
-
type.must_be_instance_of Mangdown::MDHash
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe 'to_manga' do
|
38
|
-
it 'must give a manga for a manga' do
|
39
|
-
@md_manga.to_manga.must_be_instance_of Mangdown::Manga
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'must raise an exception if not a manga' do
|
43
|
-
[@md_chapter, @md_page].each do |type|
|
44
|
-
Proc.new { type.to_manga }.must_raise NoMethodError
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe 'to_chapter' do
|
50
|
-
it 'must give a chapter' do
|
51
|
-
@md_chapter.to_chapter.must_be_instance_of Mangdown::Chapter
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'must raise an exception if not a chapter' do
|
55
|
-
[@md_page, @md_manga].each do |type|
|
56
|
-
Proc.new { type.to_chapter }.must_raise NoMethodError
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe 'to_page' do
|
62
|
-
it 'must give a page for a page' do
|
63
|
-
@md_page.to_page.must_be_instance_of Mangdown::Page
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'must raise an exception if not a page' do
|
67
|
-
[@md_chapter, @md_manga].each do |type|
|
68
|
-
Proc.new { type.to_page }.must_raise NoMethodError
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper.rb'
|
2
|
-
|
3
|
-
describe Mangdown::Page do
|
4
|
-
before do
|
5
|
-
VCR.insert_cassette 'events', record: :new_episodes
|
6
|
-
end
|
7
|
-
|
8
|
-
after do
|
9
|
-
VCR.eject_cassette
|
10
|
-
end
|
11
|
-
|
12
|
-
describe 'new' do
|
13
|
-
let(:download_path) {File.expand_path('../../../../tmp', __FILE__)}
|
14
|
-
let(:mangareader) {
|
15
|
-
Mangdown::Page.new(
|
16
|
-
"Naruto 1 - Page 1.jpg",
|
17
|
-
"http://i19.mangareader.net/naruto/1/naruto-1564773.jpg"
|
18
|
-
)
|
19
|
-
}
|
20
|
-
let(:mangafox) {
|
21
|
-
Mangdown::Page.new(
|
22
|
-
"i001.jpg",
|
23
|
-
"http://a.mfcdn.net/store/manga/10807/000.0/compressed/i001.jpg"
|
24
|
-
)
|
25
|
-
}
|
26
|
-
let(:mangafox2) {
|
27
|
-
Mangdown::Page.new(
|
28
|
-
"naruto_pilot_manga.naruto_pilot_01.jpg",
|
29
|
-
"http://a.mfcdn.net/store/manga/8/01-000.0/compressed/naruto_pilot_manga.naruto_pilot_01.jpg"
|
30
|
-
)
|
31
|
-
}
|
32
|
-
|
33
|
-
=begin
|
34
|
-
it 'must have a valid name' do
|
35
|
-
[mangareader, mangafox, mangafox2].each do |type|
|
36
|
-
type.name.must_match(/\d{3}$/)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
=end
|
40
|
-
|
41
|
-
it 'must download image to dir' do
|
42
|
-
[mangareader, mangafox, mangafox2].each do |type|
|
43
|
-
type.download_to(download_path)
|
44
|
-
path = "#{download_path}/#{type.name}.jpeg"
|
45
|
-
exists = File.exist?(path)
|
46
|
-
exists.must_equal true
|
47
|
-
File.delete(path) if exists
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'must sort pages by name' do
|
52
|
-
pages = [mangareader, mangafox, mangafox2] * 20
|
53
|
-
sorted = pages.shuffle.sort
|
54
|
-
sort_by_name = pages.shuffle.sort_by(&:name)
|
55
|
-
|
56
|
-
sorted.must_equal sort_by_name
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
|
3
|
-
describe Mangdown::Properties do
|
4
|
-
let(:mangareader) {
|
5
|
-
Mangdown::Properties.new('http://www.mangareader.net/101/akira.html')
|
6
|
-
}
|
7
|
-
let(:mangafox) {
|
8
|
-
Mangdown::Properties.new('"http://mangafox.me/manga/ashita_no_joe/')
|
9
|
-
}
|
10
|
-
let(:mangapanda) {
|
11
|
-
Mangdown::Properties.new('http://www.mangapanda.com/fairy-tail/424')
|
12
|
-
}
|
13
|
-
|
14
|
-
describe 'new' do
|
15
|
-
it 'must give the right info' do
|
16
|
-
mangareader.type.must_equal(:mangareader)
|
17
|
-
mangapanda.type.must_equal( :mangapanda)
|
18
|
-
mangafox.type.must_equal( :mangafox)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
|
3
|
-
describe Mangdown::Tools do
|
4
|
-
let(:m_uri) { "http://mangafox.me/manga/romance_dawn/" }
|
5
|
-
|
6
|
-
let(:c_uri) { "http://www.mangareader.net/onepunch-man/1" }
|
7
|
-
|
8
|
-
let(:c2_uri) { "http://mangafox.me/manga/naruto/v57/c542/1.html" }
|
9
|
-
|
10
|
-
let(:p_uri) {
|
11
|
-
"http://i1.mangareader.net/hikaru-no-go/1/hikaru-no-go-1894067.jpg"
|
12
|
-
}
|
13
|
-
|
14
|
-
before do
|
15
|
-
VCR.insert_cassette 'events', record: :new_episodes
|
16
|
-
end
|
17
|
-
|
18
|
-
after do
|
19
|
-
VCR.eject_cassette
|
20
|
-
end
|
21
|
-
|
22
|
-
describe 'get_doc' do
|
23
|
-
it 'must return a Nokogiri Document' do
|
24
|
-
Mangdown::Tools.get_doc(m_uri)
|
25
|
-
.must_be_instance_of(Nokogiri::HTML::Document)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe 'get_root' do
|
30
|
-
it 'must return the protocol and host of the uri' do
|
31
|
-
Mangdown::Tools.get_root(m_uri)
|
32
|
-
.must_equal('http://mangafox.me')
|
33
|
-
Mangdown::Tools.get_root(c_uri)
|
34
|
-
.must_equal('http://www.mangareader.net')
|
35
|
-
Mangdown::Tools.get_root(c2_uri)
|
36
|
-
.must_equal('http://mangafox.me')
|
37
|
-
Mangdown::Tools.get_root(p_uri)
|
38
|
-
.must_equal('http://i1.mangareader.net')
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
|
3
|
-
describe Mangdown::Uri do
|
4
|
-
let(:m_uri) { "http://mangafox.me/manga/romance_dawn/" }
|
5
|
-
|
6
|
-
let(:c_uri) { "http://www.mangareader.net/onepunch-man/1" }
|
7
|
-
|
8
|
-
let(:c2_uri) { "http://mangafox.me/manga/naruto/v57/c542/1.html" }
|
9
|
-
|
10
|
-
let(:p_uri) {
|
11
|
-
"http://i1.mangareader.net/hikaru-no-go/1/hikaru-no-go-1894067.jpg"
|
12
|
-
}
|
13
|
-
|
14
|
-
describe 'get_doc' do
|
15
|
-
it 'must return a String object' do
|
16
|
-
Mangdown::Uri.new(m_uri).must_be_instance_of(String)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'must return a properly encoded uri' do
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require_relative '../lib/mangdown'
|
2
|
-
|
3
|
-
require 'minitest/autorun'
|
4
|
-
require 'webmock/minitest'
|
5
|
-
require 'vcr'
|
6
|
-
require 'fileutils'
|
7
|
-
|
8
|
-
VCR.configure do |c|
|
9
|
-
c.cassette_library_dir = 'spec/fixtures/cpo_cassettes'
|
10
|
-
c.hook_into :webmock
|
11
|
-
end
|
12
|
-
|
13
|
-
module SpecHelper
|
14
|
-
extend self
|
15
|
-
def stdout_for
|
16
|
-
out, temp = StringIO.new, $stdout
|
17
|
-
$stdout = out
|
18
|
-
yield
|
19
|
-
out, $stdout = $stdout, temp
|
20
|
-
out.rewind and out.read
|
21
|
-
end
|
22
|
-
end
|