kauperts_link_checker 0.4.1 → 0.5.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.
- data/.gitignore +3 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +8 -0
- data/README.rdoc +10 -10
- data/Rakefile +1 -1
- data/kauperts_link_checker.gemspec +8 -4
- data/lib/kauperts_link_checker.rb +20 -12
- data/lib/kauperts_link_checker/version.rb +5 -0
- data/test/link_checker_test.rb +51 -23
- metadata +122 -109
- data/Gemfile.lock +0 -25
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
kauperts_link_checker
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.9.3
|
data/.travis.yml
ADDED
data/README.rdoc
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
== Kauperts::LinkChecker
|
1
|
+
== Kauperts::LinkChecker {<img src="https://travis-ci.org/kaupertmedia/kauperts_link_checker.png?branch=master" alt="Build Status" />}[https://travis-ci.org/kaupertmedia/kauperts_link_checker]
|
2
2
|
|
3
3
|
<b>Kauperts::LinkChecker</b> is a simple library to check for the well-being of URLs. It supports HTTPS and IDN URIs.
|
4
4
|
|
5
5
|
=== Installation
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
gem
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
gem 'kauperts_link_checker'
|
9
|
+
|
10
|
+
And then execute:
|
11
|
+
$ bundle
|
12
|
+
|
13
|
+
Or install it yourself as:
|
14
|
+
$ gem install kauperts_link_checker
|
15
15
|
|
16
16
|
=== Usage
|
17
17
|
It will check any object that responds to +url+:
|
data/Rakefile
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'kauperts_link_checker/version'
|
2
5
|
|
3
6
|
Gem::Specification.new do |s|
|
4
7
|
s.name = "kauperts_link_checker"
|
5
|
-
s.version =
|
8
|
+
s.version = Kauperts::LinkChecker::VERSION
|
6
9
|
s.platform = Gem::Platform::RUBY
|
7
|
-
s.authors = ["Wolfgang Vogl", "Carsten Zimmermann"]
|
10
|
+
s.authors = ["Wolfgang Vogl", "Carsten Zimmermann", "Matthias Viehweger"]
|
8
11
|
s.email = ["carp@hacksocke.de"]
|
9
12
|
s.homepage = ""
|
10
13
|
s.summary = "A simple library to check for the well-being of an URL"
|
@@ -17,9 +20,10 @@ Gem::Specification.new do |s|
|
|
17
20
|
s.add_dependency "i18n"
|
18
21
|
s.add_dependency "simpleidn"
|
19
22
|
|
23
|
+
s.add_development_dependency 'rake'
|
24
|
+
s.add_development_dependency 'rdoc'
|
20
25
|
s.add_development_dependency 'mocha'
|
21
26
|
s.add_development_dependency 'bundler'
|
22
|
-
s.add_development_dependency 'redgreen'
|
23
27
|
s.add_development_dependency 'activesupport'
|
24
28
|
end
|
25
29
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require "net/https"
|
2
2
|
require "simpleidn"
|
3
|
+
require "i18n"
|
4
|
+
|
3
5
|
module Kauperts
|
4
6
|
|
5
7
|
# Checks the status of an object which responds to +url+. The returned
|
@@ -17,23 +19,25 @@ module Kauperts
|
|
17
19
|
|
18
20
|
attr_reader :configuration, :object, :status
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
+
class Configuration < Struct.new(
|
23
|
+
:ignore_trailing_slash_redirects,
|
24
|
+
:ignore_302_redirects
|
25
|
+
); end
|
22
26
|
|
23
27
|
# === Parameters
|
24
28
|
# * +object+: an arbitrary object which responds to +url+.
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
+
# * +options+: optional configuration parameters, see below.
|
30
|
+
#
|
31
|
+
# === Available Options
|
32
|
+
# * +ignore_trailing_slash_redirects+: ignores redirects to the same URI but only with an added trailing slash (default: false)
|
29
33
|
def initialize(object, options = {})
|
30
34
|
object.respond_to?(:url) ? @object = object : raise(ArgumentError.new("object doesn't respond to url"))
|
31
35
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
36
|
+
# Assign config variables
|
37
|
+
@configuration = Configuration.new
|
38
|
+
options = { :ignore_trailing_slash_redirects => false, :ignore_302_redirects => false }.merge(options).each do |key, val|
|
39
|
+
@configuration.send(:"#{key}=", val)
|
40
|
+
end
|
37
41
|
|
38
42
|
end
|
39
43
|
|
@@ -67,7 +71,11 @@ module Kauperts
|
|
67
71
|
# or if a 301 permanent redirect only added a trailing slash
|
68
72
|
# while +ignore_trailing_slash_redirects+ has been set to true
|
69
73
|
def ok?
|
70
|
-
@status == '200'
|
74
|
+
return true if @status == '200'
|
75
|
+
return true if (@status == '302' and self.configuration.ignore_302_redirects)
|
76
|
+
return true if (@redirect_with_trailing_slash_only == true and self.configuration.ignore_trailing_slash_redirects)
|
77
|
+
|
78
|
+
false
|
71
79
|
end
|
72
80
|
|
73
81
|
# Immediately checks +object+ and returns the LinkChecker instance
|
data/test/link_checker_test.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
class LinkCheckerTest < ActiveSupport::TestCase
|
@@ -11,20 +12,33 @@ class LinkCheckerTest < ActiveSupport::TestCase
|
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
14
|
-
|
15
|
-
|
15
|
+
test "should instantiate with optional configuration hash" do
|
16
|
+
assert defined?(Kauperts::LinkChecker::Configuration)
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
obj = checker.new(url_object)
|
19
|
+
assert_respond_to obj, :configuration
|
20
|
+
|
21
|
+
assert_respond_to obj.configuration, :ignore_trailing_slash_redirects
|
22
|
+
assert !obj.configuration.ignore_trailing_slash_redirects
|
23
|
+
|
24
|
+
obj = checker.new(url_object, :ignore_trailing_slash_redirects => true)
|
25
|
+
|
26
|
+
assert_respond_to obj.configuration, :ignore_trailing_slash_redirects
|
27
|
+
assert_equal true, obj.configuration.ignore_trailing_slash_redirects
|
28
|
+
end
|
19
29
|
|
20
|
-
|
21
|
-
|
30
|
+
test "should have an configuration option to ignore 302s" do
|
31
|
+
obj = checker.new(url_object)
|
32
|
+
|
33
|
+
assert_respond_to obj.configuration, :ignore_302_redirects
|
34
|
+
assert !obj.configuration.ignore_302_redirects
|
35
|
+
assert_equal false, obj.configuration.ignore_302_redirects
|
22
36
|
|
23
|
-
|
37
|
+
obj = checker.new(url_object, :ignore_302_redirects => true)
|
24
38
|
|
25
|
-
|
26
|
-
|
27
|
-
|
39
|
+
assert_respond_to obj.configuration, :ignore_302_redirects
|
40
|
+
assert_equal true, obj.configuration.ignore_302_redirects
|
41
|
+
end
|
28
42
|
|
29
43
|
test "should expose object" do
|
30
44
|
obj = checker.new(url_object)
|
@@ -45,19 +59,33 @@ class LinkCheckerTest < ActiveSupport::TestCase
|
|
45
59
|
assert_equal "200", obj.check!
|
46
60
|
end
|
47
61
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
62
|
+
test "should ignore permanent redirects with trailing slash only if told so" do
|
63
|
+
url = url_object("http://www.example.com/foo")
|
64
|
+
location = url.url + "/"
|
65
|
+
stub_net_http_redirect!("301", location)
|
66
|
+
|
67
|
+
obj = checker.new(url)
|
68
|
+
obj.check!
|
69
|
+
assert_equal false, obj.ok?
|
70
|
+
|
71
|
+
obj = checker.new(url, :ignore_trailing_slash_redirects => true)
|
72
|
+
obj.check!
|
73
|
+
assert_equal true, obj.ok?
|
74
|
+
end
|
75
|
+
|
76
|
+
test "should ignore temporary redirects only if told so" do
|
77
|
+
url = url_object("http://www.example.com")
|
78
|
+
location = url.url + "/index.php"
|
79
|
+
stub_net_http_redirect!("302", location)
|
52
80
|
|
53
|
-
|
54
|
-
|
55
|
-
|
81
|
+
obj = checker.new(url)
|
82
|
+
obj.check!
|
83
|
+
assert_equal false, obj.ok?
|
56
84
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
85
|
+
obj = checker.new(url, :ignore_302_redirects => true)
|
86
|
+
obj.check!
|
87
|
+
assert_equal true, obj.ok?
|
88
|
+
end
|
61
89
|
|
62
90
|
test "should return status array with 404" do
|
63
91
|
stub_net_http!("404")
|
@@ -177,12 +205,12 @@ class LinkCheckerTest < ActiveSupport::TestCase
|
|
177
205
|
Net::HTTP.stubs(:get_response).returns(mock_response)
|
178
206
|
end
|
179
207
|
|
180
|
-
|
208
|
+
def stub_net_https!(return_code = "200")
|
181
209
|
return_code = return_code.to_s
|
182
210
|
mock_response = mock('sslresponse')
|
183
211
|
mock_response.stubs(:code).returns(return_code)
|
184
212
|
Net::HTTP.any_instance.stubs(:start).returns(mock_response)
|
185
|
-
|
213
|
+
end
|
186
214
|
|
187
215
|
def stub_net_http_error!(exception, message)
|
188
216
|
Net::HTTP.stubs(:get_response).raises(exception, message)
|
metadata
CHANGED
@@ -1,161 +1,174 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: kauperts_link_checker
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.1
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 4
|
9
|
-
- 1
|
10
|
-
version: 0.4.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Wolfgang Vogl
|
14
9
|
- Carsten Zimmermann
|
10
|
+
- Matthias Viehweger
|
15
11
|
autorequire:
|
16
12
|
bindir: bin
|
17
13
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
dependencies:
|
22
|
-
- !ruby/object:Gem::Dependency
|
14
|
+
date: 2013-10-09 00:00:00.000000000 Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
23
17
|
name: i18n
|
24
|
-
|
25
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
26
19
|
none: false
|
27
|
-
requirements:
|
28
|
-
- -
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
|
31
|
-
segments:
|
32
|
-
- 0
|
33
|
-
version: "0"
|
20
|
+
requirements:
|
21
|
+
- - ! '>='
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '0'
|
34
24
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: simpleidn
|
38
25
|
prerelease: false
|
39
|
-
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
27
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
28
|
+
requirements:
|
29
|
+
- - ! '>='
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: '0'
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: simpleidn
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
36
|
+
requirements:
|
37
|
+
- - ! '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
48
40
|
type: :runtime
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: mocha
|
52
41
|
prerelease: false
|
53
|
-
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
43
|
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rake
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: rdoc
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
62
72
|
type: :development
|
63
|
-
version_requirements: *id003
|
64
|
-
- !ruby/object:Gem::Dependency
|
65
|
-
name: bundler
|
66
73
|
prerelease: false
|
67
|
-
|
74
|
+
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: mocha
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
68
83
|
none: false
|
69
|
-
requirements:
|
70
|
-
- -
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
|
73
|
-
segments:
|
74
|
-
- 0
|
75
|
-
version: "0"
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
76
88
|
type: :development
|
77
|
-
version_requirements: *id004
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: redgreen
|
80
89
|
prerelease: false
|
81
|
-
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ! '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: bundler
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
82
99
|
none: false
|
83
|
-
requirements:
|
84
|
-
- -
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
|
87
|
-
segments:
|
88
|
-
- 0
|
89
|
-
version: "0"
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
90
104
|
type: :development
|
91
|
-
version_requirements: *id005
|
92
|
-
- !ruby/object:Gem::Dependency
|
93
|
-
name: activesupport
|
94
105
|
prerelease: false
|
95
|
-
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: activesupport
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
96
115
|
none: false
|
97
|
-
requirements:
|
98
|
-
- -
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
|
101
|
-
segments:
|
102
|
-
- 0
|
103
|
-
version: "0"
|
116
|
+
requirements:
|
117
|
+
- - ! '>='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
104
120
|
type: :development
|
105
|
-
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ! '>='
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
106
128
|
description: A simple library to check for the well-being of an URL
|
107
|
-
email:
|
129
|
+
email:
|
108
130
|
- carp@hacksocke.de
|
109
131
|
executables: []
|
110
|
-
|
111
132
|
extensions: []
|
112
|
-
|
113
133
|
extra_rdoc_files: []
|
114
|
-
|
115
|
-
|
134
|
+
files:
|
135
|
+
- .gitignore
|
136
|
+
- .ruby-gemset
|
137
|
+
- .ruby-version
|
138
|
+
- .travis.yml
|
116
139
|
- Gemfile
|
117
|
-
- Gemfile.lock
|
118
140
|
- LICENSE
|
119
141
|
- README.rdoc
|
120
142
|
- Rakefile
|
121
143
|
- kauperts_link_checker.gemspec
|
122
144
|
- lib/kauperts_link_checker.rb
|
145
|
+
- lib/kauperts_link_checker/version.rb
|
123
146
|
- test/link_checker_test.rb
|
124
147
|
- test/test_helper.rb
|
125
|
-
|
126
|
-
homepage: ""
|
148
|
+
homepage: ''
|
127
149
|
licenses: []
|
128
|
-
|
129
150
|
post_install_message:
|
130
151
|
rdoc_options: []
|
131
|
-
|
132
|
-
require_paths:
|
152
|
+
require_paths:
|
133
153
|
- lib
|
134
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
135
155
|
none: false
|
136
|
-
requirements:
|
137
|
-
- -
|
138
|
-
- !ruby/object:Gem::Version
|
139
|
-
|
140
|
-
|
141
|
-
- 0
|
142
|
-
version: "0"
|
143
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ! '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
161
|
none: false
|
145
|
-
requirements:
|
146
|
-
- -
|
147
|
-
- !ruby/object:Gem::Version
|
148
|
-
|
149
|
-
segments:
|
150
|
-
- 0
|
151
|
-
version: "0"
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
152
166
|
requirements: []
|
153
|
-
|
154
167
|
rubyforge_project:
|
155
|
-
rubygems_version: 1.
|
168
|
+
rubygems_version: 1.8.23
|
156
169
|
signing_key:
|
157
170
|
specification_version: 3
|
158
171
|
summary: A simple library to check for the well-being of an URL
|
159
|
-
test_files:
|
172
|
+
test_files:
|
160
173
|
- test/link_checker_test.rb
|
161
174
|
- test/test_helper.rb
|
data/Gemfile.lock
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
kauperts_link_checker (0.4.0)
|
5
|
-
i18n
|
6
|
-
simpleidn
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: http://rubygems.org/
|
10
|
-
specs:
|
11
|
-
activesupport (2.3.11)
|
12
|
-
i18n (0.6.0)
|
13
|
-
mocha (0.9.12)
|
14
|
-
redgreen (1.2.2)
|
15
|
-
simpleidn (0.0.3)
|
16
|
-
|
17
|
-
PLATFORMS
|
18
|
-
ruby
|
19
|
-
|
20
|
-
DEPENDENCIES
|
21
|
-
activesupport
|
22
|
-
bundler
|
23
|
-
kauperts_link_checker!
|
24
|
-
mocha
|
25
|
-
redgreen
|