about summary refs log tree commit diff
path: root/app/views/atom/user_stream.xml.ruby
blob: 398464a9cfaa2cb371463869c6192eb7c688316f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Nokogiri::XML::Builder.new do |xml|
  xml.feed(xmlns: 'http://www.w3.org/2005/Atom', 'xmlns:thr': 'http://purl.org/syndication/thread/1.0', 'xmlns:activity': 'http://activitystrea.ms/spec/1.0/', 'xmlns:poco': 'http://portablecontacts.net/spec/1.0') do
    xml.id_ atom_user_stream_url(id: @account.id)
    xml.title @account.display_name
    xml.subtitle @account.note
    xml.updated stream_updated_at

    xml.author do
      xml['activity'].send('object-type', 'http://activitystrea.ms/schema/1.0/person')
      xml.uri profile_url(name: @account.username)
      xml.name @account.username
      xml.summary @account.note

      xml.link(rel: 'alternate', type: 'text/html', href: profile_url(name: @account.username))

      xml['poco'].preferredUsername @account.username
      xml['poco'].displayName @account.display_name
      xml['poco'].note @account.note
    end

    xml.link(rel: 'alternate', type: 'text/html', href: profile_url(name: @account.username))
    xml.link(rel: 'hub', href: HUB_URL)
    xml.link(rel: 'salmon', href: salmon_url(@account))
    xml.link(rel: 'self', type: 'application/atom+xml', href: atom_user_stream_url(id: @account.id))

    @account.stream_entries.order('id desc').each do |stream_entry|
      xml.entry do
        xml.id_ unique_tag(stream_entry.created_at, stream_entry.activity_id, stream_entry.activity_type)

        xml.published stream_entry.activity.created_at.iso8601
        xml.updated   stream_entry.activity.updated_at.iso8601

        xml.title stream_entry.title
        xml.content({ type: 'html' }, stream_entry.content)
        xml['activity'].send('verb', "http://activitystrea.ms/schema/1.0/#{stream_entry.verb}")

        if stream_entry.targeted?
          xml['activity'].send('object') do
            xml['activity'].send('object-type', "http://activitystrea.ms/schema/1.0/#{stream_entry.target.object_type}")
            xml.id_ stream_entry.target.uri
            xml.title stream_entry.target.title
            xml.summary stream_entry.target.summary
            xml.link(rel: 'alternate', type: 'text/html', href: stream_entry.target.uri)
          end
        else
          xml['activity'].send('object-type', "http://activitystrea.ms/schema/1.0/#{stream_entry.object_type}")
        end

        xml.link(rel: 'self', type: 'application/atom+xml', href: atom_entry_url(id: stream_entry.id))
      end
    end
  end
end.to_xml