Allow duplicate titles on importing blog posts

* the unique post_id from WordPress now gets appended if the title is already taken
This commit is contained in:
Marc Remolt 2011-06-03 11:02:25 +02:00
parent e367498ef0
commit 39b482f99f
3 changed files with 49 additions and 39 deletions

View File

@ -1,7 +0,0 @@
module Refinery
module WordPress
end
end
require 'wordpress'

View File

@ -36,16 +36,14 @@ module Refinery
unless user
begin
is_draft = draft? ? "true" : "false"
if !draft?
p "creating post " + title + " Draft status: " + is_draft
post = ::BlogPost.create! :title => title,
:body => content_formatted,
:draft => draft?,
:published_at => post_date,
:created_at => post_date,
:author => user,
:tag_list => tag_list
unless draft?
#p "creating post " + title + " Draft status: " + draft?.to_s
post = ::BlogPost.new :title => title, :body => content_formatted,
:draft => draft?, :published_at => post_date, :created_at => post_date,
:author => user, :tag_list => tag_list
post.save!
::BlogPost.transaction do
categories.each do |category|
post.categories << category.to_refinery
@ -57,13 +55,12 @@ module Refinery
comment.save
end
end
else
p "Skipping draft post"
end
rescue Exception => e
# TODO if it's not an activerecord validation error about duplicate title then raise e
p e
rescue ActiveRecord::RecordInvalid
# if the title has already been taken (WP allows duplicates here,
# refinery doesn't) append the post_id to it, making it unique
post.title = "#{title}-#{post_id}"
post.save
end
post

View File

@ -227,29 +227,49 @@ describe Refinery::WordPress::Dump, :type => :model do
describe "#to_refinery" do
before do
User.create! :username => 'admin', :email => 'admin@example.com',
@user = User.create! :username => 'admin', :email => 'admin@example.com',
:password => 'password', :password_confirmation => 'password'
@post = post.to_refinery
end
it { BlogPost.should have(1).record }
it "should copy the attributes from Refinery::WordPress::Post" do
@post.title.should == post.title
@post.body.should == post.content_formatted
@post.draft.should == post.draft?
@post.published_at.should == post.post_date
@post.created_at.should == post.post_date
@post.author.username.should == post.creator
context "with a unique title" do
before do
@post = post.to_refinery
end
it { BlogPost.should have(1).record }
it "should copy the attributes from Refinery::WordPress::Post" do
@post.title.should == post.title
@post.body.should == post.content_formatted
@post.draft.should == post.draft?
@post.published_at.should == post.post_date
@post.created_at.should == post.post_date
@post.author.username.should == post.creator
end
it "should assign a category for each Refinery::WordPress::Category" do
@post.categories.should have(post.categories.count).records
end
it "should assign a comment for each Refinery::WordPress::Comment" do
@post.comments.should have(post.comments.count).records
end
end
it "should assign a category for each Refinery::WordPress::Category" do
@post.categories.should have(post.categories.count).records
end
context "with a duplicate title" do
before do
BlogPost.create! :title => post.title, :body => 'Lorem', :author => @user
@post = post.to_refinery
end
it { BlogPost.should have(2).records }
it "should create the BlogPost with #post_id attached" do
@post.title.should == "#{post.title}-#{post.post_id}"
end
it "should assign a comment for each Refinery::WordPress::Comment" do
@post.comments.should have(post.comments.count).records
end
end