webfinger 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,48 @@
1
+ = FbGraph
2
+
3
+ An Ruby WebFinger client library.
4
+
5
+ Following the latest WebFinger spec discussed at IETF WebFinger WG.
6
+ http://tools.ietf.org/html/draft-ietf-appsawg-webfinger
7
+
8
+ If you found something different from the latest spec, open an issue please.
9
+
10
+ == Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ gem 'webfinger'
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install webfinger
23
+
24
+ == Usage
25
+
26
+ # Basic
27
+ WebFinger.discover! 'acct:nov@gmail.com'
28
+
29
+ # Only specific relations
30
+ WebFinger.discover! 'acct:nov@gmail.com', rel: 'http://openid.net/specs/connect/1.0/issuer'
31
+ WebFinger.discover! 'acct:nov@gmail.com', rel: ['http://openid.net/specs/connect/1.0/issuer', 'vcard']
32
+
33
+ # Specify host
34
+ WebFinger.discover! 'acct:nov@gmail.com', host: 'mail.google.com'
35
+
36
+ For more detailed usage, read <code>spec/webfinger_spec.rb</code>.
37
+
38
+ == Contributing
39
+
40
+ 1. Fork it
41
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
42
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
43
+ 4. Push to the branch (`git push origin my-new-feature`)
44
+ 5. Create new Pull Request
45
+
46
+ == Copyright
47
+
48
+ Copyright (c) 2010 nov matake. See LICENSE for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -30,13 +30,26 @@ module WebFinger
30
30
  end
31
31
 
32
32
  def endpoint
33
- uri = URI.parse(resource)
34
33
  path = '/.well-known/webfinger'
35
- host = @options[:host] || uri.host || resource.split(':').last.split('@').last.split('/').first
36
- port = @options[:port] || ([80, 443].include?(uri.port) ? nil : uri.port)
34
+ host, port = host_and_port
37
35
  WebFinger.url_builder.build [nil, host, port, path, query_string, nil]
38
36
  end
39
37
 
38
+ def host_and_port
39
+ uri = URI.parse(resource) rescue nil
40
+ if uri.try(:host).present?
41
+ [uri.host, [80, 443].include?(uri.port) ? nil : uri.port]
42
+ else
43
+ scheme_or_host, host_or_port, port_or_nil = resource.split('@').last.split('/').first.split(':')
44
+ case host_or_port
45
+ when nil, /\d+/
46
+ [scheme_or_host, host_or_port.try(:to_i)]
47
+ else
48
+ [host_or_port, port_or_nil.try(:to_i)]
49
+ end
50
+ end
51
+ end
52
+
40
53
  def query_string
41
54
  query_params.join('&')
42
55
  end
@@ -4,46 +4,55 @@ describe WebFinger do
4
4
  let(:resource) { 'acct:nov@example.com' }
5
5
 
6
6
  describe '#discover!' do
