From 0d700046c4070dbda0a681715d8cee8f4865752c Mon Sep 17 00:00:00 2001 From: maxwell Date: Fri, 25 Jun 2010 22:29:08 -0700 Subject: [PATCH] MS^2 Object parser can handle comments --- app/helpers/application_helper.rb | 20 +++++++++---------- spec/helpers/parser_spec.rb | 32 +++++++++++++++++++++++-------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 50b8f700b..b2b5e076b 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -22,27 +22,27 @@ module ApplicationHelper doc.xpath("/XML/posts/post") end - def parse_posts_from_xml(xml) - posts = [] + def parse_objects_from_xml(xml) + objects = [] sender = parse_sender_object_from_xml(xml) body = parse_body_contents_from_xml(xml) body.children.each do |post| begin object = post.name.camelize.constantize.from_xml post.to_s - object.person = sender - posts << object if object.is_a? Post + object.person = sender if object.is_a? Post + objects << object rescue - puts "Not a real type: #{post.to_s}" + puts "Not a real type: #{object.to_s}" end end - posts + objects end - def store_posts_from_xml(xml) - posts = parse_posts_from_xml(xml) + def kk(xml) + objects = parse_objects_from_xml(xml) - posts.each do |p| - p.save unless p.person.nil? + objects.each do |p| + p.save if p.respond_to?(:person) && p.person end end diff --git a/spec/helpers/parser_spec.rb b/spec/helpers/parser_spec.rb index eae4ce7fd..445553e5f 100644 --- a/spec/helpers/parser_spec.rb +++ b/spec/helpers/parser_spec.rb @@ -12,7 +12,7 @@ describe "parser in application helper" do status_messages = [] 10.times { status_messages << Factory.build(:status_message, :person => @user)} xml = Post.build_xml_for(status_messages) - store_posts_from_xml(xml) + store_objects_from_xml(xml) StatusMessage.count.should == 0 end it 'should discard posts where it does not know the type' do @@ -24,7 +24,7 @@ describe "parser in application helper" do \n Here is another message\n a@a.com\n a@a.com\n a@a.com\n \n HEY DUDE\n a@a.com\n a@a.com\n a@a.com\n " - store_posts_from_xml(xml) + store_objects_from_xml(xml) Post.count.should == 2 Post.first.person.email.should == Friend.first.email end @@ -36,7 +36,7 @@ describe "parser in application helper" do \n HEY DUDE\n a@a.com\n a@a.com\n a@a.com\n " - store_posts_from_xml(xml) + store_objects_from_xml(xml) Post.count.should == 0 end @@ -51,7 +51,7 @@ describe "parser in application helper" do \n HEY DUDE\n a@a.com\n a@a.com\n a@a.com\n " - store_posts_from_xml(xml) + store_objects_from_xml(xml) Post.count.should == 0 end it 'should discard types which are not of type post' do @@ -60,12 +60,13 @@ describe "parser in application helper" do #{Friend.first.email} - + + \n Here is another message\n a@a.com\n a@a.com\n a@a.com\n \n HEY DUDE\n a@a.com\n a@a.com\n a@a.com\n - " - store_posts_from_xml(xml) + " + store_objects_from_xml(xml) Post.count.should == 2 Post.first.person.email.should == Friend.first.email end @@ -94,10 +95,25 @@ describe "parser in application helper" do end it 'should be able to extract all posts to an array' do - posts = parse_posts_from_xml(@xml) + posts = parse_objects_from_xml(@xml) posts.is_a?(Array).should be true posts.count.should == 10 end + + it 'should be able to correctly handle comments' do + friend = Factory.create(:friend) + post = Factory.create(:status_message) + xml = "#{Friend.first.email} + + \n Freedom!\n #{friend.id}\n #{post.id}}\n + " + objects = parse_objects_from_xml(xml) + comment = objects.first + comment.text.should == "Freedom!" + comment.person.should == friend + comment.post.should == post + + end end