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