Class: MangaBat

Inherits:
Mangdown::Adapter::Base
  • Object
show all
Defined in:
lib/mangdown/adapters/manga_bat.rb

Constant Summary collapse

ROOT =
'https://mangabat.com/'.freeze
CDNS =
[
  %r{^https://s\d.mkklcdnv\d.com/mangakakalot}
].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri, doc, name) ⇒ MangaBat

Returns a new instance of MangaBat.



21
22
23
24
25
# File 'lib/mangdown/adapters/manga_bat.rb', line 21

def initialize(uri, doc, name)
  super

  @root = ROOT
end

Instance Attribute Details

#rootObject (readonly)

Returns the value of attribute root.



9
10
11
# File 'lib/mangdown/adapters/manga_bat.rb', line 9

def root
  @root
end

Class Method Details

.cdn_uri?(uri) ⇒ Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/mangdown/adapters/manga_bat.rb', line 17

def self.cdn_uri?(uri)
  CDNS.any? { |cdn| uri.match?(cdn) }
end

.for?(uri_or_site) ⇒ Boolean

Returns:

  • (Boolean)


11
12
13
14
15
# File 'lib/mangdown/adapters/manga_bat.rb', line 11

def self.for?(uri_or_site)
  uri_or_site.to_s.start_with?(ROOT) ||
    cdn_uri?(uri_or_site) ||
    uri_or_site.to_s == 'manga_bat'
end

Instance Method Details

#chapterObject

Return Hash with keys: :uri, :name, :chapter, :manga, :site



78
79
80
81
82
83
84
# File 'lib/mangdown/adapters/manga_bat.rb', line 78

def chapter
  name ||= chapter_name
  chapter ||= name.slice(/[\d\.]+$/)
  manga = chapter_manga_name

  { uri: uri, name: name, chapter: chapter, manga: manga, site: site }
end

#chapter_listObject

Return Array of Hash with keys: :uri, :name, :site



66
67
68
69
70
71
72
73
74
# File 'lib/mangdown/adapters/manga_bat.rb', line 66

def chapter_list
  chapters = doc.css('.chapter-list .row a')
  chapters.reverse.map.with_index do |a, i|
    uri = URI.join(root, a[:href]).to_s
    name = a.text.strip

    { uri: uri, name: name, chapter: i + 1, site: site }
  end
end

#hydra_optsObject



27
28
29
# File 'lib/mangdown/adapters/manga_bat.rb', line 27

def hydra_opts
  { max_concurrency: 10 }
end

#is_chapter?(uri = @uri) ⇒ Boolean

Must return true/false if uri represents a chapter for adapter

Returns:

  • (Boolean)


41
42
43
# File 'lib/mangdown/adapters/manga_bat.rb', line 41

def is_chapter?(uri = @uri)
  uri =~ /#{root}chapter-serie\/\d+\/chap_\d+/
end

#is_manga?(uri = @uri) ⇒ Boolean

Must return true/false if uri represents a manga for adapter

Returns:

  • (Boolean)


36
37
38
# File 'lib/mangdown/adapters/manga_bat.rb', line 36

def is_manga?(uri = @uri)
  uri =~ /#{root}manga\//
end

#is_manga_list?(uri = @uri) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/mangdown/adapters/manga_bat.rb', line 31

def is_manga_list?(uri = @uri)
  uri =~ /#{root}manga_list/
end

#is_page?(uri = @uri) ⇒ Boolean

Must return true/false if uri represents a page for adapter

Returns:

  • (Boolean)


46
47
48
# File 'lib/mangdown/adapters/manga_bat.rb', line 46

def is_page?(uri = @uri)
  self.class.cdn_uri?(uri)
end

#mangaObject

Return Hash with keys: :uri, :name, :site



59
60
61
62
63
# File 'lib/mangdown/adapters/manga_bat.rb', line 59

def manga
  name ||= doc.css('h1.entry-title').first.text.strip

  { uri: uri, name: name, site: site }
end

#manga_listObject

Return Array of Hash with keys: :uri, :name, :site



51
52
53
54
55
56
# File 'lib/mangdown/adapters/manga_bat.rb', line 51

def manga_list
  doc.css('.update_item h3 a').map { |a|
    uri = URI.join(root, a[:href]).to_s

    { uri: uri, name: a.text.strip, site: site }}
end

#pageObject

Return Hash with keys: :uri, :name, :site



97
98
99
100
101
# File 'lib/mangdown/adapters/manga_bat.rb', line 97

def page
  name = File.basename(uri.split('/').last) if name.nil?

  { uri: uri, name: name, site: site }
end

#page_listObject

Return Array of Hash with keys: :uri, :name, :site



87
88
89
90
91
92
93
94
# File 'lib/mangdown/adapters/manga_bat.rb', line 87

def page_list
  doc.css('.vung_doc img').map do |img|
    uri = img['src']
    name = img.text

    { uri: uri, name: name, site: site }
  end
end