jekyll-server-redirects 0.1.0

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.
@@ -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: []