mangdown 0.14.0 → 0.14.1
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/README.md +13 -0
- data/lib/mangdown/adapter/mangareader.rb +1 -1
- data/lib/mangdown/adapter.rb +1 -2
- data/lib/mangdown/chapter.rb +16 -14
- data/lib/mangdown/manga.rb +7 -19
- data/lib/mangdown/manga_list.rb +4 -5
- data/lib/mangdown/md_hash.rb +45 -60
- data/lib/mangdown/page.rb +4 -4
- data/lib/mangdown/support/cbz.rb +65 -0
- data/lib/mangdown/{equality.rb → support/equality.rb} +0 -0
- data/lib/mangdown/support/logging.rb +25 -0
- data/lib/mangdown/support/properties.rb +47 -0
- data/lib/mangdown/support/tools.rb +77 -0
- data/lib/mangdown/version.rb +1 -1
- data/lib/mangdown.rb +5 -5
- data/test/lib/mangdown/adapter_test.rb +117 -0
- data/test/lib/mangdown/chapter_test.rb +115 -0
- data/test/lib/mangdown/manga_list_test.rb +50 -0
- data/test/lib/mangdown/manga_test.rb +161 -0
- data/test/lib/mangdown/support/cbz_test.rb +70 -0
- data/test/lib/mangdown/support/equality_test.rb +24 -0
- data/test/lib/mangdown/support/logging_test.rb +48 -0
- data/test/lib/mangdown/support/properties_test.rb +59 -0
- data/test/lib/mangdown/support/tools_test.rb +109 -0
- data/test/lib/mangdown_test.rb +41 -0
- data/test/support/test_adapter.rb +105 -0
- data/test/test_helper.rb +8 -0
- metadata +34 -36
- data/lib/mangdown/cbz.rb +0 -60
- data/lib/mangdown/properties.rb +0 -38
- data/lib/mangdown/tools.rb +0 -97
- data/lib/mangdown/uri.rb +0 -8
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'webmock/minitest'
|
3
|
+
|
4
|
+
module Mangdown
|
5
|
+
class ToolsTest < Minitest::Test
|
6
|
+
UriStruct = Struct.new(:uri)
|
7
|
+
|
8
|
+
def test_get_doc
|
9
|
+
url = 'http://www.anything.com/'
|
10
|
+
stub_request(:get, url).to_return(body: '<html><body>Body</body>')
|
11
|
+
|
12
|
+
doc = Tools.get_doc(url)
|
13
|
+
assert_equal 'Body', doc.css('body').text
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_get
|
17
|
+
url = 'http://www.anything.com/'
|
18
|
+
stub_request(:get, url).to_return(body: 'Body')
|
19
|
+
|
20
|
+
body = Tools.get(url)
|
21
|
+
assert_equal 'Body', body
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_get_root
|
25
|
+
url_with_path = 'http://www.anything.com/path/to/something'
|
26
|
+
url_with_slash = 'http://www.anything.com/'
|
27
|
+
url = 'http://www.anything.com'
|
28
|
+
|
29
|
+
assert_equal url, Tools.get_root(url)
|
30
|
+
assert_equal url, Tools.get_root(url_with_slash)
|
31
|
+
assert_equal url, Tools.get_root(url_with_path)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_relative_or_absolute_path
|
35
|
+
absolute = %w(/root to this path)
|
36
|
+
relative = %w(relative path from here)
|
37
|
+
|
38
|
+
absolute_path = Tools.relative_or_absolute_path(*absolute)
|
39
|
+
relative_path = Tools.relative_or_absolute_path(*relative)
|
40
|
+
|
41
|
+
assert_equal '/root/to/this/path', absolute_path.to_s
|
42
|
+
assert_equal Dir.pwd + '/relative/path/from/here', relative_path.to_s
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_valid_path_name
|
46
|
+
assert_equal 'Name 00001.ext', Tools.valid_path_name('Name 001.ext')
|
47
|
+
assert_equal 'Name 00001', Tools.valid_path_name('Name 001')
|
48
|
+
assert_equal 'Name 00001', Tools.valid_path_name('Name 1')
|
49
|
+
assert_equal 'Name 00001', Tools.valid_path_name('Name 00000000001')
|
50
|
+
assert_equal '100 Name', Tools.valid_path_name('100 Name')
|
51
|
+
assert_equal 'Name 100 Name', Tools.valid_path_name('Name 100 Name')
|
52
|
+
assert_equal 'Name', Tools.valid_path_name('Name')
|
53
|
+
assert_equal(
|
54
|
+
'Name 10000000000', Tools.valid_path_name('Name 10000000000')
|
55
|
+
)
|
56
|
+
assert_equal(
|
57
|
+
'/path/to/Name 00001', Tools.valid_path_name('/path/to/Name 001')
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_file_type
|
62
|
+
image_dir = Pathname.new(
|
63
|
+
File.expand_path('../../../fixtures/images', __dir__)
|
64
|
+
)
|
65
|
+
|
66
|
+
assert_equal 'jpeg', Tools.image_extension(image_dir.join('naruto.jpg'))
|
67
|
+
assert_equal 'png', Tools.image_extension(image_dir.join('naruto.png'))
|
68
|
+
assert_equal 'gif', Tools.image_extension(image_dir.join('naruto.gif'))
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_hydra_streaming
|
72
|
+
objects = 3.times.map do |i|
|
73
|
+
url = "http://www.anything-#{i}.com/"
|
74
|
+
stub_request(:get, url).to_return(
|
75
|
+
body: "<html><body>Body-#{i}</body>"
|
76
|
+
)
|
77
|
+
UriStruct.new(url)
|
78
|
+
end
|
79
|
+
|
80
|
+
url = 'http://www.fail.com/'
|
81
|
+
objects << UriStruct.new(url)
|
82
|
+
stub_request(:get, url).to_return(status: 404)
|
83
|
+
|
84
|
+
bodies = []
|
85
|
+
fails = []
|
86
|
+
complete = []
|
87
|
+
|
88
|
+
Tools.hydra_streaming(objects) do |status, object, data=nil|
|
89
|
+
case status
|
90
|
+
when :before
|
91
|
+
return true unless objects.index(object) == 1
|
92
|
+
when :succeeded
|
93
|
+
# Do nothing
|
94
|
+
when :failed
|
95
|
+
fails << object
|
96
|
+
when :complete
|
97
|
+
complete << object
|
98
|
+
when :body
|
99
|
+
bodies << data
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
assert_equal ['Body-0', 'Body-2'], bodies.sort
|
104
|
+
assert_equal [objects.delete(3)], fails
|
105
|
+
refute_includes complete, objects.delete(1)
|
106
|
+
assert_equal objects, complete
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class MangdownTest < Minitest::Test
|
4
|
+
|
5
|
+
def doc
|
6
|
+
Nokogiri::HTML("<html></html>")
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_register_adapter
|
10
|
+
adapters_before = Mangdown::ADAPTERS.length
|
11
|
+
|
12
|
+
bogus = Class.new(Mangdown::Adapter::Base)
|
13
|
+
|
14
|
+
Mangdown.register_adapter(:bogus_adapter, bogus)
|
15
|
+
|
16
|
+
assert Mangdown::ADAPTERS.length == adapters_before + 1
|
17
|
+
|
18
|
+
Mangdown::ADAPTERS.delete(:bogus_adapter)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_adapter
|
22
|
+
assert_equal TestAdapter, Mangdown.adapter(:test)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_adapter!
|
26
|
+
assert_instance_of TestAdapter, Mangdown.adapter!("test")
|
27
|
+
assert_instance_of TestAdapter, Mangdown.adapter!(nil, "test")
|
28
|
+
assert_instance_of TestAdapter, Mangdown.adapter!(
|
29
|
+
"test", nil, doc, "test"
|
30
|
+
)
|
31
|
+
|
32
|
+
adapters = Mangdown::ADAPTERS.dup
|
33
|
+
Mangdown::ADAPTERS.clear
|
34
|
+
|
35
|
+
assert_raises(Mangdown::Adapter::NoAdapterError) {
|
36
|
+
Mangdown.adapter!(nil)
|
37
|
+
}
|
38
|
+
|
39
|
+
Mangdown::ADAPTERS.merge!(adapters)
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
class TestAdapter < Mangdown::Adapter::Base
|
2
|
+
|
3
|
+
site :test
|
4
|
+
|
5
|
+
def self.for?(url_or_site)
|
6
|
+
true
|
7
|
+
end
|
8
|
+
|
9
|
+
# Overwrite if you want to check the uri if it belongs to a manga list
|
10
|
+
def is_manga_list?(uri = @uri)
|
11
|
+
true
|
12
|
+
end
|
13
|
+
|
14
|
+
# Must return true/false if uri represents a manga for adapter
|
15
|
+
def is_manga?(uri = @uri)
|
16
|
+
true
|
17
|
+
end
|
18
|
+
|
19
|
+
# Must return true/false if uri represents a chapter for adapter
|
20
|
+
def is_chapter?(uri = @uri)
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
# Must return true/false if uri represents a page for adapter
|
25
|
+
def is_page?(uri = @uri)
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
29
|
+
# Return Array of Hash with keys: :uri, :name, :site
|
30
|
+
def manga_list
|
31
|
+
[
|
32
|
+
{ uri: "http://www.manga.com/naruto", name: "Naruto", site: site },
|
33
|
+
{ uri: "http://www.manga.com/bleach", name: "Bleach", site: site },
|
34
|
+
{ uri: "http://www.manga.com/one-piece", name: "One Piece", site: site }
|
35
|
+
]
|
36
|
+
end
|
37
|
+
|
38
|
+
# Return Hash with keys: :uri, :name, :site
|
39
|
+
def manga
|
40
|
+
{ uri: "http://www.manga.com/naruto", name: "Naruto", site: site }
|
41
|
+
end
|
42
|
+
|
43
|
+
# Return Array of Hash with keys: :uri, :name, :site
|
44
|
+
def chapter_list
|
45
|
+
[
|
46
|
+
{ uri: "http://www.manga.com/naruto/1", name: "Naruto", site: site },
|
47
|
+
{ uri: "http://www.manga.com/naruto/2", name: "Naruto", site: site },
|
48
|
+
{ uri: "http://www.manga.com/naruto/3", name: "Naruto", site: site },
|
49
|
+
{ uri: "http://www.manga.com/naruto/4", name: "Naruto", site: site },
|
50
|
+
{ uri: "http://www.manga.com/naruto/5", name: "Naruto", site: site }
|
51
|
+
]
|
52
|
+
end
|
53
|
+
|
54
|
+
# Return Hash with keys: :uri, :name, :chapter, :manga, :site
|
55
|
+
def chapter
|
56
|
+
{ uri: "http://www.manga.com/naruto/2",
|
57
|
+
name: "Naruto - Chapter 2",
|
58
|
+
chapter: 2,
|
59
|
+
manga: "Naruto",
|
60
|
+
site: site
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
# Return Array of Hash with keys: :uri, :name, :site
|
65
|
+
def page_list
|
66
|
+
[
|
67
|
+
{
|
68
|
+
uri: "http://www.manga.com/naruto/2/page/1",
|
69
|
+
name: "Naruto - Chapter 2 - page 1",
|
70
|
+
site: site
|
71
|
+
},
|
72
|
+
{
|
73
|
+
uri: "http://www.manga.com/naruto/2/page/2",
|
74
|
+
name: "Naruto - Chapter 2 - page 2",
|
75
|
+
site: site
|
76
|
+
},
|
77
|
+
{
|
78
|
+
uri: "http://www.manga.com/naruto/2/page/3",
|
79
|
+
name: "Naruto - Chapter 2 - page 3",
|
80
|
+
site: site
|
81
|
+
},
|
82
|
+
{
|
83
|
+
uri: "http://www.manga.com/naruto/2/page/4",
|
84
|
+
name: "Naruto - Chapter 2 - page 4",
|
85
|
+
site: site
|
86
|
+
},
|
87
|
+
{
|
88
|
+
uri: "http://www.manga.com/naruto/2/page/5",
|
89
|
+
name: "Naruto - Chapter 2 - page 5",
|
90
|
+
site: site
|
91
|
+
}
|
92
|
+
]
|
93
|
+
end
|
94
|
+
|
95
|
+
# Return Hash with keys: :uri, :name, :site
|
96
|
+
def page
|
97
|
+
path = File.expand_path("../fixtures/images/naruto.jpg", __FILE__)
|
98
|
+
{ uri: path, name: "Naruto - Chapter 2 - page 2", site: site }
|
99
|
+
end
|
100
|
+
|
101
|
+
def doc
|
102
|
+
@doc
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
data/test/test_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mangdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jphager2
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|
@@ -16,56 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.7
|
19
|
+
version: '0.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.7
|
26
|
+
version: '0.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: nokogiri
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.6
|
33
|
+
version: '1.6'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.6
|
40
|
+
version: '1.6'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rubyzip
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.1
|
47
|
+
version: '1.1'
|
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: 1.1
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: progress_bar
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0.3
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 1.0.3
|
54
|
+
version: '1.1'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: ruby-filemagic
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,7 +81,7 @@ dependencies:
|
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
84
|
+
name: rake
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
87
|
- - ">="
|
@@ -109,20 +95,20 @@ dependencies:
|
|
109
95
|
- !ruby/object:Gem::Version
|
110
96
|
version: '0'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
98
|
+
name: minitest
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
|
-
- - "
|
101
|
+
- - "~>"
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
103
|
+
version: '5.0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
|
-
- - "
|
108
|
+
- - "~>"
|
123
109
|
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
description:
|
110
|
+
version: '5.0'
|
111
|
+
description: Download Manga
|
126
112
|
email: jphager2@gmail.com
|
127
113
|
executables: []
|
128
114
|
extensions: []
|
@@ -134,18 +120,30 @@ files:
|
|
134
120
|
- lib/mangdown/adapter.rb
|
135
121
|
- lib/mangdown/adapter/mangareader.rb
|
136
122
|
- lib/mangdown/adapter/no_adapter_error.rb
|
137
|
-
- lib/mangdown/cbz.rb
|
138
123
|
- lib/mangdown/chapter.rb
|
139
124
|
- lib/mangdown/client.rb
|
140
|
-
- lib/mangdown/equality.rb
|
141
125
|
- lib/mangdown/manga.rb
|
142
126
|
- lib/mangdown/manga_list.rb
|
143
127
|
- lib/mangdown/md_hash.rb
|
144
128
|
- lib/mangdown/page.rb
|
145
|
-
- lib/mangdown/
|
146
|
-
- lib/mangdown/
|
147
|
-
- lib/mangdown/
|
129
|
+
- lib/mangdown/support/cbz.rb
|
130
|
+
- lib/mangdown/support/equality.rb
|
131
|
+
- lib/mangdown/support/logging.rb
|
132
|
+
- lib/mangdown/support/properties.rb
|
133
|
+
- lib/mangdown/support/tools.rb
|
148
134
|
- lib/mangdown/version.rb
|
135
|
+
- test/lib/mangdown/adapter_test.rb
|
136
|
+
- test/lib/mangdown/chapter_test.rb
|
137
|
+
- test/lib/mangdown/manga_list_test.rb
|
138
|
+
- test/lib/mangdown/manga_test.rb
|
139
|
+
- test/lib/mangdown/support/cbz_test.rb
|
140
|
+
- test/lib/mangdown/support/equality_test.rb
|
141
|
+
- test/lib/mangdown/support/logging_test.rb
|
142
|
+
- test/lib/mangdown/support/properties_test.rb
|
143
|
+
- test/lib/mangdown/support/tools_test.rb
|
144
|
+
- test/lib/mangdown_test.rb
|
145
|
+
- test/support/test_adapter.rb
|
146
|
+
- test/test_helper.rb
|
149
147
|
homepage: https://github.com/jphager2/mangdown
|
150
148
|
licenses:
|
151
149
|
- MIT
|
@@ -166,8 +164,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
164
|
version: '0'
|
167
165
|
requirements: []
|
168
166
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.
|
167
|
+
rubygems_version: 2.5.1
|
170
168
|
signing_key:
|
171
169
|
specification_version: 4
|
172
|
-
summary:
|
170
|
+
summary: Download Manga
|
173
171
|
test_files: []
|
data/lib/mangdown/cbz.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
module Mangdown
|
2
|
-
module CBZ
|
3
|
-
extend self
|
4
|
-
extend ::Mangdown::Tools
|
5
|
-
|
6
|
-
def all(main_dir)
|
7
|
-
main_dir = String(main_dir)
|
8
|
-
# Make sure all sub dirs are checked
|
9
|
-
validate_file_or_dir_names(main_dir)
|
10
|
-
# Make sure all sub dirs have files checked
|
11
|
-
each_dir_or_page(main_dir) { |dir| validate_file_or_dir_names(dir)}
|
12
|
-
# Create cbz files for all sub dirs
|
13
|
-
cbz_sub_dirs(main_dir)
|
14
|
-
end
|
15
|
-
|
16
|
-
def one(dir)
|
17
|
-
dir = String(dir)
|
18
|
-
validate_file_or_dir_names(dir)
|
19
|
-
cbz_dir(dir)
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
def cbz_dir(dir)
|
24
|
-
dir = dir.to_s.sub(/\/*$/, "")
|
25
|
-
|
26
|
-
zip_file_name = dir + '.cbz'
|
27
|
-
return if File.exist?(zip_file_name)
|
28
|
-
|
29
|
-
::Zip::File.open(zip_file_name, ::Zip::File::CREATE) do |zip|
|
30
|
-
file_matcher = File.join(dir, '**', '**')
|
31
|
-
dir << "/"
|
32
|
-
|
33
|
-
Dir.glob(file_matcher).each do |file|
|
34
|
-
filename = file.sub(dir, '')
|
35
|
-
zip.add(filename, file)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def cbz_sub_dirs(dir)
|
41
|
-
each_dir_or_page(dir) do |sub_dir|
|
42
|
-
cbz_dir(sub_dir)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def each_dir_or_page(dir)
|
47
|
-
Dir.glob(dir + '/*').each do |filename|
|
48
|
-
next if filename.include?('.cbz')
|
49
|
-
yield(filename)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def validate_file_or_dir_names(dir)
|
54
|
-
each_dir_or_page(dir) do |file_name|
|
55
|
-
checked_name = Tools.valid_path_name(file_name)
|
56
|
-
File.rename(file_name, checked_name)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
data/lib/mangdown/properties.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
module Mangdown
|
2
|
-
module Properties
|
3
|
-
|
4
|
-
def self.included(base)
|
5
|
-
base.extend(ClassMethods)
|
6
|
-
end
|
7
|
-
|
8
|
-
def properties
|
9
|
-
@_properties ||= {}
|
10
|
-
end
|
11
|
-
|
12
|
-
def [](key)
|
13
|
-
properties[key]
|
14
|
-
end
|
15
|
-
|
16
|
-
def inspect
|
17
|
-
properties.inspect
|
18
|
-
end
|
19
|
-
|
20
|
-
def to_s
|
21
|
-
properties.to_s
|
22
|
-
end
|
23
|
-
|
24
|
-
module ClassMethods
|
25
|
-
def properties(*names)
|
26
|
-
names.each do |name|
|
27
|
-
define_method(name) do
|
28
|
-
properties[name]
|
29
|
-
end
|
30
|
-
|
31
|
-
define_method("#{name}=") do |other|
|
32
|
-
properties[name] = other
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/lib/mangdown/tools.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
require 'pathname'
|
2
|
-
require 'typhoeus'
|
3
|
-
|
4
|
-
module Mangdown
|
5
|
-
module Tools
|
6
|
-
extend self
|
7
|
-
|
8
|
-
def get_doc(uri)
|
9
|
-
data = get(uri)
|
10
|
-
@doc = ::Nokogiri::HTML(data)
|
11
|
-
end
|
12
|
-
|
13
|
-
def get(uri)
|
14
|
-
Typhoeus.get(uri).body
|
15
|
-
end
|
16
|
-
|
17
|
-
def get_root(uri)
|
18
|
-
@root = ::URI::join(uri, "/").to_s[0..-2]
|
19
|
-
end
|
20
|
-
|
21
|
-
def relative_or_absolute_path(*sub_paths)
|
22
|
-
root = (sub_paths.first.to_s =~ /^\// ? sub_paths.shift : Dir.pwd)
|
23
|
-
Pathname.new(root).join(*sub_paths)
|
24
|
-
end
|
25
|
-
|
26
|
-
def valid_path_name(name)
|
27
|
-
number_matcher = /(\d+)(\.\w+)*\Z/
|
28
|
-
num = name.to_s.slice(number_matcher, 1)
|
29
|
-
|
30
|
-
if num
|
31
|
-
num = num.rjust(5, "0")
|
32
|
-
name.sub(number_matcher, num + '\2')
|
33
|
-
else
|
34
|
-
name
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def file_type(path)
|
39
|
-
FileMagic.new.file(path.to_s).slice(/^\w+/).downcase
|
40
|
-
end
|
41
|
-
|
42
|
-
def hydra_streaming(objects)
|
43
|
-
hydra = Typhoeus::Hydra.hydra
|
44
|
-
|
45
|
-
requests = objects.map { |obj|
|
46
|
-
next unless yield(:before, obj)
|
47
|
-
|
48
|
-
request = Typhoeus::Request.new(obj.uri)
|
49
|
-
request.on_headers do |response|
|
50
|
-
status = response.success? ? :succeeded : :failed
|
51
|
-
yield(status, obj)
|
52
|
-
end
|
53
|
-
request.on_body do |chunk|
|
54
|
-
yield(:body, obj, chunk)
|
55
|
-
end
|
56
|
-
request.on_complete do |response|
|
57
|
-
yield(:complete, obj)
|
58
|
-
end
|
59
|
-
|
60
|
-
hydra.queue(request)
|
61
|
-
request
|
62
|
-
}.compact
|
63
|
-
|
64
|
-
hydra.run
|
65
|
-
requests
|
66
|
-
end
|
67
|
-
|
68
|
-
def hydra(objects)
|
69
|
-
hydra = Typhoeus::Hydra.hydra
|
70
|
-
|
71
|
-
requests = objects.map {|obj|
|
72
|
-
request = Typhoeus::Request.new(obj.uri)
|
73
|
-
request.on_complete do |response|
|
74
|
-
if response.success?
|
75
|
-
yield(obj, response.body) if block_given?
|
76
|
-
elsif response.timed_out?
|
77
|
-
STDERR.puts "#{obj.uri}: got a time out"
|
78
|
-
elsif response.code == 0
|
79
|
-
STDERR.puts "#{obj.uri}: #{response.return_message}"
|
80
|
-
else
|
81
|
-
STDERR.puts "#{obj.uri}: " +
|
82
|
-
"HTTP request failed: #{response.code.to_s} \n" +
|
83
|
-
"But maybe it succeeded..."
|
84
|
-
if response.body
|
85
|
-
yield(obj, response.body) if block_given?
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
hydra.queue(request)
|
90
|
-
request
|
91
|
-
}
|
92
|
-
|
93
|
-
hydra.run
|
94
|
-
requests
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|