jekyll-import 0.18.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7150e73e2288d52c065007c00b4bce4fcd92b2203056683c4eff9f7ade2e27a6
4
- data.tar.gz: a27cdbada366a98ae01915a232421c299d8353a91dfed226c171f62bddfe248b
3
+ metadata.gz: 5e0c80e9a51361d575c8282c0dd6f813d24cf36423fcbe891a4dcda8c2410003
4
+ data.tar.gz: 8067c22cc55a955283967999590cecc4ea5f6fd212005b62919d811cb76bcc9b
5
5
  SHA512:
6
- metadata.gz: 861703cb70648e22c12cbce8063882365a0415a5245be2a647855eaa85b7f80650fa4ef704f654ec947c5827f6c5ed8caa6cd23f3ad2d9cabb2f0e44df35ee88
7
- data.tar.gz: bf71067488ed4d50cd27dedd56a7a97b56d8cd9e70bf8993d3f0b37dd1a0b8070207da8812f2eb9ed289283efa5409ed99e85e62c9860c32b91e2fa62b787637
6
+ metadata.gz: 9ea2f084457d3192cece261e1e98511e4cf0219e62afb5d3c2b50f8c957e76fe82f85ae9b5c55beebf4c8b6c15f8acbd17da00dca245253af5ddc3a9a84888b7
7
+ data.tar.gz: f5abebbb51120ba3877075eaf82f4a02c07e3253011b75c996e3f1c9aa5ab9533e66775f5041702bda739513ad1e5fa600775c5e3b7e60d452422edc85507aec
@@ -0,0 +1,124 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Tested with dotClear 2.1.5
4
+ module JekyllImport
5
+ module Importers
6
+ class Dotclear < Importer
7
+ def self.specify_options(c)
8
+ c.option "datafile", "--datafile PATH", "dotClear export file"
9
+ c.option "mediafolder", "--mediafolder PATH", "dotClear media export folder (media.zip inflated)"
10
+ end
11
+
12
+ def self.require_deps
13
+ JekyllImport.require_with_fallback(%w(
14
+ rubygems
15
+ fileutils
16
+ safe_yaml
17
+ date
18
+ active_support
19
+ active_support/core_ext/string/inflections
20
+ csv
21
+ pp
22
+ ))
23
+ end
24
+
25
+ def self.validate(opts)
26
+ abort "Specify a data file !" if opts["datafile"].nil? || opts["datafile"].empty?
27
+ abort "Specify a media folder !" if opts["mediafolder"].nil? || opts["mediafolder"].empty?
28
+ end
29
+
30
+ def self.extract_headers_section(str)
31
+ str[1..-2].split(" ")[1].split(",")
32
+ end
33
+
34
+ def self.extract_data_section(str)
35
+ str.gsub(%r!^"!, "").gsub(%r!"$!, "").split('","')
36
+ end
37
+
38
+ def self.process(opts)
39
+ options = {
40
+ :datafile => opts.fetch("datafile", ""),
41
+ :mediafolder => opts.fetch("mediafolder", ""),
42
+ }
43
+
44
+ FileUtils.mkdir_p("_posts")
45
+ FileUtils.mkdir_p("_drafts")
46
+
47
+ type_data = ""
48
+ headers = {}
49
+ posts_and_drafts = {}
50
+ keywords = {}
51
+
52
+ File.readlines(options[:datafile]).each do |lineraw|
53
+ line = lineraw.strip.gsub(%r!\n$!, "")
54
+
55
+ next if line.empty?
56
+
57
+ if line.start_with?("[") # post | media \ meta | comment...
58
+ type_data = line.split(" ").first[1..-1]
59
+ headers[type_data] = extract_headers_section(line)
60
+ next
61
+ end
62
+
63
+ elts = extract_data_section(line)
64
+
65
+ if type_data == "post"
66
+ draft = (elts[headers[type_data].index("post_status")] != "1")
67
+
68
+ date_str = elts[headers[type_data].index("post_creadt")]
69
+ date_blank = (date_str.nil? || date_str.empty?)
70
+ date_str_formatted = date_blank ? Date.today : Date.parse(date_str).strftime("%Y-%m-%d")
71
+ title_param = elts[headers[type_data].index("post_title")].to_s.parameterize
72
+
73
+ content = elts[headers[type_data].index("post_content_xhtml")].to_s
74
+ content = content.gsub('\"', '"').gsub('\n', "\n").gsub("/public/", "/assets/images/")
75
+
76
+ filepath = File.join(Dir.pwd, (draft ? "_drafts" : "_posts"), "#{date_str_formatted}-#{title_param}.html")
77
+
78
+ entire_content_file = <<~POST_FILE
79
+ ---
80
+ layout: post
81
+ title: "#{elts[headers[type_data].index("post_title")]}"
82
+ date: #{elts[headers[type_data].index("post_creadt")]} +0100
83
+ tags: ABC
84
+ ---
85
+
86
+ #{content}
87
+ POST_FILE
88
+
89
+ posts_and_drafts[elts[headers[type_data].index("post_id")]] = { :path => filepath, :content => entire_content_file }
90
+ elsif type_data == "media"
91
+ elts[headers[type_data].index("media_title")]
92
+ mediafilepath = elts[headers[type_data].index("media_file")]
93
+
94
+ src_path = File.join(options[:mediafolder], mediafilepath)
95
+ dst_path = File.join(Dir.pwd, "assets", "images", mediafilepath.to_s)
96
+
97
+ FileUtils.mkdir_p(File.dirname(dst_path))
98
+ FileUtils.cp(src_path, dst_path)
99
+ elsif type_data == "meta"
100
+ keywords[elts[headers[type_data].index("post_id")]] ||= []
101
+ keywords[elts[headers[type_data].index("post_id")]] << elts[headers[type_data].index("meta_id")]
102
+ elsif type_data == "link"
103
+
104
+ elsif type_data == "setting"
105
+
106
+ elsif type_data == "comment"
107
+
108
+ end
109
+ end
110
+
111
+ # POST-process : Change media path in posts and drafts
112
+ posts_and_drafts.each do |post_id, hsh|
113
+ keywords_str = keywords[post_id].to_a.join(", ")
114
+ content_file = hsh[:content]
115
+ content_file = content_file.gsub("tags: ABC", "tags: [#{keywords_str}]")
116
+
117
+ File.open(hsh[:path], "wb") do |f|
118
+ f.write(content_file)
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
@@ -80,7 +80,7 @@ module JekyllImport
80
80
  begin
