From a45f502f4448dd799e8cfbb803c87fdd4cf95aa1 Mon Sep 17 00:00:00 2001 From: Marc Remolt Date: Thu, 2 Jun 2011 14:41:31 +0200 Subject: [PATCH] Conversion in a gem finished * specs are working again * added railitie * added missing migration (acts-as-taggable) * cleanups --- .rspec | 1 + Gemfile | 3 + Gemfile.lock | 13 ++- lib/refinerycms-wordpress-import.rb | 7 ++ lib/refinerycms_wordpress_import.rb | 5 +- lib/tasks/wordpress.rake | 68 +++++--------- lib/wordpress.rb | 8 +- lib/wordpress/author.rb | 62 +++++++------ lib/wordpress/category.rb | 24 ++--- lib/wordpress/comment.rb | 68 +++++++------- lib/wordpress/dump.rb | 61 +++++++------ lib/wordpress/page.rb | 86 +++++++++--------- lib/wordpress/post.rb | 91 ++++++++++--------- lib/wordpress/railtie.rb | 10 ++ lib/wordpress/tag.rb | 26 +++--- refinerycms-wordpress-import.gemspec | 18 ++-- spec/dummy/config/application.rb | 7 +- spec/dummy/config/boot.rb | 2 - spec/dummy/config/database.yml.mysql | 20 ++++ spec/dummy/config/database.yml.postgresql | 57 ++++++++++++ spec/dummy/config/database.yml.sqlite3 | 26 ++++++ ...602094445_acts_as_taggable_on_migration.rb | 28 ++++++ spec/dummy/db/schema.rb | 19 +++- spec/lib/wordpress/dump_spec.rb | 37 ++++---- spec/spec_helper.rb | 14 +++ 25 files changed, 476 insertions(+), 285 deletions(-) create mode 100644 .rspec create mode 100644 lib/refinerycms-wordpress-import.rb create mode 100644 lib/wordpress/railtie.rb create mode 100644 spec/dummy/config/database.yml.mysql create mode 100644 spec/dummy/config/database.yml.postgresql create mode 100644 spec/dummy/config/database.yml.sqlite3 create mode 100644 spec/dummy/db/migrate/20110602094445_acts_as_taggable_on_migration.rb diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..4e1e0d2 --- /dev/null +++ b/.rspec @@ -0,0 +1 @@ +--color diff --git a/Gemfile b/Gemfile index 1a74f35..d6489a1 100644 --- a/Gemfile +++ b/Gemfile @@ -5,9 +5,12 @@ gem "rails", "3.0.7" gem "sqlite3" 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+) # gem 'ruby-debug' # gem 'ruby-debug19' +gem 'refinerycms' +gem 'refinerycms-blog' gem 'refinerycms-wordpress-import', :path => './' diff --git a/Gemfile.lock b/Gemfile.lock index 33c7f7a..1bbab48 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -4,7 +4,7 @@ PATH refinerycms-wordpress-import (0.0.1) nokogiri (~> 1.4.4) refinerycms (~> 1.0.0) - refinerycms-blog (~> 1.3.2) + refinerycms-blog (~> 1.5.2) GEM remote: http://rubygems.org/ @@ -36,6 +36,7 @@ GEM activemodel (= 3.0.7) activesupport (= 3.0.7) activesupport (3.0.7) + acts-as-taggable-on (2.0.6) acts_as_indexed (0.7.2) arel (2.0.10) awesome_nested_set (2.0.0) @@ -43,6 +44,7 @@ GEM babosa (0.3.4) bcrypt-ruby (2.1.4) builder (2.1.2) + database_cleaner (0.6.7) devise (1.3.4) bcrypt-ruby (~> 2.1.2) orm_adapter (~> 0.0.3) @@ -104,9 +106,11 @@ GEM friendly_id_globalize3 (~> 3.2.1) refinerycms-core (= 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) - refinerycms (>= 0.9.8) + refinerycms-core (~> 1.0.0) + seo_meta (~> 1.1.0) refinerycms-core (1.0.0) acts_as_indexed (~> 0.7) awesome_nested_set (~> 2.0) @@ -166,7 +170,10 @@ PLATFORMS ruby DEPENDENCIES + database_cleaner rails (= 3.0.7) + refinerycms + refinerycms-blog refinerycms-wordpress-import! rspec-rails (>= 2.6.0) sqlite3 diff --git a/lib/refinerycms-wordpress-import.rb b/lib/refinerycms-wordpress-import.rb new file mode 100644 index 0000000..9457f44 --- /dev/null +++ b/lib/refinerycms-wordpress-import.rb @@ -0,0 +1,7 @@ +module Refinery + module WordPress + + end +end + +require 'wordpress' diff --git a/lib/refinerycms_wordpress_import.rb b/lib/refinerycms_wordpress_import.rb index 00840ac..9457f44 100644 --- a/lib/refinerycms_wordpress_import.rb +++ b/lib/refinerycms_wordpress_import.rb @@ -1,8 +1,7 @@ -require 'refinerycms' -require 'refinerycms-blog' - module Refinery module WordPress end end + +require 'wordpress' diff --git a/lib/tasks/wordpress.rake b/lib/tasks/wordpress.rake index 18fe125..8643a0a 100644 --- a/lib/tasks/wordpress.rake +++ b/lib/tasks/wordpress.rake @@ -3,56 +3,36 @@ require 'wordpress' namespace :wordpress do desc "Reset the blog relevant tables for a clean import" - task :reset do + task :reset_blog do 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} ..." - ActiveRecord::Base.connection.execute "TRUNCATE TABLE #{table_name}" + ActiveRecord::Base.connection.execute "DELETE FROM #{table_name}" 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| 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 desc "New import (testing)" @@ -64,7 +44,7 @@ namespace :wordpress do raise "Given file '#{file_name}' no file or not readable." end - dump = WordPress::Dump.new(file_name) + dump = Refinery::WordPress::Dump.new(file_name) p dump.authors p dump.pages dump.posts.each do |post| @@ -77,7 +57,7 @@ namespace :wordpress do 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| Rake::Task["wordpress:reset"].invoke Rake::Task["wordpress:import"].invoke(params[:file_name]) diff --git a/lib/wordpress.rb b/lib/wordpress.rb index 9e2bb88..71cfc9c 100644 --- a/lib/wordpress.rb +++ b/lib/wordpress.rb @@ -1,7 +1,9 @@ -module WordPress - +module Refinery + module WordPress + end end +require 'nokogiri' require 'wordpress/author' require 'wordpress/tag' require 'wordpress/category' @@ -9,3 +11,5 @@ require 'wordpress/page' require 'wordpress/post' require 'wordpress/comment' require 'wordpress/dump' + +require "wordpress/railtie" diff --git a/lib/wordpress/author.rb b/lib/wordpress/author.rb index f32b0e4..9f98e17 100644 --- a/lib/wordpress/author.rb +++ b/lib/wordpress/author.rb @@ -1,35 +1,37 @@ -module WordPress - class Author - attr_reader :author_node +module Refinery + module WordPress + class Author + attr_reader :author_node - def initialize(author_node) - @author_node = author_node - end - - def login - author_node.xpath("wp:author_login").text - end - - def email - author_node.xpath("wp:author_email").text - end - - def ==(other) - login == other.login - end - - def inspect - "WordPress::Author: #{login} <#{email}>" - end - - def to_refinery - user = User.find_or_initialize_by_username_and_email(login, email) - unless user.persisted? - user.password = 'password' - user.password_confirmation = 'password' - user.save + def initialize(author_node) + @author_node = author_node + end + + def login + author_node.xpath("wp:author_login").text + end + + def email + author_node.xpath("wp:author_email").text + end + + def ==(other) + login == other.login + end + + def inspect + "WordPress::Author: #{login} <#{email}>" + end + + def to_refinery + user = User.find_or_initialize_by_username_and_email(login, email) + unless user.persisted? + user.password = 'password' + user.password_confirmation = 'password' + user.save + end + user end - user end end end diff --git a/lib/wordpress/category.rb b/lib/wordpress/category.rb index 39281bd..b8e2fd4 100644 --- a/lib/wordpress/category.rb +++ b/lib/wordpress/category.rb @@ -1,17 +1,19 @@ -module WordPress - class Category - attr_accessor :name +module Refinery + module WordPress + class Category + attr_accessor :name - def initialize(text) - @name = text - end + def initialize(text) + @name = text + end - def ==(other) - name == other.name - end + def ==(other) + name == other.name + end - def to_refinery - BlogCategory.find_or_create_by_title(name) + def to_refinery + BlogCategory.find_or_create_by_title(name) + end end end end diff --git a/lib/wordpress/comment.rb b/lib/wordpress/comment.rb index 27efe58..a7f463e 100644 --- a/lib/wordpress/comment.rb +++ b/lib/wordpress/comment.rb @@ -1,46 +1,48 @@ -module WordPress - class Comment - attr_reader :node +module Refinery + module WordPress + class Comment + attr_reader :node - def initialize(node) - @node = node - end + def initialize(node) + @node = node + end - def author - node.xpath('wp:comment_author').text - end + def author + node.xpath('wp:comment_author').text + end - def email - node.xpath('wp:comment_author_email').text - end + def email + node.xpath('wp:comment_author_email').text + end - def url - node.xpath('wp:comment_author_url').text - end + def url + node.xpath('wp:comment_author_url').text + end - def date - DateTime.parse node.xpath("wp:comment_date").text - end + def date + DateTime.parse node.xpath("wp:comment_date").text + end - def content - node.xpath('wp:comment_content').text - end + def content + node.xpath('wp:comment_content').text + end - def approved? - node.xpath('wp:comment_approved').text.to_i == 1 - end + def approved? + node.xpath('wp:comment_approved').text.to_i == 1 + end - def ==(other) - (email == other.email) && (date == other.date) && (content == other.content) - end + def ==(other) + (email == other.email) && (date == other.date) && (content == other.content) + end - def to_refinery - comment = BlogComment.new :name => author, :email => email + def to_refinery + comment = BlogComment.new :name => author, :email => email - comment.body = content - comment.created_at = date - comment.state = approved? ? 'approved' : 'rejected' - comment + comment.body = content + comment.created_at = date + comment.state = approved? ? 'approved' : 'rejected' + comment + end end end end diff --git a/lib/wordpress/dump.rb b/lib/wordpress/dump.rb index e0fbb4b..15cfa3e 100644 --- a/lib/wordpress/dump.rb +++ b/lib/wordpress/dump.rb @@ -1,41 +1,46 @@ -require 'nokogiri' +module Refinery + module WordPress + class Dump + attr_reader :doc -module WordPress - class Dump - attr_reader :doc + def initialize(file_name) + file_name = File.absolute_path(file_name) - def initialize(file_name) - file = File.open(file_name) - @doc = Nokogiri::XML(file) - end - - def authors - doc.xpath("//wp:author").collect do |author| - WordPress::Author.new(author) + raise "Given file '#{file_name}' no file or not readable." \ + unless File.file?(file_name) && File.readable?(file_name) + + file = File.open(file_name) + @doc = Nokogiri::XML(file) end - end - def pages - doc.xpath("//item[wp:post_type = 'page']").collect do |page| - WordPress::Page.new(page) + def authors + doc.xpath("//wp:author").collect do |author| + Author.new(author) + end end - end - def posts - doc.xpath("//item[wp:post_type = 'post']").collect do |post| - WordPress::Post.new(post) + def pages + doc.xpath("//item[wp:post_type = 'page']").collect do |page| + Page.new(page) + end end - end - def tags - doc.xpath("//wp:tag/wp:tag_slug").collect do |tag| - WordPress::Tag.new(tag.text) + def posts + doc.xpath("//item[wp:post_type = 'post']").collect do |post| + Post.new(post) + end end - end - def categories - doc.xpath("//wp:category/wp:cat_name").collect do |category| - WordPress::Category.new(category.text) + def tags + doc.xpath("//wp:tag/wp:tag_slug").collect do |tag| + 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 diff --git a/lib/wordpress/page.rb b/lib/wordpress/page.rb index 18d41ab..22badf5 100644 --- a/lib/wordpress/page.rb +++ b/lib/wordpress/page.rb @@ -1,57 +1,59 @@ -module WordPress - class Page - attr_reader :node - - def initialize(node) - @node = node - end +module Refinery + module WordPress + class Page + attr_reader :node - def inspect - "WordPress::Page(#{post_id}): #{title}" - end + def initialize(node) + @node = node + end - def title - node.xpath("title").text - end + def inspect + "WordPress::Page(#{post_id}): #{title}" + end - def content - node.xpath("content:encoded").text - end + def title + node.xpath("title").text + end - def creator - node.xpath("dc:creator").text - end + def content + node.xpath("content:encoded").text + end - def post_date - DateTime.parse node.xpath("wp:post_date").text - end + def creator + node.xpath("dc:creator").text + end - def post_id - node.xpath("wp:post_id").text.to_i - end + def post_date + DateTime.parse node.xpath("wp:post_date").text + end - def parent_id - node.xpath("wp:post_parent").text.to_i - end + def post_id + node.xpath("wp:post_id").text.to_i + end - def status - node.xpath("wp:status").text - end + def parent_id + node.xpath("wp:post_parent").text.to_i + end - def draft? - status != 'publish' - end + def status + node.xpath("wp:status").text + end - def ==(other) - post_id == other.post_id - end + def draft? + status != 'publish' + end - def to_refinery - page = ::Page.create!(:title => title, :created_at => post_date, - :draft => draft?, :parent_id => parent_id) + def ==(other) + post_id == other.post_id + end - page.parts.create(:title => 'Body', :body => content) - page + def to_refinery + 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 diff --git a/lib/wordpress/post.rb b/lib/wordpress/post.rb index 21ae99c..a5c8773 100644 --- a/lib/wordpress/post.rb +++ b/lib/wordpress/post.rb @@ -1,49 +1,54 @@ -module WordPress - class Post < Page - def tags - node.xpath("category[@domain='post_tag']").collect do |tag_node| - WordPress::Tag.new(tag_node.text) - end - 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 +module Refinery + module WordPress + class Post < Page + def tags + node.xpath("category[@domain='post_tag']").collect do |tag_node| + Tag.new(tag_node.text) 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 diff --git a/lib/wordpress/railtie.rb b/lib/wordpress/railtie.rb new file mode 100644 index 0000000..672bac6 --- /dev/null +++ b/lib/wordpress/railtie.rb @@ -0,0 +1,10 @@ +module Refinery + module WordPress + class Railtie < Rails::Railtie + rake_tasks do + load "tasks/wordpress.rake" + end + end + end +end + diff --git a/lib/wordpress/tag.rb b/lib/wordpress/tag.rb index 9dd1378..6f0f3f4 100644 --- a/lib/wordpress/tag.rb +++ b/lib/wordpress/tag.rb @@ -1,18 +1,20 @@ -module WordPress - class Tag - attr_accessor :name +module Refinery + module WordPress + class Tag + attr_accessor :name - def initialize(text) - @name = text - end + def initialize(text) + @name = text + end - def ==(other) - name == other.name - end + def ==(other) + name == other.name + 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 diff --git a/refinerycms-wordpress-import.gemspec b/refinerycms-wordpress-import.gemspec index 6797fb5..25c9c0e 100644 --- a/refinerycms-wordpress-import.gemspec +++ b/refinerycms-wordpress-import.gemspec @@ -1,13 +1,19 @@ # Provide a simple gemspec so you can easily use your enginex # project in your rails apps through git. Gem::Specification.new do |s| - s.name = "refinerycms-wordpress-import" - s.summary = "Import WordPress XML dumps into refinerycms(-blog)." - s.description = "Insert Refinerycms-wordpress-import description." - s.files = Dir["{app,lib,config}/**/*"] + ["MIT-LICENSE", "Rakefile", "Gemfile", "README.rdoc"] - s.version = "0.0.1" + s.name = "refinerycms-wordpress-import" + s.summary = "Import WordPress XML dumps into refinerycms(-blog)." + s.description = "This gem imports a WordPress Dump into refinerycms (Page, User) and refinerycms-blog (BlogPost, BlogCategory, Tag, BlogComment)" + 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-blog', '~> 1.3.2' + s.add_dependency 'refinerycms-blog', '~> 1.5.2' 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 diff --git a/spec/dummy/config/application.rb b/spec/dummy/config/application.rb index ce74a92..a8b8ac1 100644 --- a/spec/dummy/config/application.rb +++ b/spec/dummy/config/application.rb @@ -1,13 +1,8 @@ require File.expand_path('../boot', __FILE__) -require "active_model/railtie" -require "active_record/railtie" -require "action_controller/railtie" -require "action_view/railtie" -require "action_mailer/railtie" +require 'rails/all' Bundler.require -require "refinerycms_wordpress_import" module Dummy class Application < Rails::Application diff --git a/spec/dummy/config/boot.rb b/spec/dummy/config/boot.rb index eba0681..140dfe2 100644 --- a/spec/dummy/config/boot.rb +++ b/spec/dummy/config/boot.rb @@ -6,5 +6,3 @@ if File.exist?(gemfile) require 'bundler' Bundler.setup end - -$:.unshift File.expand_path('../../../../lib', __FILE__) \ No newline at end of file diff --git a/spec/dummy/config/database.yml.mysql b/spec/dummy/config/database.yml.mysql new file mode 100644 index 0000000..235d1dd --- /dev/null +++ b/spec/dummy/config/database.yml.mysql @@ -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 diff --git a/spec/dummy/config/database.yml.postgresql b/spec/dummy/config/database.yml.postgresql new file mode 100644 index 0000000..d92576d --- /dev/null +++ b/spec/dummy/config/database.yml.postgresql @@ -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 diff --git a/spec/dummy/config/database.yml.sqlite3 b/spec/dummy/config/database.yml.sqlite3 new file mode 100644 index 0000000..c2da158 --- /dev/null +++ b/spec/dummy/config/database.yml.sqlite3 @@ -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 \ No newline at end of file diff --git a/spec/dummy/db/migrate/20110602094445_acts_as_taggable_on_migration.rb b/spec/dummy/db/migrate/20110602094445_acts_as_taggable_on_migration.rb new file mode 100644 index 0000000..1661061 --- /dev/null +++ b/spec/dummy/db/migrate/20110602094445_acts_as_taggable_on_migration.rb @@ -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 diff --git a/spec/dummy/db/schema.rb b/spec/dummy/db/schema.rb index 3a0bf84..5677db4 100644 --- a/spec/dummy/db/schema.rb +++ b/spec/dummy/db/schema.rb @@ -10,7 +10,7 @@ # # 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| 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", ["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| t.integer "user_id" t.string "name" diff --git a/spec/lib/wordpress/dump_spec.rb b/spec/lib/wordpress/dump_spec.rb index d0fdd36..ed567db 100644 --- a/spec/lib/wordpress/dump_spec.rb +++ b/spec/lib/wordpress/dump_spec.rb @@ -1,12 +1,11 @@ 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(: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 - dump.should be_a WordPress::Dump + dump.should be_a Refinery::WordPress::Dump end it "should include a Nokogiri::XML object" do @@ -15,8 +14,8 @@ describe WordPress::Dump, :type => :model do describe "#tags" do let(:tags) do - [ WordPress::Tag.new('css'), WordPress::Tag.new('html'), - WordPress::Tag.new('php'), WordPress::Tag.new('ruby')] + [ Refinery::WordPress::Tag.new('css'), Refinery::WordPress::Tag.new('html'), + Refinery::WordPress::Tag.new('php'), Refinery::WordPress::Tag.new('ruby')] end it "should return all included tags" do @@ -34,7 +33,7 @@ describe WordPress::Dump, :type => :model do end it "should create a ActsAsTaggableOn::Tag" do - ActsAsTaggableOn::Tag.should have(1).record + ::ActsAsTaggableOn::Tag.should have(1).record end it "should copy the name over to the Tag object" do @@ -46,8 +45,8 @@ describe WordPress::Dump, :type => :model do describe "#categories" do let(:categories) do - [ WordPress::Category.new('Rant'), WordPress::Category.new('Tutorials'), - WordPress::Category.new('Uncategorized') ] + [ Refinery::WordPress::Category.new('Rant'), Refinery::WordPress::Category.new('Tutorials'), + Refinery::WordPress::Category.new('Uncategorized') ] end it "should return all included categories" do @@ -108,7 +107,7 @@ describe WordPress::Dump, :type => :model do Page.should have(@count + 1).record 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.draft.should == page.draft? @page.created_at.should == page.post_date @@ -143,7 +142,7 @@ describe WordPress::Dump, :type => :model do @user.should be_persisted 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.email.should == @user.email end @@ -172,15 +171,15 @@ describe WordPress::Dump, :type => :model do describe "#categories" do 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 describe "#tags" do it { post.tags.should have(3).tags } - it { post.tags.should include(WordPress::Tag.new('css')) } - it { post.tags.should include(WordPress::Tag.new('html')) } - it { post.tags.should include(WordPress::Tag.new('php')) } + it { post.tags.should include(Refinery::WordPress::Tag.new('css')) } + it { post.tags.should include(Refinery::WordPress::Tag.new('html')) } + it { post.tags.should include(Refinery::WordPress::Tag.new('php')) } end it { post.tag_list.should == 'css,html,php' } @@ -212,7 +211,7 @@ describe WordPress::Dump, :type => :model do @comment.should be_new_record 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.email.should == comment.email @comment.body.should == comment.content @@ -233,7 +232,7 @@ describe WordPress::Dump, :type => :model do 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.body.should == post.content @post.draft.should == post.draft? @@ -242,11 +241,11 @@ describe WordPress::Dump, :type => :model do @post.author.username.should == post.creator 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 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 end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index cbc5fb4..de25430 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -4,6 +4,7 @@ ENV["RAILS_ENV"] = "test" require File.expand_path("../dummy/config/environment.rb", __FILE__) require "rails/test_help" require "rspec/rails" +require "database_cleaner" ActionMailer::Base.delivery_method = :test ActionMailer::Base.perform_deliveries = true @@ -25,4 +26,17 @@ RSpec.configure do |config| # == Mock Framework 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