discodactyl 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +1 -0
- data/CHANGELOG +452 -0
- data/COPYING +662 -0
- data/Gemfile +8 -0
- data/INSTALL +26 -0
- data/MANIFEST +30 -0
- data/NEWS +31 -0
- data/README +63 -0
- data/Rakefile +23 -0
- data/TODO +24 -0
- data/bin/webfinger +62 -0
- data/discodactyl.gemspec +23 -0
- data/lib/discodactyl.rb +9 -0
- data/lib/discodactyl/acct_uri.rb +82 -0
- data/lib/discodactyl/host_meta.rb +34 -0
- data/lib/discodactyl/link_header.rb +45 -0
- data/lib/discodactyl/resource_discovery.rb +102 -0
- data/lib/discodactyl/uri_template.rb +32 -0
- data/lib/discodactyl/xrd.rb +2 -0
- data/lib/discodactyl/xrd/document.rb +75 -0
- data/lib/discodactyl/xrd/link.rb +47 -0
- data/test/test_acct_uri.rb +57 -0
- data/test/test_helper.rb +17 -0
- data/test/test_host_meta.rb +37 -0
- data/test/test_link_header.rb +32 -0
- data/test/test_resource_discovery.rb +65 -0
- data/test/test_uri_template.rb +32 -0
- data/test/test_xrd_append.rb +93 -0
- data/test/test_xrd_link_parse.rb +97 -0
- data/test/test_xrd_parse.rb +146 -0
- metadata +164 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
libdir = File.expand_path('../../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
4
|
+
|
5
|
+
require "test/unit"
|
6
|
+
require "discodactyl/uri_template"
|
7
|
+
|
8
|
+
class TestURITemplate < Test::Unit::TestCase
|
9
|
+
def test_render_encode_uri
|
10
|
+
t = Discodactyl::URITemplate.new('http://example.org?q={uri}')
|
11
|
+
assert_equal('http://example.org?q=http%3A%2F%2Fexample.com%2Fr%3Ff%3D1', t.to_uri('uri' => URI.parse('http://example.com/r?f=1')))
|
12
|
+
end
|
13
|
+
# from http://tools.ietf.org/html/draft-hammer-hostmeta-05#section-3.2.1
|
14
|
+
def test_render_encode
|
15
|
+
t = Discodactyl::URITemplate.new('http://example.org?q={uri}')
|
16
|
+
assert_equal('http://example.org?q=http%3A%2F%2Fexample.com%2Fr%3Ff%3D1', t.to_uri('uri' => 'http://example.com/r?f=1'))
|
17
|
+
end
|
18
|
+
def test_render_single
|
19
|
+
t = Discodactyl::URITemplate.new('http://host.example/{%id}')
|
20
|
+
assert_equal('http://host.example/test', t.to_uri('id' => 'test'))
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_render_many
|
24
|
+
t = Discodactyl::URITemplate.new('http://host.example/{%id}/{%name}')
|
25
|
+
assert_equal('http://host.example/test/bob', t.to_uri('id' => 'test', 'name' => 'bob'))
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_equivalence
|
29
|
+
pattern = 'http://host.example/{%id}'
|
30
|
+
assert_equal(Discodactyl::URITemplate.new(pattern), Discodactyl::URITemplate.new(pattern))
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
libdir = File.expand_path('../../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
4
|
+
testdir = File.expand_path('../../test', __FILE__)
|
5
|
+
$LOAD_PATH.unshift(testdir) unless $LOAD_PATH.include?(testdir)
|
6
|
+
|
7
|
+
require 'test_helper'
|
8
|
+
require 'discodactyl/xrd/document'
|
9
|
+
|
10
|
+
module Discodactyl
|
11
|
+
class XRDTestCase < ::Test::Unit::TestCase #:nodoc:
|
12
|
+
# Placeholder so test/unit ignores test cases without any tests.
|
13
|
+
def default_test
|
14
|
+
end
|
15
|
+
def setup
|
16
|
+
@full_xrd_string =<<eos
|
17
|
+
<?xml version=\"1.0\"?>
|
18
|
+
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
19
|
+
<Subject>http://host.example/</Subject>
|
20
|
+
<Link rel="webfinger" href="http://host.example/endpoint"/>
|
21
|
+
<Link rel="describedby" href="http://host.example/endpoint"/>
|
22
|
+
<Link rel="feed" template="http://host.example/descriptor?q={%id}"/>
|
23
|
+
<Link rel="describedby" template="http://host.example/descriptor?q={%id}"/>
|
24
|
+
</XRD>
|
25
|
+
eos
|
26
|
+
|
27
|
+
@xrd = Discodactyl::XRD::Document.parse(@full_xrd_string)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class TestXRDAppendWithId < Discodactyl::XRDTestCase
|
33
|
+
def setup
|
34
|
+
super
|
35
|
+
@raw_link = '<Link xml:id="foo" rel="http://oexchange.org/spec/0.8/rel/user-target" type="application/xrd+xml" href="http://www.example.com/linkeater/oexchange.xrd"/>'
|
36
|
+
@link = @xrd.append(@raw_link)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_append_with_id_does_not_overwrite
|
40
|
+
assert_equal @raw_link, @link.to_s
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_append_generates_id_on_duplicate
|
44
|
+
second = @xrd.append(@raw_link)
|
45
|
+
assert_not_equal @link.id, second.id
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class TestXRDAppendWithoutID < Discodactyl::XRDTestCase
|
50
|
+
def setup
|
51
|
+
super
|
52
|
+
@raw_link = '<Link rel="http://oexchange.org/spec/0.8/rel/user-target" type="application/xrd+xml" href="http://www.example.com/linkeater/oexchange.xrd"/>'
|
53
|
+
@link = @xrd.append(@raw_link)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_inserts_link_in_raw
|
57
|
+
assert_include? @link.raw, @xrd.raw.search('//xrd:Link', Discodactyl::XRD::XMLNS)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_append_preserves_rel
|
61
|
+
assert_equal 'http://oexchange.org/spec/0.8/rel/user-target', @link.rel
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_append_preserves_attributes
|
65
|
+
assert_equal 'http://oexchange.org/spec/0.8/rel/user-target', @link.rel
|
66
|
+
assert_equal 'application/xrd+xml', @link.type
|
67
|
+
assert_equal 'http://www.example.com/linkeater/oexchange.xrd', @link.href
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_append_preserves_attributes
|
71
|
+
assert_equal 'http://oexchange.org/spec/0.8/rel/user-target', @link.rel
|
72
|
+
assert_equal 'application/xrd+xml', @link.type
|
73
|
+
assert_equal 'http://www.example.com/linkeater/oexchange.xrd', @link.href
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_inserts_link
|
77
|
+
assert_include? @link, @xrd.links
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_generates_id
|
81
|
+
assert_not_nil @link.id
|
82
|
+
assert !@link.id.empty?
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_can_find_appended_link_by_returned_link_id
|
86
|
+
actual = @xrd.find_link_by_id(@link.id)
|
87
|
+
|
88
|
+
assert_equal 'http://oexchange.org/spec/0.8/rel/user-target', actual.rel
|
89
|
+
assert_equal 'application/xrd+xml', actual.type
|
90
|
+
assert_equal 'http://www.example.com/linkeater/oexchange.xrd', actual.href
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
libdir = File.expand_path('../../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
4
|
+
|
5
|
+
require "test/unit"
|
6
|
+
require "discodactyl/xrd"
|
7
|
+
require "discodactyl/uri_template"
|
8
|
+
|
9
|
+
class TestXRDLinkParsing < Test::Unit::TestCase
|
10
|
+
def test_parse_all
|
11
|
+
raw = '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><Link rel="lrdd" type="text/html" href="http://host.example" template="http://www.google.com/s2/webfinger/?q={%id}"/></XRD>'
|
12
|
+
elem = Nokogiri(raw).xpath('/xrd:XRD/xrd:Link', Discodactyl::XRD::XMLNS).first
|
13
|
+
|
14
|
+
link = Discodactyl::XRD::Link.parse(elem)
|
15
|
+
|
16
|
+
assert_equal 'lrdd', link.rel
|
17
|
+
assert_equal 'text/html', link.type
|
18
|
+
assert_equal 'http://host.example', link.href
|
19
|
+
assert_nil link.template
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_parse_empty
|
23
|
+
raw = '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><Link></Link></XRD>'
|
24
|
+
elem = Nokogiri(raw).xpath('/xrd:XRD/xrd:Link', Discodactyl::XRD::XMLNS).first
|
25
|
+
|
26
|
+
link = Discodactyl::XRD::Link.parse(elem)
|
27
|
+
|
28
|
+
assert_not_nil(link)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_parse_rel
|
32
|
+
raw = '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><Link rel="lrdd"/></XRD>'
|
33
|
+
elem = Nokogiri(raw).xpath('/xrd:XRD/xrd:Link', Discodactyl::XRD::XMLNS).first
|
34
|
+
|
35
|
+
link = Discodactyl::XRD::Link.parse(elem)
|
36
|
+
|
37
|
+
assert_equal 'lrdd', link.rel
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_parse_type
|
41
|
+
raw = '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><Link type="text/html"/></XRD>'
|
42
|
+
elem = Nokogiri(raw).xpath('/xrd:XRD/xrd:Link', Discodactyl::XRD::XMLNS).first
|
43
|
+
|
44
|
+
link = Discodactyl::XRD::Link.parse(elem)
|
45
|
+
|
46
|
+
assert_equal 'text/html', link.type
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_parse_href
|
50
|
+
raw = '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><Link href="http://host.example"/></XRD>'
|
51
|
+
elem = Nokogiri(raw).xpath('/xrd:XRD/xrd:Link', Discodactyl::XRD::XMLNS).first
|
52
|
+
|
53
|
+
link = Discodactyl::XRD::Link.parse(elem)
|
54
|
+
|
55
|
+
assert_equal 'http://host.example', link.href
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_parse_template
|
59
|
+
raw = '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><Link template="http://www.google.com/s2/webfinger/?q={%id}"/></XRD>'
|
60
|
+
elem = Nokogiri(raw).xpath('/xrd:XRD/xrd:Link', Discodactyl::XRD::XMLNS).first
|
61
|
+
|
62
|
+
link = Discodactyl::XRD::Link.parse(elem)
|
63
|
+
|
64
|
+
assert_equal Discodactyl::URITemplate.new('http://www.google.com/s2/webfinger/?q={%id}'), link.template
|
65
|
+
assert_nil link.href
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_ignores_template_when_href_exists
|
69
|
+
raw = '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><Link rel="lrdd" type="text/html" href="http://host.example" template="http://www.google.com/s2/webfinger/?q={%id}"/></XRD>'
|
70
|
+
elem = Nokogiri(raw).xpath('/xrd:XRD/xrd:Link', Discodactyl::XRD::XMLNS).first
|
71
|
+
|
72
|
+
link = Discodactyl::XRD::Link.parse(elem)
|
73
|
+
|
74
|
+
assert_equal 'http://host.example', link.href
|
75
|
+
assert_nil link.template
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_to_uris_for_plain_uri
|
79
|
+
raw = '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><Link href="http://host.example"/></XRD>'
|
80
|
+
elem = Nokogiri(raw).xpath('/xrd:XRD/xrd:Link', Discodactyl::XRD::XMLNS).first
|
81
|
+
link = Discodactyl::XRD::Link.parse(elem)
|
82
|
+
|
83
|
+
uri = link.to_uri
|
84
|
+
|
85
|
+
assert_equal 'http://host.example', uri
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_to_uris_for_uri_template
|
89
|
+
raw = '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><Link template="http://www.google.com/s2/webfinger/?q={%id}"/></XRD>'
|
90
|
+
elem = Nokogiri(raw).xpath('/xrd:XRD/xrd:Link', Discodactyl::XRD::XMLNS).first
|
91
|
+
link = Discodactyl::XRD::Link.parse(elem)
|
92
|
+
|
93
|
+
uri = link.to_uri 'id' => 'bob@gmail.com'
|
94
|
+
|
95
|
+
assert_equal 'http://www.google.com/s2/webfinger/?q=bob@gmail.com', uri
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
libdir = File.expand_path('../../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
4
|
+
testdir = File.expand_path('../../test', __FILE__)
|
5
|
+
$LOAD_PATH.unshift(testdir) unless $LOAD_PATH.include?(testdir)
|
6
|
+
|
7
|
+
require 'test_helper'
|
8
|
+
require 'discodactyl/xrd/document'
|
9
|
+
|
10
|
+
class TestXRDParsing < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
@minimal_xrd_string =<<eos
|
13
|
+
<?xml version=\"1.0\"?>
|
14
|
+
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
15
|
+
<Subject>http://host.example/</Subject>
|
16
|
+
</XRD>
|
17
|
+
eos
|
18
|
+
|
19
|
+
@full_xrd_string =<<eos
|
20
|
+
<?xml version=\"1.0\"?>
|
21
|
+
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
22
|
+
<Subject>http://host.example/</Subject>
|
23
|
+
<Link rel="webfinger" href="http://host.example/endpoint"/>
|
24
|
+
<Link rel="describedby" href="http://host.example/endpoint"/>
|
25
|
+
<Link rel="feed" template="http://host.example/descriptor?q={%id}"/>
|
26
|
+
<Link rel="describedby" template="http://host.example/descriptor?q={%id}"/>
|
27
|
+
</XRD>
|
28
|
+
eos
|
29
|
+
|
30
|
+
@raw_link_without_id = '<Link rel="http://oexchange.org/spec/0.8/rel/user-target" type="application/xrd+xml" href="http://www.example.com/linkeater/oexchange.xrd"/>'
|
31
|
+
@raw_link_with_id = '<Link xml:id="foo" rel="http://oexchange.org/spec/0.8/rel/user-target" type="application/xrd+xml" href="http://www.example.com/linkeater/oexchange.xrd"/>'
|
32
|
+
|
33
|
+
@xrd = Discodactyl::XRD::Document.parse(@full_xrd_string)
|
34
|
+
end
|
35
|
+
def test_parse
|
36
|
+
doc = Discodactyl::XRD::Document.parse(@full_xrd_string)
|
37
|
+
assert_not_nil(doc)
|
38
|
+
end
|
39
|
+
def test_parse_links
|
40
|
+
assert_equal(4, @xrd.links.length)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_linkelems_by_rel
|
44
|
+
link_elems = @xrd.linkelems_by_rel 'describedby'
|
45
|
+
|
46
|
+
assert_length(2, link_elems)
|
47
|
+
|
48
|
+
assert_equal 'http://host.example/endpoint', link_elems[0]['href']
|
49
|
+
assert_equal 'http://host.example/descriptor?q={%id}', link_elems[1]['template']
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_linkelems_by_rel_with_multiple_rels
|
53
|
+
link_elems = @xrd.linkelems_by_rel 'describedby'
|
54
|
+
|
55
|
+
assert_length(2, link_elems)
|
56
|
+
|
57
|
+
assert_equal 'http://host.example/endpoint', link_elems[0]['href']
|
58
|
+
assert_equal 'http://host.example/descriptor?q={%id}', link_elems[1]['template']
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_uris_by_rel
|
62
|
+
uris = @xrd.uris_by_rel 'describedby', 'id' => 'bradfitz@gmail.com'
|
63
|
+
|
64
|
+
assert_length(2, uris)
|
65
|
+
|
66
|
+
assert_equal 'http://host.example/endpoint', uris[0]
|
67
|
+
assert_equal 'http://host.example/descriptor?q=bradfitz@gmail.com', uris[1]
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_to_s
|
71
|
+
assert_equal @full_xrd_string, @xrd.to_s
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_links_by_rel
|
75
|
+
links = @xrd.links_by_rel('feed')
|
76
|
+
|
77
|
+
assert_length(1, links)
|
78
|
+
expected = Discodactyl::URITemplate.new('http://host.example/descriptor?q={%id}')
|
79
|
+
assert_equal(expected, links[0].template)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_uris_by_rel
|
83
|
+
links = @xrd.uris_by_rel('feed', 'id' => 'dclinton@gmail.com')
|
84
|
+
|
85
|
+
assert_length(1, links)
|
86
|
+
assert_include?('http://host.example/descriptor?q=dclinton@gmail.com', links)
|
87
|
+
end
|
88
|
+
|
89
|
+
# def test_update
|
90
|
+
# xrd_str =<<eos
|
91
|
+
# <?xml version=\"1.0\"?>
|
92
|
+
# <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
93
|
+
# <Subject>http://host.example/</Subject>
|
94
|
+
# <Link rel="webfinger" href="http://host.example/endpoint"/>
|
95
|
+
# <Link rel="describedby" href="http://host.example/endpoint"/>
|
96
|
+
# <Link rel="feed" template="http://host.example/descriptor?q={%id}"/>
|
97
|
+
# <Link rel="describedby" template="http://host.example/descriptor?q={%id}"/>
|
98
|
+
# <Link href="http://www.example.com/linkeater/oexchange.xrd" rel="http://oexchange.org/spec/0.8/rel/user-target" type="application/xrd+xml"/>
|
99
|
+
# </XRD>
|
100
|
+
# eos
|
101
|
+
# doc = Discodactyl::XRD::Document.parse xrd_str
|
102
|
+
#
|
103
|
+
# link = "<Link rel='http://oexchange.org/spec/0.8/rel/user-target' type='application/xrd+xml' href='updated' />"
|
104
|
+
#
|
105
|
+
# doc.raw.xpath('//xrd:Link',Discodactyl::XRD::XMLNS).after(link)
|
106
|
+
#
|
107
|
+
# expected =<<eos
|
108
|
+
# <?xml version=\"1.0\"?>
|
109
|
+
# <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
110
|
+
# <Subject>http://host.example/</Subject>
|
111
|
+
# <Link rel="webfinger" href="http://host.example/endpoint"/>
|
112
|
+
# <Link rel="describedby" href="http://host.example/endpoint"/>
|
113
|
+
# <Link rel="feed" template="http://host.example/descriptor?q={%id}"/>
|
114
|
+
# <Link rel="describedby" template="http://host.example/descriptor?q={%id}"/>
|
115
|
+
# <Link href="updated" rel="http://oexchange.org/spec/0.8/rel/user-target" type="application/xrd+xml"/>
|
116
|
+
# </XRD>
|
117
|
+
# eos
|
118
|
+
#
|
119
|
+
# assert_equal expected, doc.to_s
|
120
|
+
# end
|
121
|
+
|
122
|
+
# def test_delete
|
123
|
+
# xrd_str =<<eos
|
124
|
+
# <?xml version=\"1.0\"?>
|
125
|
+
# <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
126
|
+
# <Subject>http://host.example/</Subject>
|
127
|
+
# <Link xml:id='1' href="http://example.com/" rel="user-target" type="application/xrd+xml"/>
|
128
|
+
# </XRD>
|
129
|
+
# eos
|
130
|
+
# doc = Discodactyl::XRD::Document.parse xrd_str
|
131
|
+
#
|
132
|
+
# link = "<Link rel='http://oexchange.org/spec/0.8/rel/user-target' type='application/xrd+xml' href='updated' />"
|
133
|
+
#
|
134
|
+
# doc.raw.xpath('//xrd:Link',Discodactyl::XRD::XMLNS).after(link)
|
135
|
+
#
|
136
|
+
# expected =<<eos
|
137
|
+
# <?xml version=\"1.0\"?>
|
138
|
+
# <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
139
|
+
# <Subject>http://host.example/</Subject>
|
140
|
+
# </XRD>
|
141
|
+
# eos
|
142
|
+
#
|
143
|
+
# assert_equal expected, doc.to_s
|
144
|
+
# assert !doc.include?(link)
|
145
|
+
# end
|
146
|
+
end
|
metadata
ADDED
@@ -0,0 +1,164 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: discodactyl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Joseph Anthony Pasquale Holsten
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-07-08 00:00:00 -05:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: nokogiri
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 4
|
30
|
+
- 0
|
31
|
+
version: 1.4.0
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: actionpack
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 2
|
43
|
+
- 3
|
44
|
+
- 0
|
45
|
+
version: 2.3.0
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: feedzirra
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
- 0
|
58
|
+
- 23
|
59
|
+
version: 0.0.23
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: mofo
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 0
|
71
|
+
- 2
|
72
|
+
- 0
|
73
|
+
version: 0.2.0
|
74
|
+
type: :runtime
|
75
|
+
version_requirements: *id004
|
76
|
+
description: "Discodactyl is an experimental toolkit for XRD service discovery documents and related protocols. It includes implementations of XRD URITemplate Link-Patterns, basic site-meta support, HTTP Link header parsing, acct: URIs and a webfinger poking stick."
|
77
|
+
email: joseph@josephholsten.com
|
78
|
+
executables:
|
79
|
+
- webfinger
|
80
|
+
extensions: []
|
81
|
+
|
82
|
+
extra_rdoc_files:
|
83
|
+
- AUTHORS
|
84
|
+
- CHANGELOG
|
85
|
+
- COPYING
|
86
|
+
- INSTALL
|
87
|
+
- NEWS
|
88
|
+
- README
|
89
|
+
- TODO
|
90
|
+
files:
|
91
|
+
- AUTHORS
|
92
|
+
- CHANGELOG
|
93
|
+
- COPYING
|
94
|
+
- Gemfile
|
95
|
+
- INSTALL
|
96
|
+
- MANIFEST
|
97
|
+
- NEWS
|
98
|
+
- README
|
99
|
+
- Rakefile
|
100
|
+
- TODO
|
101
|
+
- bin/webfinger
|
102
|
+
- discodactyl.gemspec
|
103
|
+
- lib/discodactyl.rb
|
104
|
+
- lib/discodactyl/acct_uri.rb
|
105
|
+
- lib/discodactyl/host_meta.rb
|
106
|
+
- lib/discodactyl/link_header.rb
|
107
|
+
- lib/discodactyl/resource_discovery.rb
|
108
|
+
- lib/discodactyl/uri_template.rb
|
109
|
+
- lib/discodactyl/xrd.rb
|
110
|
+
- lib/discodactyl/xrd/document.rb
|
111
|
+
- lib/discodactyl/xrd/link.rb
|
112
|
+
- test/test_acct_uri.rb
|
113
|
+
- test/test_helper.rb
|
114
|
+
- test/test_host_meta.rb
|
115
|
+
- test/test_link_header.rb
|
116
|
+
- test/test_resource_discovery.rb
|
117
|
+
- test/test_uri_template.rb
|
118
|
+
- test/test_xrd_append.rb
|
119
|
+
- test/test_xrd_link_parse.rb
|
120
|
+
- test/test_xrd_parse.rb
|
121
|
+
has_rdoc: true
|
122
|
+
homepage: http://dactylo.us
|
123
|
+
licenses: []
|
124
|
+
|
125
|
+
post_install_message:
|
126
|
+
rdoc_options:
|
127
|
+
- --charset=UTF-8
|
128
|
+
- --title
|
129
|
+
- Discodactyl Documentation
|
130
|
+
- --main
|
131
|
+
- README
|
132
|
+
require_paths:
|
133
|
+
- lib
|
134
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
segments:
|
139
|
+
- 0
|
140
|
+
version: "0"
|
141
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
segments:
|
146
|
+
- 0
|
147
|
+
version: "0"
|
148
|
+
requirements: []
|
149
|
+
|
150
|
+
rubyforge_project:
|
151
|
+
rubygems_version: 1.3.6
|
152
|
+
signing_key:
|
153
|
+
specification_version: 3
|
154
|
+
summary: Discodactyl is an experimental toolkit for XRD service discovery documents and related protocols
|
155
|
+
test_files:
|
156
|
+
- test/test_acct_uri.rb
|
157
|
+
- test/test_helper.rb
|
158
|
+
- test/test_host_meta.rb
|
159
|
+
- test/test_link_header.rb
|
160
|
+
- test/test_resource_discovery.rb
|
161
|
+
- test/test_uri_template.rb
|
162
|
+
- test/test_xrd_append.rb
|
163
|
+
- test/test_xrd_link_parse.rb
|
164
|
+
- test/test_xrd_parse.rb
|