web_stat 0.1.7 → 0.1.8

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: bd18b717b3887b0c500f924eee2e913e8390c07076d8f81afa352f5fd9bc0eaf
4
- data.tar.gz: e584604f5bd27878c29115b3796022551003436977f924341d8b1366538df717
3
+ metadata.gz: 84692200a3ace269882025b441ea34bc24ef92e1d61e695db2af2612458d89a6
4
+ data.tar.gz: 85eb291966b9813c62ab1abdfb0bfc41b823602e86ca3fd3fcd44d8107634aab
5
5
  SHA512:
6
- metadata.gz: 9050e789b40f41e66c97e29a6a0d16d96fdee7617e03c60fea754ce024dbbf2b45df8c4dc245b9f7ca1639219565db101da066e3aba44c2a0a641026be9229c4
7
- data.tar.gz: da47faf8dcff5e99dbb64f2cccaea998e121f7d6693c78f1fa4456e348c40b45347ee540667a91d5aff349a5517ae1b5ce4f60d2b3df65fcc1cb104b3ecf665d
6
+ metadata.gz: 59df286b73a5d95cacc3b9cbe56fd5cb9c28df8220ceb6fb302a77f8ebe53892d69e4b4b0b4788522db2e19fc1e899ab5f0638e0ce714811c32db12c4adec977
7
+ data.tar.gz: 945fdd95331fe8def50a2db97e9e45dd659af782b2c169ad6ae45eb9ccd8ea077d0ba32f263e54c49dfebe8c53247bc5c1077d0d63a61661d60ec0870ea56f4b
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- web_stat (0.1.6)
4
+ web_stat (0.1.8)
5
5
  bundler (~> 2.0)
6
6
  final_redirect_url (~> 0.1.0)
7
7
  mechanize (~> 2.7)
@@ -13,15 +13,20 @@ PATH
13
13
  GEM
14
14
  remote: https://rubygems.org/
15
15
  specs:
16
+ addressable (2.6.0)
17
+ public_suffix (>= 2.0.2, < 4.0)
16
18
  coderay (1.1.2)
17
19
  connection_pool (2.2.2)
20
+ crack (0.4.3)
21
+ safe_yaml (~> 1.0.0)
18
22
  crass (1.0.4)
19
23
  diff-lcs (1.3)
20
- domain_name (0.5.20180417)
24
+ domain_name (0.5.20190701)
21
25
  unf (>= 0.0.5, < 1.0.0)
22
26
  ffi (1.11.1)
23
27
  final_redirect_url (0.1.0)
24
28
  guess_html_encoding (0.0.11)
29
+ hashdiff (1.0.0)
25
30
  http-cookie (1.0.3)
26
31
  domain_name (~> 0.5)
27
32
  mechanize (2.7.6)
@@ -41,7 +46,7 @@ GEM
41
46
  natto (1.1.2)
42
47
  ffi (>= 1.9.0)
43
48
  net-http-digest_auth (1.4.1)
44
- net-http-persistent (3.0.1)
49
+ net-http-persistent (3.1.0)
45
50
  connection_pool (~> 2.2)
46
51
  nokogiri (1.10.3)
47
52
  mini_portile2 (~> 2.4.0)
@@ -51,6 +56,7 @@ GEM
51
56
  pry (0.12.2)
52
57
  coderay (~> 1.1.0)
53
58
  method_source (~> 0.9.0)
59
+ public_suffix (3.1.1)
54
60
  rake (10.5.0)
55
61
  rspec (3.8.0)
56
62
  rspec-core (~> 3.8.0)
@@ -68,6 +74,7 @@ GEM
68
74
  ruby-readability (0.7.0)
69
75
  guess_html_encoding (>= 0.0.4)
70
76
  nokogiri (>= 1.6.0)
77
+ safe_yaml (1.0.5)
71
78
  sanitize (5.0.0)
72
79
  crass (~> 1.0.2)
73
80
  nokogiri (>= 1.8.0)
@@ -75,6 +82,10 @@ GEM
75
82
  unf (0.1.4)
76
83
  unf_ext
77
84
  unf_ext (0.0.7.6)
85
+ webmock (3.6.0)
86
+ addressable (>= 2.3.6)
87
+ crack (>= 0.3.2)
88
+ hashdiff (>= 0.4.0, < 2.0.0)
78
89
  webrobots (0.1.2)
79
90
 
80
91
  PLATFORMS
@@ -85,6 +96,7 @@ DEPENDENCIES
85
96
  rake (~> 10.0)
86
97
  rspec (~> 3.0)
87
98
  web_stat!
99
+ webmock (~> 3.6.0)
88
100
 
89
101
  BUNDLED WITH
90
102
  2.0.1
data/README.md CHANGED
@@ -45,3 +45,7 @@ And then execute:
45
45
  ### spec
46
46
 
47
47
  $ rake spec
