mangdown 0.14.0 → 0.14.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|