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