jekyll-import 0.4.1 → 0.5.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
  SHA1:
3
- metadata.gz: 3ea4fc21b7d8bde846159c3822251b2192274fa8
4
- data.tar.gz: 2ab2c876e9b3e440eba999232d45665f0ba7ff7d
3
+ metadata.gz: b24802c3b5f7734905bef82ba555c97b273b1139
4
+ data.tar.gz: 6c1da2b13f4727a49144d84f140cc1fe91151d7e
5
5
  SHA512:
6
- metadata.gz: bbbb4b901182d17af3d0ed0432f6443b9051cd9d3976f95108931806c82fc98342218df4a6b3750705269a88b8bce73b4f236763d5e8713d8591366189b73666
7
- data.tar.gz: 6f6a0fbcf76c5a05908e8e9aba0bc8f9e3a5c9cd832a671b20b6f32d4758f69f94ac96779aa53d0bff8c151a4923a7b32cb582b21d4d173e0456e587c99f237a
6
+ metadata.gz: 889cf9c39a18ff9c0903ec4e154683fb895315b3cc916a5fb44559f0ef1ef47e31a17086586f72f5a4bfc3ab409825698398577856085a71a8efe0c755181b96
7
+ data.tar.gz: a4432acb1e4c9ecbb47e53472fa48c7fdb411b5d399c2c91573b953250c87b50fe6817fe7b19ba4311115293e560d68b5aabedb119c01032af04e7fbc71bd73b
@@ -0,0 +1,251 @@
1
+ module JekyllImport
2
+ module Importers
3
+ class Blogger < Importer
4
+ def self.specify_options(c)
5
+ c.option 'source', '--source NAME', 'The XML file (blog-MM-DD-YYYY.xml) path to import'
6
+ c.option 'no-blogger-info', '--no-blogger-info', 'not to leave blogger-URL info (id and old URL) in the front matter (default: false)'
7
+ c.option 'replace-internal-link', '--replace-internal-link', 'replace internal links using the post_url liquid tag. (default: false)'
8
+ end
9
+
10
+ def self.validate(options)
11
+ if options['source'].nil?
12
+ raise 'Missing mandatory option: --source'
13
+ elsif not File.exist?(options['source'])
14
+ raise Errno::ENOENT, "File not found: #{options['source']}"
15
+ end
16
+ end
17
+
18
+ def self.require_deps
19
+ JekyllImport.require_with_fallback(%w[
20
+ rexml/document
21
+ rexml/streamlistener
22
+ rexml/parsers/streamparser
23
+ uri
24
+ time
25
+ fileutils
26
+ safe_yaml
27
+ ])
28
+ end
29
+
30
+ # Process the import.
31
+ #
32
+ # source:: a local file String (or IO object for internal use purpose)..
33
+ # no-blogger-info:: a boolean if not leave blogger info (id and original URL).
34
+ # replace-internal-link:: a boolean if replace internal link
35
+ #
36
+ # Returns nothing.
37
+ def self.process(options)
38
+ source = options.fetch('source')
39
+
40
+ listener = BloggerAtomStreamListener.new
41
+
42
+ listener.leave_blogger_info = ! options.fetch('no-blogger-info', false),
43
+
44
+ File.open(source, 'r') do |f|
45
+ f.flock(File::LOCK_SH)
46
+ REXML::Parsers::StreamParser.new(f, listener).parse()
47
+ end
48
+
49
+ options['original-url-base'] = listener.original_url_base
50
+
51
+ postprocess(options)
52
+ end
53
+
54
+ # Post-process after import.
55
+ #
56
+ # replace-internal-link:: a boolean if replace internal link
57
+ #
58
+ # Returns nothing.
59
+ def self.postprocess(options)
60
+ # Replace internal link URL
61
+ if options.fetch('replace-internal-link', false)
62
+ original_url_base = options.fetch('original-url-base', nil)
63
+ if original_url_base
64
+ orig_url_pattern = Regexp.new(" href=([\"\'])(?:#{Regexp.escape(original_url_base)})?/([0-9]{4})/([0-9]{2})/([^\"\']+\.html)\\1")
65
+
66
+ Dir.glob('_posts/*.*') do |filename|
67
+ body = nil
68
+ File.open(filename, 'r') do |f|
69
+ f.flock(File::LOCK_SH)
70
+ body = f.read
71
+ end
72
+
73
+ body.gsub!(orig_url_pattern) do
74
+ # for post_url
75
+ quote = $1
76
+ post_file = Dir.glob("_posts/#{$2}-#{$3}-*-#{$4.to_s.tr('/', '-')}").first
77
+ raise "Could not found: _posts/#{$2}-#{$3}-*-#{$4.to_s.tr('/', '-')}" if post_file.nil?
78
+ " href=#{quote}{{ site.baseurl }}{% post_url #{File.basename(post_file, '.html')} %}#{quote}"
79
+ end
80
+
81
+ File.open(filename, 'w') do |f|
82
+ f.flock(File::LOCK_EX)
83
+ f << body
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ class BloggerAtomStreamListener
91
+ def initialize
92
+ # use `extend` instead of `include` to use `require_deps` instead of `require`.
93
+ extend REXML::StreamListener
94
+ extend BloggerAtomStreamListenerMethods
95
+
96
+ @leave_blogger_info = true
97
+ end
98
+ end
99
+
100
+ module BloggerAtomStreamListenerMethods
101
+ attr_accessor :leave_blogger_info
102
+ attr_reader :original_url_base
103
+
104
+ def tag_start(tag, attrs)
105
+ @tag_bread = [] unless @tag_bread
106
+ @tag_bread.push(tag)
107
+
108
+ case tag
109
+ when 'entry'
110
+ raise 'nest entry element' if @in_entry_elem
111
+ @in_entry_elem = {:meta => {}, :body => nil}
112
+ when 'title'
113
+ if @in_entry_elem
114
+ raise 'only <title type="text"></title> is supported' if attrs['type'] != 'text'
115
+ end
116
+ when 'category'
117
+ if @in_entry_elem
118
+ if attrs['scheme'] == 'http://www.blogger.com/atom/ns#'
119
+ @in_entry_elem[:meta][:category] = [] unless @in_entry_elem[:meta][:category]
120
+ @in_entry_elem[:meta][:category] << attrs['term']
121
+ elsif attrs['scheme'] == 'http://schemas.google.com/g/2005#kind'
122
+ kind = attrs['term']
123
+ kind.sub!(Regexp.new("^http://schemas\\.google\\.com/blogger/2008/kind\\#"), '')
124
+ @in_entry_elem[:meta][:kind] = kind
125
+ end
126
+ end
127
+ when 'content'
128
+ if @in_entry_elem
129
+ @in_entry_elem[:meta][:content_type] = attrs['type']
130
+ end
131
+ when 'link'
132
+ if @in_entry_elem
133
+ if attrs['rel'] == 'alternate' && attrs['type'] == 'text/html'
134
+ @in_entry_elem[:meta][:original_url] = attrs['href']
135
+ elsif attrs['rel'] == 'replies' && attrs['type'] == 'text/html'
136
+ unless @in_entry_elem[:meta][:original_url]
137
+ @in_entry_elem[:meta][:original_url] = attrs['href'].sub(/\#comment-form$/, '')
138
+ end
139
+ end
140
+ end
141
+ when 'media:thumbnail'
142
+ if @in_entry_elem
143
+ @in_entry_elem[:meta][:thumbnail] = attrs['url']
144
+ end
145
+ end
146
+ end
147
+
148
+ def text(text)
149
+ if @in_entry_elem
150
+ case @tag_bread.last
151
+ when 'id'
152
+ @in_entry_elem[:meta][:id] = text
153
+ when 'published'
154
+ @in_entry_elem[:meta][:published] = text
155
+ when 'updated'
156
+ @in_entry_elem[:meta][:updated] = text
157
+ when 'title'
158
+ @in_entry_elem[:meta][:title] = text
159
+ when 'content'
160
+ @in_entry_elem[:body] = text
161
+ when 'name'
162
+ if @tag_bread[-2..-1] == %w[author name]
163
+ @in_entry_elem[:meta][:author] = text
164
+ end
165
+ when 'app:draft'
166
+ if @tag_bread[-2..-1] == %w[app:control app:draft]
167
+ @in_entry_elem[:meta][:draft] = true if text == 'yes'
168
+ end
169
+ end
170
+ end
171
+ end
172
+
173
+ def tag_end(tag)
174
+ case tag
175
+ when 'entry'
176
+ raise 'nest entry element' unless @in_entry_elem
177
+
178
+ if @in_entry_elem[:meta][:kind] == 'post'
179
+ post_data = get_post_data_from_in_entry_elem_info
180
+
181
+ if post_data
182
+ target_dir = '_posts'
183
+ target_dir = '_drafts' if @in_entry_elem[:meta][:draft]
184
+
185
+ FileUtils.mkdir_p(target_dir)
186
+
187
+ File.open(File.join(target_dir, "#{post_data[:filename]}.html"), 'w') do |f|
188
+ f.flock(File::LOCK_EX)
189
+
190
+ f << post_data[:header].to_yaml
191
+ f << "---\n\n"
192
+ f << post_data[:body]
193
+ end
194
+ end
195
+ end
196
+
197
+ @in_entry_elem = nil
198
+ end
199
+
200
+ @tag_bread.pop
201
+ end
202
+
203
+ def get_post_data_from_in_entry_elem_info
204
+ if (@in_entry_elem.nil? || ! @in_entry_elem.has_key?(:meta) || ! @in_entry_elem[:meta].has_key?(:kind))
205
+ nil
206
+ elsif @in_entry_elem[:meta][:kind] == 'post'
207
+ if @in_entry_elem[:meta][:original_url]
208
+ original_uri = URI.parse(@in_entry_elem[:meta][:original_url])
209
+ original_path = original_uri.path.to_s
210
+ filename = "%s-%s" %
211
+ [Time.parse(@in_entry_elem[:meta][:published]).strftime('%Y-%m-%d'),
212
+ File.basename(original_path, File.extname(original_path))]
213
+
214
+ @original_url_base = "#{original_uri.scheme}://#{original_uri.host}"
215
+ else
216
+ raise 'Original URL is missing'
217
+ end
218
+
219
+ header = {
220
+ 'layout' => 'post',
221
+ 'title' => @in_entry_elem[:meta][:title],
222
+ 'date' => @in_entry_elem[:meta][:published],
223
+ 'author' => @in_entry_elem[:meta][:author],
224
+ 'tags' => @in_entry_elem[:meta][:category],
225
+ }
226
+ header['modified_time'] = @in_entry_elem[:meta][:updated] if @in_entry_elem[:meta][:updated] && @in_entry_elem[:meta][:updated] != @in_entry_elem[:meta][:published]
227
+ header['thumbnail'] = @in_entry_elem[:meta][:thumbnail] if @in_entry_elem[:meta][:thumbnail]
228
+ header['blogger_id'] = @in_entry_elem[:meta][:id] if @leave_blogger_info
229
+ header['blogger_orig_url'] = @in_entry_elem[:meta][:original_url] if @leave_blogger_info
230
+
231
+ body = @in_entry_elem[:body]
232
+
233
+ # body escaping associated with liquid
234
+ if body =~ /{{/
235
+ body.gsub!(/{{/, '{{ "{{" }}')
236
+ end
237
+ if body =~ /{%/
238
+ body.gsub!(/{%/, '{{ "{%" }}')
239
+ end
240
+
241
+ { :filename => filename, :header => header, :body => body }
242
+ else
243
+ nil
244
+ end
245
+ end
246
+
247
+ end
248
+
249
+ end
250
+ end
251
+ end
@@ -1,9 +1,3 @@
1
- # NOTE: This converter requires Sequel and the MySQL gems.
2
- # The MySQL gem can be difficult to install on OS X. Once you have MySQL
3
- # installed, running the following commands should work:
4
- # $ sudo gem install sequel
5
- # $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
6
-
7
1
  module JekyllImport
8
2
  module Importers
9
3
  class Drupal6 < Importer
@@ -1,9 +1,3 @@
1
- # NOTE: This converter requires Sequel and the MySQL gems.
2
- # The MySQL gem can be difficult to install on OS X. Once you have MySQL
3
- # installed, running the following commands should work:
4
- # $ sudo gem install sequel
5
- # $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
6
-
7
1
  module JekyllImport
8
2
  module Importers
9
3
  class Drupal7 < Importer
@@ -1,10 +1,3 @@
1
- # NOTE: This migrator is made for Joomla 2.5 database and EasyBlog 3.8.
2
- # NOTE: This converter requires Sequel and the MySQL gems.
3
- # The MySQL gem can be difficult to install on OS X. Once you have MySQL
4
- # installed, running the following commands should work:
5
- # $ sudo gem install sequel
6
- # $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
7
-
8
1
  module JekyllImport
9
2
  module Importers
10
3
  class Easyblog < Importer
@@ -15,7 +8,7 @@ module JekyllImport
15
8
  end
16
9
  end
17
10
  end
18
-
11
+
19
12
  def self.specify_options(c)
20
13
  c.option 'dbname', '--dbname', 'Database name'
21
14
  c.option 'user', '--user', 'Database user name'
@@ -24,7 +17,7 @@ module JekyllImport
24
17
  c.option 'section', '--section', 'Table prefix name'
25
18
  c.option 'prefix', '--prefix', 'Table prefix name'
26
19
  end
27
-
20
+
28
21
  def self.require_deps
29
22
  JekyllImport.require_with_fallback(%w[
30
23
  rubygems
@@ -33,7 +26,7 @@ module JekyllImport
33
26
  safe_yaml
34
27
  ])
35
28
  end
36
-
29
+
37
30
  def self.process(options)
38
31
  dbname = options.fetch('dbname')
39
32
  user = options.fetch('user')
@@ -41,20 +34,20 @@ module JekyllImport
41
34
  host = options.fetch('host', "localhost")
42
35
  section = options.fetch('section', '1')
43
36
  table_prefix = options.fetch('prefix', "jos_")
44
-
37
+
45
38
  db = Sequel.mysql(dbname, :user => user, :password => pass, :host => host, :encoding => 'utf8')
46
-
39
+
47
40
  FileUtils.mkdir_p("_posts")
48
-
41
+
49
42
  # Reads a MySQL database via Sequel and creates a post file for each
50
43
  # post in wp_posts that has post_status = 'publish'. This restriction is
51
44
  # made because 'draft' posts are not guaranteed to have valid dates.
52
45
 
53
46
  query = "
54
- select
47
+ select
55
48
  ep.`title`, `permalink` as alias, concat(`intro`, `content`) as content, ep.`created`, ep.`id`, ec.`title` as category, tags
56
- from
57
- #{table_prefix}easyblog_post ep
49
+ from
50
+ #{table_prefix}easyblog_post ep
58
51
  left join #{table_prefix}easyblog_category ec on (ep.category_id = ec.id)
59
52
  left join (
60
53
  select
@@ -66,7 +59,7 @@ module JekyllImport
66
59
  group by
67
60
  ept.post_id) x on (ep.id = x.post_id);
68
61
  "
69
-
62
+
70
63
  db[query].each do |post|
71
64
  # Get required fields and construct Jekyll compatible name.
72
65
  title = post[:title]
@@ -74,10 +67,10 @@ module JekyllImport
74
67
  date = post[:created]
75
68
  content = post[:content]
76
69
  category = post[:category]
77
- tags = post[:tags]
70
+ tags = post[:tags]
78
71
  name = "%02d-%02d-%02d-%s.markdown" % [date.year, date.month, date.day,
79
72
  slug]
80
-
73
+
81
74
  # Get the relevant fields as a hash, delete empty fields and convert
82
75
  # to YAML for the header.
83
76
  data = {
@@ -86,10 +79,10 @@ module JekyllImport
86
79
  'joomla_id' => post[:id],
87
80
  'joomla_url' => post[:alias],
88
81
  'category' => post[:category],
89
- 'tags' => post[:tags],
82
+ 'tags' => post[:tags],
90
83
  'date' => date
91
84
  }.delete_if { |k,v| v.nil? || v == '' }.to_yaml
92
-
85
+
93
86
  # Write out the data and content to file
94
87
  File.open("_posts/#{name}", "w") do |f|
95
88
  f.puts data
@@ -1,6 +1,3 @@
1
- # Adapted by Rodrigo Pinto <rodrigopqn@gmail.com>
2
- # Based on typo.rb by Toby DiPasquale
3
-
4
1
  module JekyllImport
5
2
  module Importers
6
3
  class Enki < Importer
@@ -1,4 +1,3 @@
1
- # NOTE: This migrator is made for Ghost sqlite databases.
2
1
  module JekyllImport
3
2
  module Importers
4
3
  class Ghost < Importer
@@ -38,7 +37,7 @@ module JekyllImport
38
37
  # detect if the post is a draft
39
38
  draft = post[:status].eql?('draft')
40
39
 
41
- # Ghost saves the time in an weird format with 3 more numbers.
40
+ # Ghost saves the time in an weird format with 3 more numbers.
42
41
  # But the time is correct when we remove the last 3 numbers.
43
42
  date = Time.at(post[:created_at].to_i.to_s[0..-4].to_i)
44
43
 
@@ -1,10 +1,3 @@
1
- # NOTE: This migrator is made for Joomla 1.5 databases.
2
- # NOTE: This converter requires Sequel and the MySQL gems.
3
- # The MySQL gem can be difficult to install on OS X. Once you have MySQL
4
- # installed, running the following commands should work:
5
- # $ sudo gem install sequel
6
- # $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
7
-
8
1
  module JekyllImport
9
2
  module Importers
10
3
  class Joomla < Importer
@@ -1,5 +1,3 @@
1
- # Author: Aniket Pant <me@aniketpant.com>
2
-
3
1
  module JekyllImport
4
2
  module Importers
5
3
  class Jrnl < Importer
@@ -1,13 +1,3 @@
1
- # Quickly hacked together my Michael Ivey
2
- # Based on mt.rb by Nick Gerakines, open source and publically
3
- # available under the MIT license. Use this module at your own risk.
4
-
5
- # NOTE: This converter requires Sequel and the MySQL gems.
6
- # The MySQL gem can be difficult to install on OS X. Once you have MySQL
7
- # installed, running the following commands should work:
8
- # $ sudo gem install sequel
9
- # $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
10
-
11
1
  module JekyllImport
12
2
  module Importers
13
3
  class Mephisto < Importer
@@ -1,13 +1,3 @@
1
- # Created by Nick Gerakines, open source and publically available under the
2
- # MIT license. Use this module at your own risk.
3
- # I'm an Erlang/Perl/C++ guy so please forgive my dirty ruby.
4
-
5
- # NOTE: This converter requires Sequel and the MySQL gems.
6
- # The MySQL gem can be difficult to install on OS X. Once you have MySQL
7
- # installed, running the following commands should work:
8
- # $ sudo gem install sequel
9
- # $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
10
-
11
1
  module JekyllImport
12
2
  module Importers
13
3
  class MT < Importer
@@ -1,12 +1,3 @@
1
- # ruby -r './lib/jekyll/migrators/posterous.rb' -e 'Jekyll::Posterous.process(email, pass, api_key)'
2
- # Other arguments are optional; the default values are:
3
- # * :include_imgs => false # should images be downloaded as well?
4
- # * :blog => 'primary' # blog, if you have more than one.
5
- # * :base_path => '/' # for image, if they will be served from a different host for eg.
6
-
7
- # For example, to download images as well as your posts, use the above command with
8
- # ....process(email, pass, api_key, :include_imgs => true)
9
-
10
1
  module JekyllImport
11
2
  module Importers
12
3
  class Posterous < Importer
@@ -1,13 +1,3 @@
1
- # Created by Kendall Buchanan (https://github.com/kendagriff) on 2011-12-22.
2
- # Use at your own risk. The end.
3
- #
4
- # Usage:
5
- # (URL)
6
- # ruby -r 'jekyll/jekyll-import/rss' -e "JekyllImport::RSS.process(:source => 'http://yourdomain.com/your-favorite-feed.xml')"
7
- #
8
- # (Local file)
9
- # ruby -r 'jekyll/jekyll-import/rss' -e "JekyllImport::RSS.process(:source => './somefile/on/your/computer.xml')"
10
-
11
1
  module JekyllImport
12
2
  module Importers
13
3
  class RSS < Importer
@@ -1,10 +1,3 @@
1
- # Migrator to import entries from an Serendipity (S9Y) blog
2
- #
3
- # Entries can be exported from http://blog.example.com/rss.php?version=2.0&all=1
4
- #
5
- # Usage:
6
- # ruby -r './s9y_rss.rb' -e 'Jekyll::S9Y.process("http://blog.example.com/rss.php?version=2.0&all=1")'
7
-
8
1
  module JekyllImport
9
2
  module Importers
10
3
  class S9Y < Importer
@@ -1,9 +1,3 @@
1
- # NOTE: This converter requires Sequel and the MySQL gems.
2
- # The MySQL gem can be difficult to install on OS X. Once you have MySQL
3
- # installed, running the following commands should work:
4
- # $ sudo gem install sequel
5
- # $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
6
-
7
1
  module JekyllImport
8
2
  module Importers
9
3
  class TextPattern < Importer
@@ -1,4 +1,3 @@
1
- # Author: Toby DiPasquale <toby@cbcg.net>
2
1
  module JekyllImport
3
2
  module Importers
4
3
  class Typo < Importer
@@ -1,12 +1,3 @@
1
- # NOTE: This converter requires Sequel and the MySQL gems.
2
- # The MySQL gem can be difficult to install on OS X. Once you have MySQL
3
- # installed, running the following commands should work:
4
- # $ sudo gem install sequel
5
- # $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
6
- #
7
- # If you are running MacPorts, it the mysql2 gem can be installed like this:
8
- # $ gem install mysql2 -- --with-mysql-lib=/opt/local/lib/mysql56/mysql/ --with-mysql-include=/opt/local/include/mysql56/mysql
9
-
10
1
  module JekyllImport
11
2
  module Importers
12
3
  class WordPress < Importer
@@ -1,6 +1,4 @@
1
- # coding: utf-8
2
- # This importer takes a wordpress.xml file, which can be exported from your
3
- # wordpress.com blog (/wp-admin/export.php).
1
+ # encoding: UTF-8
4
2
 
5
3
  module JekyllImport
6
4
  module Importers
@@ -8,7 +6,6 @@ module JekyllImport
8
6
  def self.require_deps
9
7
  JekyllImport.require_with_fallback(%w[
10
8
  rubygems
11
- sequel
12
9
  fileutils
13
10
  safe_yaml
14
11
  hpricot
@@ -1,3 +1,3 @@
1
1
  module JekyllImport
2
- VERSION = '0.4.1'
2
+ VERSION = '0.5.0'
3
3
  end
@@ -7,6 +7,7 @@ module Jekyll
7
7
  class Import < Command
8
8
 
9
9
  IMPORTERS = {
10
+ :blogger => 'Blogger',
10
11
  :behance => 'Behance',
11
12
  :csv => 'CSV',
12
13
  :drupal6 => 'Drupal6',
@@ -53,7 +54,11 @@ module Jekyll
53
54
  if IMPORTERS.keys.include?(migrator.to_sym)
54
55
  if JekyllImport::Importers.const_defined?(IMPORTERS[migrator.to_sym])
55
56
  klass = JekyllImport::Importers.const_get(IMPORTERS[migrator.to_sym])
56
- klass.run(options.__hash__)
57
+ if options.respond_to?(:__hash__)
58
+ klass.run(options.__hash__)
59
+ else
60
+ klass.run(options)
61
+ end
57
62
  end
58
63
  else
59
64
  abort_on_invalid_migrator(migrator)
@@ -61,11 +66,9 @@ module Jekyll
61
66
  end
62
67
 
63
68
  def abort_on_invalid_migrator(migrator)
64
- msg = "Sorry, '#{migrator}' isn't a valid migrator. Valid choices:\n"
65
- IMPORTERS.keys.each do |k, v|
66
- msg += "* #{k}\n"
67
- end
68
- abort msg
69
+ $stderr.puts "Sorry, '#{migrator}' isn't a valid migrator. Valid choices:"
70
+ IMPORTERS.keys.each { |k| $stderr.puts "* #{k}" }
71
+ raise RuntimeError.new("'#{migrator}' is not a valid migrator.")
69
72
  end
70
73
 
71
74
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-import
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Preston-Werner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-01 00:00:00.000000000 Z
11
+ date: 2014-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -304,6 +304,7 @@ files:
304
304
  - lib/jekyll-import/importer.rb
305
305
  - lib/jekyll-import/importers.rb
306
306
  - lib/jekyll-import/importers/behance.rb
307
+ - lib/jekyll-import/importers/blogger.rb
307
308
  - lib/jekyll-import/importers/csv.rb
308
309
  - lib/jekyll-import/importers/drupal6.rb
309
310
  - lib/jekyll-import/importers/drupal7.rb