flavicon 0.1.0 → 0.1.1

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
  SHA1:
3
- metadata.gz: 2fa853720ba3467ae1e98ffc4867714d2396e37e
4
- data.tar.gz: f35b0bbc8a07845cf6c66e00a49576fafec4926e
3
+ metadata.gz: bb77bbe0910de976833f57dcac196e53ea950339
4
+ data.tar.gz: d6a108eb16a4657f6cde6eca58046a2f01e6d69c
5
5
  SHA512:
6
- metadata.gz: ee1f8fda545e3927f39c8551975f63fca9ab7bd7a6c7c9dcb91ed88efa17100315d8eeb3b13a2172be33433417d2d48d2a2a0e28fe2b318a08265c9a15c37366
7
- data.tar.gz: 6f115a44c07cc3069bb88dbb1a40908a14c2bc2370e9e435f399485d1df9d8fcd98cffca2827b14b7a8c2b56b5b3fdbf2fac7c8c6932f4d06ad3bf7f8f8cc3a2
6
+ metadata.gz: 5d6d4fe83925c84bc05e9a6ba5c982b91c7680769dc16a696505ccb314a590de97a6218ba9bb122da194ace43ba0e6d2ed93bc3962f64583ab7fc3d8ddc8365b
7
+ data.tar.gz: edef26f6b50cf155d161a415ebd80efccc46c0add83dd2387b3f4d00107d91a72f1981274a5dec48c86e1c00c0958a9cbdee7c973ca073c837d14c1cc48775a5
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.1.1
5
+ env:
6
+ - COVERAGE=true
data/Gemfile CHANGED
@@ -12,4 +12,5 @@ group :development do
12
12
  gem 'jeweler', '~> 2.0'
13
13
  gem 'simplecov', '~> 0'
14
14
  gem 'pry', '~> 0'
15
+ gem 'coveralls'
15
16
  end
@@ -4,6 +4,12 @@ GEM
4
4
  addressable (2.3.6)
5
5
  builder (3.2.2)
6
6
  coderay (1.1.0)
7
+ coveralls (0.7.0)
8
+ multi_json (~> 1.3)
9
+ rest-client
10
+ simplecov (>= 0.7)
11
+ term-ansicolor
12
+ thor
7
13
  crack (0.4.2)
8
14
  safe_yaml (~> 1.0.0)
9
15
  descendants_tracker (0.0.4)
@@ -36,6 +42,7 @@ GEM
36
42
  jwt (0.1.11)
37
43
  multi_json (>= 1.5)
38
44
  method_source (0.8.2)
45
+ mime-types (2.2)
39
46
  mini_portile (0.5.3)
40
47
  multi_json (1.9.2)
41
48
  multi_xml (0.5.5)
@@ -56,6 +63,8 @@ GEM
56
63
  rake (10.3.1)
57
64
  rdoc (3.12.2)
58
65
  json (~> 1.4)
66
+ rest-client (1.6.7)
67
+ mime-types (>= 1.16)
59
68
  rspec (2.14.1)
60
69
  rspec-core (~> 2.14.0)
61
70
  rspec-expectations (~> 2.14.0)
@@ -71,7 +80,11 @@ GEM
71
80
  simplecov-html (~> 0.8.0)
72
81
  simplecov-html (0.8.0)
73
82
  slop (3.5.0)
83
+ term-ansicolor (1.3.0)
84
+ tins (~> 1.0)
85
+ thor (0.19.1)
74
86
  thread_safe (0.3.3)
87
+ tins (1.1.0)
75
88
  webmock (1.17.4)
76
89
  addressable (>= 2.2.7)
77
90
  crack (>= 0.3.2)
@@ -81,6 +94,7 @@ PLATFORMS
81
94
 
82
95
  DEPENDENCIES
83
96
  bundler (~> 1.0)
97
+ coveralls
84
98
  jeweler (~> 2.0)
85
99
  nokogiri (~> 1.6)
86
100
  pry (~> 0)