48
+
49
+ Test a file
50
+
51
+ $ bundle exec rspec spec/web_stat/fetch_spec.rb
@@ -8,4 +8,4 @@ module WebStat
8
8
  @nokogiri = ::Nokogiri::HTML(@html)
9
9
  end
10
10
  end
11
- end
11
+ end
@@ -1,8 +1,6 @@
1
1
  require 'mechanize'
2
2
  module WebStat
3
3
  class FetchAsWeb < Fetch
4
- attr_accessor :url
5
-
6
4
  # initialize class
7
5
  # @param [String] url
8
6
  def initialize(url)
@@ -11,4 +9,4 @@ module WebStat
11
9
  @nokogiri = ::Nokogiri::HTML(@html)
12
10
  end
13
11
  end
14
- end
12
+ end
@@ -7,8 +7,8 @@ require 'ruby-readability'
7
7
  require 'final_redirect_url'
8
8
  module WebStat
9
9
  class Fetch
10
- attr_accessor :html, :nokogiri
11
-
10
+ attr_accessor :url, :html, :nokogiri
11
+
12
12
  # Get title
13
13
  # @return [String] title
14
14
  def title
@@ -40,6 +40,7 @@ module WebStat
40
40
 
41
41
  # Get temporary path of image
42
42
  def eyecatch_image_path
43
+ # Reuse `path` in this method
43
44
  path = nil
44
45
  WebStat::Configure.get["eyecatch_image_xpaths"].each do |xpath|
45
46
  if @nokogiri.xpath(xpath).first.respond_to?(:value)
@@ -47,20 +48,15 @@ module WebStat
47
48
  break
48
49
  end
49
50
  end
