From eac6b8a63b6550d634f158198f88a8d291613852 Mon Sep 17 00:00:00 2001 From: danielvincent Date: Mon, 27 Sep 2010 21:54:01 -0700 Subject: [PATCH] builder is now a class initialized with a user. added director class. --- app/controllers/publics_controller.rb | 8 +++- lib/diaspora/ostatus_builder.rb | 39 +++++++++++-------- ...uilder_spec.rb => ostatus_builder_spec.rb} | 4 +- 3 files changed, 31 insertions(+), 20 deletions(-) rename spec/lib/{diaspora_ostatus_builder_spec.rb => ostatus_builder_spec.rb} (86%) diff --git a/app/controllers/publics_controller.rb b/app/controllers/publics_controller.rb index 76360fb90..c4ea0d29a 100644 --- a/app/controllers/publics_controller.rb +++ b/app/controllers/publics_controller.rb @@ -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 diff --git a/lib/diaspora/ostatus_builder.rb b/lib/diaspora/ostatus_builder.rb index ce4ebfeb4..d3640771c 100644 --- a/lib/diaspora/ostatus_builder.rb +++ b/lib/diaspora/ostatus_builder.rb @@ -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 @@ -32,13 +39,13 @@ module Diaspora XML end - def self.create_endpoints + def create_endpoints <<-XML XML end - def self.create_subject + def create_subject <<-XML http://activitystrea.ms/schema/1.0/person @@ -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 XML end - end + end diff --git a/spec/lib/diaspora_ostatus_builder_spec.rb b/spec/lib/ostatus_builder_spec.rb similarity index 86% rename from spec/lib/diaspora_ostatus_builder_spec.rb rename to spec/lib/ostatus_builder_spec.rb index 0670755f7..042bf202b 100644 --- a/spec/lib/diaspora_ostatus_builder_spec.rb +++ b/spec/lib/ostatus_builder_spec.rb @@ -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