From 497b477e8917f68d7ecde9a89d8dfaa15522c459 Mon Sep 17 00:00:00 2001
From: maxwell <maxwell@joindiaspora.com>
Date: Tue, 15 Jun 2010 17:21:57 -0700
Subject: [PATCH] DG MS added a post model, going to put it more places than
 just status message now

---
 app/models/post.rb                 | 30 +++++++++++++++++++++
 app/models/status_message.rb       | 21 ++++-----------
 lib/common.rb                      | 18 +++++++++++++
 spec/factories.rb                  |  9 +++++++
 spec/models/blogs_spec.rb          | 42 +++++++++++++-----------------
 spec/models/friend_spec.rb         |  1 -
 spec/models/post_spec.rb           | 32 +++++++++++++++++++++++
 spec/models/status_message_spec.rb | 20 ++++++--------
 8 files changed, 120 insertions(+), 53 deletions(-)
 create mode 100644 app/models/post.rb
 create mode 100644 lib/common.rb
 create mode 100644 spec/models/post_spec.rb

diff --git a/app/models/post.rb b/app/models/post.rb
new file mode 100644
index 0000000000..72238b32df
--- /dev/null
+++ b/app/models/post.rb
@@ -0,0 +1,30 @@
+class Post 
+
+  # XML accessors must always preceed mongo field tags
+
+  include Mongoid::Document
+  include Mongoid::Timestamps
+  include ROXML
+
+  xml_accessor :owner
+  xml_accessor :snippet
+  xml_accessor :source
+
+  field :owner
+  field :source
+  field :snippet
+
+
+  before_create :set_defaults
+
+  protected
+
+  def set_defaults
+    user_email = User.first.email
+    self.owner ||= user_email
+    self.source ||= user_email
+    self.snippet ||= user_email
+  end
+end
+
+
diff --git a/app/models/status_message.rb b/app/models/status_message.rb
index 7d78ce8054..16b1e1eda0 100644
--- a/app/models/status_message.rb
+++ b/app/models/status_message.rb
@@ -1,19 +1,12 @@
-class StatusMessage
-  include Mongoid::Document
-  include Mongoid::Timestamps
-  include ROXML
+class StatusMessage < Post
   
   xml_accessor :message
-  xml_accessor :owner
-
-   
   field :message
-  field :owner
-  
+
+
   validates_presence_of :message
   
-  before_create :set_default_owner
-  
+ 
   def self.newest(owner_email)
     StatusMessage.last(:conditions => {:owner => owner_email})
   end
@@ -22,9 +15,5 @@ class StatusMessage
     StatusMessage.newest(User.first.email)
   end
   
-  protected
-  
-  def set_default_owner
-    self.owner ||= User.first.email   
-  end
 end
+
diff --git a/lib/common.rb b/lib/common.rb
new file mode 100644
index 0000000000..a89072fc56
--- /dev/null
+++ b/lib/common.rb
@@ -0,0 +1,18 @@
+module CommonField
+
+  def self.included(klass)
+    klass.class_eval do
+      include Mongoid::Document
+      include ROXML
+      include Mongoid::Timestamps
+
+      xml_accessor :owner
+      xml_accessor :snippet
+      xml_accessor :source
+
+      field :owner
+      field :source
+      field :snippet
+    end
+  end
+end
diff --git a/spec/factories.rb b/spec/factories.rb
index 0ebbb93e24..a63f32c318 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -8,7 +8,11 @@ end
 
 Factory.define :status_message do |m|
   m.sequence(:message) {|n| "jimmy's #{n} whales"}
+end
 
+Factory.define :blog do |b|
+  b.sequence(:title) {|n| "bobby's #{n} penguins"}
+  b.sequence(:body) {|n| "jimmy's huge #{n} whales"}
 end
 
 Factory.define :user do |u|
@@ -19,3 +23,8 @@ end
 Factory.define :bookmark do |b|
   b.link "http://www.yahooligans.com/"
 end
+
+Factory.define :post do |p|
+  p.source "New York Times"
+  p.sequence(:snippet) {|n| "This is some information #{n}"}
+end
diff --git a/spec/models/blogs_spec.rb b/spec/models/blogs_spec.rb
index ce3e5f9a5c..32c9557a4c 100644
--- a/spec/models/blogs_spec.rb
+++ b/spec/models/blogs_spec.rb
@@ -1,6 +1,10 @@
 require File.dirname(__FILE__) + '/../spec_helper'
 
 describe Blog do
+  before do
+    Factory.create(:user, :email => "bob@aol.com", :password => "diggity")
+  end
+
   it "should have a title and body" do    
     n = Blog.new
     n.valid?.should be false
@@ -11,51 +15,41 @@ describe Blog do
   end
   
   it "should add an owner if none is present" do
-    User.create(:email => "bob@aol.com", :password => "big bux")
-    n = Blog.create(:title => "kittens", :body => "puppies!")
-    n.owner.should == "bob@aol.com"
+    b = Factory.create(:blog)
+    b.owner.should == "bob@aol.com"
   end
   
-  
   describe "newest" do
     before do
-      User.create(:email => "bob@aol.com", :password => "diggity")
-      Blog.create(:title => "bone dawg", :body => "wale for jimmy", :owner => "xzibit@dawgz.com")
-      Blog.create(:title => "dawg bone", :body => "jimmy wales")
-      Blog.create(:title => "bone dawg", :body => "jimmy your wales", :owner => "some@dudes.com")  
-      Blog.create(:title => "dawg bone", :body => "lions", :owner => "xzibit@dawgz.com")
-      Blog.create(:title => "bone dawg", :body => "bears")
-      Blog.create(:title => "dawg bone", :body => "sharks", :owner => "some@dudes.com")
-      Blog.create(:title => "bone dawg", :body => "roar")
+      (2..4).each { Factory.create(:blog, :owner => "some@dudes.com") }
+      (5..8).each { Factory.create(:blog) }
+      (9..11).each { Factory.create(:blog, :owner => "other@dudes.com") }
     end
   
     it "should give the most recent blog title and body from owner" do
       blog = Blog.my_newest
