builder is now a class initialized with a user. added director class.

This commit is contained in:
danielvincent 2010-09-27 21:54:01 -07:00
parent 58b688aa68
commit eac6b8a63b
3 changed files with 31 additions and 20 deletions

View file

@ -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

View file

@ -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

View file

@ -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