First shot at attachment import
* only images for now * only blog posts for now * thumbnailed images are not yet replaced in blog posts body
This commit is contained in:
parent
9a2b5acef6
commit
7550dfa164
|
@ -19,6 +19,7 @@ namespace :wordpress do
|
||||||
dump = Refinery::WordPress::Dump.new(params[:file_name])
|
dump = Refinery::WordPress::Dump.new(params[:file_name])
|
||||||
|
|
||||||
dump.authors.each(&:to_refinery)
|
dump.authors.each(&:to_refinery)
|
||||||
|
attachments = dump.attachments.each(&:to_refinery)
|
||||||
|
|
||||||
only_published = ENV['ONLY_PUBLISHED'] == 'true' ? true : false
|
only_published = ENV['ONLY_PUBLISHED'] == 'true' ? true : false
|
||||||
dump.posts(only_published).each(&:to_refinery)
|
dump.posts(only_published).each(&:to_refinery)
|
||||||
|
@ -28,6 +29,12 @@ namespace :wordpress do
|
||||||
ENV["MODEL"] = 'BlogPost'
|
ENV["MODEL"] = 'BlogPost'
|
||||||
Rake::Task["friendly_id:redo_slugs"].invoke
|
Rake::Task["friendly_id:redo_slugs"].invoke
|
||||||
ENV.delete("MODEL")
|
ENV.delete("MODEL")
|
||||||
|
|
||||||
|
# parse all created BlogPosts bodys and replace the old wordpress image uls
|
||||||
|
# with the newly created ones
|
||||||
|
attachments.each do |attachment|
|
||||||
|
attachment.replace_image_url_in_blog_posts
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "reset blog tables and then import blog data from a Refinery::WordPress XML dump"
|
desc "reset blog tables and then import blog data from a Refinery::WordPress XML dump"
|
||||||
|
|
|
@ -2,6 +2,7 @@ module Refinery
|
||||||
module WordPress
|
module WordPress
|
||||||
class Attachment
|
class Attachment
|
||||||
attr_reader :node
|
attr_reader :node
|
||||||
|
attr_reader :refinery_image
|
||||||
|
|
||||||
def initialize(node)
|
def initialize(node)
|
||||||
@node = node
|
@node = node
|
||||||
|
@ -15,6 +16,10 @@ module Refinery
|
||||||
node.xpath("description").text
|
node.xpath("description").text
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def file_name
|
||||||
|
url.split('/').last
|
||||||
|
end
|
||||||
|
|
||||||
def post_date
|
def post_date
|
||||||
DateTime.parse node.xpath("wp:post_date").text
|
DateTime.parse node.xpath("wp:post_date").text
|
||||||
end
|
end
|
||||||
|
@ -22,6 +27,44 @@ module Refinery
|
||||||
def url
|
def url
|
||||||
node.xpath("wp:attachment_url").text
|
node.xpath("wp:attachment_url").text
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def image?
|
||||||
|
url.match /\.(png|jpg|jpeg|gif)$/
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_refinery
|
||||||
|
if image?
|
||||||
|
to_image
|
||||||
|
else
|
||||||
|
to_file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def replace_image_url_in_blog_posts
|
||||||
|
::BlogPost.all.each do |post|
|
||||||
|
if post.body.include? url
|
||||||
|
post.body = post.body.gsub(url, refinery_image.image.url)
|
||||||
|
post.save!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def to_image
|
||||||
|
image = ::Image.new
|
||||||
|
image.created_at = post_date
|
||||||
|
image.image_url = url
|
||||||
|
image.save!
|
||||||
|
|
||||||
|
@refinery_image = image
|
||||||
|
image
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_file
|
||||||
|
raise "to_file is not implemented yet, sorry!"
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,5 +6,38 @@ describe Refinery::WordPress::Attachment, :type => :model do
|
||||||
specify { attachment.title.should == '200px-Tux.svg' }
|
specify { attachment.title.should == '200px-Tux.svg' }
|
||||||
specify { attachment.description.should == 'Tux, the Linux mascot' }
|
specify { attachment.description.should == 'Tux, the Linux mascot' }
|
||||||
specify { attachment.url.should == 'http://localhost/wordpress/wp-content/uploads/2011/05/200px-Tux.svg_.png' }
|
specify { attachment.url.should == 'http://localhost/wordpress/wp-content/uploads/2011/05/200px-Tux.svg_.png' }
|
||||||
|
specify { attachment.file_name.should == '200px-Tux.svg_.png' }
|
||||||
specify { attachment.post_date.should == DateTime.new(2011, 6, 5, 15, 26, 51) }
|
specify { attachment.post_date.should == DateTime.new(2011, 6, 5, 15, 26, 51) }
|
||||||
|
specify { attachment.should be_an_image }
|
||||||
|
|
||||||
|
describe "#to_refinery" do
|
||||||
|
before do
|
||||||
|
@image = attachment.to_refinery
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should create an Image from the Attachment" do
|
||||||
|
@image.should be_a(Image)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should copy the attributes from Attachment" do
|
||||||
|
@image.created_at.should == attachment.post_date
|
||||||
|
@image.image.url.end_with?(attachment.file_name).should be_true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#replace_image_url" do
|
||||||
|
before do
|
||||||
|
test_dump.authors.each(&:to_refinery)
|
||||||
|
test_dump.posts.each(&:to_refinery)
|
||||||
|
@image = attachment.to_refinery
|
||||||
|
|
||||||
|
attachment.replace_image_url_in_blog_posts
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should replace attachment urls in the generated BlogPosts" do
|
||||||
|
BlogPost.first.body.should_not include(attachment.url)
|
||||||
|
BlogPost.first.body.should include(@image.image.url)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user