data/README.md CHANGED
@@ -1,3 +1,8 @@
1
+ [![Build Status](https://travis-ci.org/hasghari/flavicon.png?branch=master)](https://travis-ci.org/hasghari/flavicon)
2
+ [![Code Climate](https://codeclimate.com/github/hasghari/flavicon.png)](https://codeclimate.com/github/hasghari/flavicon)
3
+ [![Coverage Status](https://coveralls.io/repos/hasghari/flavicon/badge.png)](https://coveralls.io/r/hasghari/flavicon)
4
+ [![Gem Version](https://badge.fury.io/rb/flavicon.png)](http://badge.fury.io/rb/flavicon)
5
+
1
6
  # flavicon
2
7
 
3
8
  Disclaimer: This is a rewrite of the [www-favicon](https://github.com/youpy/www-favicon) gem for a couple reasons:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -0,0 +1,85 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: flavicon 0.1.1 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "flavicon"
9
+ s.version = "0.1.1"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
13
+ s.authors = ["Hamed Asghari"]
14
+ s.date = "2016-09-22"
15
+ s.description = "fetch favicon url by parsing html and falling back on /favicon.ico as default"
16
+ s.email = "hasghari@gmail.com"
17
+ s.extra_rdoc_files = [
18
+ "LICENSE.txt",
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ ".rspec",
24
+ ".ruby-gemset",
25
+ ".ruby-version",
26
+ ".travis.yml",
27
+ "Gemfile",
28
+ "Gemfile.lock",
29
+ "LICENSE.txt",
30
+ "README.md",
31
+ "Rakefile",
32
+ "VERSION",
33
+ "flavicon.gemspec",
34
+ "lib/flavicon.rb",
35
+ "lib/flavicon/finder.rb",
36
+ "spec/fixtures/absolute.html",
37
+ "spec/fixtures/missing.html",
38
+ "spec/fixtures/multiple.html",
39
+ "spec/fixtures/relative.html",
40
+ "spec/flavicon/finder_spec.rb",
41
+ "spec/flavicon_spec.rb",
42
+ "spec/spec_helper.rb"
43
+ ]
44
+ s.homepage = "http://github.com/hasghari/flavicon"
45
+ s.licenses = ["MIT"]
46
+ s.rubygems_version = "2.2.2"
47
+ s.summary = "fetch favicon url for provided url"
48
+
49
+ if s.respond_to? :specification_version then
50
+ s.specification_version = 4
51
+
52
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
+ s.add_runtime_dependency(%q<nokogiri>, ["~> 1.6"])
54
+ s.add_development_dependency(%q<rspec>, ["~> 2.14"])
55
+ s.add_development_dependency(%q<webmock>, ["~> 1.17"])
56
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
57
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
58
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
59
+ s.add_development_dependency(%q<simplecov>, ["~> 0"])
60
+ s.add_development_dependency(%q<pry>, ["~> 0"])
61
+ s.add_development_dependency(%q<coveralls>, [">= 0"])
62
+ else
63
+ s.add_dependency(%q<nokogiri>, ["~> 1.6"])
64
+ s.add_dependency(%q<rspec>, ["~> 2.14"])
65
+ s.add_dependency(%q<webmock>, ["~> 1.17"])
66
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
67
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
68
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
69
+ s.add_dependency(%q<simplecov>, ["~> 0"])
70
+ s.add_dependency(%q<pry>, ["~> 0"])
71
+ s.add_dependency(%q<coveralls>, [">= 0"])
72
+ end
73
+ else
74
+ s.add_dependency(%q<nokogiri>, ["~> 1.6"])
75
+ s.add_dependency(%q<rspec>, ["~> 2.14"])
76
+ s.add_dependency(%q<webmock>, ["~> 1.17"])
77
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
78
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
79
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
80
+ s.add_dependency(%q<simplecov>, ["~> 0"])
81
+ s.add_dependency(%q<pry>, ["~> 0"])
82
+ s.add_dependency(%q<coveralls>, [">= 0"])
83
+ end
84
+ end
85
+
@@ -9,12 +9,13 @@ module Flavicon
9
9
  def find
10
10
  response, resolved = request(url)
11
11
  favicon_url = extract_from_html(response.body, resolved) || default_path(resolved)
12
- valid_favicon_url?(favicon_url) ? favicon_url : nil
12
+ verify_favicon_url(favicon_url)
13
13
  end
14
14
 
15
- def valid_favicon_url?(url)
16
- response, _ = request(url)
17
- response.is_a?(Net::HTTPSuccess) && response.body.to_s != '' && response.content_type =~ /image/i
15
+ def verify_favicon_url(url)
16
+ response, resolved = request(url)
17
+ return unless response.is_a?(Net::HTTPSuccess) && response.body.to_s != '' && response.content_type =~ /image/i
18
+ resolved
18
19
  end
19
20
 
20
21
  def extract_from_html(html, url)
@@ -2,15 +2,45 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
  require 'flavicon/finder'
3
3
 
4
4
  describe Flavicon::Finder do
5
+ def html(file)
6
+ File.read(File.expand_path(File.dirname(__FILE__) + "/../fixtures/#{file}"))
7
+ end
8
+
5
9
  subject { Flavicon::Finder.new('http://www.ex.com') }
6
10
 
7
11
  describe '#find' do
8
- it '' do
12
+ it 'should delegate to #request' do
13
+ response = double('response', body: html('absolute.html'))
14
+ subject.should_receive(:request).with('http://www.ex.com').and_return([response, 'http://www.other.com'])
15
+ subject.should_receive(:verify_favicon_url).and_return('http://sub.example.com/absolute.ico')
16
+ subject.find
17
+ end
18
+
19
+ it 'should extract favicon from body' do
20
+ response = double('response', body: html('absolute.html'))
21
+ subject.should_receive(:request).with('http://www.ex.com').and_return([response, 'http://www.other.com'])
22
+ subject.should_receive(:verify_favicon_url).with('http://sub.example.com/absolute.ico')
23
+ .and_return('http://sub.example.com/absolute.ico')
24
+ subject.find.should == 'http://sub.example.com/absolute.ico'
25
+ end
26
+
27
+ it 'should fallback to default when response is empty' do
28
+ response = double('response', body: '')
29
+ subject.should_receive(:request).with('http://www.ex.com').and_return([response, 'http://www.other.com'])
30
+ subject.should_receive(:verify_favicon_url).with('http://www.other.com/favicon.ico')
31
+ .and_return('http://www.other.com/favicon.ico')
32
+ subject.find.should == 'http://www.other.com/favicon.ico'
33
+ end
9
34
 
35
+ it 'should return nil when not valid' do
36
+ response = double('response', body: html('absolute.html'))
37
+ subject.should_receive(:request).with('http://www.ex.com').and_return([response, 'http://www.other.com'])
38
+ subject.should_receive(:verify_favicon_url).and_return(nil)
39
+ subject.find.should be_nil
10
40
  end
11
41
  end
12
42
 
13
- describe '#valid_favicon_url?' do
43
+ describe '#verify_favicon_url' do
14
44
  let(:favicon_url) { 'http://www.ex.com/favicon.ico' }
15
45
  let(:response) do
16
46
  { status: 200, body: 'blah', headers: { 'Content-Type' => 'image/x-icon'} }
@@ -20,8 +50,8 @@ describe Flavicon::Finder do
20
50
  stub_request(:get, favicon_url).to_return(response)
21
51
  end
22
52
 
23
- it 'should be true by default' do
24
- subject.valid_favicon_url?(favicon_url).should be_true
53
+ it 'should return favicon url' do
54
+ subject.verify_favicon_url(favicon_url).should == favicon_url
25
55
  end
26
56
 
27
57
  context 'http failure' do
@@ -29,8 +59,8 @@ describe Flavicon::Finder do
29
59
  { status: 400, body: 'blah', headers: { 'Content-Type' => 'image/x-icon'} }
30
60
  end
31
61
 
32
- it 'should be false' do
33
- subject.valid_favicon_url?(favicon_url).should be_false
62
+ it 'should return nil' do
63
+ subject.verify_favicon_url(favicon_url).should be_nil
34
64
  end
35
65
  end
36
66
 
@@ -39,8 +69,8 @@ describe Flavicon::Finder do
39
69
  { status: 200, body: '', headers: { 'Content-Type' => 'image/x-icon'} }
40
70
  end
41
71
 
42
- it 'should be false' do
43
- subject.valid_favicon_url?(favicon_url).should be_false
72
+ it 'should return nil' do
73
+ subject.verify_favicon_url(favicon_url).should be_nil
44
74
  end
45
75
  end
46
76
 
@@ -49,17 +79,13 @@ describe Flavicon::Finder do
49
79
  { status: 200, body: 'blah', headers: { 'Content-Type' => 'text/javascript'} }
50
80
  end
51
81
 
52
- it 'should be false' do
53
- subject.valid_favicon_url?(favicon_url).should be_false
82
+ it 'should return nil' do
83
+ subject.verify_favicon_url(favicon_url).should be_nil
54
84
  end
55
85
  end
56
86
  end
57
87
 
58
88
  describe '#extract_from_html' do
59
- def html(file)
60
- File.read(File.expand_path(File.dirname(__FILE__) + "/../fixtures/#{file}"))
61
- end
62
-
63
89
  it 'should return nil for empty body' do
64
90
  subject.extract_from_html('', 'http://www.ex.com').should be_nil
65
91
  end
@@ -84,6 +110,24 @@ describe Flavicon::Finder do
84
110
  end
85
111
  end
86
112
 
113
+ describe '#default_path' do
114
+ it 'should return default favicon url' do
115
+ subject.default_path('http://www.basic.com').should == 'http://www.basic.com/favicon.ico'
116
+ end
117
+
118
+ it 'ignores query and fragment' do
119
+ subject.default_path('http://www.basic.com?query=a#fragment').should == 'http://www.basic.com/favicon.ico'
120
+ end
121
+
122
+ it 'ignores path with no trailing slash' do
123
+ subject.default_path('http://www.basic.com/basic').should == 'http://www.basic.com/favicon.ico'
124
+ end
125
+
126
+ it 'ignores path with trailing slash' do
127
+ subject.default_path('http://www.basic.com/basic/').should == 'http://www.basic.com/favicon.ico'
128
+ end
129
+ end
130
+
87
131
  describe '#request' do
88
132
  before do
89
133
  stub_request(:get, 'http://www.ex.com/abc/')
@@ -102,6 +146,21 @@ describe Flavicon::Finder do
102
146
  url.should == 'http://www.ex.com/abc/'
103
147
  end
104
148
 
149
+ context 'ssl' do
150
+ before do
151
+ stub_request(:get, 'http://secure.ex.com:443/abc/')
152
+ .to_return(status: 200, body: '', headers: {})
153
+ end
154
+
155
+ it 'should set http secure state' do
156
+ Net::HTTP.any_instance.should_receive(:use_ssl=).with(true)
157
+ Net::HTTP.any_instance.should_receive(:verify_mode=).with(OpenSSL::SSL::VERIFY_NONE)
158
+ response, url = subject.request('https://secure.ex.com/abc/')
159
+ response.should be_a Net::HTTPSuccess
160
+ url.should == 'https://secure.ex.com/abc/'
161
+ end
162
+ end
163
+
105
164
  context 'redirect' do
106
165
  before do
107
166
  stub_request(:get, 'http://www.ex.com/abc')
@@ -1,4 +1,5 @@
1
1
  require 'simplecov'
2
+ require 'coveralls'
2
3
 
3
4
  module SimpleCov::Configuration
4
5
  def clean_filters
@@ -11,9 +12,15 @@ SimpleCov.configure do
11
12
  load_profile 'test_frameworks'
12
13
  end
13
14
 
15
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
16
+ SimpleCov::Formatter::HTMLFormatter,
17
+ Coveralls::SimpleCov::Formatter
18
+ ]
19
+
14
20
  ENV['COVERAGE'] && SimpleCov.start do
15
21
  add_filter '/.rvm/'
16
22
  end
23
+
17
24
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
18
25
  $LOAD_PATH.unshift(File.dirname(__FILE__))
19
26
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flavicon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hamed Asghari
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-21 00:00:00.000000000 Z
11
+ date: 2016-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: coveralls
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: fetch favicon url by parsing html and falling back on /favicon.ico as
126
140
  default
127
141
  email: hasghari@gmail.com
@@ -135,12 +149,14 @@ files:
135
149
  - ".rspec"
136
150
  - ".ruby-gemset"
137
151
  - ".ruby-version"
152
+ - ".travis.yml"
138
153
  - Gemfile
139
154
  - Gemfile.lock
140
155
  - LICENSE.txt
141
156
  - README.md
142
157
  - Rakefile
143
158
  - VERSION
159
+ - flavicon.gemspec
144
160
  - lib/flavicon.rb
145
161
  - lib/flavicon/finder.rb
146
162
  - spec/fixtures/absolute.html