diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 2865c3476..a77a671d8 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,4 +1,6 @@ module ApplicationHelper + require 'lib/common' + include Diaspora::XMLParser def object_path(object) eval("#{object.class.to_s.underscore}_path(object)") end @@ -7,46 +9,6 @@ module ApplicationHelper object.attributes.keys end - def parse_sender_id_from_xml(xml) - doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks } - doc.xpath("/XML/head/sender/email").text.to_s - end - - def parse_sender_object_from_xml(xml) - sender_id = parse_sender_id_from_xml(xml) - Friend.where(:email => sender_id).first - end - - def parse_body_contents_from_xml(xml) - doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks } - doc.xpath("/XML/posts/post") - end - - 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 if object.is_a? Post - objects << object - rescue - puts "Not a real type: #{object.to_s}" - end - end - objects - end - - def store_objects_from_xml(xml) - objects = parse_objects_from_xml(xml) - - objects.each do |p| - p.save if p.respond_to?(:person) && !(p.person.nil?) #WTF - #p.save if p.respond_to?(:person) && !(p.person == nil) #WTF - end - end - def mine?(post) post.person == User.first end diff --git a/lib/common.rb b/lib/common.rb index 36bfcd2fe..99cbb3f50 100644 --- a/lib/common.rb +++ b/lib/common.rb @@ -1,4 +1,47 @@ module Diaspora + module XMLParser + def parse_sender_id_from_xml(xml) + doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks } + doc.xpath("/XML/head/sender/email").text.to_s + end + + def parse_sender_object_from_xml(xml) + sender_id = parse_sender_id_from_xml(xml) + Friend.where(:email => sender_id).first + end + + def parse_body_contents_from_xml(xml) + doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks } + doc.xpath("/XML/posts/post") + end + + 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 if object.is_a? Post + objects << object + rescue + puts "Not a real type: #{object.to_s}" + end + end + objects + end + + def store_objects_from_xml(xml) + objects = parse_objects_from_xml(xml) + + objects.each do |p| + p.save if p.respond_to?(:person) && !(p.person.nil?) #WTF + #p.save if p.respond_to?(:person) && !(p.person == nil) #WTF + end + end + + + end module Webhooks def self.included(klass) klass.class_eval do diff --git a/spec/helpers/parser_spec.rb b/spec/helpers/parser_spec.rb index 40fe5aea5..3cc11f71c 100644 --- a/spec/helpers/parser_spec.rb +++ b/spec/helpers/parser_spec.rb @@ -15,19 +15,7 @@ describe "parser in application helper" do store_objects_from_xml(xml) StatusMessage.count.should == 0 end - it 'should discard posts where it does not know the type' do - xml = " - - - #{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_objects_from_xml(xml) - Post.count.should == 2 - Post.first.person.email.should == Friend.first.email - end + it "should reject xml with no sender" do xml = " @@ -40,6 +28,7 @@ describe "parser in application helper" do Post.count.should == 0 end + it "should reject xml with a sender not in the database" do xml = " @@ -54,6 +43,7 @@ describe "parser in application helper" do store_objects_from_xml(xml) Post.count.should == 0 end + it 'should discard types which are not of type post' do xml = " @@ -62,13 +52,11 @@ 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_objects_from_xml(xml) - Post.count.should == 2 - Post.first.person.email.should == Friend.first.email + Post.count.should == 0 end