diff --git a/app/models/post.rb b/app/models/post.rb
new file mode 100644
index 000000000..72238b32d
--- /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 7d78ce805..16b1e1eda 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 000000000..a89072fc5
--- /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 0ebbb93e2..a63f32c31 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 ce3e5f9a5..32c9557a4 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 = "