builder is now a class initialized with a user. added director class.
This commit is contained in:
parent
58b688aa68
commit
eac6b8a63b
3 changed files with 31 additions and 20 deletions
|
|
@ -6,7 +6,7 @@ class PublicsController < ApplicationController
|
|||
require File.expand_path('../../../lib/diaspora/parser', __FILE__)
|
||||
require File.expand_path('../../../lib/diaspora/ostatus_builder', __FILE__)
|
||||
include Diaspora::Parser
|
||||
include Diaspora::OstatusBuilder
|
||||
|
||||
layout false
|
||||
|
||||
def hcard
|
||||
|
|
@ -44,7 +44,11 @@ class PublicsController < ApplicationController
|
|||
|
||||
def public
|
||||
user = User.find_by_username(params[:username])
|
||||
render :xml => Diaspora::OstatusBuilder::build(user)
|
||||
|
||||
director = Diaspora::Director.new
|
||||
ostatus_builder = Diaspora::OstatusBuilder.new(user)
|
||||
|
||||
render :xml => director.build(ostatus_builder)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,20 +3,27 @@
|
|||
# the COPYRIGHT file.
|
||||
|
||||
module Diaspora
|
||||
module OstatusBuilder
|
||||
|
||||
def self.build(user)
|
||||
if @user = User.find_by_id(user.id)
|
||||
xml = ""
|
||||
xml << create_headers
|
||||
xml << create_endpoints
|
||||
xml << create_subject
|
||||
xml << create_body
|
||||
xml << create_footer
|
||||
else raise "Invalid user sent to builder" end
|
||||
class Director
|
||||
def initialize
|
||||
@structure = [:create_headers, :create_endpoints, :create_subject,
|
||||
:create_body, :create_footer]
|
||||
end
|
||||
|
||||
def self.create_headers
|
||||
def build(builder)
|
||||
@structure.inject("") do |xml, method|
|
||||
xml << builder.send(method)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
class OstatusBuilder
|
||||
def initialize(user)
|
||||
@user = user
|
||||
end
|
||||
|
||||
def create_headers
|
||||
<<-XML.strip
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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/">
|
||||
|
|
@ -32,13 +39,13 @@ module Diaspora
|
|||
XML
|
||||
end
|
||||
|
||||
def self.create_endpoints
|
||||
def create_endpoints
|
||||
<<-XML
|
||||
<link href="#{APP_CONFIG[:pubsub_server]}" rel="hub"/>
|
||||
XML
|
||||
end
|
||||
|
||||
def self.create_subject
|
||||
def create_subject
|
||||
<<-XML
|
||||
<activity:subject>
|
||||
<activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
|
||||
|
|
@ -49,7 +56,7 @@ module Diaspora
|
|||
XML
|
||||
end
|
||||
|
||||
def self.create_body
|
||||
def create_body
|
||||
@user.visible_posts(:public=>true).inject("") do |xml,curr|
|
||||
if curr.respond_to?(:to_activity)
|
||||
unless xml
|
||||
|
|
@ -61,11 +68,11 @@ module Diaspora
|
|||
end
|
||||
end
|
||||
|
||||
def self.create_footer
|
||||
def create_footer
|
||||
<<-XML
|
||||
</feed>
|
||||
XML
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -7,13 +7,13 @@ require File.dirname(__FILE__) + '/../../lib/diaspora/ostatus_builder'
|
|||
|
||||
describe Diaspora::OstatusBuilder do
|
||||
|
||||
let(:user) { Factory(:user) }
|
||||
let!(:user) { Factory(:user) }
|
||||
let(:aspect) { user.aspect(:name => "Public People") }
|
||||
let!(:status_message1) { user.post(:status_message, :message => "One", :public => true, :to => aspect.id) }
|
||||
let!(:status_message2) { user.post(:status_message, :message => "Two", :public => true, :to => aspect.id) }
|
||||
let!(:status_message3) { user.post(:status_message, :message => "Three", :public => false, :to => aspect.id) }
|
||||
|
||||
let!(:atom) { Diaspora::OstatusBuilder::build(user) }
|
||||
let!(:atom) { director = Diaspora::Director.new; director.build(Diaspora::OstatusBuilder.new(user)) }
|
||||
|
||||
it 'should include a users posts' do
|
||||
atom.should include status_message1.message
|
||||
Loading…
Reference in a new issue