my_manga 2.2.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 66b65dd0d7cf22075a8f6f11cf291b7c7532f628d909adc2518cdfa020221b39
4
- data.tar.gz: 448a42ed930931e3d07ef243ee8c0880a8eada0e7849ebe828023d271005fd11
3
+ metadata.gz: b65e2a63d07dfda14ee00f3ac66d4bd70b92b2b9b05e98400e3e22bd8c00f532
4
+ data.tar.gz: a52f7124ab1ec038212fa4990948acafc1e2b00d8fd29a9210f71a2a2163c800
5
5
  SHA512:
6
- metadata.gz: 38fab144b34e63f4476e9d3e2f8df15e4037a4cb3e6d749376fe20e0f2dde8ecba08f6dcb58f19cdfc84b5982dec49095b48843d55db886c9aaf73d4bd176954
7
- data.tar.gz: f244506189cd39a8d6271fd1f2a561fd1e4270d3d98bb027a89f93a9f92622937b3f896daf11ae28ec2021c423235061e6b53aa4bf0ebad44717728ae20aaad1
6
+ metadata.gz: 40e61d9b882b078c54a3dfb3c1734a64487fae84be1dff469143dd3fddcea390a18865cd361466b2423fcd4464a03215938766acf8b597cfbbd7d0f27e9f7b11
7
+ data.tar.gz: 1ac41fbc2ff0dcc1e01c98b03bdfcc123554799245c23edbc6ebcc692998192f211c1da96b4a8182f155990fda6bd8ede86ff5dff05baeadae602e7d0ea4cfb7
@@ -6,12 +6,6 @@ require 'hanami/cli'
6
6
  require 'mangdown/client'
7
7
 
8
8
  require_relative 'my_manga/cli'
9
- require_relative 'mangdown/adapters/manga_here'
10
- require_relative 'mangdown/adapters/manga_bat'
11
-
12
- Mangdown.register_adapter(:manga_here, MangaHere)
13
- M.manga_pages << 'http://www.mangahere.cc/mangalist/'
14
- Mangdown.register_adapter(:manga_here, MangaBat)
15
9
 
16
10
  module MyManga
17
11
  module_function
@@ -21,7 +15,7 @@ module MyManga
21
15
  end
22
16
 
23
17
  def find(search)
24
- M.find(Regexp.new(search, 'i'))
18
+ Mangdown::Client.find(search)
25
19
  end
26
20
 
27
21
  def package(dir)
@@ -47,7 +41,7 @@ module MyManga
47
41
  def add(uri)
48
42
  return if Manga.find_by_uri(uri)
49
43
 
50
- md_manga = Mangdown::MDHash.new(uri: uri).to_manga
44
+ md_manga = Mangdown.manga(uri)
51
45
  Manga.from_md(md_manga)
52
46
  end
53
47
 
@@ -97,7 +91,7 @@ module MyManga
97
91
  end
98
92
 
99
93
  def mangdown_client_clean_up
100
- M.clean_up
94
+ Mangdown::Client.index_manga
101
95
  end
102
96
 
103
97
  # @private
@@ -16,10 +16,10 @@ module MyManga
16
16
 
17
17
  return if results.empty?
18
18
 
19
- column_width = results.map { |r| r[:name].length }.max
19
+ column_width = results.map { |r| r.name.length }.max
20
20
  puts pad('Name', column_width) + 'Url'
21
21
  results.each do |result|
22
- puts pad(result[:name], column_width) + result[:uri]
22
+ puts pad(result.name, column_width) + result.uri
23
23
  end
24
24
  end
25
25
  end
@@ -5,12 +5,12 @@ module MyManga
5
5
  module Commands
6
6
  # See desc
7
7
  class MCleanUp < MyManga::CLI::Command
8
- desc 'Remove the manga cache for M, the mangdown client'
8
+ desc 'Remove the manga cache for the mangdown client'
9
9
 
10
10
  def call(*)
