From a33acd134e82bd91a6c6ca03fcffce32e005f939 Mon Sep 17 00:00:00 2001
From: danielvincent <danielgrippi@gmail.com>
Date: Wed, 7 Jul 2010 17:47:09 -0700
Subject: [PATCH] DG IZ; fixed person requesting (friend requests).

---
 app/models/person_request.rb                  | 26 +++++++--------
 app/views/person_requests/_form.html.haml     |  9 ++++++
 .../person_requests/_new_person_request.haml  |  9 ++++++
 .../person_requests/_person_request.html.haml |  2 ++
 app/views/person_requests/edit.html.haml      |  8 +++++
 app/views/person_requests/index.html.haml     |  7 ++++
 app/views/person_requests/new.html.haml       |  5 +++
 app/views/person_requests/show.html.haml      | 11 +++++++
 lib/common.rb                                 | 16 ++--------
 spec/lib/parser_spec.rb                       | 32 ++++++-------------
 spec/models/person_request_spec.rb            | 14 ++++----
 11 files changed, 81 insertions(+), 58 deletions(-)
 create mode 100644 app/views/person_requests/_form.html.haml
 create mode 100644 app/views/person_requests/_new_person_request.haml
 create mode 100644 app/views/person_requests/_person_request.html.haml
 create mode 100644 app/views/person_requests/edit.html.haml
 create mode 100644 app/views/person_requests/index.html.haml
 create mode 100644 app/views/person_requests/new.html.haml
 create mode 100644 app/views/person_requests/show.html.haml

diff --git a/app/models/person_request.rb b/app/models/person_request.rb
index d3c9562b97..e240216e14 100644
--- a/app/models/person_request.rb
+++ b/app/models/person_request.rb
@@ -1,30 +1,26 @@
 class PersonRequest
   include MongoMapper::Document
   include Diaspora::Webhooks
+  include ROXML
   
-  key :url, String
+  xml_name :person_request
+
+  xml_accessor :_id
+  xml_accessor :person, :as => Person
 
-  attr_accessor :sender
+  key :url, String
+  key :person, Person
   
   validates_presence_of :url
 
   before_save :check_for_person_requests
 
-  def to_person_xml
-    person = Person.new
-    person.email = sender.email
-    person.url = sender.url
-    person.profile = sender.profile.clone
-
-    person.to_xml
-  end
-
   def self.for(url)
-    person_request = PersonRequest.new(:url => url)
-    person_request.sender = User.first
-    person_request.save
+    request = PersonRequest.new(:url => url)
+    request.person = User.first
+    request.save
 
-    person_request.push_person_request_to_url(person_request.url)
+    request.push_to([request])
   end
 
   def check_for_person_requests
diff --git a/app/views/person_requests/_form.html.haml b/app/views/person_requests/_form.html.haml
new file mode 100644
index 0000000000..75603f4051
--- /dev/null
+++ b/app/views/person_requests/_form.html.haml
@@ -0,0 +1,9 @@
+= form_for @person_request do |f|
+  = f.error_messages
+
+  %p
+    = f.label :url
+    = f.text_field :url
+
+  %p
+    = f.submit
diff --git a/app/views/person_requests/_new_person_request.haml b/app/views/person_requests/_new_person_request.haml
new file mode 100644
index 0000000000..a90624c516
--- /dev/null
+++ b/app/views/person_requests/_new_person_request.haml
@@ -0,0 +1,9 @@
+= form_for @person_request, :remote => true do |f|
+  = f.error_messages
+
+  %p
+    = f.label :url
+    = f.text_field :url
+
+  %p
+    = f.submit
diff --git a/app/views/person_requests/_person_request.html.haml b/app/views/person_requests/_person_request.html.haml
new file mode 100644
index 0000000000..b492c539c9
--- /dev/null
+++ b/app/views/person_requests/_person_request.html.haml
@@ -0,0 +1,2 @@
+%li.message{:id => person_request.id} 
+  = person_request.inspect
diff --git a/app/views/person_requests/edit.html.haml b/app/views/person_requests/edit.html.haml
new file mode 100644
index 0000000000..eba1b657bc
--- /dev/null
+++ b/app/views/person_requests/edit.html.haml
@@ -0,0 +1,8 @@
+- title "Edit Person Request"
+
+= render 'form'
+
+%p
+  = link_to "Show", person_request_path(@person_request)
+  |
+  = link_to "View All", person_request_path 
diff --git a/app/views/person_requests/index.html.haml b/app/views/person_requests/index.html.haml
new file mode 100644
index 0000000000..75a9bbd04a
--- /dev/null
+++ b/app/views/person_requests/index.html.haml
@@ -0,0 +1,7 @@
+%h1 person requests
+= render "person_requests/new_person_request", :person_request => @person_request
+%ul#stream
+  - for person_request in @person_requests
+    = render "person_request", :person_request => person_request
+#pagination
+  = will_paginate @person_requests
diff --git a/app/views/person_requests/new.html.haml b/app/views/person_requests/new.html.haml
new file mode 100644
index 0000000000..71260d8e6c
--- /dev/null
+++ b/app/views/person_requests/new.html.haml
@@ -0,0 +1,5 @@
+- title "New Person Request"
+
+= render 'form'
+
+%p= link_to "Back to List", person_requests_path 
diff --git a/app/views/person_requests/show.html.haml b/app/views/person_requests/show.html.haml
new file mode 100644
index 0000000000..207d347f1b
--- /dev/null
+++ b/app/views/person_requests/show.html.haml
@@ -0,0 +1,11 @@
+- title "Person Request"
+
+%p
+  = person_request.inspect
+
+%p
+  = link_to "Edit", edit_person_request_path(@person_request)
+  |
+  = link_to "Destroy", @person_request, :confirm => 'Are you sure?', :method => :delete
+  |
+  = link_to "View All", person_requests_path
diff --git a/lib/common.rb b/lib/common.rb
index 699f5f4437..537c50c0e6 100644
--- a/lib/common.rb
+++ b/lib/common.rb
@@ -33,11 +33,12 @@ module Diaspora
       objects.each do |p|
         if p.is_a? Retraction
           p.perform
