ostatus 0.0.10 → 0.0.11
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/.travis.yml +5 -0
- data/lib/ostatus.rb +1 -0
- data/lib/ostatus/author.rb +2 -1
- data/lib/ostatus/entry.rb +5 -3
- data/lib/ostatus/link.rb +65 -0
- data/lib/ostatus/salmon.rb +12 -8
- data/lib/ostatus/version.rb +1 -1
- data/ostatus.gemspec +3 -2
- data/spec/builder_spec.rb +2 -2
- data/spec/entry_spec.rb +21 -2
- data/spec/salmon_spec.rb +9 -0
- data/test/example_feed_link_without_href.atom +134 -0
- metadata +72 -59
data/.travis.yml
ADDED
data/lib/ostatus.rb
CHANGED
data/lib/ostatus/author.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'activity'
|
2
2
|
require_relative 'portable_contacts'
|
3
|
+
require 'date'
|
3
4
|
|
4
5
|
module OStatus
|
5
6
|
|
@@ -30,7 +31,7 @@ module OStatus
|
|
30
31
|
element 'poco:connected'
|
31
32
|
|
32
33
|
def initialize *args
|
33
|
-
self.activity_object_type = "http://activitystrea.ms/schema/1.0/person"
|
34
|
+
self.activity_object_type = "http://activitystrea.ms/schema/1.0/person"
|
34
35
|
super(*args)
|
35
36
|
end
|
36
37
|
|
data/lib/ostatus/entry.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require_relative 'activity'
|
2
2
|
require_relative 'author'
|
3
3
|
require_relative 'thread'
|
4
|
+
require_relative 'link'
|
4
5
|
|
5
6
|
module OStatus
|
6
7
|
THREAD_NS = 'http://purl.org/syndication/thread/1.0'
|
@@ -18,8 +19,8 @@ module OStatus
|
|
18
19
|
add_extension_namespace :thr, THREAD_NS
|
19
20
|
element 'thr:in-reply-to', :class => OStatus::Thread
|
20
21
|
|
21
|
-
# This is for backwards compatibility with some implementations of Activity
|
22
|
-
# Streams. It should not be used, and in fact is obscured as it is not a
|
22
|
+
# This is for backwards compatibility with some implementations of Activity
|
23
|
+
# Streams. It should not be used, and in fact is obscured as it is not a
|
23
24
|
# method in OStatus::Activity.
|
24
25
|
element 'activity:actor', :class => OStatus::Author
|
25
26
|
|
@@ -27,7 +28,8 @@ module OStatus
|
|
27
28
|
element :title, :id, :summary
|
28
29
|
element :updated, :published, :class => DateTime, :content_only => true
|
29
30
|
element :source, :class => Atom::Source
|
30
|
-
elements :links, :class =>
|
31
|
+
elements :links, :class => OStatus::Link
|
32
|
+
|
31
33
|
elements :categories, :class => Atom::Category
|
32
34
|
element :content, :class => Atom::Content
|
33
35
|
element :author, :class => OStatus::Author
|
data/lib/ostatus/link.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
module OStatus
|
2
|
+
class Link < Atom::Link
|
3
|
+
include Atom::Xml::Parseable
|
4
|
+
attribute :rel, :type, :length, :hreflang, :title, :text
|
5
|
+
uri_attribute :href
|
6
|
+
|
7
|
+
# Create a link.
|
8
|
+
#
|
9
|
+
# +o+:: An XML::Reader containing a link element or a Hash of attributes.
|
10
|
+
#
|
11
|
+
def initialize(o)
|
12
|
+
case o
|
13
|
+
when XML::Reader
|
14
|
+
if current_node_is?(o, 'link')
|
15
|
+
self.text = o.read_string
|
16
|
+
parse(o, :once => true)
|
17
|
+
else
|
18
|
+
raise ArgumentError, "Link created with node other than atom:link: #{o.name}"
|
19
|
+
end
|
20
|
+
when Hash
|
21
|
+
[:href, :rel, :type, :length, :hreflang, :title].each do |attr|
|
22
|
+
self.send("#{attr}=", o[attr])
|
23
|
+
end
|
24
|
+
else
|
25
|
+
raise ArgumentError, "Don't know how to handle #{o}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
remove_method :length=
|
30
|
+
def length=(v)
|
31
|
+
@length = v.to_i
|
32
|
+
end
|
33
|
+
|
34
|
+
def href
|
35
|
+
@href || self.text
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_s
|
39
|
+
self.href
|
40
|
+
end
|
41
|
+
|
42
|
+
def ==(o)
|
43
|
+
o.respond_to?(:href) && o.href == self.href
|
44
|
+
end
|
45
|
+
|
46
|
+
# This will fetch the URL referenced by the link.
|
47
|
+
#
|
48
|
+
# If the URL contains a valid feed, a Feed will be returned, otherwise,
|
49
|
+
# the body of the response will be returned.
|
50
|
+
#
|
51
|
+
# TODO: Handle redirects.
|
52
|
+
#
|
53
|
+
def fetch(options = {})
|
54
|
+
begin
|
55
|
+
Atom::Feed.load_feed(URI.parse(self.href), options)
|
56
|
+
rescue ArgumentError
|
57
|
+
Net::HTTP.get_response(URI.parse(self.href)).body
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def inspect
|
62
|
+
"<OStatus::Link href:'#{href}' type:'#{type}'>"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/ostatus/salmon.rb
CHANGED
@@ -44,19 +44,23 @@ module OStatus
|
|
44
44
|
# Will pull a OStatus::Entry from a magic envelope described by the xml.
|
45
45
|
def Salmon.from_xml source
|
46
46
|
if source.is_a?(String)
|
47
|
-
source
|
47
|
+
if source.length == 0
|
48
|
+
return nil
|
49
|
+
end
|
50
|
+
|
51
|
+
source = XML::Document.string(source,
|
48
52
|
:options => XML::Parser::Options::NOENT)
|
49
53
|
end
|
50
54
|
|
51
55
|
# Retrieve the envelope
|
52
|
-
envelope = source.find('/me:env',
|
56
|
+
envelope = source.find('/me:env',
|
53
57
|
'me:http://salmon-protocol.org/ns/magic-env').first
|
54
58
|
|
55
59
|
if envelope.nil?
|
56
60
|
return nil
|
57
61
|
end
|
58
62
|
|
59
|
-
data = envelope.find('me:data',
|
63
|
+
data = envelope.find('me:data',
|
60
64
|
'me:http://salmon-protocol.org/ns/magic-env').first
|
61
65
|
if data.nil?
|
62
66
|
return nil
|
@@ -140,7 +144,7 @@ module OStatus
|
|
140
144
|
|
141
145
|
magic_envelope.root = XML::Node.new 'env'
|
142
146
|
|
143
|
-
me_ns = XML::Namespace.new(magic_envelope.root,
|
147
|
+
me_ns = XML::Namespace.new(magic_envelope.root,
|
144
148
|
'me', 'http://salmon-protocol.org/ns/magic-env')
|
145
149
|
|
146
150
|
magic_envelope.root.namespaces.namespace = me_ns
|
@@ -164,13 +168,13 @@ module OStatus
|
|
164
168
|
|
165
169
|
# Signature <me:sig>
|
166
170
|
plaintext = "#{data_armored}.#{data_type_armored}.#{encoding_armored}.#{algorithm_armored}"
|
167
|
-
|
171
|
+
|
168
172
|
# Assign @signature to the signature generated from the plaintext
|
169
173
|
sign(plaintext, key)
|
170
174
|
|
171
175
|
signature_armored = Base64::urlsafe_encode64(@signature)
|
172
176
|
magic_envelope.root << XML::Node.new('sig', signature_armored, me_ns)
|
173
|
-
|
177
|
+
|
174
178
|
magic_envelope.to_s :indent => true, :encoding => XML::Encoding::UTF_8
|
175
179
|
end
|
176
180
|
|
@@ -183,7 +187,7 @@ module OStatus
|
|
183
187
|
padding_count = modulus_byte_length - prefix.bytes.count - plaintext.bytes.count - 3
|
184
188
|
|
185
189
|
padding = ""
|
186
|
-
padding_count.times do
|
190
|
+
padding_count.times do
|
187
191
|
padding = padding + "\xff"
|
188
192
|
end
|
189
193
|
|
@@ -191,7 +195,7 @@ module OStatus
|
|
191
195
|
end
|
192
196
|
|
193
197
|
def sign message, key
|
194
|
-
@plaintext = message
|
198
|
+
@plaintext = message
|
195
199
|
|
196
200
|
modulus_byte_count = key.private_key.modulus.size
|
197
201
|
|
data/lib/ostatus/version.rb
CHANGED
data/ostatus.gemspec
CHANGED
@@ -14,8 +14,9 @@ Gem::Specification.new do |s|
|
|
14
14
|
|
15
15
|
s.rubyforge_project = "ostatus"
|
16
16
|
|
17
|
-
s.add_dependency "ratom"
|
18
|
-
s.add_development_dependency "rspec"
|
17
|
+
s.add_dependency "ratom", "~> 0.7.0"
|
18
|
+
s.add_development_dependency "rspec", "~> 2.10.0"
|
19
|
+
s.add_development_dependency "rake", "~> 0.9.2"
|
19
20
|
|
20
21
|
s.files = `git ls-files`.split("\n")
|
21
22
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/spec/builder_spec.rb
CHANGED
@@ -64,8 +64,8 @@ describe 'XML builder' do
|
|
64
64
|
|
65
65
|
specify { @feed.atom.should match('<title>atom powered robots') }
|
66
66
|
specify { @feed.atom.should match('<content>atom powered robots') }
|
67
|
-
specify { @feed.atom.should match("<updated>#{@now.iso8601}") }
|
68
|
-
specify { @feed.atom.should match("<published>#{@now.iso8601}") }
|
67
|
+
specify { @feed.atom.should match(Regexp.escape("<updated>#{@now.iso8601}")) }
|
68
|
+
specify { @feed.atom.should match(Regexp.escape("<published>#{@now.iso8601}")) }
|
69
69
|
specify { @feed.atom.should match('<id>http://example.org/feed/1') }
|
70
70
|
specify { @feed.atom.should match('<link href="http://example.org/feed/1"/>') }
|
71
71
|
end
|
data/spec/entry_spec.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
require_relative '../lib/ostatus/feed.rb'
|
2
2
|
require_relative '../lib/ostatus/entry.rb'
|
3
3
|
require_relative '../lib/ostatus/activity.rb'
|
4
|
+
require_relative '../lib/ostatus/link.rb'
|
4
5
|
|
5
6
|
describe OStatus::Entry do
|
6
7
|
before(:each) do
|
7
8
|
@feed = OStatus::Feed.from_url('test/example_feed.atom')
|
8
9
|
@entry = @feed.entries[0]
|
10
|
+
@feed_link_without_href = OStatus::Feed.from_url('test/example_feed_link_without_href.atom')
|
11
|
+
@entry_link_without_href = @feed_link_without_href.entries[0]
|
9
12
|
end
|
10
13
|
|
11
14
|
describe "#activity" do
|
@@ -45,7 +48,7 @@ describe OStatus::Entry do
|
|
45
48
|
@entry.published.strftime("%Y-%m-%dT%I:%M:%S%z").should eql('2011-02-21T02:15:14+0000')
|
46
49
|
end
|
47
50
|
end
|
48
|
-
|
51
|
+
|
49
52
|
describe "#id" do
|
50
53
|
it "should return the id given in the id tag" do
|
51
54
|
@entry.id.should eql('http://identi.ca/notice/64991641')
|
@@ -72,7 +75,7 @@ describe OStatus::Entry do
|
|
72
75
|
it "should contain a Hash for the link" do
|
73
76
|
@entry.info[:link].class.should eql(Hash)
|
74
77
|
end
|
75
|
-
|
78
|
+
|
76
79
|
it "should contain the published DateTime" do
|
77
80
|
@entry.info[:published].class.should eql(DateTime)
|
78
81
|
@entry.info[:published].strftime("%Y-%m-%dT%I:%M:%S%z").should eql('2011-02-21T02:15:14+0000')
|
@@ -83,4 +86,20 @@ describe OStatus::Entry do
|
|
83
86
|
@entry.info[:updated].strftime("%Y-%m-%dT%I:%M:%S%z").should eql('2011-03-22T02:15:14+0000')
|
84
87
|
end
|
85
88
|
end
|
89
|
+
|
90
|
+
describe "#links" do
|
91
|
+
it "should use OStatus::Link elements" do
|
92
|
+
@entry.links.first.class.should eql(OStatus::Link)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "#url" do
|
97
|
+
it "should return the alternate link's href attribute" do
|
98
|
+
@entry.url.should eql("http://identi.ca/notice/64991641")
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should return the alternate link's content if there's no href" do
|
102
|
+
@entry_link_without_href.url.should eql("http://identi.ca/notice/89057569")
|
103
|
+
end
|
104
|
+
end
|
86
105
|
end
|
data/spec/salmon_spec.rb
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:media="http://purl.org/syndication/atommedia" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:statusnet="http://status.net/schema/api/1/">
|
3
|
+
<generator uri="http://status.net" version="1.0.1">StatusNet</generator>
|
4
|
+
<id>http://identi.ca/api/statuses/user_timeline/55937.atom?max_id=89098925</id>
|
5
|
+
<title>reality timeline</title>
|
6
|
+
<subtitle>Updates from reality on Identi.ca!</subtitle>
|
7
|
+
<logo>http://avatar3.status.net/i/identica/55937-96-20111008001238.jpeg</logo>
|
8
|
+
<updated>2012-02-01T02:37:57+00:00</updated>
|
9
|
+
<author>
|
10
|
+
<activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
|
11
|
+
<uri>http://identi.ca/user/55937</uri>
|
12
|
+
<name>reality</name>
|
13
|
+
<link rel="alternate" type="text/html" href="http://identi.ca/reality"/>
|
14
|
+
<link rel="avatar" type="image/jpeg" media:width="480" media:height="480" href="http://avatar3.status.net/i/identica/55937-480-20111008001238.jpeg"/>
|
15
|
+
<link rel="avatar" type="image/jpeg" media:width="96" media:height="96" href="http://avatar3.status.net/i/identica/55937-96-20111008001238.jpeg"/>
|
16
|
+
<link rel="avatar" type="image/jpeg" media:width="48" media:height="48" href="http://avatar3.status.net/i/identica/55937-48-20111008001238.jpeg"/>
|
17
|
+
<link rel="avatar" type="image/jpeg" media:width="24" media:height="24" href="http://avatar3.status.net/i/identica/55937-24-20111008001238.jpeg"/>
|
18
|
+
<georss:point>52.41548 -4.08292</georss:point>
|
19
|
+
<poco:preferredUsername>reality</poco:preferredUsername>
|
20
|
+
<poco:displayName>Luke Slater</poco:displayName>
|
21
|
+
<poco:note>Into the acoustic degree; a little bleak and edgy</poco:note>
|
22
|
+
<poco:address>
|
23
|
+
<poco:formatted>Aberystwyth, Wales</poco:formatted>
|
24
|
+
</poco:address>
|
25
|
+
<poco:urls>
|
26
|
+
<poco:type>homepage</poco:type>
|
27
|
+
<poco:value>http://nc.no.de/</poco:value>
|
28
|
+
<poco:primary>true</poco:primary>
|
29
|
+
</poco:urls>
|
30
|
+
<statusnet:profile_info local_id="55937"></statusnet:profile_info>
|
31
|
+
|
32
|
+
</author>
|
33
|
+
<!--Deprecation warning: activity:subject is present only for backward compatibility. It will be removed in the next version of StatusNet.-->
|
34
|
+
<activity:subject>
|
35
|
+
<activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
|
36
|
+
<id>http://identi.ca/user/55937</id>
|
37
|
+
<title>Luke Slater</title>
|
38
|
+
<link rel="alternate" type="text/html" href="http://identi.ca/reality"/>
|
39
|
+
<link rel="avatar" type="image/jpeg" media:width="480" media:height="480" href="http://avatar3.status.net/i/identica/55937-480-20111008001238.jpeg"/>
|
40
|
+
<link rel="avatar" type="image/jpeg" media:width="96" media:height="96" href="http://avatar3.status.net/i/identica/55937-96-20111008001238.jpeg"/>
|
41
|
+
<link rel="avatar" type="image/jpeg" media:width="48" media:height="48" href="http://avatar3.status.net/i/identica/55937-48-20111008001238.jpeg"/>
|
42
|
+
<link rel="avatar" type="image/jpeg" media:width="24" media:height="24" href="http://avatar3.status.net/i/identica/55937-24-20111008001238.jpeg"/>
|
43
|
+
<georss:point>52.41548 -4.08292</georss:point>
|
44
|
+
<poco:preferredUsername>reality</poco:preferredUsername>
|
45
|
+
<poco:displayName>Luke Slater</poco:displayName>
|
46
|
+
<poco:note>Into the acoustic degree; a little bleak and edgy</poco:note>
|
47
|
+
<poco:address>
|
48
|
+
<poco:formatted>Aberystwyth, Wales</poco:formatted>
|
49
|
+
</poco:address>
|
50
|
+
<poco:urls>
|
51
|
+
<poco:type>homepage</poco:type>
|
52
|
+
<poco:value>http://nc.no.de/</poco:value>
|
53
|
+
<poco:primary>true</poco:primary>
|
54
|
+
</poco:urls>
|
55
|
+
<statusnet:profile_info local_id="55937"></statusnet:profile_info>
|
56
|
+
|
57
|
+
</activity:subject>
|
58
|
+
<link href="http://identi.ca/reality" rel="alternate" type="text/html"/>
|
59
|
+
<link href="http://identi.ca/main/sup" rel="http://api.friendfeed.com/2008/03#sup" type="application/json"/>
|
60
|
+
<link href="http://identi.ca/api/statuses/user_timeline/55937.atom?max_id=89056842" rel="next" type="application/atom+xml"/>
|
61
|
+
<link href="http://identi.ca/api/statuses/user_timeline/55937.atom?since_id=89098925" rel="prev" type="application/atom+xml"/>
|
62
|
+
<link href="http://identi.ca/api/statuses/user_timeline/55937.atom" rel="first" type="application/atom+xml"/>
|
63
|
+
<link href="http://identi.ca/main/push/hub" rel="hub"/>
|
64
|
+
<link href="http://identi.ca/main/salmon/user/55937" rel="salmon"/>
|
65
|
+
<link href="http://identi.ca/main/salmon/user/55937" rel="http://salmon-protocol.org/ns/salmon-replies"/>
|
66
|
+
<link href="http://identi.ca/main/salmon/user/55937" rel="http://salmon-protocol.org/ns/salmon-mention"/>
|
67
|
+
<link href="http://identi.ca/api/statuses/user_timeline/55937.atom?max_id=89098925" rel="self" type="application/atom+xml"/>
|
68
|
+
<entry>
|
69
|
+
<id>http://identi.ca/notice/89057569</id>
|
70
|
+
<title>RT @psquid I think I’ll move to using char[][], just to annoy @speeddefrost.</title>
|
71
|
+
<content type="html">RT @<span class="vcard"><a href="http://micro.fragdev.com/psquid" class="url" title="Psychedelic Squid"><span class="fn nickname mention">psquid</span></a></span> I think I’ll move to using char[][], just to annoy @<span class="vcard"><a href="http://identi.ca/user/36662" class="url" title="speeddefrost"><span class="fn nickname mention">speeddefrost</span></a></span>.</content>
|
72
|
+
<link rel="alternate" type="text/html">http://identi.ca/notice/89057569</link>
|
73
|
+
<activity:verb>http://activitystrea.ms/schema/1.0/share</activity:verb>
|
74
|
+
<published>2012-01-23T03:04:39+00:00</published>
|
75
|
+
<updated>2012-01-23T03:04:39+00:00</updated>
|
76
|
+
<activity:object>
|
77
|
+
<activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type>
|
78
|
+
<id>http://micro.fragdev.com/notice/116469</id>
|
79
|
+
<title>I think I’ll move to using char[][], just to annoy @speeddefrost.</title>
|
80
|
+
<content type="html">I think I&#8217;ll move to using char[][], just to annoy &#64;<span class="vcard"><a href="http://identi.ca/speeddefrost" class="url" title="speeddefrost"><span class="fn nickname mention">speeddefrost</span></a></span>.</content>
|
81
|
+
<link rel="alternate" type="text/html">http://micro.fragdev.com/notice/116469</link>
|
82
|
+
<activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
|
83
|
+
<published>2012-01-23T03:02:26+00:00</published>
|
84
|
+
<updated>2012-01-23T03:02:26+00:00</updated>
|
85
|
+
<author>
|
86
|
+
<activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
|
87
|
+
<uri>http://micro.fragdev.com/user/425</uri>
|
88
|
+
<name>psquid</name>
|
89
|
+
<link rel="alternate" type="text/html" href="http://micro.fragdev.com/psquid"/>
|
90
|
+
<link rel="avatar" type="image/jpeg" media:width="96" media:height="96" href="http://avatar3.status.net/i/identica/549245-original-20120131093453.jpeg"/>
|
91
|
+
<link rel="avatar" type="image/jpeg" media:width="96" media:height="96" href="http://avatar3.status.net/i/identica/549245-original-20120131093453.jpeg"/>
|
92
|
+
<link rel="avatar" type="image/jpeg" media:width="48" media:height="48" href="http://avatar3.status.net/i/identica/549245-48-20120131093453.jpeg"/>
|
93
|
+
<link rel="avatar" type="image/jpeg" media:width="24" media:height="24" href="http://avatar3.status.net/i/identica/549245-24-20120131093453.jpeg"/>
|
94
|
+
<georss:point>-47.15 -126.71666</georss:point>
|
95
|
+
<poco:preferredUsername>psquid</poco:preferredUsername>
|
96
|
+
<poco:displayName>psquid</poco:displayName>
|
97
|
+
<poco:note>Unhinge the daydream door; delve deep.</poco:note>
|
98
|
+
<poco:address>
|
99
|
+
<poco:formatted>R'lyeh</poco:formatted>
|
100
|
+
</poco:address>
|
101
|
+
<poco:urls>
|
102
|
+
<poco:type>homepage</poco:type>
|
103
|
+
<poco:value>http://psquid.net</poco:value>
|
104
|
+
<poco:primary>true</poco:primary>
|
105
|
+
</poco:urls>
|
106
|
+
<statusnet:profile_info local_id="549245"></statusnet:profile_info>
|
107
|
+
</author>
|
108
|
+
<activity:object>
|
109
|
+
<activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
|
110
|
+
<id>http://micro.fragdev.com/notice/116469</id>
|
111
|
+
<title>I think I’ll move to using char[][], just to annoy @speeddefrost.</title>
|
112
|
+
<content type="html">I think I&#8217;ll move to using char[][], just to annoy &#64;<span class="vcard"><a href="http://identi.ca/speeddefrost" class="url" title="speeddefrost"><span class="fn nickname mention">speeddefrost</span></a></span>.</content>
|
113
|
+
<link rel="alternate" type="text/html" href="http://micro.fragdev.com/notice/116469"/>
|
114
|
+
</activity:object>
|
115
|
+
<link rel="ostatus:conversation" href="http://identi.ca/conversation/88893235"/>
|
116
|
+
<link rel="ostatus:attention" href="http://identi.ca/user/36662"/>
|
117
|
+
<link rel="mentioned" href="http://identi.ca/user/36662"/>
|
118
|
+
<source>
|
119
|
+
<id>http://micro.fragdev.com/api/statuses/user_timeline/425.atom</id>
|
120
|
+
<title>psquid</title>
|
121
|
+
<link rel="alternate" type="text/html" href="http://micro.fragdev.com/psquid"/>
|
122
|
+
<link rel="self" type="application/atom+xml" href="http://micro.fragdev.com/api/statuses/user_timeline/425.atom"/>
|
123
|
+
<icon>http://avatar3.status.net/i/identica/549245-original-20120131093453.jpeg</icon>
|
124
|
+
<updated>2012-02-01T02:27:07+00:00</updated>
|
125
|
+
</source>
|
126
|
+
</activity:object>
|
127
|
+
<link rel="ostatus:conversation" href="http://identi.ca/conversation/88893255"/>
|
128
|
+
<ostatus:forward ref="http://micro.fragdev.com/notice/116469" href="http://micro.fragdev.com/notice/116469"></ostatus:forward>
|
129
|
+
<link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/89057569.atom"/>
|
130
|
+
<link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/89057569.atom"/>
|
131
|
+
<statusnet:notice_info local_id="89057569" source="web" repeat_of="89057548"></statusnet:notice_info>
|
132
|
+
|
133
|
+
</entry>
|
134
|
+
</feed>
|
metadata
CHANGED
@@ -1,59 +1,75 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ostatus
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 10
|
9
|
-
version: 0.0.10
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.11
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Hackers of the Severed Hand
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-08-09 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: ratom
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.7.0
|
31
22
|
type: :runtime
|
32
|
-
|
33
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.7.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
34
31
|
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 2.10.0
|
38
|
+
type: :development
|
35
39
|
prerelease: false
|
36
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.10.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
37
49
|
none: false
|
38
|
-
requirements:
|
39
|
-
- -
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
|
42
|
-
- 0
|
43
|
-
version: "0"
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.9.2
|
44
54
|
type: :development
|
45
|
-
|
46
|
-
|
47
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.9.2
|
62
|
+
description: This project is to be used to jumpstart OStatus related projects that
|
63
|
+
implement the PubSubHubbub protocols by providing the common fundamentals of Atom
|
64
|
+
parsing and OStatus object creation.
|
65
|
+
email:
|
48
66
|
- hotsh@xomb.org
|
49
67
|
executables: []
|
50
|
-
|
51
68
|
extensions: []
|
52
|
-
|
53
69
|
extra_rdoc_files: []
|
54
|
-
|
55
|
-
files:
|
70
|
+
files:
|
56
71
|
- .gitignore
|
72
|
+
- .travis.yml
|
57
73
|
- Gemfile
|
58
74
|
- README.md
|
59
75
|
- Rakefile
|
@@ -62,6 +78,7 @@ files:
|
|
62
78
|
- lib/ostatus/author.rb
|
63
79
|
- lib/ostatus/entry.rb
|
64
80
|
- lib/ostatus/feed.rb
|
81
|
+
- lib/ostatus/link.rb
|
65
82
|
- lib/ostatus/portable_contacts.rb
|
66
83
|
- lib/ostatus/salmon.rb
|
67
84
|
- lib/ostatus/thread.rb
|
@@ -73,50 +90,46 @@ files:
|
|
73
90
|
- spec/entry_spec.rb
|
74
91
|
- spec/feed_spec.rb
|
75
92
|
- spec/portable_contacts_spec.rb
|
93
|
+
- spec/salmon_spec.rb
|
76
94
|
- test/example_feed.atom
|
77
95
|
- test/example_feed_empty_author.atom
|
78
96
|
- test/example_feed_false_connected.atom
|
97
|
+
- test/example_feed_link_without_href.atom
|
79
98
|
- test/example_page.html
|
80
|
-
has_rdoc: true
|
81
99
|
homepage: http://github.com/hotsh/ostatus
|
82
100
|
licenses: []
|
83
|
-
|
84
101
|
post_install_message:
|
85
102
|
rdoc_options: []
|
86
|
-
|
87
|
-
require_paths:
|
103
|
+
require_paths:
|
88
104
|
- lib
|
89
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
106
|
none: false
|
91
|
-
requirements:
|
92
|
-
- -
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
|
95
|
-
|
96
|
-
version: "0"
|
97
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
112
|
none: false
|
99
|
-
requirements:
|
100
|
-
- -
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
|
103
|
-
- 0
|
104
|
-
version: "0"
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
105
117
|
requirements: []
|
106
|
-
|
107
118
|
rubyforge_project: ostatus
|
108
|
-
rubygems_version: 1.
|
119
|
+
rubygems_version: 1.8.23
|
109
120
|
signing_key:
|
110
121
|
specification_version: 3
|
111
122
|
summary: Implementations of the OStatus data stream objects.
|
112
|
-
test_files:
|
123
|
+
test_files:
|
113
124
|
- spec/activity_spec.rb
|
114
125
|
- spec/author_spec.rb
|
115
126
|
- spec/builder_spec.rb
|
116
127
|
- spec/entry_spec.rb
|
117
128
|
- spec/feed_spec.rb
|
118
129
|
- spec/portable_contacts_spec.rb
|
130
|
+
- spec/salmon_spec.rb
|
119
131
|
- test/example_feed.atom
|
120
132
|
- test/example_feed_empty_author.atom
|
121
133
|
- test/example_feed_false_connected.atom
|
134
|
+
- test/example_feed_link_without_href.atom
|
122
135
|
- test/example_page.html
|