81
81
  require "htmlentities"
82
82
  rescue LoadError
83
- STDERR.puts "Could not require 'htmlentities', so the :clean_entities option is now disabled."
83
+ warn "Could not require 'htmlentities', so the :clean_entities option is now disabled."
84
84
  options[:clean_entities] = false
85
85
  end
86
86
  end
@@ -41,9 +41,7 @@ module JekyllImport
41
41
 
42
42
  rss.items.each do |item|
43
43
  formatted_date = item.date.strftime("%Y-%m-%d")
44
- post_name = item.title.split(%r{ |!|/|:|&|-|$|,}).map do |i|
45
- i.downcase if i != ""
46
- end.compact.join("-")
44
+ post_name = Jekyll::Utils.slugify(item.title, :mode => "latin")
47
45
  name = "#{formatted_date}-#{post_name}"
48
46
 
49
47
  header = {
@@ -51,18 +49,21 @@ module JekyllImport
51
49
  "title" => item.title,
52
50
  }
53
51
 
54
- header["tag"] = options["tag"] unless options.to_s.empty?
52
+ header["tag"] = options["tag"] unless options["tag"].nil? || options["tag"].empty?
55
53
 
56
54
  frontmatter.each do |value|
57
55
  header[value] = item.send(value)
58
56
  end
59
57
 
60
- output = ""
58
+ output = +""
61
59
 
62
60
  body.each do |row|
63
- output += item.send(row)
61
+ output << item.send(row).to_s
64
62
  end
65
63
 
64
+ output.strip!
65
+ output = item.content_encoded if output.empty?
66
+
66
67
  FileUtils.mkdir_p("_posts")
67
68
 
68
69
  File.open("_posts/#{name}.html", "w") do |f|
@@ -207,7 +207,7 @@ module JekyllImport
207
207
  require gem_name
208
208
  true
209
209
  rescue LoadError
210
- STDERR.puts "Could not require '#{gem_name}', so the :#{option_name} option is now disabled."
210
+ warn "Could not require '#{gem_name}', so the :#{option_name} option is now disabled."
211
211
  true
212
212
  end
213
213
 
@@ -101,7 +101,7 @@ module JekyllImport
101
101
  begin
102
102
  require "htmlentities"
103
103
  rescue LoadError
104
- STDERR.puts "Could not require 'htmlentities', so the " \
104
+ warn "Could not require 'htmlentities', so the " \
105
105
  ":clean_entities option is now disabled."
106
106
  options[:clean_entities] = false
107
107
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JekyllImport
4
- VERSION = "0.18.1"
4
+ VERSION = "0.19.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-import
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.1
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Preston-Werner
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-03-23 00:00:00.000000000 Z
13
+ date: 2019-06-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: fastercsv
@@ -370,6 +370,7 @@ files:
370
370
  - lib/jekyll-import/importers/behance.rb
371
371
  - lib/jekyll-import/importers/blogger.rb
372
372
  - lib/jekyll-import/importers/csv.rb
373
+ - lib/jekyll-import/importers/dotclear.rb
373
374
  - lib/jekyll-import/importers/drupal6.rb
374
375
  - lib/jekyll-import/importers/drupal7.rb
375
376
  - lib/jekyll-import/importers/drupal_common.rb