-        elsif p.is_a? Person
+        elsif p.is_a? PersonRequest
           if PersonRequest.where(:url => p.url).first
             p.active = true
           end
           p.save
+          p.person.save
         #This line checks if the sender was in the database, among other things?
         elsif p.respond_to?(:person) && !(p.person.nil?) && !(p.person.is_a? User) #WTF
           p.save 
@@ -68,19 +69,6 @@ module Diaspora
           end
         end
 
-        def push_person_request_to_url(url)
-          if url
-            url = url + "receive/"  
-            xml = "<XML>
-            <posts><post>
-              #{self.to_person_xml.to_s}
-            </post></posts>
-            </XML>"
-            @@queue.add_post_request( [url], xml )
-            @@queue.process
-          end
-        end
-
         def prep_webhook
           "<post>#{self.to_xml.to_s}</post>"
         end
diff --git a/spec/lib/parser_spec.rb b/spec/lib/parser_spec.rb
index 4bde168d2f..95ed70894e 100644
--- a/spec/lib/parser_spec.rb
+++ b/spec/lib/parser_spec.rb
@@ -111,13 +111,10 @@ describe "parser in application helper" do
     end
     
     it "should create a new person upon getting a person request" do
-      person_request = PersonRequest.new(:url => "http://www.googles.com/")
-      person_request.sender = @person
-      xml = "<XML>
-            <posts><post>
-      #{person_request.to_person_xml.to_s}
-            </post></posts>
-            </XML>"
+      request = PersonRequest.new(:url => "http://www.googles.com/")
+      request.person = @person
+
+      xml = Post.build_xml_for [request]
 
       @person.destroy
       @user.destroy
@@ -127,22 +124,13 @@ describe "parser in application helper" do
     end
 
     it "should activate the Person if I initiated a request to that url" do 
-      person_request = PersonRequest.create(:url => @person.url, :sender => @user)
-   
-      person_request_remote = PersonRequest.new(:url => "http://www.yahoo.com/")
-      person_request_remote.sender = @person.clone
-      xml = "<XML>
-            <posts><post>
-      #{person_request_remote.to_person_xml.to_s}
-            </post></posts>
-            </XML>"
+      request = PersonRequest.create(:url => @person.url, :person => @user)
+      request_remote = PersonRequest.new(:url => "http://www.yahoo.com/")
+      request_remote.person = @person.clone
 
-      @person.destroy
-      @user.destroy
-      Person.count.should be 0
-      store_objects_from_xml(xml)
-      Person.count.should be 1
-      Person.first.active.should be true
+      xml = Post.build_xml_for [request_remote]
+
+      Person.where(:url => @person.url).first.active.should be true
     end
 
   end
diff --git a/spec/models/person_request_spec.rb b/spec/models/person_request_spec.rb
index 78b45b5f32..e23b5de644 100644
--- a/spec/models/person_request_spec.rb
+++ b/spec/models/person_request_spec.rb
@@ -10,14 +10,14 @@ describe PersonRequest do
   end
 
   it 'should generate xml for the User as a Person' do 
-    person_request = PersonRequest.new(:url => "http://www.google.com")
     user = Factory.create(:user)
-    person_request.sender = user
-    person_xml = person_request.to_person_xml.to_s
-    person_xml.include?(user.email).should be true
-    person_xml.include?(user.url).should be true
-    person_xml.include?(user.profile.first_name).should be true
-    person_xml.include?(user.profile.last_name).should be true
+    request = PersonRequest.new(:url => "http://www.google.com/", :person => user)
+
+    xml = request.to_xml.to_s
+    xml.include?(user.email).should be true
+    xml.include?(user.url).should be true
+    xml.include?(user.profile.first_name).should be true
+    xml.include?(user.profile.last_name).should be true
   end
 
   it 'should be sent to the url upon for action' do
-- 
GitLab