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:
		
							parent
							
								
									e367498ef0
								
							
						
					
					
						commit
						39b482f99f
					
				@ -1,7 +0,0 @@
 | 
				
			|||||||
module Refinery
 | 
					 | 
				
			||||||
  module WordPress
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
require 'wordpress'
 | 
					 | 
				
			||||||
@ -36,16 +36,14 @@ module Refinery
 | 
				
			|||||||
          unless user
 | 
					          unless user
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        begin
 | 
					        begin
 | 
				
			||||||
          is_draft = draft? ? "true" : "false"
 | 
					          unless draft?
 | 
				
			||||||
          if !draft?
 | 
					            #p "creating post " + title + " Draft status: " + draft?.to_s
 | 
				
			||||||
            p "creating post " + title + " Draft status: " + is_draft
 | 
					            
 | 
				
			||||||
            post = ::BlogPost.create! :title => title,
 | 
					            post = ::BlogPost.new :title => title, :body => content_formatted, 
 | 
				
			||||||
                                      :body => content_formatted,
 | 
					              :draft => draft?, :published_at => post_date, :created_at => post_date, 
 | 
				
			||||||
                                      :draft => draft?,
 | 
					              :author => user, :tag_list => tag_list
 | 
				
			||||||
                                      :published_at => post_date,
 | 
					            post.save!
 | 
				
			||||||
                                      :created_at => post_date,
 | 
					
 | 
				
			||||||
                                      :author => user,
 | 
					 | 
				
			||||||
                                      :tag_list => tag_list
 | 
					 | 
				
			||||||
            ::BlogPost.transaction do
 | 
					            ::BlogPost.transaction do
 | 
				
			||||||
              categories.each do |category|
 | 
					              categories.each do |category|
 | 
				
			||||||
                post.categories << category.to_refinery
 | 
					                post.categories << category.to_refinery
 | 
				
			||||||
@ -57,13 +55,12 @@ module Refinery
 | 
				
			|||||||
                comment.save
 | 
					                comment.save
 | 
				
			||||||
              end
 | 
					              end
 | 
				
			||||||
            end
 | 
					            end
 | 
				
			||||||
            
 | 
					 | 
				
			||||||
          else
 | 
					 | 
				
			||||||
            p "Skipping draft post"
 | 
					 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
        rescue Exception => e
 | 
					        rescue ActiveRecord::RecordInvalid 
 | 
				
			||||||
          # TODO if it's not an activerecord validation error about duplicate title then raise e
 | 
					          # if the title has already been taken (WP allows duplicates here,
 | 
				
			||||||
          p e
 | 
					          # refinery doesn't) append the post_id to it, making it unique
 | 
				
			||||||
 | 
					          post.title = "#{title}-#{post_id}"
 | 
				
			||||||
 | 
					          post.save
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        post
 | 
					        post
 | 
				
			||||||
 | 
				
			|||||||
@ -227,29 +227,49 @@ describe Refinery::WordPress::Dump, :type => :model do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      describe "#to_refinery" do
 | 
					      describe "#to_refinery" do
 | 
				
			||||||
        before 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'
 | 
					            :password => 'password', :password_confirmation => 'password'
 | 
				
			||||||
 | 
					 | 
				
			||||||
          @post = post.to_refinery
 | 
					 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        it { BlogPost.should have(1).record } 
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        it "should copy the attributes from Refinery::WordPress::Post" do
 | 
					        context "with a unique title" do
 | 
				
			||||||
          @post.title.should == post.title
 | 
					          before do 
 | 
				
			||||||
          @post.body.should == post.content_formatted
 | 
					            @post = post.to_refinery
 | 
				
			||||||
          @post.draft.should == post.draft?
 | 
					          end
 | 
				
			||||||
          @post.published_at.should == post.post_date
 | 
					
 | 
				
			||||||
          @post.created_at.should == post.post_date
 | 
					          it { BlogPost.should have(1).record } 
 | 
				
			||||||
          @post.author.username.should == post.creator
 | 
					
 | 
				
			||||||
 | 
					          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
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        it "should assign a category for each Refinery::WordPress::Category" do
 | 
					        context "with a duplicate title" do
 | 
				
			||||||
          @post.categories.should have(post.categories.count).records
 | 
					          before do
 | 
				
			||||||
        end
 | 
					            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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user