mangdown 0.7.2 → 0.8.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.
- checksums.yaml +4 -4
- data/doc/help.txt +17 -11
- data/lib/mangdown.rb +1 -0
- data/lib/mangdown/chapter.rb +49 -12
- data/lib/mangdown/commands.rb +37 -19
- data/lib/mangdown/manga.rb +56 -17
- data/lib/mangdown/manga_list.rb +47 -0
- data/lib/mangdown/mangdown_hash.rb +1 -1
- data/lib/mangdown/page.rb +17 -8
- data/lib/mangdown/popular.rb +5 -6
- data/lib/mangdown/tools.rb +51 -23
- data/spec/mangdown/chapter_spec.rb +22 -6
- data/spec/mangdown/commands_spec.rb +33 -5
- data/spec/mangdown/manga_list_spec.rb +17 -0
- data/spec/mangdown/manga_spec.rb +29 -15
- data/spec/mangdown/mangdown_hash_spec.rb +16 -0
- data/spec/mangdown/page_spec.rb +9 -4
- data/spec/spec_helper.rb +3 -1
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2661378fbd595b26a9bf3287f4ac62998aa6839c
|
4
|
+
data.tar.gz: 020610efc7afb039d77415d18ac5f5a232541ca5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ce635544cdd44bdfa0c6b8bb39cd296ecac6e356130440ceceeb5c86a0b617496ac5b66cc0a027e64f20934515dbc6b7da37e7dc314b7e56ef950c5f0be4c27
|
7
|
+
data.tar.gz: d96dbacc58a1388b8b3a57bf89538af380b2920100dc5453d61fc8402b3653f005f2fab566f506a2a24a78b531737e36983cbb97d4b0826e1bf74c488742c001
|
data/doc/help.txt
CHANGED
@@ -1,33 +1,39 @@
|
|
1
|
-
|
1
|
+
========================================================================
|
2
2
|
Mangdown
|
3
3
|
|
4
4
|
Commands
|
5
5
|
|
6
|
-
M#find(string) - Will return an array of Mangdown::MDHash given
|
7
|
-
which is matched to manga names of the
|
8
|
-
mangas on Mangareader.
|
6
|
+
M#find(string) - Will return an array of Mangdown::MDHash given
|
7
|
+
a string which is matched to manga names of the
|
8
|
+
3000 most popular mangas on Mangareader.
|
9
9
|
|
10
10
|
results = M.find('Naruto')
|
11
11
|
|
12
12
|
|
13
13
|
|
14
|
-
|
14
|
+
**Use Mangdown::MDHash#get_manga to get a Mangdown::Manga object**
|
15
15
|
|
16
16
|
naruto = results[0].get_manga
|
17
17
|
|
18
18
|
|
19
19
|
|
20
20
|
M#download(manga, int = 0, int = -1)
|
21
|
-
- Will download a manga (Mangdown::Manga object)
|
22
|
-
first int (index of the first chapter)
|
23
|
-
(index of the last chapter) to
|
24
|
-
#{manga.name}". If no
|
25
|
-
are downloaded.
|
21
|
+
- Will download a manga (Mangdown::Manga object)
|
22
|
+
from the first int (index of the first chapter)
|
23
|
+
to the last int (index of the last chapter) to
|
24
|
+
a subdirectory named #{manga.name}". If no
|
25
|
+
indexes are given, all chapters are downloaded.
|
26
26
|
|
27
27
|
M.download(naruto, 500, 549)
|
28
28
|
|
29
|
+
|
30
|
+
|
31
|
+
M#clean_up - Will delete .manga_list.yml file from the home
|
32
|
+
directory
|
33
|
+
|
34
|
+
M.clean_up
|
29
35
|
|
30
36
|
|
31
37
|
M#help - Will display help for commands
|
32
38
|
|
33
|
-
|
39
|
+
=======================================================================
|
data/lib/mangdown.rb
CHANGED
@@ -10,6 +10,7 @@ require_relative 'mangdown/page'
|
|
10
10
|
require_relative 'mangdown/chapter'
|
11
11
|
require_relative 'mangdown/manga'
|
12
12
|
require_relative 'mangdown/popular'
|
13
|
+
require_relative 'mangdown/manga_list.rb'
|
13
14
|
require_relative 'mangdown/cbz'
|
14
15
|
require_relative 'mangdown/commands'
|
15
16
|
require_relative 'mangdown/mangdown_hash'
|
data/lib/mangdown/chapter.rb
CHANGED
@@ -1,22 +1,34 @@
|
|
1
1
|
module Mangdown
|
2
2
|
class Chapter
|
3
3
|
|
4
|
-
attr_reader :
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
@
|
4
|
+
attr_reader :pages
|
5
|
+
|
6
|
+
# initialize with MDHash and only have @info[:key]
|
7
|
+
def initialize(info)
|
8
|
+
@info = info
|
9
9
|
@pages = []
|
10
10
|
|
11
11
|
get_pages
|
12
12
|
end
|
13
13
|
|
14
|
+
# reader method for uri
|
15
|
+
def uri
|
16
|
+
@info[:uri]
|
17
|
+
end
|
18
|
+
|
19
|
+
# reader method for name
|
20
|
+
def name
|
21
|
+
@info[:name]
|
22
|
+
end
|
23
|
+
|
14
24
|
# download should be in its own module
|
25
|
+
# and the start_dir is sandwich code and should be moved and
|
26
|
+
# passed a block
|
15
27
|
def download
|
16
28
|
start_dir = Dir.pwd
|
17
29
|
|
18
|
-
Dir.mkdir(@name) unless Dir.exists?(@name)
|
19
|
-
Dir.chdir(@name)
|
30
|
+
Dir.mkdir(@info[:name]) unless Dir.exists?(@info[:name])
|
31
|
+
Dir.chdir(@info[:name])
|
20
32
|
|
21
33
|
@pages.each {|page| page.download}
|
22
34
|
|
@@ -25,14 +37,14 @@ module Mangdown
|
|
25
37
|
|
26
38
|
private
|
27
39
|
def get_pages
|
28
|
-
uri = @uri
|
40
|
+
uri = @info[:uri]
|
29
41
|
doc = ::Mangdown::Tools.get_doc(uri)
|
30
42
|
|
31
43
|
get_num_pages(doc).times do
|
32
|
-
|
44
|
+
page = get_page(doc)
|
33
45
|
uri = get_next_uri(doc)
|
34
46
|
|
35
|
-
@pages << Page.new(
|
47
|
+
@pages << Page.new(page)
|
36
48
|
doc = ::Mangdown::Tools.get_doc(uri)
|
37
49
|
end
|
38
50
|
end
|
@@ -42,12 +54,15 @@ module Mangdown
|
|
42
54
|
private
|
43
55
|
def get_page(doc)
|
44
56
|
image = doc.css('img')[0]
|
45
|
-
|
57
|
+
|
58
|
+
hash = MDHash.new
|
59
|
+
hash[:uri], hash[:name] = image['src'], (image['alt'] + ".jpg")
|
60
|
+
hash
|
46
61
|
end
|
47
62
|
|
48
63
|
def get_next_uri(doc)
|
49
64
|
#root url + the href of the link to the next page
|
50
|
-
::Mangdown::Tools.get_root(@uri) +
|
65
|
+
::Mangdown::Tools.get_root(@info[:uri]) +
|
51
66
|
doc.css('div#imgholder a')[0]['href']
|
52
67
|
end
|
53
68
|
|
@@ -56,4 +71,26 @@ module Mangdown
|
|
56
71
|
doc.css('select')[1].children.length
|
57
72
|
end
|
58
73
|
end
|
74
|
+
|
75
|
+
class MFChapter < Chapter
|
76
|
+
private
|
77
|
+
def get_page(doc)
|
78
|
+
image = doc.css('img')[0]
|
79
|
+
|
80
|
+
hash = MDHash.new
|
81
|
+
hash[:uri] = image[:src]
|
82
|
+
hash[:name] = image[:src].sub(/.+\//, '')
|
83
|
+
hash
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
def get_next_uri(doc)
|
88
|
+
root = @info[:uri].slice(/.+\//)
|
89
|
+
root + doc.css('div#viewer a')[0][:href]
|
90
|
+
end
|
91
|
+
|
92
|
+
def get_num_pages(doc)
|
93
|
+
doc.css('select')[1].children.length - 1
|
94
|
+
end
|
95
|
+
end
|
59
96
|
end
|
data/lib/mangdown/commands.rb
CHANGED
@@ -8,6 +8,10 @@ module M
|
|
8
8
|
search =~ /\w/
|
9
9
|
end
|
10
10
|
|
11
|
+
def file_path
|
12
|
+
Dir.home + '/.manga_list.yml'
|
13
|
+
end
|
14
|
+
|
11
15
|
#returns a list of hash with :uri and :name of mangas found in @@list
|
12
16
|
def find(search)
|
13
17
|
unless valid_search?(search)
|
@@ -15,34 +19,44 @@ module M
|
|
15
19
|
return []
|
16
20
|
end
|
17
21
|
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# if the yaml file doesn't exist get a new list
|
22
|
-
# write the new list to the yaml file
|
23
|
-
@@list ||= PopularManga.new(
|
24
|
-
'http://www.mangareader.net/popular', 3000)
|
25
|
-
|
26
|
-
search_result = @@list.mangas_list.select do |manga|
|
27
|
-
manga[:name].downcase.include?(search.downcase)
|
28
|
-
end
|
22
|
+
# Previously, popular manga was used for find, but there is a
|
23
|
+
# much better way to do it
|
24
|
+
# PopularManga.new('http://www.mangareader.net/popular', 3000)
|
29
25
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
26
|
+
if File.exist?(file_path)
|
27
|
+
file_current = File.mtime(file_path) > (Time.now - 60*60*24*7)
|
28
|
+
end
|
29
|
+
|
30
|
+
if file_current
|
31
|
+
@@list = YAML.load(File.open(file_path, 'r').read)
|
32
|
+
else
|
33
|
+
@@list = MangaList.new(
|
34
|
+
'http://www.mangareader.net/alphabetical',
|
35
|
+
'http://mangafox.me/manga/'
|
36
|
+
)
|
37
|
+
|
38
|
+
File.open(file_path, 'w+') do |f|
|
39
|
+
f.write( @@list.to_yaml )
|
40
|
+
end
|
35
41
|
end
|
36
|
-
=end
|
37
42
|
|
43
|
+
search_result = @@list.mangas.select do |manga|
|
44
|
+
manga[:name].downcase.include?(search.downcase)
|
45
|
+
end
|
46
|
+
|
38
47
|
puts "Could not find manga" if search_result.empty?
|
39
48
|
|
40
49
|
search_result
|
41
50
|
end
|
42
51
|
|
43
52
|
def download(manga, first_chapter = 0, last_chapter = -1)
|
44
|
-
|
45
|
-
|
53
|
+
if manga.class == MDHash
|
54
|
+
manga = Manga.new(manga)
|
55
|
+
end
|
56
|
+
|
57
|
+
chapters = ::Mangdown::Tools.slow_get_chapters(
|
58
|
+
manga, first_chapter, last_chapter)
|
59
|
+
::Mangdown::Tools.slow_dl_chapters(chapters)
|
46
60
|
end
|
47
61
|
|
48
62
|
def cbz(dir)
|
@@ -54,4 +68,8 @@ module M
|
|
54
68
|
File.dirname(__FILE__))
|
55
69
|
puts File.open(help_file, 'r').read
|
56
70
|
end
|
71
|
+
|
72
|
+
def clean_up
|
73
|
+
File.delete(file_path) if File.exist?(file_path)
|
74
|
+
end
|
57
75
|
end
|
data/lib/mangdown/manga.rb
CHANGED
@@ -2,11 +2,11 @@ module Mangdown
|
|
2
2
|
class Manga
|
3
3
|
include ::Mangdown::Tools
|
4
4
|
|
5
|
-
attr_reader :chapters, :chapters_list
|
5
|
+
attr_reader :chapters, :chapters_list
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
@
|
7
|
+
#initialize only use @info[:key]
|
8
|
+
def initialize(info)
|
9
|
+
@info = info
|
10
10
|
|
11
11
|
#Keeping these chapter objects in memory could be expensive
|
12
12
|
@chapters = []
|
@@ -15,30 +15,69 @@ module Mangdown
|
|
15
15
|
get_chapters_list
|
16
16
|
end
|
17
17
|
|
18
|
+
# reader method for uri
|
19
|
+
def uri
|
20
|
+
@info[:uri]
|
21
|
+
end
|
22
|
+
|
23
|
+
# reader method for name
|
24
|
+
def name
|
25
|
+
@info[:name]
|
26
|
+
end
|
27
|
+
|
18
28
|
def get_chapters_list
|
19
|
-
doc = ::Mangdown::Tools.get_doc(@uri)
|
20
|
-
root = ::Mangdown::Tools.get_root(@uri)
|
29
|
+
doc = ::Mangdown::Tools.get_doc(@info[:uri])
|
30
|
+
root = ::Mangdown::Tools.get_root(@info[:uri])
|
21
31
|
|
22
32
|
#get the link with chapter name and uri
|
23
|
-
doc.css(
|
24
|
-
|
33
|
+
doc.css(css_klass(root)).each do |chapter|
|
34
|
+
hash = MDHash.new
|
35
|
+
hash[:uri] = (root + chapter[:href].sub(root, ''))
|
36
|
+
hash[:name] = chapter.text
|
37
|
+
@chapters_list << hash
|
38
|
+
end
|
39
|
+
|
40
|
+
if root =~ /mangafox/
|
41
|
+
@chapters_list.reverse!
|
25
42
|
end
|
26
43
|
end
|
27
44
|
|
45
|
+
def css_klass(site)
|
46
|
+
case site
|
47
|
+
when /mangareader/
|
48
|
+
'div#chapterlist td a'
|
49
|
+
when /mangafox/
|
50
|
+
'a.tips'
|
51
|
+
else
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# chapter is an MDHash
|
57
|
+
def chapter_found(chapter)
|
58
|
+
@chapters.find do |chp|
|
59
|
+
(chp.name == chapter[:name]) or (chp.uri == chapter[:uri])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
28
63
|
def get_chapter(index)
|
29
64
|
|
30
|
-
root = ::Mangdown::Tools.get_root(@uri)
|
31
|
-
|
32
|
-
|
33
|
-
unless
|
34
|
-
# this is
|
35
|
-
|
36
|
-
|
65
|
+
root = ::Mangdown::Tools.get_root(@info[:uri])
|
66
|
+
chapter = @chapters_list[index]
|
67
|
+
|
68
|
+
unless chapter_found(chapter)
|
69
|
+
# this should be put in a module the case is used in
|
70
|
+
# almost every class
|
71
|
+
chapter_klass = case root
|
72
|
+
when /mangareader/
|
73
|
+
::Mangdown::MRChapter
|
74
|
+
when /mangafox/
|
75
|
+
::Mangdown::MFChapter
|
37
76
|
else
|
38
|
-
|
77
|
+
return :no_chapter
|
39
78
|
end
|
40
79
|
|
41
|
-
@chapters << chapter_klass.new(
|
80
|
+
@chapters << chapter_klass.new(chapter)
|
42
81
|
else
|
43
82
|
puts "This chapter has already been added"
|
44
83
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Mangdown
|
2
|
+
class MangaList
|
3
|
+
|
4
|
+
attr_reader :mangas
|
5
|
+
|
6
|
+
def initialize(*uri)
|
7
|
+
@uri = uri
|
8
|
+
@mangas = []
|
9
|
+
|
10
|
+
@uri.each {|uri| get_mangas(uri)}
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_mangas(uri)
|
14
|
+
doc = ::Mangdown::Tools.get_doc(uri)
|
15
|
+
root = ::Mangdown::Tools.get_root(uri)
|
16
|
+
|
17
|
+
|
18
|
+
# This should be put in a tool
|
19
|
+
doc.css(css_klass(root)).each do |a|
|
20
|
+
hash = MDHash.new
|
21
|
+
#hot fix
|
22
|
+
url = case root
|
23
|
+
when /mangareader/
|
24
|
+
root + a[:href]
|
25
|
+
when /mangafox/
|
26
|
+
a[:href]
|
27
|
+
else
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
|
31
|
+
hash[:uri], hash[:name] = url, a.text
|
32
|
+
@mangas << hash
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def css_klass(site)
|
37
|
+
case site
|
38
|
+
when /mangareader/
|
39
|
+
'ul.series_alpha li a'
|
40
|
+
when /mangafox/
|
41
|
+
'div.manga_list li a'
|
42
|
+
else
|
43
|
+
nil
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/mangdown/page.rb
CHANGED
@@ -1,20 +1,29 @@
|
|
1
1
|
module Mangdown
|
2
2
|
class Page
|
3
|
-
attr_reader :filename, :uri
|
4
3
|
|
5
|
-
|
4
|
+
attr_reader :info
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
@
|
6
|
+
# like chapter and manga, should initialize with MDHash, and use
|
7
|
+
# @info[:key]
|
8
|
+
def initialize(info)
|
9
|
+
@info = info
|
10
|
+
end
|
11
|
+
|
12
|
+
def filename
|
13
|
+
@info[:name]
|
14
|
+
end
|
15
|
+
|
16
|
+
def uri
|
17
|
+
@info[:uri]
|
11
18
|
end
|
12
19
|
|
13
20
|
# this method should probably be moved somewhere else because
|
14
21
|
# pages, chapters and mangas can all be "downloaded"
|
15
22
|
def download
|
16
|
-
File.
|
17
|
-
|
23
|
+
unless File.exist?(@info[:name])
|
24
|
+
File.open(@info[:name], 'wb') do |file|
|
25
|
+
file.write(open(URI.encode(@info[:uri], '[]')).read)
|
26
|
+
end
|
18
27
|
end
|
19
28
|
end
|
20
29
|
end
|
data/lib/mangdown/popular.rb
CHANGED
@@ -16,15 +16,14 @@ module Mangdown
|
|
16
16
|
get_mangas_list
|
17
17
|
end
|
18
18
|
|
19
|
-
#Depreciated
|
19
|
+
#Depreciated use MDHash.get_manga
|
20
20
|
def get_manga(number)
|
21
21
|
puts "This has been depreciated, don't use PopularManga @mangas!"
|
22
|
-
|
23
|
-
name = @mangas_list[number - 1][:name]
|
22
|
+
manga = @mangas_list[number - 1]
|
24
23
|
|
25
|
-
unless @mangas.find {|
|
26
|
-
(
|
27
|
-
@mangas << Manga.new(
|
24
|
+
unless @mangas.find {|mnga| (mnga.name == manga[:name]) or
|
25
|
+
(mnga.uri == manga[:uri])}
|
26
|
+
@mangas << Manga.new(manga)
|
28
27
|
else
|
29
28
|
puts "This manga has already been added.."
|
30
29
|
end
|
data/lib/mangdown/tools.rb
CHANGED
@@ -2,6 +2,16 @@ module Mangdown
|
|
2
2
|
module Tools
|
3
3
|
extend self
|
4
4
|
|
5
|
+
def special?(klass)
|
6
|
+
klasses = [Manga, Chapter, Page, MRChapter, MFChapter]
|
7
|
+
|
8
|
+
if klasses.find(self.class)
|
9
|
+
true
|
10
|
+
else
|
11
|
+
false
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
5
15
|
def get_doc(uri)
|
6
16
|
@doc = ::Nokogiri::HTML(open(uri))
|
7
17
|
end
|
@@ -11,30 +21,41 @@ module Mangdown
|
|
11
21
|
end
|
12
22
|
|
13
23
|
def to_s
|
14
|
-
|
24
|
+
if special?(self.class)
|
25
|
+
"<#{self.class}::#{self.object_id} : #{@name} : #{@uri}>"
|
26
|
+
else
|
27
|
+
super
|
28
|
+
end
|
15
29
|
end
|
16
30
|
|
17
31
|
def eql?(other)
|
18
|
-
|
32
|
+
if special?(self.class)
|
33
|
+
(self.name == other.name) and (self.uri == other.uri)
|
34
|
+
else
|
35
|
+
super
|
36
|
+
end
|
19
37
|
end
|
20
38
|
|
21
39
|
def ==(other)
|
22
|
-
|
40
|
+
if special?(self.class)
|
41
|
+
puts 'You may want to use eql?'
|
42
|
+
end
|
43
|
+
|
23
44
|
super
|
24
45
|
end
|
25
46
|
|
26
|
-
def no_time_out(tries = 3)
|
47
|
+
def no_time_out(tries = 3, &block)
|
48
|
+
tries -= 1
|
27
49
|
begin
|
28
50
|
timeout(120) do
|
29
51
|
yield
|
30
52
|
end
|
31
|
-
|
32
|
-
if tries
|
33
|
-
tries -= 1
|
53
|
+
rescue
|
54
|
+
if tries >= 0
|
34
55
|
puts "Tries left: #{tries}"
|
35
|
-
no_time_out(tries)
|
56
|
+
no_time_out(tries, &block)
|
36
57
|
else
|
37
|
-
return
|
58
|
+
return :timed_out
|
38
59
|
end
|
39
60
|
end
|
40
61
|
end
|
@@ -42,17 +63,17 @@ module Mangdown
|
|
42
63
|
def slow_get_chapters(manga, bgn, nd)
|
43
64
|
@@file_name = File.expand_path("#{manga.name}_temp.yml")
|
44
65
|
|
45
|
-
|
46
|
-
|
47
|
-
if exists
|
66
|
+
# get Manga object from file if it exists
|
67
|
+
if File.exist?(@@file_name)
|
48
68
|
manga_from_file = YAML.load(File.open(@@file_name, 'r').read)
|
49
69
|
end
|
50
70
|
|
51
71
|
if manga_from_file and (manga_from_file.chapters.length > 0)
|
52
|
-
frst = (manga.chapters_list[bgn][
|
72
|
+
frst = (manga.chapters_list[bgn][:name] ==
|
53
73
|
manga_from_file.chapters.first.name)
|
54
|
-
lst = (manga.chapters_list[nd][
|
74
|
+
lst = (manga.chapters_list[nd][:name] ==
|
55
75
|
manga_from_file.chapters.last.name)
|
76
|
+
# check if this is the right temp file
|
56
77
|
manga = manga_from_file if (frst and lst)
|
57
78
|
else
|
58
79
|
manga.chapters_list[bgn..nd].each_index do |i|
|
@@ -70,9 +91,12 @@ module Mangdown
|
|
70
91
|
Dir.mkdir(manga.name) unless Dir.exist?(manga.name)
|
71
92
|
Dir.chdir(manga.name)
|
72
93
|
|
94
|
+
manga_start_dir = Dir.pwd
|
73
95
|
manga.chapters.each do |chap|
|
74
|
-
|
75
|
-
|
96
|
+
no_time_out do
|
97
|
+
Dir.chdir(manga_start_dir)
|
98
|
+
chap.download
|
99
|
+
end
|
76
100
|
end
|
77
101
|
|
78
102
|
File.delete(@@file_name)
|
@@ -80,6 +104,9 @@ module Mangdown
|
|
80
104
|
end
|
81
105
|
|
82
106
|
def check_file_or_dir_name(name)
|
107
|
+
|
108
|
+
# slice the last number in the file or directory name,
|
109
|
+
# which will be either the page number or the chapter number
|
83
110
|
num = name.slice(/(\d+)(\.jpg)*\Z/, 1)
|
84
111
|
|
85
112
|
if num
|
@@ -94,18 +121,19 @@ module Mangdown
|
|
94
121
|
end
|
95
122
|
|
96
123
|
def check_dir(dir)
|
97
|
-
Dir.glob(dir + '/*').each do |
|
98
|
-
|
99
|
-
|
124
|
+
Dir.glob(dir + '/*').each do |file_name|
|
125
|
+
#do block on each file name, but skip .cbz files
|
126
|
+
next if file_name.include?('.cbz')
|
127
|
+
yield(file_name)
|
100
128
|
end
|
101
129
|
end
|
102
130
|
|
103
131
|
def validate_file_or_dir_names(dir)
|
104
|
-
check_dir(dir) do |
|
105
|
-
|
132
|
+
check_dir(dir) do |file_name|
|
133
|
+
checked_name = check_file_or_dir_name(file_name)
|
106
134
|
|
107
|
-
unless
|
108
|
-
File.rename(
|
135
|
+
unless file_name == checked_name
|
136
|
+
File.rename(file_name, checked_name)
|
109
137
|
end
|
110
138
|
end
|
111
139
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module Mangdown
|
4
|
-
@@
|
5
|
-
@@
|
4
|
+
@@chapter_hash = MDHash.new
|
5
|
+
@@chapter_hash[:uri] = 'http://www.mangareader.net/bleach/537'
|
6
|
+
@@chapter_hash[:name] = 'Bleach 537'
|
6
7
|
|
7
|
-
chapter = MRChapter.new(
|
8
|
+
chapter = MRChapter.new(@@chapter_hash)
|
8
9
|
chapter.download
|
9
10
|
|
10
11
|
STUB_PATH = File.expand_path('../../objects/chapter.yml', __FILE__)
|
@@ -21,7 +22,7 @@ module Mangdown
|
|
21
22
|
context "when chapter is initialized" do
|
22
23
|
# sanity check, not necessary
|
23
24
|
it "should have the right chapter uri" do
|
24
|
-
expect(@chapter.uri).to eq(@@uri)
|
25
|
+
expect(@chapter.uri).to eq(@@chapter_hash[:uri])
|
25
26
|
end
|
26
27
|
|
27
28
|
it "should get pages when initialized" do
|
@@ -37,6 +38,19 @@ module Mangdown
|
|
37
38
|
expect(@chapter.pages.last.filename).to eq(
|
38
39
|
'Bleach 537 - Page 21.jpg')
|
39
40
|
end
|
41
|
+
|
42
|
+
context "as a MFChapter" do
|
43
|
+
it "should have pages" do
|
44
|
+
hash = MDHash.new
|
45
|
+
hash[:uri] =
|
46
|
+
'http://mangafox.me/manga/kitsune_no_yomeiri/v01/c001/1.html'
|
47
|
+
hash[:name] = 'Kitsune no Yomeiri 1'
|
48
|
+
|
49
|
+
chapter = MFChapter.new(hash)
|
50
|
+
|
51
|
+
expect(chapter.pages).not_to be_empty
|
52
|
+
end
|
53
|
+
end
|
40
54
|
end
|
41
55
|
|
42
56
|
# Move these to Tools spec
|
@@ -61,13 +75,15 @@ module Mangdown
|
|
61
75
|
context "when chapter is downloaded" do
|
62
76
|
it "should have a sub directory in the current directory" do
|
63
77
|
dir = Dir.pwd
|
64
|
-
|
65
|
-
|
78
|
+
chapter_path = dir + '/' + @chapter.name
|
79
|
+
|
80
|
+
expect(Dir.glob(dir + '/*' )).to include(chapter_path)
|
66
81
|
end
|
67
82
|
|
68
83
|
it "should download all it's pages" do
|
69
84
|
dir = Dir.pwd + '/' + @chapter.name
|
70
85
|
# expect(dir).to include("mangdown/#{@chapter.name}")
|
86
|
+
|
71
87
|
pages_in_dir = Dir.glob(dir + '/*.jpg').length
|
72
88
|
expect(pages_in_dir).to eq(@chapter.pages.length)
|
73
89
|
#@chapter.pages.each do |page|
|
@@ -4,10 +4,17 @@ module M
|
|
4
4
|
|
5
5
|
describe "commands" do
|
6
6
|
before(:all) do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
hash = MDHash.new
|
8
|
+
hash[:uri] = 'http://www.mangareader.net/6-no-trigger'
|
9
|
+
hash[:name] = '6 no Trigger'
|
10
|
+
@manga = Manga.new(hash)
|
11
|
+
|
12
|
+
hash = MDHash.new
|
13
|
+
hash[:uri] = 'http://mangafox.me/manga/naruto/'
|
14
|
+
hash[:name] = 'Naruto'
|
15
|
+
@mf_manga = Manga.new(hash)
|
16
|
+
|
17
|
+
M.download(@manga, 1, 3)
|
11
18
|
M.cbz("./#{@manga.name}")
|
12
19
|
end
|
13
20
|
|
@@ -21,8 +28,29 @@ module M
|
|
21
28
|
expect(m.length).to be > 1
|
22
29
|
end
|
23
30
|
|
31
|
+
it "should find a manga from MF" do
|
32
|
+
m = M.find('naruto')
|
33
|
+
mangafox_hash_found = m.find {|hash| hash[:uri] =~ /mangafox/}
|
34
|
+
expect(mangafox_hash_found).not_to be_nil
|
35
|
+
end
|
36
|
+
|
37
|
+
#for sanity
|
38
|
+
it "should create a list of MDHash" do
|
39
|
+
expect(@mf_manga.chapters_list[10]).to be_kind_of(MDHash)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should create MFChapter for mf manga" do
|
43
|
+
@mf_manga.get_chapter(10)
|
44
|
+
expect(@mf_manga.chapters.first).to be_kind_of(MFChapter)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should download a manga from MF" do
|
48
|
+
dir = Dir.pwd
|
49
|
+
M.download(@mf_manga, 500, 501)
|
50
|
+
expect(Dir.glob(dir + "/#{@mf_manga.name}/*").length).to eq(2)
|
51
|
+
end
|
52
|
+
|
24
53
|
it "should download a manga with the download command" do
|
25
|
-
puts Dir.pwd
|
26
54
|
chps = Dir.glob("#{Dir.pwd}/#{@manga.name}/*/")
|
27
55
|
expect(chps.length).to eq(3)
|
28
56
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper.rb'
|
2
|
+
|
3
|
+
module Mangdown
|
4
|
+
describe MangaList do
|
5
|
+
before do
|
6
|
+
@manga_list = MangaList.new(
|
7
|
+
'http://www.mangareader.net/alphabetical')
|
8
|
+
end
|
9
|
+
|
10
|
+
subject {@manga_list}
|
11
|
+
|
12
|
+
it "should not have an empty manga list" do
|
13
|
+
expect(subject.mangas).to_not be_empty
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
data/spec/mangdown/manga_spec.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
require_relative '../spec_helper'
|
2
2
|
|
3
3
|
module Mangdown
|
4
|
-
@@
|
5
|
-
@@
|
4
|
+
@@manga_hash = MDHash.new
|
5
|
+
@@manga_hash[:uri] = 'http://www.mangareader.net/94/bleach.html'
|
6
|
+
@@manga_hash[:name] = 'Bleach'
|
6
7
|
|
7
|
-
manga = Manga.new(
|
8
|
+
manga = Manga.new(@@manga_hash)
|
8
9
|
|
9
|
-
MANGA_STUB_PATH = File.expand_path('../../objects/manga.yml',
|
10
|
+
MANGA_STUB_PATH = File.expand_path('../../objects/manga.yml',
|
11
|
+
__FILE__)
|
12
|
+
|
10
13
|
File.open(MANGA_STUB_PATH, 'w+') do |file|
|
11
14
|
file.write(manga.to_yaml)
|
12
15
|
end
|
@@ -16,17 +19,27 @@ module Mangdown
|
|
16
19
|
before(:each) do
|
17
20
|
print '@'
|
18
21
|
@manga = YAML.load(File.open(Mangdown::MANGA_STUB_PATH, 'r').read)
|
19
|
-
|
22
|
+
#@manga.get_doc(@@manga_hash[:uri])
|
20
23
|
end
|
21
24
|
|
22
25
|
context "When a manga is initialized" do
|
23
|
-
it "should have chapters" do
|
26
|
+
it "should not have chapters" do
|
24
27
|
expect(@manga.chapters).to be_empty
|
25
28
|
end
|
26
29
|
|
27
30
|
it "should have chapters listed in chapters_list" do
|
28
31
|
expect(@manga.chapters_list).not_to be_empty
|
29
32
|
end
|
33
|
+
|
34
|
+
context "as a MangaFox manga" do
|
35
|
+
it "should have chapters" do
|
36
|
+
hash = MDHash.new
|
37
|
+
hash[:uri] = 'http://mangafox.me/manga/masca_the_beginning/'
|
38
|
+
hash[:name] = 'Masca: The Beginning'
|
39
|
+
manga = Manga.new(hash)
|
40
|
+
expect(manga.chapters_list).not_to be_empty
|
41
|
+
end
|
42
|
+
end
|
30
43
|
end
|
31
44
|
|
32
45
|
context "with Bleach manga" do
|
@@ -35,21 +48,22 @@ module Mangdown
|
|
35
48
|
end
|
36
49
|
|
37
50
|
it "should have the right first chapter" do
|
38
|
-
expect(@manga.chapters_list.first).to eq(
|
39
|
-
|
40
|
-
|
51
|
+
expect(@manga.chapters_list.first).to eq({
|
52
|
+
uri:'http://www.mangareader.net/94-8-1/bleach/chapter-1.html',
|
53
|
+
name: 'Bleach 1'})
|
41
54
|
end
|
42
55
|
|
43
56
|
it "should have the right 465th chapter" do
|
44
|
-
expect(@manga.chapters_list[464]).to eq(
|
45
|
-
|
46
|
-
|
57
|
+
expect(@manga.chapters_list[464]).to eq({
|
58
|
+
uri: 'http://www.mangareader.net/bleach/465',
|
59
|
+
name: 'Bleach 465'})
|
47
60
|
end
|
48
61
|
end
|
49
62
|
|
50
63
|
context "when a chapter is retrieved" do
|
51
64
|
before(:all) do
|
52
|
-
@manga2 = YAML.load(File.open(
|
65
|
+
@manga2 = YAML.load(File.open(
|
66
|
+
Mangdown::MANGA_STUB_PATH, 'r').read)
|
53
67
|
@manga2.get_chapter(0)
|
54
68
|
@mchapter = @manga2.chapters_list[0]
|
55
69
|
end
|
@@ -59,12 +73,12 @@ module Mangdown
|
|
59
73
|
end
|
60
74
|
|
61
75
|
it "should have chapter 1 in chapters" do
|
62
|
-
expect(@manga2.chapters[0].name).to eq(@mchapter[
|
76
|
+
expect(@manga2.chapters[0].name).to eq(@mchapter[:name])
|
63
77
|
end
|
64
78
|
|
65
79
|
it "should have the right chapter sub class" do
|
66
80
|
klass = Chapter
|
67
|
-
if @mchapter[
|
81
|
+
if @mchapter[:uri].include?('mangareader')
|
68
82
|
klass = MRChapter
|
69
83
|
end
|
70
84
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Mangdown
|
4
|
+
|
5
|
+
describe MDHash do
|
6
|
+
before(:all) do
|
7
|
+
@hash = MDHash.new
|
8
|
+
@hash[:uri] = 'http://www.mangareader.net/103/one-piece.html'
|
9
|
+
@hash[:name] = 'One Piece'
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should get a manga object from get_manga" do
|
13
|
+
expect(@hash.get_manga).to be_kind_of(Manga)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/spec/mangdown/page_spec.rb
CHANGED
@@ -4,11 +4,16 @@ module Mangdown
|
|
4
4
|
describe Page do
|
5
5
|
before(:all) do
|
6
6
|
@dir = Dir.pwd
|
7
|
-
|
8
|
-
@
|
9
|
-
|
7
|
+
@page_hash = MDHash.new
|
8
|
+
@page_hash[:uri] =
|
9
|
+
'http://i25.mangareader.net/bleach/537/bleach-4149721.jpg'
|
10
|
+
@page_hash[:name] = "Bleach 537 - Page 1"
|
11
|
+
|
12
|
+
@page = Page.new(@page_hash)
|
10
13
|
@page.download
|
11
|
-
PAGE_STUB_PATH = File.expand_path('../../objects/page.yml',
|
14
|
+
PAGE_STUB_PATH = File.expand_path('../../objects/page.yml',
|
15
|
+
__FILE__)
|
16
|
+
|
12
17
|
File.open(PAGE_STUB_PATH, 'w+') do |file|
|
13
18
|
file.write(@page.to_yaml)
|
14
19
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,7 +2,9 @@ require 'rspec'
|
|
2
2
|
require 'yaml'
|
3
3
|
require_relative '../lib/mangdown'
|
4
4
|
|
5
|
-
|
5
|
+
M.clean_up
|
6
|
+
|
7
|
+
dirs = ['../../Bleach 537', '../../6 no Trigger', '../../Naruto']
|
6
8
|
|
7
9
|
dirs.each do |d|
|
8
10
|
dir = File.expand_path(d, __FILE__)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mangdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jphager2
|
@@ -23,13 +23,16 @@ files:
|
|
23
23
|
- lib/mangdown/chapter.rb
|
24
24
|
- lib/mangdown/commands.rb
|
25
25
|
- lib/mangdown/manga.rb
|
26
|
+
- lib/mangdown/manga_list.rb
|
26
27
|
- lib/mangdown/mangdown_hash.rb
|
27
28
|
- lib/mangdown/page.rb
|
28
29
|
- lib/mangdown/popular.rb
|
29
30
|
- lib/mangdown/tools.rb
|
30
31
|
- spec/mangdown/chapter_spec.rb
|
31
32
|
- spec/mangdown/commands_spec.rb
|
33
|
+
- spec/mangdown/manga_list_spec.rb
|
32
34
|
- spec/mangdown/manga_spec.rb
|
35
|
+
- spec/mangdown/mangdown_hash_spec.rb
|
33
36
|
- spec/mangdown/page_spec.rb
|
34
37
|
- spec/mangdown/popular_spec.rb
|
35
38
|
- spec/objects/make_chapter.rb
|