redfinger 0.0.6 → 0.1.0
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/.rspec +2 -0
- data/Rakefile +3 -8
- data/VERSION +1 -1
- data/lib/redfinger/client.rb +12 -3
- data/lib/redfinger/finger.rb +1 -1
- data/lib/redfinger/link.rb +6 -4
- data/lib/redfinger/link_helpers.rb +1 -1
- data/redfinger.gemspec +22 -24
- data/spec/redfinger/client_spec.rb +18 -0
- data/spec/spec_helper.rb +4 -4
- metadata +7 -39
- data/.gitignore +0 -21
data/.rspec
ADDED
data/Rakefile
CHANGED
@@ -22,15 +22,10 @@ rescue LoadError
|
|
22
22
|
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
23
23
|
end
|
24
24
|
|
25
|
-
require '
|
26
|
-
|
27
|
-
spec.libs << 'lib' << 'spec'
|
28
|
-
spec.spec_files = FileList['spec/**/*_spec.rb']
|
29
|
-
end
|
25
|
+
require 'rspec/core/rake_task'
|
26
|
+
RSpec::Core::RakeTask.new(:spec)
|
30
27
|
|
31
|
-
|
32
|
-
spec.libs << 'lib' << 'spec'
|
33
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
28
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
34
29
|
spec.rcov = true
|
35
30
|
end
|
36
31
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/lib/redfinger/client.rb
CHANGED
@@ -4,11 +4,14 @@ require 'uri'
|
|
4
4
|
|
5
5
|
module Redfinger
|
6
6
|
class Client
|
7
|
-
attr_accessor :account, :domain, :uri_template
|
7
|
+
attr_accessor :account, :domain, :uri_template, :xrd_timeout, :xrd_open_timeout
|
8
8
|
|
9
9
|
def initialize(email, uri_template = nil)
|
10
10
|
self.account = normalize(email)
|
11
11
|
self.domain = account.split('@').last
|
12
|
+
|
13
|
+
self.xrd_timeout = 10
|
14
|
+
self.xrd_open_timeout = 5
|
12
15
|
end
|
13
16
|
|
14
17
|
def finger
|
@@ -32,7 +35,12 @@ module Redfinger
|
|
32
35
|
end
|
33
36
|
|
34
37
|
def retrieve_template_from_xrd(ssl = true)
|
35
|
-
|
38
|
+
xrd_client = RestClient::Resource.new(xrd_url(ssl),
|
39
|
+
:timeout => self.xrd_timeout,
|
40
|
+
:open_timeout => self.xrd_open_timeout
|
41
|
+
)
|
42
|
+
|
43
|
+
doc = Nokogiri::XML::Document.parse(xrd_client.get.body)
|
36
44
|
if doc.namespaces["xmlns"] != "http://docs.oasis-open.org/ns/xri/xrd-1.0"
|
37
45
|
# it's probably not finger, let's try without ssl
|
38
46
|
# http://code.google.com/p/webfinger/wiki/WebFingerProtocol
|
@@ -41,7 +49,8 @@ module Redfinger
|
|
41
49
|
end
|
42
50
|
|
43
51
|
doc.at('Link[rel=lrdd]').attribute('template').value
|
44
|
-
rescue
|
52
|
+
rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT,
|
53
|
+
RestClient::RequestTimeout, RestClient::ResourceNotFound, RestClient::Forbidden
|
45
54
|
if ssl
|
46
55
|
retrieve_template_from_xrd(false)
|
47
56
|
else
|
data/lib/redfinger/finger.rb
CHANGED
data/lib/redfinger/link.rb
CHANGED
@@ -3,10 +3,12 @@ require 'hashie'
|
|
3
3
|
|
4
4
|
module Redfinger
|
5
5
|
class Link < Hashie::Mash
|
6
|
-
def
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
def self.from_xml(xml_link)
|
7
|
+
new_link = Link.new
|
8
|
+
new_link[:rel] = xml_link['rel']
|
9
|
+
new_link[:href] = xml_link['href']
|
10
|
+
new_link[:type] = xml_link['type']
|
11
|
+
new_link
|
10
12
|
end
|
11
13
|
|
12
14
|
# Outputs the URL of the link, useful for using
|
data/redfinger.gemspec
CHANGED
@@ -1,52 +1,50 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{redfinger}
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Bleigh"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-02-07}
|
13
13
|
s.description = %q{A Ruby Webfinger client}
|
14
14
|
s.email = %q{michael@intridea.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
|
17
|
+
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
21
|
+
".rspec",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/redfinger.rb",
|
27
|
+
"lib/redfinger/client.rb",
|
28
|
+
"lib/redfinger/finger.rb",
|
29
|
+
"lib/redfinger/link.rb",
|
30
|
+
"lib/redfinger/link_helpers.rb",
|
31
|
+
"redfinger.gemspec",
|
32
|
+
"spec/redfinger/client_spec.rb",
|
33
|
+
"spec/redfinger_spec.rb",
|
34
|
+
"spec/spec.opts",
|
35
|
+
"spec/spec_helper.rb"
|
36
36
|
]
|
37
37
|
s.homepage = %q{http://github.com/mbleigh/redfinger}
|
38
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
39
38
|
s.require_paths = ["lib"]
|
40
|
-
s.rubygems_version = %q{1.
|
39
|
+
s.rubygems_version = %q{1.5.0}
|
41
40
|
s.summary = %q{A Ruby WebFinger client.}
|
42
41
|
s.test_files = [
|
43
42
|
"spec/redfinger/client_spec.rb",
|
44
|
-
|
45
|
-
|
43
|
+
"spec/redfinger_spec.rb",
|
44
|
+
"spec/spec_helper.rb"
|
46
45
|
]
|
47
46
|
|
48
47
|
if s.respond_to? :specification_version then
|
49
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
50
48
|
s.specification_version = 3
|
51
49
|
|
52
50
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
@@ -25,6 +25,24 @@ describe Redfinger::Client do
|
|
25
25
|
stub_request(:get, 'http://example.com/.well-known/host-meta').to_raise(HaltSuccessError)
|
26
26
|
lambda{Redfinger::Client.new('acct:abc@example.com').send(:retrieve_template_from_xrd)}.should raise_error(HaltSuccessError)
|
27
27
|
end
|
28
|
+
|
29
|
+
it 'should make an HTTP request if the HTTPS request times out in Net::HTTP' do
|
30
|
+
stub_request(:get, 'https://example.com/.well-known/host-meta').to_raise(Errno::ETIMEDOUT)
|
31
|
+
stub_request(:get, 'http://example.com/.well-known/host-meta').to_raise(HaltSuccessError)
|
32
|
+
lambda{Redfinger::Client.new('acct:abc@example.com').send(:retrieve_template_from_xrd)}.should raise_error(HaltSuccessError)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should make an HTTP request if the HTTPS request times out in RestClient' do
|
36
|
+
stub_request(:get, 'https://example.com/.well-known/host-meta').to_raise(RestClient::RequestTimeout)
|
37
|
+
stub_request(:get, 'http://example.com/.well-known/host-meta').to_raise(HaltSuccessError)
|
38
|
+
lambda{Redfinger::Client.new('acct:abc@example.com').send(:retrieve_template_from_xrd)}.should raise_error(HaltSuccessError)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should make an HTTP request if the server throws a 403 forbidden on the HTTPS request' do
|
42
|
+
stub_request(:get, 'https://example.com/.well-known/host-meta').to_return(:status => [403, "Forbidden"])
|
43
|
+
stub_request(:get, 'http://example.com/.well-known/host-meta').to_raise(HaltSuccessError)
|
44
|
+
lambda{Redfinger::Client.new('acct:abc@example.com').send(:retrieve_template_from_xrd)}.should raise_error(HaltSuccessError)
|
45
|
+
end
|
28
46
|
|
29
47
|
it 'should raise Redfinger::ResourceNotFound if HTTP fails as well' do
|
30
48
|
stub_request(:get, 'https://example.com/.well-known/host-meta').to_raise(Errno::ECONNREFUSED)
|
data/spec/spec_helper.rb
CHANGED
@@ -3,11 +3,11 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
5
|
require 'redfinger'
|
6
|
-
require '
|
7
|
-
require '
|
6
|
+
require 'rspec'
|
7
|
+
require 'rspec/autorun'
|
8
8
|
require 'webmock/rspec'
|
9
9
|
|
10
|
-
include WebMock
|
10
|
+
include WebMock::API
|
11
11
|
|
12
12
|
def host_xrd
|
13
13
|
<<-XML
|
@@ -43,6 +43,6 @@ def stub_success(address = 'abc@example.com')
|
|
43
43
|
stub_request(:get, /webfinger\/\?q=#{address}/).to_return(:status => 200, :body => finger_xrd)
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
RSpec.configure do |config|
|
47
47
|
|
48
48
|
end
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redfinger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 6
|
10
|
-
version: 0.0.6
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Michael Bleigh
|
@@ -15,7 +10,7 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date:
|
13
|
+
date: 2011-02-07 00:00:00 -06:00
|
19
14
|
default_executable:
|
20
15
|
dependencies:
|
21
16
|
- !ruby/object:Gem::Dependency
|
@@ -26,11 +21,6 @@ dependencies:
|
|
26
21
|
requirements:
|
27
22
|
- - ">="
|
28
23
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 1
|
32
|
-
- 5
|
33
|
-
- 0
|
34
24
|
version: 1.5.0
|
35
25
|
type: :runtime
|
36
26
|
version_requirements: *id001
|
@@ -42,11 +32,6 @@ dependencies:
|
|
42
32
|
requirements:
|
43
33
|
- - ">="
|
44
34
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 7
|
46
|
-
segments:
|
47
|
-
- 1
|
48
|
-
- 4
|
49
|
-
- 0
|
50
35
|
version: 1.4.0
|
51
36
|
type: :runtime
|
52
37
|
version_requirements: *id002
|
@@ -58,9 +43,6 @@ dependencies:
|
|
58
43
|
requirements:
|
59
44
|
- - ">="
|
60
45
|
- !ruby/object:Gem::Version
|
61
|
-
hash: 3
|
62
|
-
segments:
|
63
|
-
- 0
|
64
46
|
version: "0"
|
65
47
|
type: :runtime
|
66
48
|
version_requirements: *id003
|
@@ -72,11 +54,6 @@ dependencies:
|
|
72
54
|
requirements:
|
73
55
|
- - ">="
|
74
56
|
- !ruby/object:Gem::Version
|
75
|
-
hash: 13
|
76
|
-
segments:
|
77
|
-
- 1
|
78
|
-
- 2
|
79
|
-
- 9
|
80
57
|
version: 1.2.9
|
81
58
|
type: :development
|
82
59
|
version_requirements: *id004
|
@@ -88,9 +65,6 @@ dependencies:
|
|
88
65
|
requirements:
|
89
66
|
- - ">="
|
90
67
|
- !ruby/object:Gem::Version
|
91
|
-
hash: 3
|
92
|
-
segments:
|
93
|
-
- 0
|
94
68
|
version: "0"
|
95
69
|
type: :development
|
96
70
|
version_requirements: *id005
|
@@ -105,7 +79,7 @@ extra_rdoc_files:
|
|
105
79
|
- README.rdoc
|
106
80
|
files:
|
107
81
|
- .document
|
108
|
-
- .
|
82
|
+
- .rspec
|
109
83
|
- LICENSE
|
110
84
|
- README.rdoc
|
111
85
|
- Rakefile
|
@@ -125,8 +99,8 @@ homepage: http://github.com/mbleigh/redfinger
|
|
125
99
|
licenses: []
|
126
100
|
|
127
101
|
post_install_message:
|
128
|
-
rdoc_options:
|
129
|
-
|
102
|
+
rdoc_options: []
|
103
|
+
|
130
104
|
require_paths:
|
131
105
|
- lib
|
132
106
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -134,23 +108,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
108
|
requirements:
|
135
109
|
- - ">="
|
136
110
|
- !ruby/object:Gem::Version
|
137
|
-
hash: 3
|
138
|
-
segments:
|
139
|
-
- 0
|
140
111
|
version: "0"
|
141
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
113
|
none: false
|
143
114
|
requirements:
|
144
115
|
- - ">="
|
145
116
|
- !ruby/object:Gem::Version
|
146
|
-
hash: 3
|
147
|
-
segments:
|
148
|
-
- 0
|
149
117
|
version: "0"
|
150
118
|
requirements: []
|
151
119
|
|
152
120
|
rubyforge_project:
|
153
|
-
rubygems_version: 1.
|
121
|
+
rubygems_version: 1.5.0
|
154
122
|
signing_key:
|
155
123
|
specification_version: 3
|
156
124
|
summary: A Ruby WebFinger client.
|