Class: JekyllImport::Importers::Pebble
Class Method Summary
collapse
inherited, run, stringify_keys, subclasses
Class Method Details
.kebabize(string) ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/jekyll-import/importers/pebble.rb', line 71
def self.kebabize(string)
kebab = "-".freeze
string.gsub!(%r![^\w\-_]+!, kebab)
unless kebab.nil? || kebab.empty?
if kebab == "-".freeze
re_duplicate_kebab = %r!-{2,}!
re_leading_trailing_kebab = %r!^-|-$!
else
re_sep = Regexp.escape(kebab)
re_duplicate_kebab = %r!#{re_sep}{2,}!
re_leading_trailing_kebab = %r!^#{re_sep}|#{re_sep}$!
end
string.gsub!(re_duplicate_kebab, kebab)
string.gsub!(re_leading_trailing_kebab, "".freeze)
end
string.downcase!
string
end
|
.process(opts) ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/jekyll-import/importers/pebble.rb', line 17
def self.process(opts)
options = { :directory => opts.fetch("directory", "") }
FileUtils.mkdir_p("_posts")
FileUtils.mkdir_p("_drafts")
traverse_posts_within(options[:directory]) do |file|
next if file.end_with?("categories.xml")
process_file(file)
end
end
|
.process_file(file) ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/jekyll-import/importers/pebble.rb', line 41
def self.process_file(file)
xml = File.open(file) { |f| Nokogiri::XML(f) }
raise "There doesn't appear to be any XML items at the source (#{file}) provided." unless xml
doc = xml.xpath("blogEntry")
title = kebabize(doc.xpath("title").text).tr("_", "-")
date = Date.parse(doc.xpath("date").text)
directory = "_posts"
name = "#{date.strftime("%Y-%m-%d")}-#{title}"
= {
"layout" => "post",
"title" => doc.xpath("title").text,
"tags" => doc.xpath("tags").text.split(", "),
"categories" => doc.xpath("category").text.split(", "),
}
["render_with_liquid"] = false
path = File.join(directory, "#{name}.html")
File.open(path, "w") do |f|
f.puts .to_yaml
f.puts "---\n\n"
f.puts doc.xpath("body").text
end
Jekyll.logger.info "Wrote file #{path} successfully!"
end
|
.require_deps ⇒ Object
6
7
8
9
10
11
|
# File 'lib/jekyll-import/importers/pebble.rb', line 6
def self.require_deps
JekyllImport.require_with_fallback(%w(
nokogiri
safe_yaml
))
end
|
.specify_options(c) ⇒ Object
13
14
15
|
# File 'lib/jekyll-import/importers/pebble.rb', line 13
def self.specify_options(c)
c.option "directory", "--directory PATH", "Pebble source directory"
end
|
.traverse_posts_within(directory, &block) ⇒ Object
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/jekyll-import/importers/pebble.rb', line 30
def self.traverse_posts_within(directory, &block)
Dir.each_child(directory) do |fd|
path = File.join(directory, fd)
if File.directory?(path)
traverse_posts_within(path, &block)
elsif path.end_with?("xml")
yield(path) if block_given?
end
end
end
|