unapi 0.0.3 → 0.0.4
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/lib/unapi/page.rb +4 -1
- data/lib/unapi/service.rb +1 -1
- data/lib/unapi/validator.rb +55 -28
- data/test/index.html +1 -1
- data/test/unapi_servlet.rb +3 -3
- metadata +31 -34
data/lib/unapi/page.rb
CHANGED
@@ -48,7 +48,10 @@ module UnAPI
|
|
48
48
|
uris = []
|
49
49
|
return uris if not @document
|
50
50
|
@document.find_all('span') do |span|
|
51
|
-
|
51
|
+
next unless span['class'] and span['title']
|
52
|
+
# can have multiple css classes
|
53
|
+
classes = span['class'].split(/\s+/)
|
54
|
+
if classes.member? 'unapi-uri'
|
52
55
|
uris << span['title']
|
53
56
|
end
|
54
57
|
end
|
data/lib/unapi/service.rb
CHANGED
@@ -41,7 +41,7 @@ module UnAPI
|
|
41
41
|
format_esc = CGI.escape(format)
|
42
42
|
request_url = @url + "?uri=#{uri_esc}&format=#{format_esc}"
|
43
43
|
@document = nil
|
44
|
-
@status_code, body, @content_type = Utils.get
|
44
|
+
@status_code, body, @content_type = Utils.get request_url
|
45
45
|
@last_url = request_url
|
46
46
|
return body
|
47
47
|
end
|
data/lib/unapi/validator.rb
CHANGED
@@ -7,9 +7,10 @@ module UnAPI
|
|
7
7
|
class Message < String
|
8
8
|
attr_accessor :url
|
9
9
|
|
10
|
-
def initialize(string, url=nil)
|
10
|
+
def initialize(string, url=nil, advice=nil)
|
11
11
|
super string
|
12
12
|
@url = url
|
13
|
+
@advice = advice
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
@@ -19,12 +20,32 @@ module UnAPI
|
|
19
20
|
class Fail < Message
|
20
21
|
end
|
21
22
|
|
23
|
+
class Warn < Message
|
24
|
+
end
|
25
|
+
|
22
26
|
class ValidatorHandler
|
23
|
-
attr_reader :passes, :failures
|
27
|
+
attr_reader :passes, :failures, :warnings
|
24
28
|
|
25
29
|
def initialize
|
26
30
|
@passes = 0
|
27
31
|
@failures = 0
|
32
|
+
@warnings = 0
|
33
|
+
end
|
34
|
+
|
35
|
+
def test(ok, msg, url=nil, advice=nil)
|
36
|
+
if ok
|
37
|
+
pass(msg, url)
|
38
|
+
else
|
39
|
+
fail(msg, url, advice)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def check(ok, msg, url=nil, advice=nil)
|
44
|
+
if ok
|
45
|
+
pass(msg, url)
|
46
|
+
else
|
47
|
+
warn(msg, url, advice)
|
48
|
+
end
|
28
49
|
end
|
29
50
|
|
30
51
|
def pass(msg, url=nil)
|
@@ -32,9 +53,14 @@ module UnAPI
|
|
32
53
|
handle Pass.new(msg, url)
|
33
54
|
end
|
34
55
|
|
35
|
-
def fail(msg, url=nil)
|
56
|
+
def fail(msg, url=nil, advice=nil)
|
36
57
|
@failures += 1
|
37
|
-
handle Fail.new(msg, url)
|
58
|
+
handle Fail.new(msg, url, advice)
|
59
|
+
end
|
60
|
+
|
61
|
+
def warn(msg, url=nil, advice=nil)
|
62
|
+
@warnings += 1
|
63
|
+
handle Warn.new(msg, url, advice)
|
38
64
|
end
|
39
65
|
|
40
66
|
def count
|
@@ -70,7 +96,6 @@ module UnAPI
|
|
70
96
|
end
|
71
97
|
|
72
98
|
class Validator
|
73
|
-
|
74
99
|
def initialize(handler)
|
75
100
|
@handler = handler
|
76
101
|
end
|
@@ -86,12 +111,18 @@ module UnAPI
|
|
86
111
|
def check_service(page)
|
87
112
|
# make sure there is a service url
|
88
113
|
service_url = page.service_url
|
89
|
-
test
|
90
|
-
|
114
|
+
@handler.test(
|
115
|
+
service_url,
|
116
|
+
"<link> url for unapi service",
|
117
|
+
service_url,
|
118
|
+
"add an unAPI <link> element to the <head> of your html document")
|
91
119
|
|
92
120
|
# get the unapi service from the page
|
93
121
|
service = page.service
|
94
122
|
|
123
|
+
# no shoes, no shirt, no service
|
124
|
+
return nil if not service
|
125
|
+
|
95
126
|
# make sure service responds to a format request
|
96
127
|
formats = service.formats
|
97
128
|
check_formats(formats, service, 'unapi service')
|
@@ -100,8 +131,12 @@ module UnAPI
|
|
100
131
|
def check_uris(page)
|
101
132
|
# look for unap-uris on the page
|
102
133
|
service = page.service
|
134
|
+
if not service:
|
135
|
+
@handler.fail "couldn't find service"
|
136
|
+
end
|
137
|
+
|
103
138
|
uris = page.uris
|
104
|
-
test uris.length > 0, "found unapi-uris on the page"
|
139
|
+
@handler.test uris.length > 0, "found unapi-uris on the page"
|
105
140
|
|
106
141
|
# go through each identifier
|
107
142
|
uris.each do |uri|
|
@@ -113,26 +148,26 @@ module UnAPI
|
|
113
148
|
|
114
149
|
# request an invalid format
|
115
150
|
content = service.get_uri_in_format(uri, 'thisformatdoesnotexist')
|
116
|
-
|
151
|
+
@handler.check service.status_code == 415,
|
117
152
|
"request for uri #{uri} with bad format returns 415"
|
118
153
|
|
119
154
|
# verify that each format is available
|
120
155
|
content = ''
|
121
156
|
formats.each do |format|
|
122
157
|
content = service.get_uri_in_format(uri, format.name)
|
123
|
-
|
158
|
+
@handler.check service.status_code == 200,
|
124
159
|
"request for #{uri} content responded with 200 status code",
|
125
160
|
service.last_url
|
126
|
-
test
|
161
|
+
@handler.test((content != nil and content.length > 0),
|
127
162
|
"request for #{uri} returned data",
|
128
|
-
service.last_url
|
129
|
-
test service.content_type == format.type,
|
163
|
+
service.last_url)
|
164
|
+
@handler.test service.content_type == format.type,
|
130
165
|
"request for #{uri} returned mime type #{service.content_type}",
|
131
166
|
service.last_url
|
132
167
|
|
133
168
|
# request an invalid uri with a valid format
|
134
169
|
service.get_uri_in_format('invaliduriinvaliduri', format.name)
|
135
|
-
|
170
|
+
@handler.check service.status_code == 404,
|
136
171
|
"request for invalid uri with valid format #{format.name} " +
|
137
172
|
"returned 404", service.last_url
|
138
173
|
end
|
@@ -140,16 +175,16 @@ module UnAPI
|
|
140
175
|
end
|
141
176
|
|
142
177
|
def check_formats(formats, service, target)
|
143
|
-
test service.content_type == 'application/xml',
|
178
|
+
@handler.test service.content_type == 'application/xml',
|
144
179
|
"formats for #{target} has content-type #{service.content_type}",
|
145
|
-
service.last_url
|
180
|
+
service.last_url,
|
146
181
|
|
147
182
|
if target == 'unapi service'
|
148
|
-
|
183
|
+
@handler.check service.status_code == 200,
|
149
184
|
"formats request for #{target} returned 200 status code",
|
150
185
|
service.last_url
|
151
186
|
else
|
152
|
-
|
187
|
+
@handler.check service.status_code == 300,
|
153
188
|
"formats request for #{target} return 300 status code",
|
154
189
|
service.last_url
|
155
190
|
end
|
@@ -159,9 +194,9 @@ module UnAPI
|
|
159
194
|
count = 0
|
160
195
|
formats.each do |format|
|
161
196
|
count += 1
|
162
|
-
test format.name,
|
197
|
+
@handler.test format.name,
|
163
198
|
"format #{count} for #{target} has a name"
|
164
|
-
test format.type,
|
199
|
+
@handler.test format.type,
|
165
200
|
"format #{count} for #{target} has a type"
|
166
201
|
end
|
167
202
|
else
|
@@ -169,14 +204,6 @@ module UnAPI
|
|
169
204
|
end
|
170
205
|
end
|
171
206
|
|
172
|
-
def test(ok, msg, url=nil)
|
173
|
-
if ok
|
174
|
-
@handler.pass(msg, url)
|
175
|
-
else
|
176
|
-
@handler.fail(msg, url)
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
207
|
end
|
181
208
|
end
|
182
209
|
|
data/test/index.html
CHANGED
@@ -490,7 +490,7 @@ Sign in to get <a href=/exec/obidos/flex-sign-in?opt=a&page=recs/sign-in-secure.
|
|
490
490
|
<br><br>
|
491
491
|
<div class="small">
|
492
492
|
<b class="h1">2006 Spring Preview: What to Read Next</b><br clear=left>
|
493
|
-
<span class="unapi-uri" title="urn:isbn:0553804790">
|
493
|
+
<span class="unapi-uri display" title="urn:isbn:0553804790">
|
494
494
|
<a href="http://www.amazon.com/exec/obidos/ASIN/0553804790">
|
495
495
|
<img src="http://images.amazon.com/images/P/0553804790.01.37TRZZZZ.jpg" width=81 height=121 align=left valign=top hspace=5 vspace=3 border=0 border=0>
|
496
496
|
</a>
|
data/test/unapi_servlet.rb
CHANGED
@@ -92,11 +92,11 @@ class UnAPIServlet < WEBrick::HTTPServlet::AbstractServlet
|
|
92
92
|
end
|
93
93
|
|
94
94
|
|
95
|
-
# run this file and it will start an http server on port
|
96
|
-
# with the servlet at http://localhost:
|
95
|
+
# run this file and it will start an http server on port 9000
|
96
|
+
# with the servlet at http://localhost:9000/unapi
|
97
97
|
|
98
98
|
if $0 == __FILE__
|
99
|
-
server = WEBrick::HTTPServer.new(:Port =>
|
99
|
+
server = WEBrick::HTTPServer.new(:Port => 9000, :DocumentRoot => 'test')
|
100
100
|
server.mount("/unapi", UnAPIServlet)
|
101
101
|
trap("INT") {server.shutdown}
|
102
102
|
server.start
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
!ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
rubygems_version: 0.8.11
|
3
3
|
specification_version: 1
|
4
4
|
name: unapi
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2006-03-
|
6
|
+
version: 0.0.4
|
7
|
+
date: 2006-03-19 00:00:00 -06:00
|
8
8
|
summary: A library for working with the unapi protocol
|
9
9
|
require_paths:
|
10
|
-
- lib
|
10
|
+
- lib
|
11
11
|
email: ehs@pobox.com
|
12
12
|
homepage: http://www.textualize.com/unapi
|
13
13
|
rubyforge_project:
|
@@ -18,46 +18,43 @@ bindir: bin
|
|
18
18
|
has_rdoc: true
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
-
|
22
|
+
- ">"
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.0.0
|
24
25
|
version:
|
25
26
|
platform: ruby
|
26
27
|
signing_key:
|
27
28
|
cert_chain:
|
28
29
|
authors:
|
29
|
-
- Ed Summers
|
30
|
+
- Ed Summers
|
30
31
|
files:
|
31
|
-
- lib/unapi
|
32
|
-
- lib/unapi.rb
|
33
|
-
- lib/unapi/
|
34
|
-
- lib/unapi/
|
35
|
-
- lib/unapi/
|
36
|
-
- lib/unapi/
|
37
|
-
- lib/unapi/
|
38
|
-
- test/
|
39
|
-
- test/
|
40
|
-
- test/unapi_test.rb
|
41
|
-
- test/validate_test.rb
|
32
|
+
- lib/unapi
|
33
|
+
- lib/unapi.rb
|
34
|
+
- lib/unapi/format.rb
|
35
|
+
- lib/unapi/page.rb
|
36
|
+
- lib/unapi/service.rb
|
37
|
+
- lib/unapi/utils.rb
|
38
|
+
- lib/unapi/validator.rb
|
39
|
+
- test/index.html
|
40
|
+
- test/unapi_servlet.rb
|
41
|
+
- test/unapi_test.rb
|
42
|
+
- test/validate_test.rb
|
42
43
|
test_files:
|
43
|
-
- test.rb
|
44
|
+
- test.rb
|
44
45
|
rdoc_options: []
|
45
|
-
|
46
46
|
extra_rdoc_files: []
|
47
|
-
|
48
47
|
executables: []
|
49
|
-
|
50
48
|
extensions: []
|
51
|
-
|
52
49
|
requirements: []
|
53
|
-
|
54
50
|
dependencies:
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: rubyful_soup
|
53
|
+
version_requirement:
|
54
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
55
|
+
requirements:
|
56
|
+
-
|
57
|
+
- ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 1.0.4
|
60
|
+
version:
|