11
11
  return unless MyManga.mangdown_client_clean_up
12
12
 
13
- puts 'M cache files removed'
13
+ puts 'Mangdown cache files removed'
14
14
  end
15
15
  end
16
16
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MyManga
4
- VERSION = '2.2.0'
4
+ VERSION = '3.0.0'
5
5
  end
@@ -4,22 +4,18 @@ class Chapter < ActiveRecord::Base
4
4
  scope :read, Proc.new { where(read: true) }
5
5
  scope :unread, Proc.new { where(read: false) }
6
6
 
7
- def self.from_md(md_hash)
8
- uri = md_hash.uri
9
- name = md_hash.name
10
- site = md_hash.site
11
- number = md_hash.chapter
7
+ def self.from_md(md_chapter)
8
+ md_chapter.chapter.load unless md_chapter.number
12
9
 
13
- unless number
14
- adapter = Mangdown.adapter!(uri, site, nil, name)
15
- number = adapter.chapter[:chapter]
16
- end
17
-
18
- find_or_create_by(name: name, uri: uri, number: number)
10
+ find_or_create_by(
11
+ name: md_chapter.name,
12
+ uri: md_chapter.uri,
13
+ number: md_chapter.number
14
+ )
19
15
  end
20
16
 
21
17
  def to_md
22
- ::Mangdown::MDHash.new(name: name, uri: uri).to_chapter
18
+ ::Mangdown.chapter(uri)
23
19
  end
24
20
 
25
21
  def self.numbers
@@ -24,7 +24,7 @@ class Manga < ActiveRecord::Base
24
24
  end
25
25
 
26
26
  def to_md
27
- ::Mangdown::MDHash.new(name: name, uri: uri).to_manga
27
+ ::Mangdown.manga(uri)
28
28
  end
29
29
 
30
30
  def chapters
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: my_manga
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jphager2
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-14 00:00:00.000000000 Z
11
+ date: 2019-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.20.1
47
+ version: 0.21.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.20.1
54
+ version: 0.21.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pg
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.1'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rubocop
70
+ name: minitest
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: minitest
84
+ name: rubocop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -109,8 +109,6 @@ files:
109
109
  - db/environment.rb
110
110
  - db/migrate/001_add_tables.rb
111
111
  - db/migrate/002_add_zine_to_manga.rb
112
- - lib/mangdown/adapters/manga_bat.rb
113
- - lib/mangdown/adapters/manga_here.rb
114
112
  - lib/my_manga.rb
115
113
  - lib/my_manga/add.rb
116
114
  - lib/my_manga/cli.rb
@@ -127,7 +125,6 @@ files:
127
125
  - lib/my_manga/zine.rb
128
126
  - models/chapter.rb
129
127
  - models/manga.rb
130
- - test/adapters_test.rb
131
128
  - test/features_test.rb
132
129
  - test/test_helper.rb
133
130
  homepage: https://github.com/jphager2/my_manga