50
- if @url && path.is_a?(String) && !path.match(/^http/)
51
- if path.match(/^\//)
52
- path = "#{URI.parse(@url).scheme}://#{URI.parse(@url).host}#{path}"
53
- else
54
- path = "#{URI.parse(@url).scheme}://#{URI.parse(@url).host}/#{URI.parse(@url).path}/#{path}"
55
- end
51
+ if path.match(/^\//)
52
+ "#{URI.parse(@url).scheme}://#{URI.parse(@url).host}#{path}"
56
53
  end
57
- path
58
54
  end
59
55
 
60
56
  # Get local path to save url
61
57
  # @param [String] url
62
58
  def save_local_path(url)
63
- return nil if url.nil? || !url.match(/^http/)
59
+ return nil if url.nil?
64
60
  tmp_file = "/tmp/#{Digest::SHA1.hexdigest(url)}"
65
61
  open(original_url(url)) do |remote_file|
66
62
  File.open(tmp_file, "w+b") do |_file|
@@ -104,4 +100,4 @@ module WebStat
104
100
  end
105
101
  end
106
102
  end
107
- end
103
+ end
@@ -1,3 +1,3 @@
1
1
  module WebStat
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
3
3
  end
data/lib/web_stat.rb CHANGED
@@ -17,13 +17,17 @@ module WebStat
17
17
  end
18
18
 
19
19
  # Get web page's stat by url
20
+ # @param String url
20
21
  def stat_by_url(url)
21
22
  stat_by_web(url)
22
23
  end
23
24
 
24
25
  # Get web page's stat by html
25
- def stat_by_html(html)
26
+ # @param String html
27
+ # @param [String] url
28
+ def stat_by_html(html, url=nil)
26
29
  web_stat = WebStat::FetchAsHtml.new(html)
30
+ web_stat.url = url unless url.nil?
27
31
  web_stat.stat
28
32
  end
29
33
  end
@@ -7,5 +7,8 @@
7
7
  </head>
8
8
  <body class="post-template tag-rubygems">
9
9
  <h1 class="post-title">gem作成でついまずいたところ</h1>
10
+ <p class="profile"><a href="https://newsdict.blog">
11
+ <img src="/content/images/size/w100/2019/03/facebook-3.jpg" alt="Yusuke Abe" class="avatar" /></a></p>
12
+
10
13
  </body>
11
14
  </html>
Binary file
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,10 @@ require "bundler/setup"
3
3
  require 'pry'
4
4
  require "web_stat"
5
5
 
6
+ require 'webmock'
7
+ include WebMock::API
8
+ WebMock.enable!
9
+
6
10
  RSpec.configure do |config|
7
11
  # Enable flags like --only-failures and --next-failure
8
12
  config.example_status_persistence_file_path = ".rspec_status"
@@ -47,8 +51,32 @@ module WebStatTestHelper
47
51
  # Get htmls of fixture
48
52
  def scheme_and_files
49
53
  Dir.glob(File.join(File.dirname(__FILE__), "fixtures", "htmls", "*.html")).map do |file|
50
- "file://#{file}"
54
+ "https://newsdict.blog/#{File.basename(file)}"
51
55
  end
52
56
  end
53
57
  end
54
- end
58
+ end
59
+
60
+ # Set webmock
61
+ WebStatTestHelper.scheme_and_files.each do |url|
62
+ WebMock.stub_request(:get, url)
63
+ .to_return(
64
+ status: 200,
65
+ body: File.new(File.join(File.dirname(__FILE__), "fixtures", "htmls", File.basename(url))),
66
+ headers: {content_type: 'application/html; charset=utf-8'})
67
+ end
68
+
69
+ WebMock.stub_request(:get, "https://newsdict.blog/robots.txt")
70
+ .to_return(
71
+ status: 200,
72
+ body: "User-agent: *
73
+ Sitemap: https://newsdict.blog/sitemap.xml
74
+ Disallow: /ghost/
75
+ Disallow: /p/",
76
+ headers: {content_type: 'application/html; charset=utf-8'})
77
+
78
+ WebMock.stub_request(:get, "https://newsdict.blog/content/images/size/w100/2019/03/facebook-3.jpg")
79
+ .to_return(
80
+ status: 200,
81
+ body: File.new(File.join(File.dirname(__FILE__), "fixtures", "images", "facebook-3.jpg")),
82
+ headers: {content_type: 'application/html; charset=utf-8'})
@@ -30,9 +30,21 @@ RSpec.describe WebStat::Fetch do
30
30
  end
31
31
  end
32
32
 
33
+ it "Get eyecatch image blob by #{fetch[:class].to_s}" do
34
+ fetch[:fixture].each do |fixture|
35
+ web_stat = fetch[:class].new(fixture)
36
+ web_stat.url = "https://newsdict.blog"
37
+ unless web_stat.stat[:eyecatch_image_path].nil?
38
+ image = File.read(web_stat.stat[:eyecatch_image_path])
39
+ expect(image.encoding.to_s).to eq("UTF-8")
40
+ end
41
+ end
42
+ end
43
+
33
44
  it "Get eyecatch image path by #{fetch[:class].to_s}" do
34
45
  fetch[:fixture].each do |fixture|
35
46
  web_stat = fetch[:class].new(fixture)
47
+ web_stat.url = "https://newsdict.blog"
36
48
  expect(web_stat.eyecatch_image_path).to be_string_or_nil
37
49
  end
38
50
  end
@@ -40,6 +52,7 @@ RSpec.describe WebStat::Fetch do
40
52
  it "Get local path of eyecatch image by #{fetch[:class].to_s}" do
41
53
  fetch[:fixture].each do |fixture|
42
54
  web_stat = fetch[:class].new(fixture)
55
+ web_stat.url = "https://newsdict.blog"
43
56
  expect(web_stat.stat[:eyecatch_image_path]).to be_tmp_file_or_nil
44
57
  end
45
58
  end
@@ -47,7 +60,7 @@ RSpec.describe WebStat::Fetch do
47
60
 
48
61
  it "WebStat.stat_by_html" do
49
62
  WebStatTestHelper.htmls.each do |fixture|
50
- web_stat = WebStat.stat_by_html(fixture)
63
+ web_stat = WebStat.stat_by_html(fixture, "https://newsdict.blog")
51
64
  expect(web_stat[:title]).to eq "gem作成でついまずいたところ"
52
65
  expect(web_stat[:site_name]).to eq "newsdict.blog"
53
66
  expect(web_stat[:content]).not_to eq nil
@@ -66,4 +79,4 @@ RSpec.describe WebStat::Fetch do
66
79
  expect(web_stat[:eyecatch_image_path]).to be_tmp_file_or_nil
67
80
  end
68
81
  end
69
- end
82
+ end
data/web_stat.gemspec CHANGED
@@ -31,4 +31,5 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency "rake", "~> 10.0"
32
32
  spec.add_development_dependency "rspec", "~> 3.0"
33
33
  spec.add_development_dependency "pry", "~> 0.12.2"
34
+ spec.add_development_dependency "webmock", "~> 3.6.0"
34
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: web_stat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - yusuke abe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-30 00:00:00.000000000 Z
11
+ date: 2019-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: 0.12.2
153
+ - !ruby/object:Gem::Dependency
154
+ name: webmock
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 3.6.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 3.6.0
153
167
  description: Fetch the web pages and stat.
154
168
  email:
155
169
  - yube@newsdict.jp
@@ -180,6 +194,7 @@ files:
180
194
  - spec/fixtures/htmls/blog.html
181
195
  - spec/fixtures/htmls/h1-title.html
182
196
  - spec/fixtures/htmls/image.html
197
+ - spec/fixtures/images/facebook-3.jpg
183
198
  - spec/spec_helper.rb
184
199
  - spec/web_stat/configure_spec.rb
185
200
  - spec/web_stat/fetch_spec.rb
@@ -213,6 +228,7 @@ test_files:
213
228
  - spec/fixtures/htmls/blog.html
214
229
  - spec/fixtures/htmls/h1-title.html
215
230
  - spec/fixtures/htmls/image.html
231
+ - spec/fixtures/images/facebook-3.jpg
216
232
  - spec/spec_helper.rb
217
233
  - spec/web_stat/configure_spec.rb
218
234
  - spec/web_stat/fetch_spec.rb