diff --git a/app/models/person.rb b/app/models/person.rb index 2601de2bc..0cbde015a 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -49,6 +49,10 @@ class Person "#{self.url}receive/users/#{self.id}/" end + def public_url + "#{self.url}users/#{self.id}/public" + end + def public_key_hash Base64.encode64 OpenSSL::Digest::SHA256.new(self.exported_key).to_s diff --git a/lib/diaspora/ostatus_builder.rb b/lib/diaspora/ostatus_builder.rb new file mode 100644 index 000000000..f243a6d73 --- /dev/null +++ b/lib/diaspora/ostatus_builder.rb @@ -0,0 +1,71 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3. See +# the COPYRIGHT file. + +module Diaspora + module OstatusBuilder + + def 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 + end + + def create_headers + <<-XML + + + Diaspora + #{@user.username}/public + Stream + its a stream + #{Time.now.xmlschema} + + #{@user.real_name} + #{@user.public_url} + + XML + end + + def create_endpoints + <<-XML + + XML + end + + def create_subject + <<-XML + + http://activitystrea.ms/schema/1.0/person + #{@user.public_url} + #{@user.real_name} + + + XML + end + + def create_body + @user.raw_visible_posts.all.inject do |xml,curr| + if curr.respond_to?(:to_activity) + unless xml + xml = curr.to_activity + else + xml + curr.to_activity + end + end + end + end + + def create_footer + <<-XML + + XML + end + + end +end diff --git a/spec/lib/diaspora_ostatus_builder_spec.rb b/spec/lib/diaspora_ostatus_builder_spec.rb new file mode 100644 index 000000000..ce29e1543 --- /dev/null +++ b/spec/lib/diaspora_ostatus_builder_spec.rb @@ -0,0 +1,18 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3. See +# the COPYRIGHT file. + +require 'spec_helper' +require File.dirname(__FILE__) + '/../../lib/diaspora/ostatus_builder' + +describe Diaspora::OstatusBuilder do + + let(:user) { Factory(:user) } + let(:aspect) { user.aspect(:name => "Public People") } + let!(:status_message1) { user.post(:status_message, :message => "One", :to => aspect.id) } + let!(:status_message2) { user.post(:status_message, :message => "Two", :to => aspect.id) } + + let!(:atom) { Diaspora::OstatusBuilder::build(user) } + +end +