wp2middleman 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/README.md +38 -6
- data/lib/wp2middleman/cli.rb +5 -2
- data/lib/wp2middleman/frontmatter.rb +34 -0
- data/lib/wp2middleman/middleman_post.rb +71 -0
- data/lib/wp2middleman/migrator.rb +7 -53
- data/lib/wp2middleman/post.rb +8 -17
- data/lib/wp2middleman/post_collection.rb +36 -6
- data/lib/wp2middleman/version.rb +1 -1
- data/lib/wp2middleman.rb +6 -2
- data/spec/lib/wp2middleman/cli_spec.rb +34 -14
- data/spec/lib/wp2middleman/frontmatter_spec.rb +38 -0
- data/spec/lib/wp2middleman/middleman_post_spec.rb +121 -0
- data/spec/lib/wp2middleman/migrator_spec.rb +23 -104
- data/spec/lib/wp2middleman/post_collection_spec.rb +17 -5
- data/spec/lib/wp2middleman/post_spec.rb +49 -34
- data/spec/lib/wp2middleman_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -1
- data/spec/support/cli_helpers.rb +17 -0
- data/spec/support/matchers/exit_with_code.rb +2 -2
- data/wp2middleman.gemspec +2 -2
- metadata +13 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bf5c2076748c910b3515e473912c17758f0be58
|
4
|
+
data.tar.gz: 45ca770a54f40a300656253b68c0db60ad48e880
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c4f3e75ba32a0912cbc858b426d87fe580c2a83cf6721acb64913b0aba589819e2fe9d3267f958930794ff8b9325fe68883e087681a564fb0b0a8a97f2cbb14
|
7
|
+
data.tar.gz: 34571e5da1978978e4e8d04b8aec6f262744d06f7b145b271e89232c987ee7ab2b90f93acab6e2af7e42a27a8c712254b22e910ae73770f028265b54a215be05
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
[](https://travis-ci.org/mdb/wp2middleman)
|
2
|
+
[](https://codeclimate.com/github/mdb/wp2middleman)
|
2
3
|
|
3
4
|
# wp2middleman
|
4
5
|
|
5
|
-
|
6
|
+
A command line tool to help move a Wordpress blog to [Middleman](http://middlemanapp.com).
|
7
|
+
|
8
|
+
wp2middleman migrates the posts contained in a Wordpress XML export file to Middleman-style markdown files.
|
6
9
|
|
7
10
|
## Installation
|
8
11
|
|
9
12
|
```
|
10
|
-
|
11
|
-
cd wp2middleman
|
12
|
-
bundle install
|
13
|
-
rake install
|
13
|
+
gem install wp2middleman
|
14
14
|
```
|
15
15
|
|
16
16
|
## Commandline Usage
|
@@ -35,7 +35,14 @@ tags: foo, bar
|
|
35
35
|
</ul>
|
36
36
|
```
|
37
37
|
|
38
|
-
|
38
|
+
## Optional Parameters
|
39
|
+
|
40
|
+
```
|
41
|
+
--body_to_markdown converts to markdown
|
42
|
+
--include_fields=FIELD_ONE FIELD_TWO ETC includes specific fields in frontmatter
|
43
|
+
```
|
44
|
+
|
45
|
+
### Convert to Markdown
|
39
46
|
|
40
47
|
```
|
41
48
|
wp2mm some_wordpress_export.xml --body_to_markdown true
|
@@ -55,3 +62,28 @@ The post content in markdown or text, depending on how it was saved to Wordpress
|
|
55
62
|
* list item
|
56
63
|
* another list item
|
57
64
|
```
|
65
|
+
|
66
|
+
### Include specific post fields
|
67
|
+
|
68
|
+
```
|
69
|
+
wp2mm some_wordpress_export.xml --include_fields wp:post_id link
|
70
|
+
```
|
71
|
+
|
72
|
+
Pulls the specified key/values out of the post xml and includes it in frontmatter:
|
73
|
+
|
74
|
+
```
|
75
|
+
---
|
76
|
+
title: 'Some Title'
|
77
|
+
date: YYYY-MM-DD
|
78
|
+
tags: foo, bar
|
79
|
+
wp:post_id: '280'
|
80
|
+
link: http://somewebsite.com/2012/10/some-title
|
81
|
+
---
|
82
|
+
|
83
|
+
<p>The post content in HTML or text, depending on how it was saved to Wordpress.</p>
|
84
|
+
<ul>
|
85
|
+
<li>list item</li>
|
86
|
+
<li>another list item</li>
|
87
|
+
</ul>
|
88
|
+
```
|
89
|
+
|
data/lib/wp2middleman/cli.rb
CHANGED
@@ -5,7 +5,9 @@ module WP2Middleman
|
|
5
5
|
default_task :wp2mm
|
6
6
|
|
7
7
|
desc "WORDPRESS XML EXPORT FILE", "Migrate Wordpress posts to Middleman-style markdown files"
|
8
|
-
option :body_to_markdown
|
8
|
+
option :body_to_markdown, :type => :boolean
|
9
|
+
option :include_fields, :type => :array
|
10
|
+
|
9
11
|
def wp2mm(wp_xml_export = nil)
|
10
12
|
return usage unless wp_xml_export
|
11
13
|
|
@@ -14,7 +16,8 @@ module WP2Middleman
|
|
14
16
|
exit 1
|
15
17
|
end
|
16
18
|
|
17
|
-
|
19
|
+
include_fields = options[:include_fields] || []
|
20
|
+
WP2Middleman.migrate(wp_xml_export, options[:body_to_markdown], include_fields)
|
18
21
|
|
19
22
|
say "Successfully migrated #{wp_xml_export}", "\033[32m"
|
20
23
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module WP2Middleman
|
4
|
+
class Frontmatter
|
5
|
+
def initialize(post, include_fields: [])
|
6
|
+
@post = post
|
7
|
+
@include_fields = include_fields
|
8
|
+
end
|
9
|
+
|
10
|
+
def post_data
|
11
|
+
data = {
|
12
|
+
'title' => post.title,
|
13
|
+
'date' => post.date_published,
|
14
|
+
'tags' => post.tags
|
15
|
+
}
|
16
|
+
|
17
|
+
data['published'] = false if !post.published?
|
18
|
+
|
19
|
+
include_fields.each do |field|
|
20
|
+
data[field] = post.field(field)
|
21
|
+
end
|
22
|
+
|
23
|
+
data
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_yaml
|
27
|
+
post_data.to_yaml.strip
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_reader :post, :include_fields
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module WP2Middleman
|
2
|
+
class MiddlemanPost
|
3
|
+
def initialize(wp_post, body_to_markdown: false, include_fields: [])
|
4
|
+
@wp_post = wp_post
|
5
|
+
@body_to_markdown = body_to_markdown
|
6
|
+
@include_fields = include_fields
|
7
|
+
end
|
8
|
+
|
9
|
+
def title
|
10
|
+
wp_post.title
|
11
|
+
end
|
12
|
+
|
13
|
+
def title_for_filename
|
14
|
+
title.gsub(/[^\w\s_-]+/, '')
|
15
|
+
.gsub(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2')
|
16
|
+
.gsub(/\s+/, '-')
|
17
|
+
end
|
18
|
+
|
19
|
+
def filename
|
20
|
+
"#{date_published}-#{title_for_filename}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def date_published
|
24
|
+
wp_post.date_published
|
25
|
+
end
|
26
|
+
|
27
|
+
def full_filename output_path
|
28
|
+
"#{output_path}#{filename}.html.markdown"
|
29
|
+
end
|
30
|
+
|
31
|
+
def file_content
|
32
|
+
<<-EOS.gsub(/^ {8}/, '')
|
33
|
+
#{frontmatter.to_yaml}
|
34
|
+
---
|
35
|
+
|
36
|
+
#{formatted_post_content}
|
37
|
+
EOS
|
38
|
+
end
|
39
|
+
|
40
|
+
def formatted_post_content
|
41
|
+
if body_to_markdown
|
42
|
+
markdown_content
|
43
|
+
else
|
44
|
+
content
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def content
|
49
|
+
wp_post.content
|
50
|
+
end
|
51
|
+
|
52
|
+
def markdown_content
|
53
|
+
html = HTMLPage.new :contents => content
|
54
|
+
html.comment do |node,_|
|
55
|
+
"#{node}"
|
56
|
+
end
|
57
|
+
html.iframe do |node,_|
|
58
|
+
"#{node}"
|
59
|
+
end
|
60
|
+
html.markdown
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
attr_reader :wp_post, :body_to_markdown, :include_fields
|
66
|
+
|
67
|
+
def frontmatter
|
68
|
+
@frontmatter ||= Frontmatter.new(wp_post, include_fields: include_fields)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -2,69 +2,23 @@ require 'yaml'
|
|
2
2
|
|
3
3
|
module WP2Middleman
|
4
4
|
class Migrator
|
5
|
-
|
6
5
|
attr_reader :posts
|
7
6
|
|
8
|
-
def initialize(wp_xml_export_file, body_to_markdown: false)
|
9
|
-
@
|
10
|
-
|
7
|
+
def initialize(wp_xml_export_file, body_to_markdown: false, include_fields: [])
|
8
|
+
@posts = WP2Middleman::PostCollection.from_file(wp_xml_export_file)
|
9
|
+
.without_attachments
|
10
|
+
.only_valid
|
11
|
+
.to_middleman(body_to_markdown: body_to_markdown, include_fields: include_fields)
|
11
12
|
end
|
12
13
|
|
13
14
|
def migrate
|
14
15
|
ensure_export_directory
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
posts.each do |post|
|
18
|
+
File.write(post.full_filename(output_path), post.file_content)
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
def write_file(post)
|
22
|
-
if valid_post_data(post)
|
23
|
-
File.open(full_filename(post), "w") do |file|
|
24
|
-
file.write(file_content(post))
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def file_content(post)
|
30
|
-
yaml = frontmatter(post).to_yaml.strip
|
31
|
-
|
32
|
-
<<-EOS.gsub(/^ {8}/, '')
|
33
|
-
#{yaml}
|
34
|
-
---
|
35
|
-
|
36
|
-
#{formatted_post_content(post)}
|
37
|
-
EOS
|
38
|
-
end
|
39
|
-
|
40
|
-
def frontmatter(post)
|
41
|
-
data = {
|
42
|
-
'title' => post.title,
|
43
|
-
'date' => post.date_published,
|
44
|
-
'tags' => post.tags
|
45
|
-
}
|
46
|
-
|
47
|
-
data['published'] = false if !post.published?
|
48
|
-
|
49
|
-
data
|
50
|
-
end
|
51
|
-
|
52
|
-
def formatted_post_content(post)
|
53
|
-
if @body_to_markdown
|
54
|
-
post.markdown_content
|
55
|
-
else
|
56
|
-
post.content
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def full_filename(post)
|
61
|
-
"#{output_path}#{post.filename}.html.markdown"
|
62
|
-
end
|
63
|
-
|
64
|
-
def valid_post_data(post)
|
65
|
-
!(post.post_date.nil? || post.title.nil? || post.date_published.nil? || post.content.nil?)
|
66
|
-
end
|
67
|
-
|
68
22
|
def output_path
|
69
23
|
"#{Dir.pwd}/export/"
|
70
24
|
end
|
data/lib/wp2middleman/post.rb
CHANGED
@@ -12,14 +12,16 @@ module WP2Middleman
|
|
12
12
|
post.css('title').text
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
16
|
-
title.
|
17
|
-
.gsub(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2')
|
18
|
-
.gsub(/\s+/, '-')
|
15
|
+
def valid?
|
16
|
+
!(post_date.nil? || title.nil? || date_published.nil? || content.nil?)
|
19
17
|
end
|
20
18
|
|
21
|
-
def
|
22
|
-
|
19
|
+
def attachment?
|
20
|
+
type == 'attachment'
|
21
|
+
end
|
22
|
+
|
23
|
+
def field(field)
|
24
|
+
post.xpath(field).first.inner_text
|
23
25
|
end
|
24
26
|
|
25
27
|
def post_date
|
@@ -46,17 +48,6 @@ module WP2Middleman
|
|
46
48
|
post.at_xpath(".//content:encoded").inner_text
|
47
49
|
end
|
48
50
|
|
49
|
-
def markdown_content
|
50
|
-
html = HTMLPage.new :contents => content
|
51
|
-
html.comment do |node,_|
|
52
|
-
"#{node}"
|
53
|
-
end
|
54
|
-
html.iframe do |node,_|
|
55
|
-
"#{node}"
|
56
|
-
end
|
57
|
-
html.markdown
|
58
|
-
end
|
59
|
-
|
60
51
|
def tags
|
61
52
|
tags = []
|
62
53
|
categories = post.xpath("category")
|
@@ -2,14 +2,44 @@ require 'nokogiri'
|
|
2
2
|
|
3
3
|
module WP2Middleman
|
4
4
|
class PostCollection
|
5
|
-
|
6
|
-
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
def self.from_file(wp_xml_export_file)
|
8
|
+
xml = Nokogiri::XML(File.open("#{Dir.pwd}/#{wp_xml_export_file}"))
|
9
|
+
new xml.css('item').collect { |raw_wp_post| WP2Middleman::Post.new(raw_wp_post) }
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(posts=[])
|
13
|
+
@posts = posts
|
14
|
+
end
|
15
|
+
|
16
|
+
def each(&block)
|
17
|
+
posts.each &block
|
18
|
+
end
|
19
|
+
|
20
|
+
def [] key
|
21
|
+
posts[key]
|
7
22
|
end
|
8
23
|
|
9
|
-
def
|
10
|
-
|
11
|
-
.map { |post| WP2Middleman::Post.new(post) }
|
12
|
-
.reject { |post| post.type == 'attachment' }
|
24
|
+
def empty?
|
25
|
+
posts.empty?
|
13
26
|
end
|
27
|
+
|
28
|
+
def without_attachments
|
29
|
+
self.class.new(reject(&:attachment?))
|
30
|
+
end
|
31
|
+
|
32
|
+
def only_valid
|
33
|
+
self.class.new(select(&:valid?))
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_middleman(body_to_markdown: false, include_fields: [])
|
37
|
+
middleman_posts = collect { |p| WP2Middleman::MiddlemanPost.new(p, body_to_markdown: body_to_markdown, include_fields: include_fields) }
|
38
|
+
self.class.new(middleman_posts)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
attr_reader :posts
|
14
44
|
end
|
15
45
|
end
|
data/lib/wp2middleman/version.rb
CHANGED
data/lib/wp2middleman.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
require 'wp2middleman/version'
|
2
2
|
require 'wp2middleman/post'
|
3
|
+
require 'wp2middleman/middleman_post'
|
3
4
|
require 'wp2middleman/post_collection'
|
5
|
+
require 'wp2middleman/frontmatter'
|
4
6
|
require 'wp2middleman/migrator'
|
5
7
|
require 'wp2middleman/cli'
|
6
8
|
|
7
9
|
module WP2Middleman
|
8
|
-
def self.migrate(wp_xml_export_file, body_to_markdown = false)
|
9
|
-
migrator = WP2Middleman::Migrator.new wp_xml_export_file,
|
10
|
+
def self.migrate(wp_xml_export_file, body_to_markdown = false, include_fields = [])
|
11
|
+
migrator = WP2Middleman::Migrator.new wp_xml_export_file,
|
12
|
+
body_to_markdown: body_to_markdown,
|
13
|
+
include_fields: include_fields
|
10
14
|
migrator.migrate
|
11
15
|
end
|
12
16
|
end
|
@@ -7,51 +7,71 @@ describe WP2Middleman::CLI do
|
|
7
7
|
|
8
8
|
describe "#wp2mm" do
|
9
9
|
before do
|
10
|
-
cli.
|
10
|
+
allow(cli).to receive(:say)
|
11
11
|
end
|
12
12
|
|
13
13
|
context "it's not passed any arguments" do
|
14
14
|
it "returns usage details" do
|
15
|
-
cli.
|
15
|
+
expect(cli).to receive(:usage).exactly(1).times
|
16
16
|
cli.wp2mm
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
context "it's passed a Wordpress XML export file that does not exist" do
|
21
21
|
it "reports that it was passed an invalid directory and exits with an exit code of 1" do
|
22
|
-
Kernel.
|
23
|
-
File.
|
24
|
-
cli.
|
25
|
-
|
22
|
+
allow(Kernel).to receive(:exit) { true }
|
23
|
+
allow(File).to receive(:file?) { false }
|
24
|
+
expect(cli).to receive(:error).with("foo is not a valid file")
|
25
|
+
|
26
|
+
begin
|
27
|
+
cli.wp2mm('foo')
|
28
|
+
rescue SystemExit => e
|
29
|
+
expect(e.status).to eq(1)
|
30
|
+
end
|
26
31
|
end
|
27
32
|
end
|
28
33
|
|
29
34
|
context "it's passed a valid Wordpress XML export file" do
|
30
35
|
before :each do
|
31
|
-
WP2Middleman.
|
32
|
-
File.
|
36
|
+
allow(WP2Middleman).to receive(:migrate) { false }
|
37
|
+
allow(File).to receive(:file?) { true }
|
33
38
|
end
|
34
39
|
|
35
40
|
it "migrates the posts listed in the XML file" do
|
36
|
-
WP2Middleman.
|
41
|
+
expect(WP2Middleman).to receive(:migrate).with "foo", nil, []
|
37
42
|
cli.wp2mm "foo"
|
38
43
|
end
|
39
44
|
|
40
45
|
it "reports that the directory has been successfully uploaded" do
|
41
|
-
cli.
|
46
|
+
expect(cli).to receive(:say).with("Successfully migrated foo", "\e[32m")
|
42
47
|
cli.wp2mm "foo"
|
43
48
|
end
|
44
49
|
end
|
50
|
+
|
51
|
+
context "sets include_fields" do
|
52
|
+
before :each do
|
53
|
+
allow(WP2Middleman).to receive(:migrate) { false }
|
54
|
+
allow(File).to receive(:file?) { true }
|
55
|
+
end
|
56
|
+
|
57
|
+
it "deserializes the values into an array" do
|
58
|
+
expect(WP2Middleman).to receive(:migrate).with "foo", nil, ['wp:post_id', 'guid']
|
59
|
+
|
60
|
+
capture :stdout do
|
61
|
+
WP2Middleman::CLI.start %w[wp2mm foo --include_fields=wp:post_id guid]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
45
65
|
end
|
46
66
|
|
47
67
|
describe "#usage" do
|
48
68
|
subject(:usage) { cli.usage }
|
49
69
|
|
50
70
|
it "displays version info, GitHub info, and help" do
|
51
|
-
cli.
|
52
|
-
cli.
|
53
|
-
cli.
|
54
|
-
cli.
|
71
|
+
expect(cli).to receive(:say).with('wp2middleman 0.0.1')
|
72
|
+
expect(cli).to receive(:say).with('https://github.com/mdb/wp2middleman')
|
73
|
+
expect(cli).to receive(:say).with("\n")
|
74
|
+
expect(cli).to receive(:help)
|
55
75
|
|
56
76
|
usage
|
57
77
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe WP2Middleman::Migrator do
|
4
|
+
def post(attributes = {})
|
5
|
+
defaults = {title: "mytitle", date_published: "mydate", tags: "mytags", published?: false}
|
6
|
+
@post ||= double(defaults.merge attributes)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "includes the title, date, and tags from the post" do
|
10
|
+
frontmatter = WP2Middleman::Frontmatter.new(post).post_data
|
11
|
+
|
12
|
+
expect(frontmatter["title"]).to eq("mytitle")
|
13
|
+
expect(frontmatter["date"]).to eq("mydate")
|
14
|
+
expect(frontmatter["tags"]).to eq("mytags")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "sets published to false for unpublished posts" do
|
18
|
+
frontmatter = WP2Middleman::Frontmatter.new(post).post_data
|
19
|
+
|
20
|
+
expect(frontmatter["published"]).to be_falsey
|
21
|
+
end
|
22
|
+
|
23
|
+
it "sets published to nil for published posts" do
|
24
|
+
frontmatter = WP2Middleman::Frontmatter.new(post published?: true).post_data
|
25
|
+
|
26
|
+
expect(frontmatter["published"]).to be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it "includes fields specified in include_fields" do
|
30
|
+
allow(post).to receive(:field).with("field1") { "value1" }
|
31
|
+
allow(post).to receive(:field).with("field2") { "value2" }
|
32
|
+
|
33
|
+
frontmatter = WP2Middleman::Frontmatter.new(post, include_fields: ["field1", "field2"]).post_data
|
34
|
+
|
35
|
+
expect(frontmatter["field1"]).to eq("value1")
|
36
|
+
expect(frontmatter["field2"]).to eq("value2")
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe WP2Middleman::MiddlemanPost do
|
4
|
+
let(:post_one) { double :post,
|
5
|
+
title: "A Title",
|
6
|
+
date_published: Date.new(2012,6,8).to_s,
|
7
|
+
content: "Paragraph one.\n\n Paragraph two.\n ",
|
8
|
+
tags: [],
|
9
|
+
published?: true
|
10
|
+
}
|
11
|
+
|
12
|
+
let(:post_two) { double :post,
|
13
|
+
title: "A second title",
|
14
|
+
date_published: Date.new(2011,7,25).to_s,
|
15
|
+
content: " <strong>Foo</strong>",
|
16
|
+
tags: ["some_tag", "another tag", "tag"],
|
17
|
+
published?: true
|
18
|
+
}
|
19
|
+
|
20
|
+
let(:post_three) { double :post,
|
21
|
+
title: "A third title: With colon",
|
22
|
+
date_published: Date.new(2011,7,26).to_s,
|
23
|
+
content: "Foo",
|
24
|
+
tags: ["some_tag", "another tag", "tag"],
|
25
|
+
published?: false
|
26
|
+
}
|
27
|
+
|
28
|
+
let(:post_with_iframe) { double :post,
|
29
|
+
title: "A fourth item with iframe and comment",
|
30
|
+
date_published: Date.new(2011,7,26).to_s,
|
31
|
+
content: "Here's a post with an iframe and a comment.\n\n<!--more-->\n\n<iframe width=\"400\" height=\"100\" style=\"position: relative; display: block; width: 400px; height: 100px;\" src=\"http://bandcamp.com/EmbeddedPlayer/v=2/track=833121761/size=venti/bgcol=FFFFFF/linkcol=4285BB/\" allowtransparency=\"true\" frameborder=\"0\"><a href=\"http://dihannmoore.bandcamp.com/track/you-do-it-for-me\">"YOU DO IT FOR ME" by DIHANN MOORE</a></iframe>",
|
32
|
+
tags: ["some_tag", "another tag", "tag"],
|
33
|
+
published?: false
|
34
|
+
}
|
35
|
+
|
36
|
+
it "has a title formatted for a filename" do
|
37
|
+
wp_post = double :post, title: "A Title"
|
38
|
+
post = WP2Middleman::MiddlemanPost.new(wp_post)
|
39
|
+
|
40
|
+
expect(post.title_for_filename).to eq "A-Title"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "removes odd characters (like colons) from title for filename" do
|
44
|
+
wp_post = double :post, title: "A third title: With colon"
|
45
|
+
post = WP2Middleman::MiddlemanPost.new(wp_post)
|
46
|
+
|
47
|
+
expect(post.title_for_filename).to eq "A-third-title-With-colon"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "prepends the date published onto the title for the filename" do
|
51
|
+
wp_post = double :post, title: "A Title", date_published: Date.new(2012,6,8)
|
52
|
+
post = WP2Middleman::MiddlemanPost.new(wp_post)
|
53
|
+
|
54
|
+
expect(post.filename).to eq "2012-06-08-A-Title"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "returns the full filename for a Middleman-style markdown post" do
|
58
|
+
wp_post = double :post, title: "A Title", date_published: Date.new(2012,6,8)
|
59
|
+
post = WP2Middleman::MiddlemanPost.new(wp_post)
|
60
|
+
|
61
|
+
expect(post.full_filename('/some/path/')).to eq("/some/path/2012-06-08-A-Title.html.markdown")
|
62
|
+
end
|
63
|
+
|
64
|
+
it "converts the content to markdown" do
|
65
|
+
wp_post = double :post, content: "<strong>Foo</strong>"
|
66
|
+
post = WP2Middleman::MiddlemanPost.new(wp_post)
|
67
|
+
|
68
|
+
expect(post.markdown_content).to eq "**Foo**"
|
69
|
+
end
|
70
|
+
|
71
|
+
it "has no formatting change to post body by default" do
|
72
|
+
post = WP2Middleman::MiddlemanPost.new post_one
|
73
|
+
|
74
|
+
expect(post.file_content).to eq(
|
75
|
+
"---\ntitle: A Title\ndate: '2012-06-08'\ntags: []\n---\n\nParagraph one.\n\n Paragraph two.\n \n"
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "formats the post body as markdown" do
|
80
|
+
post = WP2Middleman::MiddlemanPost.new post_two, body_to_markdown: true
|
81
|
+
|
82
|
+
expect( post.file_content ).to eq(
|
83
|
+
"---\ntitle: A second title\ndate: '2011-07-25'\ntags:\n- some_tag\n- another tag\n- tag\n---\n\n**Foo**\n"
|
84
|
+
)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "ignores iframe and comment tags when converting to markdown" do
|
88
|
+
post = WP2Middleman::MiddlemanPost.new post_with_iframe, body_to_markdown: true
|
89
|
+
|
90
|
+
expect(post.file_content).to eq("---\ntitle: A fourth item with iframe and comment\ndate: '2011-07-26'\ntags:\n- some_tag\n- another tag\n- tag\npublished: false\n---\n\nHere's a post with an iframe and a comment.\n\n\n<!--more-->\n\n\n<iframe width=\"400\" height=\"100\" style=\"position: relative; display: block; width: 400px; height: 100px;\" src=\"http://bandcamp.com/EmbeddedPlayer/v=2/track=833121761/size=venti/bgcol=FFFFFF/linkcol=4285BB/\" allowtransparency=\"true\" frameborder=\"0\"><a href=\"http://dihannmoore.bandcamp.com/track/you-do-it-for-me\">\"YOU DO IT FOR ME\" by DIHANN MOORE</a></iframe>\n")
|
91
|
+
end
|
92
|
+
|
93
|
+
it "appends included fields in with frontmatter" do
|
94
|
+
expect(post_two).to receive(:field).with('wp:post_id').and_return('209')
|
95
|
+
post = WP2Middleman::MiddlemanPost.new post_two, include_fields: ['wp:post_id']
|
96
|
+
|
97
|
+
expect( post.file_content ).to eq(
|
98
|
+
"---\ntitle: A second title\ndate: '2011-07-25'\ntags:\n- some_tag\n- another tag\n- tag\nwp:post_id: '209'\n---\n\n <strong>Foo</strong>\n"
|
99
|
+
)
|
100
|
+
end
|
101
|
+
|
102
|
+
it "reports 'published: false' in the post's frontmatter when post is not published" do
|
103
|
+
post = WP2Middleman::MiddlemanPost.new post_three
|
104
|
+
|
105
|
+
expect( post.file_content ).to eq(
|
106
|
+
"---\ntitle: 'A third title: With colon'\ndate: '2011-07-26'\ntags:\n- some_tag\n- another tag\n- tag\npublished: false\n---\n\nFoo\n"
|
107
|
+
)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "does no formatting by default" do
|
111
|
+
post = WP2Middleman::MiddlemanPost.new post_two
|
112
|
+
|
113
|
+
expect( post.formatted_post_content ).to eq(" <strong>Foo</strong>")
|
114
|
+
end
|
115
|
+
|
116
|
+
it "does markdown formatting" do
|
117
|
+
post = WP2Middleman::MiddlemanPost.new post_two, body_to_markdown: true
|
118
|
+
|
119
|
+
expect( post.formatted_post_content ).to eq("**Foo**")
|
120
|
+
end
|
121
|
+
end
|
@@ -5,148 +5,67 @@ describe WP2Middleman::Migrator do
|
|
5
5
|
let(:migrator) { WP2Middleman::Migrator.new(file) }
|
6
6
|
|
7
7
|
it "exists as a class within the WP2Middleman module" do
|
8
|
-
WP2Middleman::Migrator.class.
|
8
|
+
expect(WP2Middleman::Migrator.class).to eq Class
|
9
9
|
end
|
10
10
|
|
11
11
|
describe "#migrate" do
|
12
|
-
|
13
12
|
before :each do
|
14
|
-
FileUtils.
|
15
|
-
File.
|
13
|
+
allow(FileUtils).to receive(:mkdir_p)
|
14
|
+
allow(File).to receive(:write)
|
16
15
|
end
|
17
16
|
|
18
17
|
it "ensures there is an export directory" do
|
19
|
-
File.
|
20
|
-
|
21
|
-
migrator.
|
22
|
-
end
|
18
|
+
allow(File).to receive(:open)
|
19
|
+
|
20
|
+
expect(migrator).to receive :ensure_export_directory
|
23
21
|
|
24
|
-
it "writes a middleman markdown file for each post" do
|
25
|
-
migrator.should_receive(:write_file).exactly(4).times
|
26
22
|
migrator.migrate
|
27
23
|
end
|
28
|
-
end
|
29
24
|
|
30
|
-
|
31
|
-
|
32
|
-
@post = migrator.posts[0]
|
33
|
-
end
|
25
|
+
it "writes a middleman markdown file for each post" do
|
26
|
+
expect(File).to receive(:write).exactly(4).times
|
34
27
|
|
35
|
-
|
36
|
-
migrator.should_receive(:valid_post_data).with(@post)
|
37
|
-
migrator.write_file(@post)
|
28
|
+
migrator.migrate
|
38
29
|
end
|
39
30
|
|
40
31
|
it "writes the proper markdown file" do
|
41
|
-
|
42
|
-
migrator.write_file(@post)
|
43
|
-
end
|
32
|
+
post = migrator.posts.first
|
44
33
|
|
45
|
-
|
46
|
-
|
47
|
-
File.should_receive(:write).with(migrator.file_content(@post))
|
48
|
-
migrator.write_file(@post)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "#file_content" do
|
53
|
-
it "properly formats a post as a Middleman-style post" do
|
54
|
-
expect(migrator.file_content(migrator.posts[1])).to eq("---\ntitle: A second title\ndate: '2011-07-25'\ntags:\n- some_tag\n- another tag\n- tag\n---\n\n <strong>Foo</strong>\n")
|
55
|
-
end
|
56
|
-
|
57
|
-
context "its behavior if @body_to_markdown is true" do
|
58
|
-
let(:migrator) { WP2Middleman::Migrator.new(file, body_to_markdown: true) }
|
34
|
+
allow(post).to receive(:file_content) { "content" }
|
35
|
+
allow(migrator).to receive(:valid_posts) { [post] }
|
59
36
|
|
60
|
-
|
61
|
-
expect(migrator.file_content(migrator.posts[1])).to eq("---\ntitle: A second title\ndate: '2011-07-25'\ntags:\n- some_tag\n- another tag\n- tag\n---\n\n**Foo**\n")
|
62
|
-
end
|
37
|
+
expect(File).to receive(:write).with("#{Dir.pwd}/export/2012-06-08-A-Title.html.markdown", "content")
|
63
38
|
|
64
|
-
|
65
|
-
expect(migrator.file_content(migrator.posts[3])).to eq("---\ntitle: A fourth item with iframe and comment\ndate: '2011-07-26'\ntags:\n- some_tag\n- another tag\n- tag\npublished: false\n---\n\nHere's a post with an iframe and a comment.\n\n\n<!--more-->\n\n\n<iframe width=\"400\" height=\"100\" style=\"position: relative; display: block; width: 400px; height: 100px;\" src=\"http://bandcamp.com/EmbeddedPlayer/v=2/track=833121761/size=venti/bgcol=FFFFFF/linkcol=4285BB/\" allowtransparency=\"true\" frameborder=\"0\"><a href=\"http://dihannmoore.bandcamp.com/track/you-do-it-for-me\">\"YOU DO IT FOR ME\" by DIHANN MOORE</a></iframe>\n")
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
context "the post is not published" do
|
70
|
-
it "reports 'published: false' in the post's frontmatter" do
|
71
|
-
expect(migrator.file_content(migrator.posts[2])).to eq("---\ntitle: 'A third title: With colon'\ndate: '2011-07-26'\ntags:\n- some_tag\n- another tag\n- tag\npublished: false\n---\n\nFoo\n")
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
describe "#formatted_post_content" do
|
77
|
-
it "returns the content of the post it's passed" do
|
78
|
-
expect(migrator.formatted_post_content(migrator.posts[1])).to eq(" <strong>Foo</strong>")
|
79
|
-
end
|
80
|
-
|
81
|
-
context "its behavior if @body_to_markdown is true" do
|
82
|
-
let(:migrator) { WP2Middleman::Migrator.new(file, body_to_markdown: true) }
|
83
|
-
|
84
|
-
it "returns the content of the post it's passed as markdown" do
|
85
|
-
expect(migrator.formatted_post_content(migrator.posts[1])).to eq("**Foo**")
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
describe "#full_filename" do
|
91
|
-
it "returns the full filename for a Middleman-style markdown post" do
|
92
|
-
expect(migrator.full_filename(migrator.posts[0])).to eq("#{Dir.pwd}/export/2012-06-08-A-Title.html.markdown")
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
describe "#valid_post_data" do
|
97
|
-
context "the post's #post_date, #title, #date_published, and #content are not nil" do
|
98
|
-
let(:post) {
|
99
|
-
double('Post',
|
100
|
-
:post_date => 'post_date',
|
101
|
-
:title => 'title',
|
102
|
-
:date_published => 'date_published',
|
103
|
-
:content => 'content'
|
104
|
-
)
|
105
|
-
}
|
106
|
-
|
107
|
-
it "returns true" do
|
108
|
-
expect(migrator.valid_post_data(post)).to eq(true)
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
context "the post's #post_date, #title, #date_published, or #content is nil" do
|
113
|
-
let(:post) {
|
114
|
-
double('Post',
|
115
|
-
:post_date => nil,
|
116
|
-
:title => 'title',
|
117
|
-
:date_published => 'date_published',
|
118
|
-
:content => 'content'
|
119
|
-
)
|
120
|
-
}
|
121
|
-
|
122
|
-
it "returns false" do
|
123
|
-
expect(migrator.valid_post_data(post)).to eq(false)
|
124
|
-
end
|
39
|
+
migrator.migrate
|
125
40
|
end
|
126
41
|
end
|
127
42
|
|
128
43
|
describe "#output_path" do
|
129
44
|
subject { migrator.output_path }
|
130
45
|
|
131
|
-
|
46
|
+
let(:export_path) { migrator.output_path }
|
47
|
+
|
48
|
+
it "reports the proper path to the export directory" do
|
49
|
+
expect(export_path).to eq "#{Dir.pwd}/export/"
|
50
|
+
end
|
132
51
|
end
|
133
52
|
|
134
53
|
describe "#ensure_export_directory" do
|
135
54
|
it "makes the export directory if it's not already there" do
|
136
|
-
File.
|
55
|
+
allow(File).to receive(:directory?) { false }
|
137
56
|
|
138
|
-
FileUtils.
|
57
|
+
expect(FileUtils).to receive(:mkdir_p).with("#{Dir.pwd}/export/")
|
139
58
|
|
140
59
|
migrator.ensure_export_directory
|
141
60
|
end
|
142
61
|
|
143
62
|
context "the export directory is already there" do
|
144
63
|
it "does not create it" do
|
145
|
-
File.
|
64
|
+
allow(File).to receive(:directory?) { true }
|
146
65
|
|
147
66
|
migrator.ensure_export_directory
|
148
67
|
|
149
|
-
FileUtils.
|
68
|
+
expect(FileUtils).not_to receive(:mkdir_p).with("#{Dir.pwd}/export/")
|
150
69
|
end
|
151
70
|
end
|
152
71
|
end
|
@@ -2,15 +2,27 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe WP2Middleman::PostCollection do
|
4
4
|
let(:file) { 'spec/fixtures/fixture.xml' }
|
5
|
-
let(:posts) { WP2Middleman::PostCollection.new(file).posts }
|
6
5
|
|
7
6
|
it "exists as a class within the WP2Middleman module" do
|
8
|
-
WP2Middleman::PostCollection.class.
|
7
|
+
expect(WP2Middleman::PostCollection.class).to eq Class
|
9
8
|
end
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
it "contains a Post object for every word press item" do
|
11
|
+
posts = WP2Middleman::PostCollection.from_file(file)
|
12
|
+
|
13
|
+
expect(posts).to_not be_empty
|
14
|
+
|
15
|
+
posts.each do |post|
|
16
|
+
expect(post).to be_a WP2Middleman::Post
|
14
17
|
end
|
15
18
|
end
|
19
|
+
|
20
|
+
it "can reject attachments" do
|
21
|
+
post = double :post, attachment?: false
|
22
|
+
attachment = double :post, attachment?: true
|
23
|
+
|
24
|
+
post_collection = WP2Middleman::PostCollection.new([post, attachment]).without_attachments
|
25
|
+
|
26
|
+
expect(post_collection.to_a).to eq([post])
|
27
|
+
end
|
16
28
|
end
|
@@ -7,60 +7,48 @@ describe WP2Middleman::Post do
|
|
7
7
|
let(:post_three) { WP2Middleman::Post.new(file.css('item')[2]) }
|
8
8
|
|
9
9
|
it "exists as a class within the WP2Middleman module" do
|
10
|
-
WP2Middleman::Post.class.
|
10
|
+
expect(WP2Middleman::Post.class).to eq Class
|
11
11
|
end
|
12
12
|
|
13
13
|
describe "#title" do
|
14
14
|
subject { post_one.title }
|
15
15
|
|
16
|
-
it {
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "#title_for_filename" do
|
20
|
-
subject { post_one.title_for_filename }
|
21
|
-
|
22
|
-
it { should eq "A-Title" }
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "#filename" do
|
26
|
-
subject { post_one.filename }
|
27
|
-
|
28
|
-
it { should eq "2012-06-08-A-Title" }
|
29
|
-
|
30
|
-
context "post titles with odd characters such as colons" do
|
31
|
-
subject { post_three.filename }
|
32
|
-
|
33
|
-
it { should eq "2011-07-26-A-third-title-With-colon" }
|
34
|
-
end
|
16
|
+
it { is_expected.to eq "A Title" }
|
35
17
|
end
|
36
18
|
|
37
19
|
describe "#post_date" do
|
38
20
|
subject { post_one.post_date }
|
39
21
|
|
40
|
-
it {
|
22
|
+
it { is_expected.to eq "2012-06-08 03:21:41" }
|
41
23
|
end
|
42
24
|
|
43
25
|
describe "#date_published" do
|
44
26
|
subject { post_one.date_published }
|
45
27
|
|
46
|
-
it {
|
28
|
+
it { is_expected.to eq "2012-06-08" }
|
47
29
|
end
|
48
30
|
|
49
31
|
describe "#status" do
|
50
32
|
subject { post_three.status }
|
51
33
|
|
52
|
-
it {
|
34
|
+
it { is_expected.to eq "private" }
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#field" do
|
38
|
+
subject { post_one.field('wp:post_id') }
|
39
|
+
|
40
|
+
it { is_expected.to eq "84" }
|
53
41
|
end
|
54
42
|
|
55
43
|
describe "#published?" do
|
56
44
|
subject { post_one.published? }
|
57
45
|
|
58
|
-
it {
|
46
|
+
it { is_expected.to eq true }
|
59
47
|
|
60
48
|
context "#status is not 'publish'" do
|
61
49
|
subject { post_three.published? }
|
62
50
|
|
63
|
-
it {
|
51
|
+
it { is_expected.to eq false }
|
64
52
|
|
65
53
|
end
|
66
54
|
end
|
@@ -68,24 +56,51 @@ describe WP2Middleman::Post do
|
|
68
56
|
describe "#content" do
|
69
57
|
subject { post_one.content }
|
70
58
|
|
71
|
-
it {
|
72
|
-
end
|
73
|
-
|
74
|
-
describe "#markdown_content" do
|
75
|
-
subject { post_two.markdown_content }
|
76
|
-
|
77
|
-
it { should eq "**Foo**" }
|
59
|
+
it { is_expected.to eq "Paragraph one.\n\n Paragraph two.\n " }
|
78
60
|
end
|
79
61
|
|
80
62
|
describe "#tags" do
|
81
63
|
subject { post_two.tags }
|
82
64
|
|
83
|
-
it {
|
65
|
+
it { is_expected.to eq ["some_tag", "another tag", "tag"] }
|
84
66
|
|
85
67
|
context "the post only has an 'Uncategorized' tag" do
|
86
68
|
subject { post_one.tags }
|
87
69
|
|
88
|
-
it {
|
70
|
+
it { is_expected.to eq [] }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "#valid?" do
|
75
|
+
def post(post_date: Date.new(2014,2,19), title: "Title", date_published: Date.new(2014,2,19), content: "content")
|
76
|
+
post = WP2Middleman::Post.new(double)
|
77
|
+
|
78
|
+
allow(post).to receive(:post_date) { post_date }
|
79
|
+
allow(post).to receive(:title) { title }
|
80
|
+
allow(post).to receive(:date_published) { date_published }
|
81
|
+
allow(post).to receive(:content) { content }
|
82
|
+
|
83
|
+
post
|
84
|
+
end
|
85
|
+
|
86
|
+
it "is valid with post_date, title, date_published, and content" do
|
87
|
+
expect(post).to be_valid
|
88
|
+
end
|
89
|
+
|
90
|
+
it "is not valid without post_date" do
|
91
|
+
expect(post(post_date: nil)).to_not be_valid
|
92
|
+
end
|
93
|
+
|
94
|
+
it "is not valid without a title" do
|
95
|
+
expect(post(title: nil)).to_not be_valid
|
96
|
+
end
|
97
|
+
|
98
|
+
it "is not valid without a date_published" do
|
99
|
+
expect(post(date_published: nil)).to_not be_valid
|
100
|
+
end
|
101
|
+
|
102
|
+
it "is not valid without content" do
|
103
|
+
expect(post(content: nil)).to_not be_valid
|
89
104
|
end
|
90
105
|
end
|
91
106
|
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe WP2Middleman do
|
4
4
|
it "exists as a module" do
|
5
|
-
WP2Middleman.class.
|
5
|
+
expect(WP2Middleman.class).to eq Module
|
6
6
|
end
|
7
7
|
|
8
8
|
describe ".migrate" do
|
@@ -11,8 +11,8 @@ describe WP2Middleman do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "migrates the posts in the wordpress XML export file it's passed" do
|
14
|
-
WP2Middleman::Migrator.
|
15
|
-
@migrator_double.
|
14
|
+
expect(WP2Middleman::Migrator).to receive(:new).with('foo', body_to_markdown: false, include_fields: []).and_return(@migrator_double)
|
15
|
+
expect(@migrator_double).to receive(:migrate)
|
16
16
|
|
17
17
|
WP2Middleman.migrate 'foo'
|
18
18
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
$0 = "wp2mm"
|
2
|
+
ARGV.clear
|
3
|
+
|
4
|
+
module CLIHelpers
|
5
|
+
def capture(stream)
|
6
|
+
begin
|
7
|
+
stream = stream.to_s
|
8
|
+
eval "$#{stream} = StringIO.new"
|
9
|
+
yield
|
10
|
+
result = eval("$#{stream}").string
|
11
|
+
ensure
|
12
|
+
eval("$#{stream} = #{stream.upcase}")
|
13
|
+
end
|
14
|
+
|
15
|
+
result
|
16
|
+
end
|
17
|
+
end
|
@@ -10,12 +10,12 @@ RSpec::Matchers.define :exit_with_code do |exp_code|
|
|
10
10
|
actual and actual == exp_code
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
failure_message do |block|
|
14
14
|
"expected block to call exit(#{exp_code}) but exit" +
|
15
15
|
(actual.nil? ? " not called" : "(#{actual}) was called")
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
failure_message_when_negated do |block|
|
19
19
|
"expected block not to call exit(#{exp_code})"
|
20
20
|
end
|
21
21
|
|
data/wp2middleman.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = WP2Middleman::VERSION
|
9
9
|
spec.authors = ["Mike Ball"]
|
10
10
|
spec.email = ["mikedball@gmail.com"]
|
11
|
-
spec.description = %q{Migrate a Wordpress export XML file to
|
12
|
-
spec.summary = %q{Migrate
|
11
|
+
spec.description = %q{Migrate a Wordpress export XML file to Middleman-style markdown files}
|
12
|
+
spec.summary = %q{Migrate Wordpress blog posts to Middleman-style markdown files}
|
13
13
|
spec.homepage = "http://github.com/mdb/wp2middleman"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wp2middleman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Ball
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -108,7 +108,7 @@ dependencies:
|
|
108
108
|
- - '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
-
description: Migrate a Wordpress export XML file to
|
111
|
+
description: Migrate a Wordpress export XML file to Middleman-style markdown files
|
112
112
|
email:
|
113
113
|
- mikedball@gmail.com
|
114
114
|
executables:
|
@@ -127,17 +127,22 @@ files:
|
|
127
127
|
- bin/wp2mm
|
128
128
|
- lib/wp2middleman.rb
|
129
129
|
- lib/wp2middleman/cli.rb
|
130
|
+
- lib/wp2middleman/frontmatter.rb
|
131
|
+
- lib/wp2middleman/middleman_post.rb
|
130
132
|
- lib/wp2middleman/migrator.rb
|
131
133
|
- lib/wp2middleman/post.rb
|
132
134
|
- lib/wp2middleman/post_collection.rb
|
133
135
|
- lib/wp2middleman/version.rb
|
134
136
|
- spec/fixtures/fixture.xml
|
135
137
|
- spec/lib/wp2middleman/cli_spec.rb
|
138
|
+
- spec/lib/wp2middleman/frontmatter_spec.rb
|
139
|
+
- spec/lib/wp2middleman/middleman_post_spec.rb
|
136
140
|
- spec/lib/wp2middleman/migrator_spec.rb
|
137
141
|
- spec/lib/wp2middleman/post_collection_spec.rb
|
138
142
|
- spec/lib/wp2middleman/post_spec.rb
|
139
143
|
- spec/lib/wp2middleman_spec.rb
|
140
144
|
- spec/spec_helper.rb
|
145
|
+
- spec/support/cli_helpers.rb
|
141
146
|
- spec/support/matchers/exit_with_code.rb
|
142
147
|
- wp2middleman.gemspec
|
143
148
|
homepage: http://github.com/mdb/wp2middleman
|
@@ -160,17 +165,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
165
|
version: '0'
|
161
166
|
requirements: []
|
162
167
|
rubyforge_project:
|
163
|
-
rubygems_version: 2.
|
168
|
+
rubygems_version: 2.2.2
|
164
169
|
signing_key:
|
165
170
|
specification_version: 4
|
166
|
-
summary: Migrate
|
171
|
+
summary: Migrate Wordpress blog posts to Middleman-style markdown files
|
167
172
|
test_files:
|
168
173
|
- spec/fixtures/fixture.xml
|
169
174
|
- spec/lib/wp2middleman/cli_spec.rb
|
175
|
+
- spec/lib/wp2middleman/frontmatter_spec.rb
|
176
|
+
- spec/lib/wp2middleman/middleman_post_spec.rb
|
170
177
|
- spec/lib/wp2middleman/migrator_spec.rb
|
171
178
|
- spec/lib/wp2middleman/post_collection_spec.rb
|
172
179
|
- spec/lib/wp2middleman/post_spec.rb
|
173
180
|
- spec/lib/wp2middleman_spec.rb
|
174
181
|
- spec/spec_helper.rb
|
182
|
+
- spec/support/cli_helpers.rb
|
175
183
|
- spec/support/matchers/exit_with_code.rb
|
176
|
-
has_rdoc:
|