jekyll-server-redirects 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ require 'jekyll-server-redirects/version'
2
+ require 'jekyll-server-redirects/command'
3
+
4
+ module Jekyll
5
+ module ServerRedirects
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ # Raw redirects defined in config file.
2
+ {% for redirect in raw_redirects %}
3
+ Redirect {{ redirect.type }} "{{ redirect.from }}" "{{ redirect.to }}"
4
+ {% endfor %}
5
+
6
+ # Redirects configured in each piece of content.
7
+ {% for redirect in redirects %}
8
+ Redirect permanent "{{ redirect.from }}" "{{ redirect.to }}$1"
9
+ {% endfor %}
@@ -0,0 +1,88 @@
1
+ module Jekyll
2
+ module ServerRedirects
3
+ class ServerRedirectsCommand < Jekyll::Command
4
+ class << self
5
+
6
+ def init_with_program(prog)
7
+ prog.command(:server_redirects) do |c|
8
+ c.syntax 'server_redirects [options]'
9
+ c.description 'Generate server redirects'
10
+ c.option 'server', '--server_type SERVER', String, 'Type of server to generate redirects for.'
11
+ c.option 'config_template', '-T', '--config_template TEMPLATE_FILE', String, 'Your own Liquid template file from which to generate the redirects configuration.'
12
+ add_build_options(c)
13
+ c.action do |args, options|
14
+ options['quiet'] = true
15
+ exit(1) unless process options
16
+ end
17
+ end
18
+ end
19
+
20
+
21
+ def process(options)
22
+ options = configuration_from_options(options)
23
+ site = ::Jekyll::Site.new(options)
24
+
25
+ site.read
26
+ redirects = Array.new
27
+ custom_redirects = site.config['custom_redirects'] || Array.new
28
+
29
+ site.config['custom_redirects'].each do |conf|
30
+ puts "config: #{conf}"
31
+ end
32
+
33
+ # Default redirect type for raw redirects
34
+ custom_redirects = custom_redirects.map do |r|
35
+ r['redirect'] ||= 'redirect'
36
+ r
37
+ end
38
+
39
+ site.config['custom_redirects'].each do |conf|
40
+ puts "config: #{conf}"
41
+ end
42
+
43
+ incomplete = custom_redirects.select do |r|
44
+ puts "from: #{r.has_key?('from')}, to: #{r.has_key?('to')}"
45
+ STDOUT.flush
46
+
47
+ !(r.has_key?('from') && r.has_key?('to') && r['from'].length > 0 && r['to'].length > 0)
48
+ end
49
+
50
+ if incomplete.length > 0
51
+ Jekyll.logger.error 'Check [site_redirects] in your config for incomplete entries. Entries should at least have `from` and `to`'
52
+ return nil
53
+ end
54
+
55
+ site.posts.each do |post|
56
+ if post.data.has_key?(':redirect_from') && post.data[':redirect_from'].is_a?(Array)
57
+ post.data[':redirect_from'].each do |from_url|
58
+ redirects.push('from' => Regexp.escape(from_url), 'to' => post.url)
59
+ end
60
+ end
61
+ end
62
+
63
+ template_name = 'nginx-template.conf'
64
+ case options['server']
65
+ when 'nginx'
66
+ template_name = 'nginx-template.conf'
67
+ when 'apache'
68
+ template_name = 'apache-template.conf'
69
+ else
70
+ end
71
+
72
+ if options['config_template']
73
+ template = Liquid::Template.parse(File.read(options['config_template']))
74
+ else
75
+ template = Liquid::Template.parse(File.read(File.join(File.dirname(__FILE__), template_name)))
76
+ end
77
+
78
+ conf = template.render({
79
+ 'redirects' => redirects,
80
+ 'raw_redirects' => custom_redirects
81
+ })
82
+ puts conf
83
+ true
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,9 @@
1
+ # Raw redirects defined in config file.
2
+ {% for redirect in raw_redirects %}
3
+ rewrite {{ redirect.from }} {{ redirect.to }} {{ redirect.type }};
4
+ {% endfor %}
5
+
6
+ # Redirects configured in each piece of content.
7
+ {% for redirect in redirects %}
8
+ rewrite ^{{ redirect.from }}$ {{ redirect.to }} permanent;
9
+ {% endfor %}
@@ -0,0 +1,5 @@
1
+ module Jekyll
2
+ module ServerRedirects
3
+ VERSION = '0.1.0'
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-server-redirects
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Raúl Santos
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-04-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: jekyll
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3.0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ description: Generate server redirects for Jekyll.
31
+ email: borfast@gmail.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - lib/jekyll-server-redirects.rb
37
+ - lib/jekyll-server-redirects/version.rb
38
+ - lib/jekyll-server-redirects/apache-template.conf
39
+ - lib/jekyll-server-redirects/command.rb
40
+ - lib/jekyll-server-redirects/nginx-template.conf
41
+ homepage: https://github.com/borfast/jekyll-server-redirects
42
+ licenses:
43
+ - MIT
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ requirements: []
61
+ rubyforge_project:
62
+ rubygems_version: 1.8.23
63
+ signing_key:
64
+ specification_version: 3
65
+ summary: Server redirects for Jekyll
66
+ test_files: []