7
- shared_examples_for :discovery_succeeded do
8
- it 'should return WebFinger::Response' do
9
- mock_json 'https://example.com/.well-known/webfinger', 'all', query: {resource: resource} do
10
- response = WebFinger.discover! resource
11
- response.should be_instance_of WebFinger::Response
12
- end
13
- end
14
- end
15
-
16
- [:acct, :mailto, :device, :unknown].each do |scheme|
17
- context "with #{scheme} scheme" do
18
- let(:resource) { "#{scheme}:nov@example.com" }
19
- it_behaves_like :discovery_succeeded
20
- end
21
- end
22
-
23
- context 'with http scheme' do
24
- let(:resource) { 'http://example.com/nov' }
25
- it_behaves_like :discovery_succeeded
26
- end
27
-
28
- context 'with https scheme' do
29
- let(:resource) { 'https://example.com/nov' }
30
- it_behaves_like :discovery_succeeded
31
- end
32
-
33
- context 'with host option' do
34
- it 'should use given host' do
35
- mock_json 'https://discover.example.com/.well-known/webfinger', 'all', query: {resource: resource} do
36
- response = WebFinger.discover! resource, host: 'discover.example.com'
37
- response.should be_instance_of WebFinger::Response
38
- end
39
- end
40
- end
41
-
42
- context 'with port option' do
43
- it 'should use given port' do
44
- mock_json 'https://example.com:8080/.well-known/webfinger', 'all', query: {resource: resource} do
45
- response = WebFinger.discover! resource, port: 8080
46
- response.should be_instance_of WebFinger::Response
7
+ {
8
+ 'example.com' => 'https://example.com',
9
+ 'example.com/~nov/' => 'https://example.com',
10
+ 'nov@example.com' => 'https://example.com',
11
+ 'nov.matake@example.com' => 'https://example.com',
12
+ 'acct:nov@example.com' => 'https://example.com',
13
+ 'mailto:nov@example.com' => 'https://example.com',
14
+ 'device:example.com' => 'https://example.com',
15
+ 'unknown:nov@example.com' => 'https://example.com',
16
+ 'http://example.com/nov' => 'https://example.com',
17
+ 'https://example.com/nov' => 'https://example.com',
18
+ 'example.com:8080' => 'https://example.com:8080',
19
+ 'example.com:8080/~nov/' => 'https://example.com:8080',
20
+ 'nov@example.com:8080' => 'https://example.com:8080',
21
+ 'nov.matake@example.com:8080' => 'https://example.com:8080',
22
+ 'acct:nov@example.com:8080' => 'https://example.com:8080',
23
+ 'mailto:nov@example.com:8080' => 'https://example.com:8080',
24
+ 'device:example.com:8080' => 'https://example.com:8080',
25
+ 'unknown:nov@example.com:8080' => 'https://example.com:8080',
26
+ 'http://example.com:8080' => 'https://example.com:8080',
27
+ 'https://example.com:8080' => 'https://example.com:8080',
28
+ 'discover.example.com' => 'https://discover.example.com',
29
+ 'discover.example.com/~nov/' => 'https://discover.example.com',
30
+ 'nov@discover.example.com' => 'https://discover.example.com',
31
+ 'nov.matake@discover.example.com' => 'https://discover.example.com',
32
+ 'acct:nov@discover.example.com' => 'https://discover.example.com',
33
+ 'mailto:nov@discover.example.com' => 'https://discover.example.com',
34
+ 'device:discover.example.com' => 'https://discover.example.com',
35
+ 'unknown:nov@discover.example.com' => 'https://discover.example.com',
36
+ 'http://discover.example.com/nov' => 'https://discover.example.com',
37
+ 'https://discover.example.com/nov' => 'https://discover.example.com',
38
+ 'discover.example.com:8080' => 'https://discover.example.com:8080',
39
+ 'discover.example.com:8080/~nov/' => 'https://discover.example.com:8080',
40
+ 'nov@discover.example.com:8080' => 'https://discover.example.com:8080',
41
+ 'nov.matake@discover.example.com:8080' => 'https://discover.example.com:8080',
42
+ 'acct:nov@discover.example.com:8080' => 'https://discover.example.com:8080',
43
+ 'mailto:nov@discover.example.com:8080' => 'https://discover.example.com:8080',
44
+ 'device:discover.example.com:8080' => 'https://discover.example.com:8080',
45
+ 'unknown:nov@discover.example.com:8080' => 'https://discover.example.com:8080',
46
+ 'http://discover.example.com:8080/nov' => 'https://discover.example.com:8080',
47
+ 'https://discover.example.com:8080/nov' => 'https://discover.example.com:8080'
48
+ }.each do |resource, base_url|
49
+ endpoint = File.join base_url, '/.well-known/webfinger'
50
+ context "when resource=#{resource}" do
51
+ it "should access to #{endpoint}" do
52
+ mock_json endpoint, 'all', query: {resource: resource} do
53
+ response = WebFinger.discover! resource
54
+ response.should be_instance_of WebFinger::Response
55
+ end
47
56
  end
48
57
  end
49
58
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webfinger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-18 00:00:00.000000000 Z
12
+ date: 2012-12-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httpclient
@@ -117,7 +117,7 @@ files:
117
117
  - .gitignore
118
118
  - Gemfile
119
119
  - LICENSE.txt
120
- - README.md
120
+ - README.rdoc
121
121
  - Rakefile
122
122
  - VERSION
123
123
  - lib/webfinger.rb
data/README.md DELETED
@@ -1,29 +0,0 @@
1
- # Webfinger
2
-
3
- TODO: Write a gem description
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- gem 'webfinger'
10
-
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install webfinger
18
-
19
- ## Usage
20
-
21
- TODO: Write usage instructions here
22
-
23
- ## Contributing
24
-
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request