Conversion in a gem finished

* specs are working again
* added railitie
* added missing migration (acts-as-taggable)
* cleanups
This commit is contained in:
Marc Remolt 2011-06-02 14:41:31 +02:00
parent dae4c2ea0a
commit a45f502f44
25 changed files with 476 additions and 285 deletions

1
.rspec Normal file
View File

@ -0,0 +1 @@
--color

View File

@ -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 => './'

View File

@ -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

View File

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

View File

@ -1,8 +1,7 @@
require 'refinerycms'
require 'refinerycms-blog'
module Refinery module Refinery
module WordPress module WordPress
end end
end end
require 'wordpress'

View File

@ -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])

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
def authors file = File.open(file_name)
doc.xpath("//wp:author").collect do |author| @doc = Nokogiri::XML(file)
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

View File

@ -1,57 +1,59 @@
module WordPress module Refinery
class Page module WordPress
attr_reader :node class Page
attr_reader :node
def initialize(node) def initialize(node)
@node = node @node = node
end end
def inspect def inspect
"WordPress::Page(#{post_id}): #{title}" "WordPress::Page(#{post_id}): #{title}"
end end
def title def title
node.xpath("title").text node.xpath("title").text
end end
def content def content
node.xpath("content:encoded").text node.xpath("content:encoded").text
end end
def creator def creator
node.xpath("dc:creator").text node.xpath("dc:creator").text
end 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
def post_id def post_id
node.xpath("wp:post_id").text.to_i node.xpath("wp:post_id").text.to_i
end end
def parent_id def parent_id
node.xpath("wp:post_parent").text.to_i node.xpath("wp:post_parent").text.to_i
end end
def status def status
node.xpath("wp:status").text node.xpath("wp:status").text
end end
def draft? def draft?
status != 'publish' status != 'publish'
end end
def ==(other) def ==(other)
post_id == other.post_id post_id == other.post_id
end end
def to_refinery def to_refinery
page = ::Page.create!(:title => title, :created_at => post_date, page = ::Page.create!(:title => title, :created_at => post_date,
:draft => draft?, :parent_id => parent_id) :draft => draft?, :parent_id => parent_id)
page.parts.create(:title => 'Body', :body => content) page.parts.create(:title => 'Body', :body => content)
page page
end
end end
end end
end end

View File

@ -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
comments.each do |comment|
comment = comment.to_refinery
comment.post = post
comment.save
end end
end end
post 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
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
View File

@ -0,0 +1,10 @@
module Refinery
module WordPress
class Railtie < Rails::Railtie
rake_tasks do
load "tasks/wordpress.rake"
end
end
end
end

View File

@ -1,18 +1,20 @@
module WordPress module Refinery
class Tag module WordPress
attr_accessor :name class Tag
attr_accessor :name
def initialize(text)
@name = text
end
def ==(other)
name == other.name
end
def to_refinery
::ActsAsTaggableOn::Tag.find_or_create_by_name(name)
end
def initialize(text)
@name = text
end end
def ==(other)
name == other.name
end
def to_refinery
ActsAsTaggableOn::Tag.find_or_create_by_name(name)
end
end end
end end

View File

@ -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

View File

@ -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

View File

@ -6,5 +6,3 @@ if File.exist?(gemfile)
require 'bundler' require 'bundler'
Bundler.setup Bundler.setup
end end
$:.unshift File.expand_path('../../../../lib', __FILE__)

View 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

View 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

View 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

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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