@@ -1,114 +0,0 @@
1
- class MangaBat < Mangdown::Adapter::Base
2
- site :manga_bat
3
-
4
- ROOT = 'https://mangabat.com/'.freeze
5
- CDNS = [
6
- %r{^https://s\d.mkklcdnv\d.com/mangakakalot}
7
- ].freeze
8
-
9
- attr_reader :root
10
-
11
- def self.for?(uri_or_site)
12
- uri_or_site.to_s.start_with?(ROOT) ||
13
- cdn_uri?(uri_or_site) ||
14
- uri_or_site.to_s == 'manga_bat'
15
- end
16
-
17
- def self.cdn_uri?(uri)
18
- CDNS.any? { |cdn| uri.match?(cdn) }
19
- end
20
-
21
- def initialize(uri, doc, name)
22
- super
23
-
24
- @root = ROOT
25
- end
26
-
27
- def hydra_opts
28
- { max_concurrency: 10 }
29
- end
30
-
31
- def is_manga_list?(uri = @uri)
32
- uri =~ /#{root}manga_list/
33
- end
34
-
35
- # Must return true/false if uri represents a manga for adapter
36
- def is_manga?(uri = @uri)
37
- uri =~ /#{root}manga\//
38
- end
39
-
40
- # Must return true/false if uri represents a chapter for adapter
41
- def is_chapter?(uri = @uri)
42
- uri =~ /#{root}chapter-serie\/\d+\/chap_\d+/
43
- end
44
-
45
- # Must return true/false if uri represents a page for adapter
46
- def is_page?(uri = @uri)
47
- self.class.cdn_uri?(uri)
48
- end
49
-
50
- # Return Array of Hash with keys: :uri, :name, :site
51
- def manga_list
52
- doc.css('.update_item h3 a').map { |a|
53
- uri = URI.join(root, a[:href]).to_s
54
-
55
- { uri: uri, name: a.text.strip, site: site }}
56
- end
57
-
58
- # Return Hash with keys: :uri, :name, :site
59
- def manga
60
- name ||= doc.css('h1.entry-title').first.text.strip
61
-
62
- { uri: uri, name: name, site: site }
63
- end
64
-
65
- # Return Array of Hash with keys: :uri, :name, :site
66
- def chapter_list
67
- chapters = doc.css('.chapter-list .row a')
68
- chapters.reverse.map.with_index do |a, i|
69
- uri = URI.join(root, a[:href]).to_s
70
- name = a.text.strip
71
-
72
- { uri: uri, name: name, chapter: i + 1, site: site }
73
- end
74
- end
75
-
76
- # Return Hash with keys: :uri, :name, :chapter, :manga, :site
77
- #
78
- def chapter
79
- name ||= chapter_name
80
- chapter ||= name.slice(/[\d\.]+$/)
81
- manga = chapter_manga_name
82
-
83
- { uri: uri, name: name, chapter: chapter, manga: manga, site: site }
84
- end
85
-
86
- # Return Array of Hash with keys: :uri, :name, :site
87
- def page_list
88
- doc.css('.vung_doc img').map do |img|
89
- uri = img['src']
90
- name = img.text
91
-
92
- { uri: uri, name: name, site: site }
93
- end
94
- end
95
-
96
- # Return Hash with keys: :uri, :name, :site
97
- def page
98
- name = File.basename(uri.split('/').last) if name.nil?
99
-
100
- { uri: uri, name: name, site: site }
101
- end
102
-
103
- private
104
-
105
- def chapter_name
106
- CGI.unescapeHTML(doc.css('h1.name_chapter').text.strip)
107
- end
108
-
109
- def chapter_manga_name
110
- CGI.unescapeHTML(doc.css('.breadcrumb_doc span:nth-child(3)').text.strip)
111
- end
112
- end
113
-
114
-
@@ -1,116 +0,0 @@
1
- class MangaHere < Mangdown::Adapter::Base
2
- site :manga_here
3
-
4
- ROOT = 'http://www.mangahere.cc/'.freeze
5
- CDNS = [
6
- 'http://l.mhcdn.net/store/manga/',
7
- 'https://mhcdn.secure.footprint.net/store/manga/'
8
- ].freeze
9
-
10
- attr_reader :root
11
-
12
- def self.for?(uri_or_site)
13
- uri_or_site.to_s.start_with?(ROOT) ||
14
- cdn_uri?(uri_or_site) ||
15
- uri_or_site.to_s == 'manga_here'
16
- end
17
-
18
- def self.cdn_uri?(uri)
19
- CDNS.any? { |cdn| uri.to_s.start_with?(cdn) }
20
- end
21
-
22
- def initialize(uri, doc, name)
23
- super
24
-
25
- @root = ROOT
26
- end
27
-
28
- def hydra_opts
29
- { max_concurrency: 1 }
30
- end
31
-
32
- def is_manga_list?(uri = @uri)
33
- uri =~ /#{root}mangalist/
34
- end
35
-
36
- # Must return true/false if uri represents a manga for adapter
37
- def is_manga?(uri = @uri)
38
- uri =~ /#{root}manga\//
39
- end
40
-
41
- # Must return true/false if uri represents a chapter for adapter
42
- def is_chapter?(uri = @uri)
43
- uri =~ /#{root}.+\/c\d{3}\/?/
44
- end
45
-
46
- # Must return true/false if uri represents a page for adapter
47
- def is_page?(uri = @uri)
48
- self.class.cdn_uri?(uri)
49
- end
50
-
51
- # Return Array of Hash with keys: :uri, :name, :site
52
- def manga_list
53
- doc.css('.list_manga a.manga_info').map { |a|
54
- uri = URI.join(root, a[:href]).to_s
55
-
56
- { uri: uri, name: a.text.strip, site: site }}
57
- end
58
-
59
- # Return Hash with keys: :uri, :name, :site
60
- def manga
61
- name ||= doc.css('h1.title').first.text.strip
62
-
63
- { uri: uri, name: name, site: site }
64
- end
65
-
66
- # Return Array of Hash with keys: :uri, :name, :site
67
- def chapter_list
68
- chapters = doc.css('.manga_detail .detail_list ul').first.css('li a')
69
- chapters.reverse.map.with_index do |a, i|
70
- uri = URI.join(root, a[:href]).to_s
71
- name = a.text.strip
72
-
73
- { uri: uri, name: name, chapter: i + 1, site: site }
74
- end
75
- end
76
-
77
- # Return Hash with keys: :uri, :name, :chapter, :manga, :site
78
- #
79
- def chapter
80
- name ||= chapter_name
81
- chapter ||= name.slice(/[\d\.]+$/)
82
- manga = name.sub(/ #{chapter}\Z/, '').strip
83
-
84
- { uri: uri, name: name, chapter: chapter, manga: manga, site: site }
85
- end
86
-
87
- # Return Array of Hash with keys: :uri, :name, :site
88
- def page_list
89
- doc.css('.wid60').first.css('option').map do |option|
90
- uri = URI.join(root, option[:value]).to_s
91
- name = option.text
92
-
93
- { uri: uri, name: name, site: site }
94
- end
95
- end
96
-
97
- # Return Hash with keys: :uri, :name, :site
98
- def page
99
- if name.nil?
100
- option = doc.css('.wid60 option[selected]').first
101
- name = "#{chapter_name} - #{option.text.strip.rjust(3, '0')}"
102
- end
103
-
104
- image = doc.css('.read_img img')[1]
105
- uri = image[:src]
106
-
107
- { uri: uri, name: name, site: site }
108
- end
109
-
110
- private
111
-
112
- def chapter_name
113
- CGI.unescapeHTML(doc.css('.title h1').text.strip)
114
- end
115
- end
116
-
@@ -1,33 +0,0 @@
1
- require_relative 'test_helper'
2
- require_relative '../../mangdown/lib/mangdown/client'
3
- require_relative '../lib/mangdown/adapters/manga_here'
4
- require 'timeout'
5
-
6
- Mangdown.register_adapter(:manga_here, MangaHere)
7
-
8
- class AdaptersTest < Minitest::Test
9
- def setup
10
- @manga_uri = 'http://www.mangahere.co/manga/bokutachi_wa_benkyou_ga_dekinai/'
11
- end
12
-
13
- def build_manga
14
- Mangdown::MDHash.new(uri: @manga_uri).to_manga
15
- end
16
-
17
- def test_creates_manga
18
- assert_silent do
19
- build_manga
20
- end
21
- end
22
-
23
- def test_chapter
24
- manga = build_manga
25
- chapter = nil
26
-
27
- Timeout.timeout(10) do
28
- chapter = manga.chapters[-1].to_chapter
29
- end
30
-
31
- assert chapter
32
- end
33
- end