From c4b931c309bc20ea355900bcb1e537ab82f2103f Mon Sep 17 00:00:00 2001 From: Raphael Sofaer <raphael@joindiaspora.com> Date: Tue, 15 Jun 2010 18:41:54 -0700 Subject: [PATCH] IZ RS getting remote messages (not yet done) --- app/controllers/status_messages_controller.rb | 12 +++++++++-- app/helpers/status_messages_helper.rb | 12 +++++++++++ app/models/bookmark.rb | 2 +- app/models/friend.rb | 12 +++++++---- app/models/status_message.rb | 12 ++++++++--- .../status_messages_controller_spec.rb | 13 +++++++++++- spec/models/bookmark_spec.rb | 1 - spec/models/friend_spec.rb | 19 +++++++++++++++++ spec/models/status_message_spec.rb | 21 +++++++++++++++++++ 9 files changed, 92 insertions(+), 12 deletions(-) diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index 7c65ed3c7b..beae572550 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -1,9 +1,17 @@ class StatusMessagesController < ApplicationController - before_filter :authenticate_user! - + #before_filter :authenticate_user! + include StatusMessagesHelper + def index @status_messages = StatusMessage.all @friends = Friend.all + + respond_to do |format| + format.html + format.xml {render :xml => StatusMessages.new(@status_messages).to_xml } + format.json { render :json => @status_messages } + end + end def create diff --git a/app/helpers/status_messages_helper.rb b/app/helpers/status_messages_helper.rb index 1474868301..71a0b26ea6 100644 --- a/app/helpers/status_messages_helper.rb +++ b/app/helpers/status_messages_helper.rb @@ -1,4 +1,5 @@ module StatusMessagesHelper + def my_latest_message message = StatusMessage.my_newest unless message.nil? @@ -7,4 +8,15 @@ module StatusMessagesHelper return "No message to display." end end + + class StatusMessages + include ROXML + + def initialize(messages=[]) + @statusmessages = messages + end + + xml_accessor :statusmessages, :as => [StatusMessage] + attr_accessor :statusmessages + end end diff --git a/app/models/bookmark.rb b/app/models/bookmark.rb index 3480c72fb9..fc62d72250 100644 --- a/app/models/bookmark.rb +++ b/app/models/bookmark.rb @@ -17,4 +17,4 @@ class Bookmark def set_default_owner self.owner ||= User.first.email end -end \ No newline at end of file +end diff --git a/app/models/friend.rb b/app/models/friend.rb index d6cd9e5e4f..061a2094b8 100644 --- a/app/models/friend.rb +++ b/app/models/friend.rb @@ -1,9 +1,13 @@ class Friend include Mongoid::Document - + include ROXML + + xml_accessor :username + xml_accessor :url + field :username field :url - - validates_presence_of :username, :url -end \ No newline at end of file + validates_presence_of :username, :url + +end diff --git a/app/models/status_message.rb b/app/models/status_message.rb index 7d78ce8054..9ed8b1f95e 100644 --- a/app/models/status_message.rb +++ b/app/models/status_message.rb @@ -2,7 +2,8 @@ class StatusMessage include Mongoid::Document include Mongoid::Timestamps include ROXML - + include StatusMessagesHelper + xml_accessor :message xml_accessor :owner @@ -21,10 +22,15 @@ class StatusMessage def self.my_newest StatusMessage.newest(User.first.email) end - + + def self.retrieve_from_friend(friend) + StatusMessages.from_xml `curl #{friend.url}status_messages.xml --user a@a.com:aaaaaa` + end protected def set_default_owner - self.owner ||= User.first.email + self.owner ||= User.first.email end + end + diff --git a/spec/controllers/status_messages_controller_spec.rb b/spec/controllers/status_messages_controller_spec.rb index 3468b9d364..ecea61257d 100644 --- a/spec/controllers/status_messages_controller_spec.rb +++ b/spec/controllers/status_messages_controller_spec.rb @@ -47,10 +47,21 @@ describe StatusMessagesController do response.should render_template(:show) end - it "should return xml on the show type if the meme type exsits" do + it "should return xml on show type if the MIME type exists" do request.env["HTTP_ACCEPT"] = "application/xml" message = StatusMessage.first get :show, :id => message.id response.body.include?(message.to_xml.to_s).should be true end + + it "should return xml on index if the MIME type exists" do + Factory.create(:status_message) + + request.env["HTTP_ACCEPT"] = "application/xml" + get :index + StatusMessage.all.each do |message| + response.body.include?(message.message).should be true + response.body.include?(message.owner).should be true + end + end end diff --git a/spec/models/bookmark_spec.rb b/spec/models/bookmark_spec.rb index ac65dc5e4b..99cbbd2a53 100644 --- a/spec/models/bookmark_spec.rb +++ b/spec/models/bookmark_spec.rb @@ -9,7 +9,6 @@ describe Bookmark do end it "should add an owner if none is present" do - #User.create(:email => "bob@aol.com", :password => "big bux") Factory.create(:user, :email => "bob@aol.com") n = Factory.create(:bookmark) n.owner.should == "bob@aol.com" diff --git a/spec/models/friend_spec.rb b/spec/models/friend_spec.rb index b76371aaa0..57417e9b05 100644 --- a/spec/models/friend_spec.rb +++ b/spec/models/friend_spec.rb @@ -8,4 +8,23 @@ describe Friend do n.url = "http://max.com/" n.valid?.should be true end + + describe "XML" do + before do + @f = Factory.build(:friend) + @xml = "<friend>\n <username>#{@f.username}</username>\n <url>#{@f.url}</url>\n</friend>" + end + + it 'should serialize to XML' do + @f.to_xml.to_s.should == @xml + end + + it 'should marshal serialized XML to object' do + parsed = Friend.from_xml(@xml) + parsed.username.should == @f.username + parsed.url.should == @f.url + parsed.valid?.should be_true + end + end + end diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb index f2f293cd96..fd82f8075d 100644 --- a/spec/models/status_message_spec.rb +++ b/spec/models/status_message_spec.rb @@ -46,6 +46,27 @@ describe StatusMessage do parsed = StatusMessage.from_xml(@xml) parsed.message.should == "I hate WALRUSES!" parsed.owner.should == "Bob" + parsed.valid?.should be_true + end + end + + describe "retrieving" do + before do + @remote = Factory.create(:friend, :url => "http://localhost:1254/") + @remote_xml = (0..5).collect{Factory.create(:status_message).to_xml} + StatusMessages = StatusMessagesHelper::StatusMessages + #@remote_messages = (0..5).collect {|a| Factory.build(:status_message)} + #stub with response of @remote_msg.xml + end + it "should marshal xml and serialize it" do + messages = StatusMessages.new(@remote_xml) + unreadable_xml = messages.to_xml.to_s.sub("\t\t","\t") + unreadable_xml.include?(remote_xml.first.to_s).should be true + end + it "marshal retrieved xml" do + StatusMessage.retrieve_from_friend(@remote).to_xml.should == StatusMessages.from_xml(@remote_xml).to_xml + + # .from_xml == @remote_messages end end end -- GitLab