diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 645627ecc..e56227538 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -7,25 +7,42 @@ module ApplicationHelper object.attributes.keys end - def store_posts_from_xml(xml) + def parse_sender_id_from_xml(xml) doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks } - - #i need to check some sort of metadata field - - doc.xpath("/XML/posts/post").each do |post| #this is the post wrapper - post.children.each do|type| #now the text of post itself is the type - #type object to xml is the the thing we want to from_xml - check_and_save_post(type) - end - end + 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) + Person.where(:email => sender_id).first end - def check_and_save_post(type) - begin - object = type.name.camelize.constantize.from_xml type.to_s - object.save if object.is_a? Post - rescue - puts "Not of type post" + def parse_body_contents_from_xml(xml) + doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks } + doc.xpath("/XML/posts/post") + end + + def parse_posts_from_xml(xml) + posts = [] + body = parse_body_contents_from_xml(xml) + body.children.each do |post| + begin + object = post.name.camelize.constantize.from_xml post.to_s + posts << object if object.is_a? Post + rescue + puts "Not a real type: #{post.to_s}" + end + end + posts + end + + def store_posts_from_xml(xml) + sender_object = parse_sender_object_from_xml(xml) + posts = parse_posts_from_xml(xml) + + posts.each do |p| + p.person = sender_object + p.save end end diff --git a/app/models/friend.rb b/app/models/friend.rb index 7f3463dd2..dba24e580 100644 --- a/app/models/friend.rb +++ b/app/models/friend.rb @@ -1,16 +1,10 @@ -class Friend - include Mongoid::Document - include ROXML +class Friend < Person - xml_accessor :username xml_accessor :url - xml_accessor :real_name - field :username field :url - field :real_name - validates_presence_of :username, :url, :real_name + validates_presence_of :url validates_format_of :url, :with => /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix diff --git a/app/models/person.rb b/app/models/person.rb new file mode 100644 index 000000000..399dbb394 --- /dev/null +++ b/app/models/person.rb @@ -0,0 +1,15 @@ +class Person + include Mongoid::Document + include ROXML + + xml_accessor :email + xml_accessor :real_name + + field :email + field :real_name + + has_many_related :posts + + validates_presence_of :email, :real_name + +end diff --git a/app/models/post.rb b/app/models/post.rb index 04cccc690..9dc312309 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -17,6 +17,10 @@ class Post field :source field :snippet + + belongs_to_related :person + + before_create :set_defaults after_save :send_to_view @@ -50,6 +54,7 @@ class Post self.owner ||= user_email self.source ||= user_email self.snippet ||= user_email + self.person ||= User.first end end diff --git a/app/models/user.rb b/app/models/user.rb index 45624f10e..a1ac4217f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,13 +1,8 @@ -class User - include Mongoid::Document +class User < Person # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, :lockable and :timeoutable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable - field :real_name - - validates_presence_of :real_name - end diff --git a/app/views/friends/index.html.haml b/app/views/friends/index.html.haml index 044ade323..52abf1451 100644 --- a/app/views/friends/index.html.haml +++ b/app/views/friends/index.html.haml @@ -2,11 +2,13 @@ %table %tr - %th username + %th real name + %th email %th url - for friend in @friends %tr - %td= friend.username + %td= friend.real_name + %td= friend.email %td= friend.url %td= link_to 'Show', friend %td= link_to 'Destroy', friend, :confirm => 'Are you sure?', :method => :delete diff --git a/app/views/friends/new.html.haml b/app/views/friends/new.html.haml index e9b1451be..161bd0250 100644 --- a/app/views/friends/new.html.haml +++ b/app/views/friends/new.html.haml @@ -3,9 +3,13 @@ = form_for @friend do |f| = f.error_messages %p - = f.label :username + = f.label :real_name %br - = f.text_field :username + = f.text_field :real_name + %p + = f.label :email + %br + = f.text_field :email %p = f.label :url %br diff --git a/app/views/friends/show.html.haml b/app/views/friends/show.html.haml index 034eb23ce..fedc3e2a3 100644 --- a/app/views/friends/show.html.haml +++ b/app/views/friends/show.html.haml @@ -1,8 +1,11 @@ - title "Friend" %p - %strong Username: - = @friend.username + %strong Real Name: + = @friend.real_name +%p + %strong Email: + = @friend.email %p %strong Url: = @friend.url diff --git a/app/views/status_messages/_status_message.html.haml b/app/views/status_messages/_status_message.html.haml index bfe97c678..1484b2d9e 100644 --- a/app/views/status_messages/_status_message.html.haml +++ b/app/views/status_messages/_status_message.html.haml @@ -1,6 +1,6 @@ %li.message{:class => ("mine" if mine?(post))} %span.from - = link_to post.owner, "#" + = link_to post.person.real_name, "#" = post.message %div.time = "#{time_ago_in_words(post.updated_at)} ago" diff --git a/app/views/users/index.html.haml b/app/views/users/index.html.haml index f0c2e7f87..6f210359c 100644 --- a/app/views/users/index.html.haml +++ b/app/views/users/index.html.haml @@ -2,9 +2,11 @@ %table %tr - %th User + %th Real Name + %th email %th Password - for user in @users %tr + %td= user.real_name %td= user.email %td= user.encrypted_password diff --git a/lib/common.rb b/lib/common.rb index 8e34b4591..8da6ddd31 100644 --- a/lib/common.rb +++ b/lib/common.rb @@ -36,11 +36,9 @@ module Diaspora "