-      blog.title.should == "bone dawg"
-      blog.body.should == "roar"
+      blog.title.should == "bobby's 8 penguins"
+      blog.body.should == "jimmy's huge 8 whales"
     end
     
     it "should give the most recent blog body for a given email" do
       blog = Blog.newest("some@dudes.com")
-      blog.title.should == "dawg bone"
-      blog.body.should == "sharks"
+      blog.title.should == "bobby's 14 penguins"
+      blog.body.should == "jimmy's huge 14 whales"
     end
   end
   
   describe "XML" do
-    before do
-      @xml = "<blog>\n  <title>yessir</title>\n  <body>I hate WALRUSES!</body>\n  <owner>Bob</owner>\n</blog>" 
-    end
-      
     it 'should serialize to XML' do
-      body = Blog.create(:title => "yessir", :body => "I hate WALRUSES!", :owner => "Bob")
-      body.to_xml.to_s.should == @xml
+      body = Factory.create(:blog, :title => "yessir", :body => "penguins")
+      body.to_xml.to_s.should include "<title>yessir</title>"
+      body.to_xml.to_s.should include "<body>penguins</body>"
     end
   
     it 'should marshal serialized XML to object' do       
-      parsed = Blog.from_xml(@xml)
+      xml = "<blog>\n  <title>yessir</title>\n  <body>I hate WALRUSES!</body>\n</blog>" 
+      parsed = Blog.from_xml(xml)
       parsed.body.should == "I hate WALRUSES!"
-      parsed.owner.should == "Bob"
     end
   end
 end
diff --git a/spec/models/friend_spec.rb b/spec/models/friend_spec.rb
index b76371aaa0..f9d90b4f94 100644
--- a/spec/models/friend_spec.rb
+++ b/spec/models/friend_spec.rb
@@ -3,7 +3,6 @@ require File.dirname(__FILE__) + '/../spec_helper'
 describe Friend do
   it 'should have a diaspora username and diaspora url' do 
     n = Factory.build(:friend, :url => nil)
-    #n = Friend.new(:username => 'max')
     n.valid?.should be false
     n.url = "http://max.com/"
     n.valid?.should be true
diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb
new file mode 100644
index 0000000000..33e1df1a39
--- /dev/null
+++ b/spec/models/post_spec.rb
@@ -0,0 +1,32 @@
+require File.dirname(__FILE__) + '/../spec_helper'
+
+describe Post do
+  before(:all) do
+    Factory.create(:user, :email => "bob@aol.com")
+    @post = Factory.create(:post, :owner => nil, :source => nil, :snippet => nil)    
+  end
+
+  describe 'requirements' do
+  end
+
+  describe 'defaults' do
+
+    it "should add an owner if none is present" do
+      @post.owner.should == "bob@aol.com"
+    end
+
+    it "should add a source if none is present" do
+      @post.source.should == "bob@aol.com"
+    end
+    
+    it "should add a snippet if none is present" do
+      @post.snippet.should == "bob@aol.com"
+    end
+  end
+end
+
+#question!
+#STI ?  do i need to call mongoid doc on child?
+# validations inherit?
+# type param.
+# inheriting snippet builder method
diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb
index f2f293cd96..d6fcccb464 100644
--- a/spec/models/status_message_spec.rb
+++ b/spec/models/status_message_spec.rb
@@ -2,8 +2,9 @@ require File.dirname(__FILE__) + '/../spec_helper'
 
 describe StatusMessage do
   before do
-      @usr = Factory.create(:user,:email => "bob@aol.com", :password => "diggity")
+      Factory.create(:user, :email => "bob@aol.com", :password => "diggity")
   end
+
   it "should have a message" do    
     n = Factory.build(:status_message, :message => nil)
     n.valid?.should be false
@@ -18,12 +19,11 @@ describe StatusMessage do
    
   describe "newest" do
     before do
-      (1..5).each {  Factory.create(:status_message, :owner => "some@dudes.com") }
-      (6..10).each {  Factory.create(:status_message) }
+      (1..5).each { Factory.create(:status_message, :owner => "some@dudes.com") }
+      (6..10).each { Factory.create(:status_message) }
     end
     
     it "should give the most recent message from owner" do
-      #puts StatusMessage.newest("sam@cool.com")
       StatusMessage.my_newest.message.should == "jimmy's 11 whales"
     end
     
@@ -33,19 +33,15 @@ describe StatusMessage do
   end
   
   describe "XML" do
-    before do
-      @xml = "<statusmessage>\n  <message>I hate WALRUSES!</message>\n  <owner>Bob</owner>\n</statusmessage>" 
-    end
-      
     it 'should serialize to XML' do
-      message = Factory.create(:status_message, :message => "I hate WALRUSES!", :owner => "Bob")
-      message.to_xml.to_s.should == @xml
+      message = Factory.create(:status_message, :message => "I hate WALRUSES!")
+      message.to_xml.to_s.should include "<message>I hate WALRUSES!</message>"
     end
   
     it 'should marshal serialized XML to object' do       
-      parsed = StatusMessage.from_xml(@xml)
+      xml = "<statusmessage>\n  <message>I hate WALRUSES!</message></statusmessage>" 
+      parsed = StatusMessage.from_xml(xml)
       parsed.message.should == "I hate WALRUSES!"
-      parsed.owner.should == "Bob"
     end
   end
 end
-- 
GitLab