Conversion in a gem finished
* specs are working again * added railitie * added missing migration (acts-as-taggable) * cleanups
This commit is contained in:
parent
dae4c2ea0a
commit
a45f502f44
3
Gemfile
3
Gemfile
|
@ -5,9 +5,12 @@ gem "rails", "3.0.7"
|
||||||
gem "sqlite3"
|
gem "sqlite3"
|
||||||
|
|
||||||
gem "rspec-rails", ">= 2.6.0"
|
gem "rspec-rails", ">= 2.6.0"
|
||||||
|
gem "database_cleaner"
|
||||||
|
|
||||||
# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
|
# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
|
||||||
# gem 'ruby-debug'
|
# gem 'ruby-debug'
|
||||||
# gem 'ruby-debug19'
|
# gem 'ruby-debug19'
|
||||||
|
|
||||||
|
gem 'refinerycms'
|
||||||
|
gem 'refinerycms-blog'
|
||||||
gem 'refinerycms-wordpress-import', :path => './'
|
gem 'refinerycms-wordpress-import', :path => './'
|
||||||
|
|
13
Gemfile.lock
13
Gemfile.lock
|
@ -4,7 +4,7 @@ PATH
|
||||||
refinerycms-wordpress-import (0.0.1)
|
refinerycms-wordpress-import (0.0.1)
|
||||||
nokogiri (~> 1.4.4)
|
nokogiri (~> 1.4.4)
|
||||||
refinerycms (~> 1.0.0)
|
refinerycms (~> 1.0.0)
|
||||||
refinerycms-blog (~> 1.3.2)
|
refinerycms-blog (~> 1.5.2)
|
||||||
|
|
||||||
GEM
|
GEM
|
||||||
remote: http://rubygems.org/
|
remote: http://rubygems.org/
|
||||||
|
@ -36,6 +36,7 @@ GEM
|
||||||
activemodel (= 3.0.7)
|
activemodel (= 3.0.7)
|
||||||
activesupport (= 3.0.7)
|
activesupport (= 3.0.7)
|
||||||
activesupport (3.0.7)
|
activesupport (3.0.7)
|
||||||
|
acts-as-taggable-on (2.0.6)
|
||||||
acts_as_indexed (0.7.2)
|
acts_as_indexed (0.7.2)
|
||||||
arel (2.0.10)
|
arel (2.0.10)
|
||||||
awesome_nested_set (2.0.0)
|
awesome_nested_set (2.0.0)
|
||||||
|
@ -43,6 +44,7 @@ GEM
|
||||||
babosa (0.3.4)
|
babosa (0.3.4)
|
||||||
bcrypt-ruby (2.1.4)
|
bcrypt-ruby (2.1.4)
|
||||||
builder (2.1.2)
|
builder (2.1.2)
|
||||||
|
database_cleaner (0.6.7)
|
||||||
devise (1.3.4)
|
devise (1.3.4)
|
||||||
bcrypt-ruby (~> 2.1.2)
|
bcrypt-ruby (~> 2.1.2)
|
||||||
orm_adapter (~> 0.0.3)
|
orm_adapter (~> 0.0.3)
|
||||||
|
@ -104,9 +106,11 @@ GEM
|
||||||
friendly_id_globalize3 (~> 3.2.1)
|
friendly_id_globalize3 (~> 3.2.1)
|
||||||
refinerycms-core (= 1.0.0)
|
refinerycms-core (= 1.0.0)
|
||||||
refinerycms-base (1.0.0)
|
refinerycms-base (1.0.0)
|
||||||
refinerycms-blog (1.3.2)
|
refinerycms-blog (1.5.2)
|
||||||
|
acts-as-taggable-on
|
||||||
filters_spam (~> 0.2)
|
filters_spam (~> 0.2)
|
||||||
refinerycms (>= 0.9.8)
|
refinerycms-core (~> 1.0.0)
|
||||||
|
seo_meta (~> 1.1.0)
|
||||||
refinerycms-core (1.0.0)
|
refinerycms-core (1.0.0)
|
||||||
acts_as_indexed (~> 0.7)
|
acts_as_indexed (~> 0.7)
|
||||||
awesome_nested_set (~> 2.0)
|
awesome_nested_set (~> 2.0)
|
||||||
|
@ -166,7 +170,10 @@ PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
|
database_cleaner
|
||||||
rails (= 3.0.7)
|
rails (= 3.0.7)
|
||||||
|
refinerycms
|
||||||
|
refinerycms-blog
|
||||||
refinerycms-wordpress-import!
|
refinerycms-wordpress-import!
|
||||||
rspec-rails (>= 2.6.0)
|
rspec-rails (>= 2.6.0)
|
||||||
sqlite3
|
sqlite3
|
||||||
|
|
7
lib/refinerycms-wordpress-import.rb
Normal file
7
lib/refinerycms-wordpress-import.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
module Refinery
|
||||||
|
module WordPress
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
require 'wordpress'
|
|
@ -1,8 +1,7 @@
|
||||||
require 'refinerycms'
|
|
||||||
require 'refinerycms-blog'
|
|
||||||
|
|
||||||
module Refinery
|
module Refinery
|
||||||
module WordPress
|
module WordPress
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
require 'wordpress'
|
||||||
|
|
|
@ -3,56 +3,36 @@ require 'wordpress'
|
||||||
|
|
||||||
namespace :wordpress do
|
namespace :wordpress do
|
||||||
desc "Reset the blog relevant tables for a clean import"
|
desc "Reset the blog relevant tables for a clean import"
|
||||||
task :reset do
|
task :reset_blog do
|
||||||
Rake::Task["environment"].invoke
|
Rake::Task["environment"].invoke
|
||||||
|
|
||||||
%w(blog_categories blog_posts).each do |table_name|
|
%w(taggings tags blog_comments blog_categories blog_posts).each do |table_name|
|
||||||
p "Truncating #{table_name} ..."
|
p "Truncating #{table_name} ..."
|
||||||
ActiveRecord::Base.connection.execute "TRUNCATE TABLE #{table_name}"
|
ActiveRecord::Base.connection.execute "DELETE FROM #{table_name}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Import data from a WordPress XML dump"
|
|
||||||
|
desc "import blog data from a Refinery::WordPress XML dump"
|
||||||
|
task :import_blog, :file_name do |task, params|
|
||||||
|
Rake::Task["environment"].invoke
|
||||||
|
dump = Refinery::WordPress::Dump.new(params[:file_name])
|
||||||
|
|
||||||
|
dump.authors.each(&:to_refinery)
|
||||||
|
dump.posts.each(&:to_refinery)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
desc "Import data from a Refinery::WordPress XML dump"
|
||||||
task :import, :file_name do |task, params|
|
task :import, :file_name do |task, params|
|
||||||
Rake::Task["environment"].invoke
|
Rake::Task["environment"].invoke
|
||||||
|
|
||||||
file_name = File.absolute_path(params[:file_name])
|
|
||||||
unless File.file?(file_name) && File.readable?(file_name)
|
|
||||||
raise "Given file '#{file_name}' no file or not readable."
|
|
||||||
end
|
|
||||||
|
|
||||||
file = File.open(file_name)
|
|
||||||
doc = Nokogiri::XML(file)
|
|
||||||
file.close
|
|
||||||
|
|
||||||
p "Importing blog categories ..."
|
|
||||||
doc.xpath("//wp:category/wp:cat_name").each do |category|
|
|
||||||
BlogCategory.exists?(:title => category.text) || BlogCategory.create!(:title => category.text)
|
|
||||||
end
|
|
||||||
|
|
||||||
doc.xpath("//wp:tag/wp:tag_slug").each do |tag|
|
|
||||||
p tag.text
|
|
||||||
end
|
|
||||||
|
|
||||||
doc.xpath("//item[wp:post_type = 'page']").each do |post|
|
|
||||||
title = post.xpath("title").text
|
|
||||||
body = post.xpath("content:encoded").text
|
|
||||||
author = post.xpath("dc:creator").text
|
|
||||||
published_at = DateTime.parse(post.xpath("wp:post_date").text)
|
|
||||||
|
|
||||||
tags = post.xpath("category[@domain='tag'][not(@nicename)]").collect {|tag| tag.text }
|
|
||||||
tag_list = tags.join(', ')
|
|
||||||
|
|
||||||
categories = post.xpath("category[not(@*)]").collect {|cat| cat.text }
|
|
||||||
|
|
||||||
|
|
||||||
p '*' * 100
|
|
||||||
p title
|
|
||||||
p author
|
|
||||||
p published_at
|
|
||||||
p tag_list
|
|
||||||
p categories
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "New import (testing)"
|
desc "New import (testing)"
|
||||||
|
@ -64,7 +44,7 @@ namespace :wordpress do
|
||||||
raise "Given file '#{file_name}' no file or not readable."
|
raise "Given file '#{file_name}' no file or not readable."
|
||||||
end
|
end
|
||||||
|
|
||||||
dump = WordPress::Dump.new(file_name)
|
dump = Refinery::WordPress::Dump.new(file_name)
|
||||||
p dump.authors
|
p dump.authors
|
||||||
p dump.pages
|
p dump.pages
|
||||||
dump.posts.each do |post|
|
dump.posts.each do |post|
|
||||||
|
@ -77,7 +57,7 @@ namespace :wordpress do
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
desc "Import data from a WordPress XML dump into a clean database (reset first)"
|
desc "Import data from a Refinery::WordPress XML dump into a clean database (reset first)"
|
||||||
task :import_clean, :file_name do |task, params|
|
task :import_clean, :file_name do |task, params|
|
||||||
Rake::Task["wordpress:reset"].invoke
|
Rake::Task["wordpress:reset"].invoke
|
||||||
Rake::Task["wordpress:import"].invoke(params[:file_name])
|
Rake::Task["wordpress:import"].invoke(params[:file_name])
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
module WordPress
|
module Refinery
|
||||||
|
module WordPress
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
require 'nokogiri'
|
||||||
require 'wordpress/author'
|
require 'wordpress/author'
|
||||||
require 'wordpress/tag'
|
require 'wordpress/tag'
|
||||||
require 'wordpress/category'
|
require 'wordpress/category'
|
||||||
|
@ -9,3 +11,5 @@ require 'wordpress/page'
|
||||||
require 'wordpress/post'
|
require 'wordpress/post'
|
||||||
require 'wordpress/comment'
|
require 'wordpress/comment'
|
||||||
require 'wordpress/dump'
|
require 'wordpress/dump'
|
||||||
|
|
||||||
|
require "wordpress/railtie"
|
||||||
|
|
|
@ -1,35 +1,37 @@
|
||||||
module WordPress
|
module Refinery
|
||||||
class Author
|
module WordPress
|
||||||
attr_reader :author_node
|
class Author
|
||||||
|
attr_reader :author_node
|
||||||
|
|
||||||
def initialize(author_node)
|
def initialize(author_node)
|
||||||
@author_node = author_node
|
@author_node = author_node
|
||||||
end
|
end
|
||||||
|
|
||||||
def login
|
def login
|
||||||
author_node.xpath("wp:author_login").text
|
author_node.xpath("wp:author_login").text
|
||||||
end
|
end
|
||||||
|
|
||||||
def email
|
def email
|
||||||
author_node.xpath("wp:author_email").text
|
author_node.xpath("wp:author_email").text
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other)
|
def ==(other)
|
||||||
login == other.login
|
login == other.login
|
||||||
end
|
end
|
||||||
|
|
||||||
def inspect
|
def inspect
|
||||||
"WordPress::Author: #{login} <#{email}>"
|
"WordPress::Author: #{login} <#{email}>"
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_refinery
|
def to_refinery
|
||||||
user = User.find_or_initialize_by_username_and_email(login, email)
|
user = User.find_or_initialize_by_username_and_email(login, email)
|
||||||
unless user.persisted?
|
unless user.persisted?
|
||||||
user.password = 'password'
|
user.password = 'password'
|
||||||
user.password_confirmation = 'password'
|
user.password_confirmation = 'password'
|
||||||
user.save
|
user.save
|
||||||
|
end
|
||||||
|
user
|
||||||
end
|
end
|
||||||
user
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
module WordPress
|
module Refinery
|
||||||
class Category
|
module WordPress
|
||||||
attr_accessor :name
|
class Category
|
||||||
|
attr_accessor :name
|
||||||
|
|
||||||
def initialize(text)
|
def initialize(text)
|
||||||
@name = text
|
@name = text
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other)
|
def ==(other)
|
||||||
name == other.name
|
name == other.name
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_refinery
|
def to_refinery
|
||||||
BlogCategory.find_or_create_by_title(name)
|
BlogCategory.find_or_create_by_title(name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,46 +1,48 @@
|
||||||
module WordPress
|
module Refinery
|
||||||
class Comment
|
module WordPress
|
||||||
attr_reader :node
|
class Comment
|
||||||
|
attr_reader :node
|
||||||
|
|
||||||
def initialize(node)
|
def initialize(node)
|
||||||
@node = node
|
@node = node
|
||||||
end
|
end
|
||||||
|
|
||||||
def author
|
def author
|
||||||
node.xpath('wp:comment_author').text
|
node.xpath('wp:comment_author').text
|
||||||
end
|
end
|
||||||
|
|
||||||
def email
|
def email
|
||||||
node.xpath('wp:comment_author_email').text
|
node.xpath('wp:comment_author_email').text
|
||||||
end
|
end
|
||||||
|
|
||||||
def url
|
def url
|
||||||
node.xpath('wp:comment_author_url').text
|
node.xpath('wp:comment_author_url').text
|
||||||
end
|
end
|
||||||
|
|
||||||
def date
|
def date
|
||||||
DateTime.parse node.xpath("wp:comment_date").text
|
DateTime.parse node.xpath("wp:comment_date").text
|
||||||
end
|
end
|
||||||
|
|
||||||
def content
|
def content
|
||||||
node.xpath('wp:comment_content').text
|
node.xpath('wp:comment_content').text
|
||||||
end
|
end
|
||||||
|
|
||||||
def approved?
|
def approved?
|
||||||
node.xpath('wp:comment_approved').text.to_i == 1
|
node.xpath('wp:comment_approved').text.to_i == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other)
|
def ==(other)
|
||||||
(email == other.email) && (date == other.date) && (content == other.content)
|
(email == other.email) && (date == other.date) && (content == other.content)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_refinery
|
def to_refinery
|
||||||
comment = BlogComment.new :name => author, :email => email
|
comment = BlogComment.new :name => author, :email => email
|
||||||
|
|
||||||
comment.body = content
|
comment.body = content
|
||||||
comment.created_at = date
|
comment.created_at = date
|
||||||
comment.state = approved? ? 'approved' : 'rejected'
|
comment.state = approved? ? 'approved' : 'rejected'
|
||||||
comment
|
comment
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,41 +1,46 @@
|
||||||
require 'nokogiri'
|
module Refinery
|
||||||
|
module WordPress
|
||||||
|
class Dump
|
||||||
|
attr_reader :doc
|
||||||
|
|
||||||
module WordPress
|
def initialize(file_name)
|
||||||
class Dump
|
file_name = File.absolute_path(file_name)
|
||||||
attr_reader :doc
|
|
||||||
|
|
||||||
def initialize(file_name)
|
raise "Given file '#{file_name}' no file or not readable." \
|
||||||
file = File.open(file_name)
|
unless File.file?(file_name) && File.readable?(file_name)
|
||||||
@doc = Nokogiri::XML(file)
|
|
||||||
end
|
file = File.open(file_name)
|
||||||
|
@doc = Nokogiri::XML(file)
|
||||||
def authors
|
|
||||||
doc.xpath("//wp:author").collect do |author|
|
|
||||||
WordPress::Author.new(author)
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def pages
|
def authors
|
||||||
doc.xpath("//item[wp:post_type = 'page']").collect do |page|
|
doc.xpath("//wp:author").collect do |author|
|
||||||
WordPress::Page.new(page)
|
Author.new(author)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def posts
|
def pages
|
||||||
doc.xpath("//item[wp:post_type = 'post']").collect do |post|
|
doc.xpath("//item[wp:post_type = 'page']").collect do |page|
|
||||||
WordPress::Post.new(post)
|
Page.new(page)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def tags
|
def posts
|
||||||
doc.xpath("//wp:tag/wp:tag_slug").collect do |tag|
|
doc.xpath("//item[wp:post_type = 'post']").collect do |post|
|
||||||
WordPress::Tag.new(tag.text)
|
Post.new(post)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def categories
|
def tags
|
||||||
doc.xpath("//wp:category/wp:cat_name").collect do |category|
|
doc.xpath("//wp:tag/wp:tag_slug").collect do |tag|
|
||||||
WordPress::Category.new(category.text)
|
Tag.new(tag.text)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def categories
|
||||||
|
doc.xpath("//wp:category/wp:cat_name").collect do |category|
|
||||||
|
Category.new(category.text)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,57 +1,59 @@
|
||||||
module WordPress
|
module Refinery
|
||||||
class Page
|
module WordPress
|
||||||
attr_reader :node
|
class Page
|
||||||
|
attr_reader :node
|
||||||
def initialize(node)
|
|
||||||
@node = node
|
|
||||||
end
|
|
||||||
|
|
||||||
def inspect
|
def initialize(node)
|
||||||
"WordPress::Page(#{post_id}): #{title}"
|
@node = node
|
||||||
end
|
end
|
||||||
|
|
||||||
def title
|
def inspect
|
||||||
node.xpath("title").text
|
"WordPress::Page(#{post_id}): #{title}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def content
|
def title
|
||||||
node.xpath("content:encoded").text
|
node.xpath("title").text
|
||||||
end
|
end
|
||||||
|
|
||||||
def creator
|
def content
|
||||||
node.xpath("dc:creator").text
|
node.xpath("content:encoded").text
|
||||||
end
|
end
|
||||||
|
|
||||||
def post_date
|
def creator
|
||||||
DateTime.parse node.xpath("wp:post_date").text
|
node.xpath("dc:creator").text
|
||||||
end
|
end
|
||||||
|
|
||||||
def post_id
|
def post_date
|
||||||
node.xpath("wp:post_id").text.to_i
|
DateTime.parse node.xpath("wp:post_date").text
|
||||||
end
|
end
|
||||||
|
|
||||||
def parent_id
|
def post_id
|
||||||
node.xpath("wp:post_parent").text.to_i
|
node.xpath("wp:post_id").text.to_i
|
||||||
end
|
end
|
||||||
|
|
||||||
def status
|
def parent_id
|
||||||
node.xpath("wp:status").text
|
node.xpath("wp:post_parent").text.to_i
|
||||||
end
|
end
|
||||||
|
|
||||||
def draft?
|
def status
|
||||||
status != 'publish'
|
node.xpath("wp:status").text
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other)
|
def draft?
|
||||||
post_id == other.post_id
|
status != 'publish'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_refinery
|
def ==(other)
|
||||||
page = ::Page.create!(:title => title, :created_at => post_date,
|
post_id == other.post_id
|
||||||
:draft => draft?, :parent_id => parent_id)
|
end
|
||||||
|
|
||||||
page.parts.create(:title => 'Body', :body => content)
|
def to_refinery
|
||||||
page
|
page = ::Page.create!(:title => title, :created_at => post_date,
|
||||||
|
:draft => draft?, :parent_id => parent_id)
|
||||||
|
|
||||||
|
page.parts.create(:title => 'Body', :body => content)
|
||||||
|
page
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,49 +1,54 @@
|
||||||
module WordPress
|
module Refinery
|
||||||
class Post < Page
|
module WordPress
|
||||||
def tags
|
class Post < Page
|
||||||
node.xpath("category[@domain='post_tag']").collect do |tag_node|
|
def tags
|
||||||
WordPress::Tag.new(tag_node.text)
|
node.xpath("category[@domain='post_tag']").collect do |tag_node|
|
||||||
end
|
Tag.new(tag_node.text)
|
||||||
end
|
|
||||||
|
|
||||||
def tag_list
|
|
||||||
tags.collect(&:name).join(',')
|
|
||||||
end
|
|
||||||
|
|
||||||
def categories
|
|
||||||
node.xpath("category[@domain='category']").collect do |cat|
|
|
||||||
WordPress::Category.new(cat.text)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def comments
|
|
||||||
node.xpath("wp:comment").collect do |comment_node|
|
|
||||||
WordPress::Comment.new(comment_node)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def to_refinery
|
|
||||||
user = User.find_by_username creator
|
|
||||||
raise "Referenced User doesn't exist! Make sure the authors are imported first." \
|
|
||||||
unless user
|
|
||||||
|
|
||||||
post = BlogPost.create! :title => title, :body => content, :draft => draft?,
|
|
||||||
:published_at => post_date, :created_at => post_date, :author => user,
|
|
||||||
:tag_list => tag_list
|
|
||||||
|
|
||||||
BlogPost.transaction do
|
|
||||||
categories.each do |category|
|
|
||||||
post.categories << category.to_refinery
|
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def tag_list
|
||||||
|
tags.collect(&:name).join(',')
|
||||||
|
end
|
||||||
|
|
||||||
|
def categories
|
||||||
|
node.xpath("category[@domain='category']").collect do |cat|
|
||||||
|
Category.new(cat.text)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def comments
|
||||||
|
node.xpath("wp:comment").collect do |comment_node|
|
||||||
|
Comment.new(comment_node)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_refinery
|
||||||
|
user = ::User.find_by_username creator
|
||||||
|
raise "Referenced User doesn't exist! Make sure the authors are imported first." \
|
||||||
|
unless user
|
||||||
|
|
||||||
|
post = BlogPost.new
|
||||||
|
|
||||||
comments.each do |comment|
|
|
||||||
comment = comment.to_refinery
|
|
||||||
comment.post = post
|
|
||||||
comment.save
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
post
|
post = ::BlogPost.create! :title => title, :body => content, :draft => draft?,
|
||||||
|
:published_at => post_date, :created_at => post_date, :author => user,
|
||||||
|
:tag_list => tag_list
|
||||||
|
|
||||||
|
::BlogPost.transaction do
|
||||||
|
categories.each do |category|
|
||||||
|
post.categories << category.to_refinery
|
||||||
|
end
|
||||||
|
|
||||||
|
comments.each do |comment|
|
||||||
|
comment = comment.to_refinery
|
||||||
|
comment.post = post
|
||||||
|
comment.save
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
post
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
10
lib/wordpress/railtie.rb
Normal file
10
lib/wordpress/railtie.rb
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
module Refinery
|
||||||
|
module WordPress
|
||||||
|
class Railtie < Rails::Railtie
|
||||||
|
rake_tasks do
|
||||||
|
load "tasks/wordpress.rake"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -1,18 +1,20 @@
|
||||||
module WordPress
|
module Refinery
|
||||||
class Tag
|
module WordPress
|
||||||
attr_accessor :name
|
class Tag
|
||||||
|
attr_accessor :name
|
||||||
|
|
||||||
def initialize(text)
|
def initialize(text)
|
||||||
@name = text
|
@name = text
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other)
|
def ==(other)
|
||||||
name == other.name
|
name == other.name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def to_refinery
|
||||||
|
::ActsAsTaggableOn::Tag.find_or_create_by_name(name)
|
||||||
|
end
|
||||||
|
|
||||||
def to_refinery
|
|
||||||
ActsAsTaggableOn::Tag.find_or_create_by_name(name)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,13 +1,19 @@
|
||||||
# Provide a simple gemspec so you can easily use your enginex
|
# Provide a simple gemspec so you can easily use your enginex
|
||||||
# project in your rails apps through git.
|
# project in your rails apps through git.
|
||||||
Gem::Specification.new do |s|
|
Gem::Specification.new do |s|
|
||||||
s.name = "refinerycms-wordpress-import"
|
s.name = "refinerycms-wordpress-import"
|
||||||
s.summary = "Import WordPress XML dumps into refinerycms(-blog)."
|
s.summary = "Import WordPress XML dumps into refinerycms(-blog)."
|
||||||
s.description = "Insert Refinerycms-wordpress-import description."
|
s.description = "This gem imports a WordPress Dump into refinerycms (Page, User) and refinerycms-blog (BlogPost, BlogCategory, Tag, BlogComment)"
|
||||||
s.files = Dir["{app,lib,config}/**/*"] + ["MIT-LICENSE", "Rakefile", "Gemfile", "README.rdoc"]
|
s.version = "0.0.1"
|
||||||
s.version = "0.0.1"
|
s.authors = ['Marc Remolt']
|
||||||
|
s.date = "2011-06-02"
|
||||||
|
|
||||||
s.add_dependency 'refinerycms', '~> 1.0.0'
|
s.add_dependency 'refinerycms', '~> 1.0.0'
|
||||||
s.add_dependency 'refinerycms-blog', '~> 1.3.2'
|
s.add_dependency 'refinerycms-blog', '~> 1.5.2'
|
||||||
s.add_dependency 'nokogiri', '~> 1.4.4'
|
s.add_dependency 'nokogiri', '~> 1.4.4'
|
||||||
|
#s.add_dependency 'acts-as-taggable-on'
|
||||||
|
|
||||||
|
s.add_development_dependency 'database_cleaner'
|
||||||
|
|
||||||
|
s.files = Dir["{app,lib,config}/**/*"] + ["MIT-LICENSE", "Rakefile", "Gemfile", "README.rdoc"]
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
require File.expand_path('../boot', __FILE__)
|
require File.expand_path('../boot', __FILE__)
|
||||||
|
|
||||||
require "active_model/railtie"
|
require 'rails/all'
|
||||||
require "active_record/railtie"
|
|
||||||
require "action_controller/railtie"
|
|
||||||
require "action_view/railtie"
|
|
||||||
require "action_mailer/railtie"
|
|
||||||
|
|
||||||
Bundler.require
|
Bundler.require
|
||||||
require "refinerycms_wordpress_import"
|
|
||||||
|
|
||||||
module Dummy
|
module Dummy
|
||||||
class Application < Rails::Application
|
class Application < Rails::Application
|
||||||
|
|
|
@ -6,5 +6,3 @@ if File.exist?(gemfile)
|
||||||
require 'bundler'
|
require 'bundler'
|
||||||
Bundler.setup
|
Bundler.setup
|
||||||
end
|
end
|
||||||
|
|
||||||
$:.unshift File.expand_path('../../../../lib', __FILE__)
|
|
20
spec/dummy/config/database.yml.mysql
Normal file
20
spec/dummy/config/database.yml.mysql
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
login: &login
|
||||||
|
adapter: mysql2
|
||||||
|
host: localhost
|
||||||
|
username: root
|
||||||
|
password:
|
||||||
|
|
||||||
|
development: &development
|
||||||
|
database: your_local_database
|
||||||
|
<<: *login
|
||||||
|
|
||||||
|
test: &test
|
||||||
|
database: your_test_database
|
||||||
|
<<: *login
|
||||||
|
|
||||||
|
production: &production
|
||||||
|
adapter: mysql2
|
||||||
|
host: localhost
|
||||||
|
database: your_production_database
|
||||||
|
username: your_production_database_login
|
||||||
|
password: your_production_database_password
|
57
spec/dummy/config/database.yml.postgresql
Normal file
57
spec/dummy/config/database.yml.postgresql
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# PostgreSQL. Versions 7.4 and 8.x are supported.
|
||||||
|
#
|
||||||
|
# Install the ruby-postgres driver:
|
||||||
|
# gem install ruby-postgres
|
||||||
|
# On Mac OS X:
|
||||||
|
# gem install ruby-postgres -- --include=/usr/local/pgsql
|
||||||
|
# On Windows:
|
||||||
|
# gem install ruby-postgres
|
||||||
|
# Choose the win32 build.
|
||||||
|
# Install PostgreSQL and put its /bin directory on your path.
|
||||||
|
login: &login
|
||||||
|
adapter: postgresql
|
||||||
|
encoding: unicode
|
||||||
|
username: postgres
|
||||||
|
password: postgres
|
||||||
|
pool: 5
|
||||||
|
|
||||||
|
development: &development
|
||||||
|
database: your_local_database
|
||||||
|
<<: *login
|
||||||
|
|
||||||
|
# Connect on a TCP socket. Omitted by default since the client uses a
|
||||||
|
# domain socket that doesn't need configuration. Windows does not have
|
||||||
|
# domain sockets, so uncomment these lines.
|
||||||
|
#host: localhost
|
||||||
|
#port: 5432
|
||||||
|
|
||||||
|
# Schema search path. The server defaults to $user,public
|
||||||
|
#schema_search_path: myapp,sharedapp,public
|
||||||
|
|
||||||
|
# Minimum log levels, in increasing order:
|
||||||
|
# debug5, debug4, debug3, debug2, debug1,
|
||||||
|
# log, notice, warning, error, fatal, and panic
|
||||||
|
# The server defaults to notice.
|
||||||
|
#min_messages: warning
|
||||||
|
|
||||||
|
# Warning: The database defined as "test" will be erased and
|
||||||
|
# re-generated from your development database when you run "rake".
|
||||||
|
# Do not set this db to the same as development or production.
|
||||||
|
test: &test
|
||||||
|
database: your_test_database
|
||||||
|
<<: *login
|
||||||
|
|
||||||
|
# Warning: The database defined as "cucumber" will be erased and
|
||||||
|
# re-generated from your development database when you run "rake".
|
||||||
|
# Do not set this db to the same as development or production.
|
||||||
|
cucumber: &cucumber
|
||||||
|
database: your_cucumber_database
|
||||||
|
<<: *login
|
||||||
|
|
||||||
|
production: &production
|
||||||
|
adapter: postgresql
|
||||||
|
encoding: unicode
|
||||||
|
pool: 5
|
||||||
|
database: your_production_database
|
||||||
|
username: your_production_database_login
|
||||||
|
password: your_production_database_password
|
26
spec/dummy/config/database.yml.sqlite3
Normal file
26
spec/dummy/config/database.yml.sqlite3
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# SQLite version 3.x
|
||||||
|
development:
|
||||||
|
adapter: <%= "jdbc" if defined?(JRUBY_PLATFORM) %>sqlite3
|
||||||
|
database: db/development.sqlite3
|
||||||
|
timeout: 5000
|
||||||
|
|
||||||
|
# Warning: The database defined as 'test' will be erased and
|
||||||
|
# re-generated from your development database when you run 'rake'.
|
||||||
|
# Do not set this db to the same as development or production.
|
||||||
|
test:
|
||||||
|
adapter: <%= "jdbc" if defined?(JRUBY_PLATFORM) %>sqlite3
|
||||||
|
database: db/test.sqlite3
|
||||||
|
timeout: 5000
|
||||||
|
|
||||||
|
# Warning: The database defined as 'cucumber' will be erased and
|
||||||
|
# re-generated from your development database when you run 'rake'.
|
||||||
|
# Do not set this db to the same as development or production.
|
||||||
|
cucumber:
|
||||||
|
adapter: <%= "jdbc" if defined?(JRUBY_PLATFORM) %>sqlite3
|
||||||
|
database: db/cucumber.sqlite3
|
||||||
|
timeout: 5000
|
||||||
|
|
||||||
|
production:
|
||||||
|
adapter: <%= "jdbc" if defined?(JRUBY_PLATFORM) %>sqlite3
|
||||||
|
database: db/production.sqlite3
|
||||||
|
timeout: 5000
|
|
@ -0,0 +1,28 @@
|
||||||
|
class ActsAsTaggableOnMigration < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
create_table :tags do |t|
|
||||||
|
t.string :name
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table :taggings do |t|
|
||||||
|
t.references :tag
|
||||||
|
|
||||||
|
# You should make sure that the column created is
|
||||||
|
# long enough to store the required class names.
|
||||||
|
t.references :taggable, :polymorphic => true
|
||||||
|
t.references :tagger, :polymorphic => true
|
||||||
|
|
||||||
|
t.string :context
|
||||||
|
|
||||||
|
t.datetime :created_at
|
||||||
|
end
|
||||||
|
|
||||||
|
add_index :taggings, :tag_id
|
||||||
|
add_index :taggings, [:taggable_id, :taggable_type, :context]
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
drop_table :taggings
|
||||||
|
drop_table :tags
|
||||||
|
end
|
||||||
|
end
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# It's strongly recommended to check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(:version => 20110601190333) do
|
ActiveRecord::Schema.define(:version => 20110602094445) do
|
||||||
|
|
||||||
create_table "blog_categories", :force => true do |t|
|
create_table "blog_categories", :force => true do |t|
|
||||||
t.string "title"
|
t.string "title"
|
||||||
|
@ -184,6 +184,23 @@ ActiveRecord::Schema.define(:version => 20110601190333) do
|
||||||
add_index "slugs", ["name", "sluggable_type", "scope", "sequence"], :name => "index_slugs_on_n_s_s_and_s", :unique => true
|
add_index "slugs", ["name", "sluggable_type", "scope", "sequence"], :name => "index_slugs_on_n_s_s_and_s", :unique => true
|
||||||
add_index "slugs", ["sluggable_id"], :name => "index_slugs_on_sluggable_id"
|
add_index "slugs", ["sluggable_id"], :name => "index_slugs_on_sluggable_id"
|
||||||
|
|
||||||
|
create_table "taggings", :force => true do |t|
|
||||||
|
t.integer "tag_id"
|
||||||
|
t.integer "taggable_id"
|
||||||
|
t.string "taggable_type"
|
||||||
|
t.integer "tagger_id"
|
||||||
|
t.string "tagger_type"
|
||||||
|
t.string "context"
|
||||||
|
t.datetime "created_at"
|
||||||
|
end
|
||||||
|
|
||||||
|
add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
|
||||||
|
add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
|
||||||
|
|
||||||
|
create_table "tags", :force => true do |t|
|
||||||
|
t.string "name"
|
||||||
|
end
|
||||||
|
|
||||||
create_table "user_plugins", :force => true do |t|
|
create_table "user_plugins", :force => true do |t|
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.string "name"
|
t.string "name"
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
require 'wordpress'
|
|
||||||
|
|
||||||
describe WordPress::Dump, :type => :model do
|
describe Refinery::WordPress::Dump, :type => :model do
|
||||||
let(:file_name) { File.realpath(File.join(File.dirname(__FILE__), '../../fixtures/wordpress_dump.xml')) }
|
let(:file_name) { File.realpath(File.join(File.dirname(__FILE__), '../../fixtures/wordpress_dump.xml')) }
|
||||||
let(:dump) { WordPress::Dump.new(file_name) }
|
let(:dump) { Refinery::WordPress::Dump.new(file_name) }
|
||||||
|
|
||||||
it "should create a Dump object given a xml file" do
|
it "should create a Dump object given a xml file" do
|
||||||
dump.should be_a WordPress::Dump
|
dump.should be_a Refinery::WordPress::Dump
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should include a Nokogiri::XML object" do
|
it "should include a Nokogiri::XML object" do
|
||||||
|
@ -15,8 +14,8 @@ describe WordPress::Dump, :type => :model do
|
||||||
|
|
||||||
describe "#tags" do
|
describe "#tags" do
|
||||||
let(:tags) do
|
let(:tags) do
|
||||||
[ WordPress::Tag.new('css'), WordPress::Tag.new('html'),
|
[ Refinery::WordPress::Tag.new('css'), Refinery::WordPress::Tag.new('html'),
|
||||||
WordPress::Tag.new('php'), WordPress::Tag.new('ruby')]
|
Refinery::WordPress::Tag.new('php'), Refinery::WordPress::Tag.new('ruby')]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return all included tags" do
|
it "should return all included tags" do
|
||||||
|
@ -34,7 +33,7 @@ describe WordPress::Dump, :type => :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should create a ActsAsTaggableOn::Tag" do
|
it "should create a ActsAsTaggableOn::Tag" do
|
||||||
ActsAsTaggableOn::Tag.should have(1).record
|
::ActsAsTaggableOn::Tag.should have(1).record
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should copy the name over to the Tag object" do
|
it "should copy the name over to the Tag object" do
|
||||||
|
@ -46,8 +45,8 @@ describe WordPress::Dump, :type => :model do
|
||||||
|
|
||||||
describe "#categories" do
|
describe "#categories" do
|
||||||
let(:categories) do
|
let(:categories) do
|
||||||
[ WordPress::Category.new('Rant'), WordPress::Category.new('Tutorials'),
|
[ Refinery::WordPress::Category.new('Rant'), Refinery::WordPress::Category.new('Tutorials'),
|
||||||
WordPress::Category.new('Uncategorized') ]
|
Refinery::WordPress::Category.new('Uncategorized') ]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return all included categories" do
|
it "should return all included categories" do
|
||||||
|
@ -108,7 +107,7 @@ describe WordPress::Dump, :type => :model do
|
||||||
Page.should have(@count + 1).record
|
Page.should have(@count + 1).record
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should copy the attributes from WordPress::Page" do
|
it "should copy the attributes from Refinery::WordPress::Page" do
|
||||||
@page.title.should == page.title
|
@page.title.should == page.title
|
||||||
@page.draft.should == page.draft?
|
@page.draft.should == page.draft?
|
||||||
@page.created_at.should == page.post_date
|
@page.created_at.should == page.post_date
|
||||||
|
@ -143,7 +142,7 @@ describe WordPress::Dump, :type => :model do
|
||||||
@user.should be_persisted
|
@user.should be_persisted
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should have copied the attributes from WordPress::Author" do
|
it "should have copied the attributes from Refinery::WordPress::Author" do
|
||||||
author.login.should == @user.username
|
author.login.should == @user.username
|
||||||
author.email.should == @user.email
|
author.email.should == @user.email
|
||||||
end
|
end
|
||||||
|
@ -172,15 +171,15 @@ describe WordPress::Dump, :type => :model do
|
||||||
|
|
||||||
describe "#categories" do
|
describe "#categories" do
|
||||||
it { post.categories.should have(1).category }
|
it { post.categories.should have(1).category }
|
||||||
it { post.categories.first.should == WordPress::Category.new('Rant') }
|
it { post.categories.first.should == Refinery::WordPress::Category.new('Rant') }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#tags" do
|
describe "#tags" do
|
||||||
it { post.tags.should have(3).tags }
|
it { post.tags.should have(3).tags }
|
||||||
|
|
||||||
it { post.tags.should include(WordPress::Tag.new('css')) }
|
it { post.tags.should include(Refinery::WordPress::Tag.new('css')) }
|
||||||
it { post.tags.should include(WordPress::Tag.new('html')) }
|
it { post.tags.should include(Refinery::WordPress::Tag.new('html')) }
|
||||||
it { post.tags.should include(WordPress::Tag.new('php')) }
|
it { post.tags.should include(Refinery::WordPress::Tag.new('php')) }
|
||||||
end
|
end
|
||||||
|
|
||||||
it { post.tag_list.should == 'css,html,php' }
|
it { post.tag_list.should == 'css,html,php' }
|
||||||
|
@ -212,7 +211,7 @@ describe WordPress::Dump, :type => :model do
|
||||||
@comment.should be_new_record
|
@comment.should be_new_record
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should copy the attributes from WordPress::Comment" do
|
it "should copy the attributes from Refinery::WordPress::Comment" do
|
||||||
@comment.name.should == comment.author
|
@comment.name.should == comment.author
|
||||||
@comment.email.should == comment.email
|
@comment.email.should == comment.email
|
||||||
@comment.body.should == comment.content
|
@comment.body.should == comment.content
|
||||||
|
@ -233,7 +232,7 @@ describe WordPress::Dump, :type => :model do
|
||||||
|
|
||||||
it { BlogPost.should have(1).record }
|
it { BlogPost.should have(1).record }
|
||||||
|
|
||||||
it "should copy the attributes from WordPress::Page" do
|
it "should copy the attributes from Refinery::WordPress::Page" do
|
||||||
@post.title.should == post.title
|
@post.title.should == post.title
|
||||||
@post.body.should == post.content
|
@post.body.should == post.content
|
||||||
@post.draft.should == post.draft?
|
@post.draft.should == post.draft?
|
||||||
|
@ -242,11 +241,11 @@ describe WordPress::Dump, :type => :model do
|
||||||
@post.author.username.should == post.creator
|
@post.author.username.should == post.creator
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should assign a category for each WordPress::Category" do
|
it "should assign a category for each Refinery::WordPress::Category" do
|
||||||
@post.categories.should have(post.categories.count).records
|
@post.categories.should have(post.categories.count).records
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should assign a comment for each WordPress::Comment" do
|
it "should assign a comment for each Refinery::WordPress::Comment" do
|
||||||
@post.comments.should have(post.comments.count).records
|
@post.comments.should have(post.comments.count).records
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ ENV["RAILS_ENV"] = "test"
|
||||||
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
||||||
require "rails/test_help"
|
require "rails/test_help"
|
||||||
require "rspec/rails"
|
require "rspec/rails"
|
||||||
|
require "database_cleaner"
|
||||||
|
|
||||||
ActionMailer::Base.delivery_method = :test
|
ActionMailer::Base.delivery_method = :test
|
||||||
ActionMailer::Base.perform_deliveries = true
|
ActionMailer::Base.perform_deliveries = true
|
||||||
|
@ -25,4 +26,17 @@ RSpec.configure do |config|
|
||||||
|
|
||||||
# == Mock Framework
|
# == Mock Framework
|
||||||
config.mock_with :rspec
|
config.mock_with :rspec
|
||||||
|
|
||||||
|
config.before(:suite) do
|
||||||
|
DatabaseCleaner.strategy = :transaction
|
||||||
|
DatabaseCleaner.clean_with(:truncation)
|
||||||
|
end
|
||||||
|
|
||||||
|
config.before(:each) do
|
||||||
|
DatabaseCleaner.start
|
||||||
|
end
|
||||||
|
|
||||||
|
config.after(:each) do
|
||||||
|
DatabaseCleaner.clean
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user