rack-jekyll 0.3.7 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +10 -0
- data/lib/rack/jekyll.rb +46 -15
- data/lib/rack/jekyll/ext.rb +7 -0
- data/lib/rack/jekyll/helpers.rb +2 -2
- data/lib/rack/jekyll/test.rb +5 -4
- data/lib/rack/jekyll/version.rb +1 -1
- metadata +62 -50
data/README.markdown
CHANGED
@@ -69,6 +69,16 @@ It now can read the `_config.yml` file for destination path. Read [Jekyll Config
|
|
69
69
|
|
70
70
|
You can create a new file: `404.html` with YAML Front Matter. See my [Heroku Demo 404](http://bry4n.heroku.com/show/me/404/)
|
71
71
|
|
72
|
+
## Contributors
|
73
|
+
* adaoraul (Adão Raul)
|
74
|
+
* Nerian (Gonzalo Rodríguez-Baltanás Díaz)
|
75
|
+
* scottwater (Scott Watermasysk)
|
76
|
+
* thedjinn (Emil Loer)
|
77
|
+
* bry4n (Bryan Goines)
|
78
|
+
* thibaudgg (Thibaud Guillaume-Gentil)
|
79
|
+
* bemurphy (Brendon Murphy)
|
80
|
+
* imajes (James Cox)
|
81
|
+
* mattr- (Matt Rogers)
|
72
82
|
|
73
83
|
## Contribution
|
74
84
|
|
data/lib/rack/jekyll.rb
CHANGED
@@ -4,39 +4,66 @@ require "rack/request"
|
|
4
4
|
require "rack/response"
|
5
5
|
require File.join(File.dirname(__FILE__), 'jekyll', 'helpers')
|
6
6
|
require File.join(File.dirname(__FILE__), 'jekyll', 'version')
|
7
|
+
require File.join(File.dirname(__FILE__), 'jekyll', 'ext')
|
7
8
|
|
8
9
|
module Rack
|
9
10
|
class Jekyll
|
10
11
|
@compiling = false
|
11
|
-
|
12
|
+
|
12
13
|
def initialize(opts = {})
|
13
14
|
config_file = '_config.yml'
|
14
15
|
if ::File.exist?(config_file)
|
15
16
|
config = YAML.load_file(config_file)
|
16
|
-
@path = (config[
|
17
|
+
@path = (config['destination'].nil? && "_site") || config['destination']
|
17
18
|
|
18
19
|
@files = ::Dir[@path + "/**/*"].inspect
|
19
20
|
@files unless ENV['RACK_DEBUG']
|
20
21
|
end
|
21
|
-
|
22
|
+
|
22
23
|
@mimes = Rack::Mime::MIME_TYPES.map{|k,v| /#{k.gsub('.','\.')}$/i }
|
23
|
-
|
24
|
+
require "jekyll"
|
25
|
+
options = ::Jekyll.configuration(opts)
|
26
|
+
site = ::Jekyll::Site.new(options)
|
24
27
|
if ::Dir[@path + "/**/*"].empty?
|
25
|
-
require "jekyll"
|
26
|
-
options = ::Jekyll.configuration(opts)
|
27
|
-
site = ::Jekyll::Site.new(options)
|
28
28
|
site.process
|
29
|
-
|
30
29
|
@compiling = true
|
31
30
|
else
|
32
31
|
@compiling = false
|
33
32
|
end
|
33
|
+
if options['auto']
|
34
|
+
require 'directory_watcher'
|
35
|
+
require 'pathname'
|
36
|
+
source, destination = options['source'], options['destination']
|
37
|
+
puts "Auto-regenerating enabled: #{source} -> #{destination}"
|
38
|
+
|
39
|
+
dw = DirectoryWatcher.new(source)
|
40
|
+
dw.interval = 1
|
41
|
+
dw.glob = globs(source)
|
42
|
+
|
43
|
+
dw.add_observer do |*args|
|
44
|
+
t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
45
|
+
puts "[#{t}] regeneration: #{args.size} files changed"
|
46
|
+
site.process
|
47
|
+
end
|
48
|
+
|
49
|
+
dw.start
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def globs(source)
|
54
|
+
Dir.chdir(source) do
|
55
|
+
dirs = Dir['*'].select { |x| Pathname(x).directory? }
|
56
|
+
dirs -= ['_site']
|
57
|
+
dirs = dirs.map { |x| "#{x}/**/*" }
|
58
|
+
dirs += ['*']
|
59
|
+
end
|
34
60
|
end
|
35
|
-
|
61
|
+
|
36
62
|
def call(env)
|
37
63
|
@request = Rack::Request.new(env)
|
38
64
|
@response = Rack::Response.new
|
39
65
|
path_info = @request.path_info
|
66
|
+
@files = ::Dir[@path + "/**/*"].inspect if @files == "[]"
|
40
67
|
if @files.include?(path_info)
|
41
68
|
if path_info =~ /(\/?)$/
|
42
69
|
if @mimes.collect {|regex| path_info =~ regex }.compact.empty?
|
@@ -48,22 +75,26 @@ module Rack
|
|
48
75
|
file = file_info(@path + path_info)
|
49
76
|
body = file[:body]
|
50
77
|
time = file[:time]
|
78
|
+
hdrs = { 'Last-Modified' => time }
|
51
79
|
|
52
80
|
if time == @request.env['HTTP_IF_MODIFIED_SINCE']
|
53
|
-
[
|
81
|
+
[304, hdrs, []]
|
54
82
|
else
|
55
|
-
|
83
|
+
hdrs.update({ 'Content-length' => body.bytesize.to_s,
|
84
|
+
'Content-Type' => mime, } )
|
85
|
+
[@response.status, hdrs, [body]]
|
56
86
|
end
|
57
87
|
|
58
88
|
else
|
59
89
|
status, body, path_info = ::File.exist?(@path+"/404.html") ? [404,file_info(@path+"/404.html")[:body],"404.html"] : [404,"Not found","404.html"]
|
60
90
|
mime = mime(path_info)
|
61
91
|
if !@compiling
|
62
|
-
[status, {"Content-Type" => mime, "Content-length" => body.
|
92
|
+
[status, {"Content-Type" => mime, "Content-length" => body.bytesize.to_s}, [body]]
|
63
93
|
else
|
64
|
-
|
94
|
+
@compiling = ::Dir[@path + "/**/*"].empty?
|
95
|
+
[200, {"Content-Type" => "text/plain"}, ["This site is currently generating pages. Please reload this page after a couple of seconds."]]
|
65
96
|
end
|
66
97
|
end
|
67
|
-
end
|
98
|
+
end
|
68
99
|
end
|
69
|
-
end
|
100
|
+
end
|
data/lib/rack/jekyll/helpers.rb
CHANGED
@@ -2,7 +2,7 @@ module Rack
|
|
2
2
|
class Jekyll
|
3
3
|
def mime(path_info)
|
4
4
|
if path_info !~ /html$/i
|
5
|
-
ext = $1 if path_info =~ /(
|
5
|
+
ext = $1 if path_info =~ /(\.[\S&&[^.]]+)$/
|
6
6
|
Mime.mime_type((ext.nil? ? ".html" : ext))
|
7
7
|
else
|
8
8
|
Mime.mime_type(".html")
|
@@ -16,4 +16,4 @@ module Rack
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
19
|
-
end
|
19
|
+
end
|
data/lib/rack/jekyll/test.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
require "rack"
|
2
2
|
require "rack/request"
|
3
3
|
require "rack/response"
|
4
|
+
require File.join(File.dirname(__FILE__), 'ext')
|
4
5
|
|
5
6
|
module Rack
|
6
7
|
class Jekyll
|
7
8
|
class Test
|
8
9
|
def initialize
|
9
|
-
@files = %w{_fake/ _fake/index.html _fake/3/2/1/helloworld/index.html _fake/css/test.css _fake/js/test.js}
|
10
|
+
@files = %w{_fake/ _fake/index.html _fake/3/2/1/helloworld/index.html _fake/css/test.css _fake/js/test.js _fake/js/test.min.js}
|
10
11
|
@mimes = Rack::Mime::MIME_TYPES.reject{|k,v|k=~%r{html?}}.map{|k,v|%r{#{k.gsub('.','\.')}$}i}
|
11
12
|
end
|
12
13
|
|
@@ -25,16 +26,16 @@ module Rack
|
|
25
26
|
if time == request.env['HTTP_IF_MODIFIED_SINCE']
|
26
27
|
[304, {'Last-Modified' => time}, []]
|
27
28
|
else
|
28
|
-
[200, {"Content-Type" => mime, "Content-length" => body.
|
29
|
+
[200, {"Content-Type" => mime, "Content-length" => body.bytesize.to_s, "Last-Modified" => "Thu, 01 Apr 2010 15:27:52 GMT"}, [body]]
|
29
30
|
end
|
30
31
|
else
|
31
32
|
status, body, path_info = [404,"Not found","404.html"]
|
32
33
|
mime = mime(path_info)
|
33
|
-
[status, {"Content-Type" => mime, "Content-Type" => body.
|
34
|
+
[status, {"Content-Type" => mime, "Content-Type" => body.bytesize.to_s}, [body]]
|
34
35
|
end
|
35
36
|
end
|
36
37
|
def mime(path_info)
|
37
|
-
ext = $1 if path_info =~ /(
|
38
|
+
ext = $1 if path_info =~ /(\.[\S&&[^.]]+)$/
|
38
39
|
Mime.mime_type((ext.nil? ? ".html" : ext))
|
39
40
|
end
|
40
41
|
end
|
data/lib/rack/jekyll/version.rb
CHANGED
metadata
CHANGED
@@ -1,92 +1,104 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-jekyll
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.3.7
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Bryan Goines
|
9
|
-
-
|
9
|
+
- Adão Raul
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2013-04-02 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
17
16
|
name: jekyll
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
20
18
|
none: false
|
21
|
-
requirements:
|
19
|
+
requirements:
|
22
20
|
- - ~>
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version: 0.
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.12.0
|
25
23
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rack
|
29
24
|
prerelease: false
|
30
|
-
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 0.12.0
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: rack
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
31
34
|
none: false
|
32
|
-
requirements:
|
35
|
+
requirements:
|
33
36
|
- - ~>
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: 1.
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: 1.5.0
|
36
39
|
type: :runtime
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: bacon
|
40
40
|
prerelease: false
|
41
|
-
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version:
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.5.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bacon
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
47
55
|
type: :development
|
48
|
-
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
49
63
|
description: Transform your jekyll based app into a Rack application
|
50
|
-
email:
|
64
|
+
email: adao.raul@gmail.com
|
51
65
|
executables: []
|
52
|
-
|
53
66
|
extensions: []
|
54
|
-
|
55
|
-
extra_rdoc_files:
|
67
|
+
extra_rdoc_files:
|
56
68
|
- README.markdown
|
57
|
-
files:
|
69
|
+
files:
|
58
70
|
- README.markdown
|
59
71
|
- LICENSE
|
60
72
|
- lib/rack/jekyll.rb
|
61
73
|
- lib/rack/jekyll/test.rb
|
62
74
|
- lib/rack/jekyll/helpers.rb
|
63
75
|
- lib/rack/jekyll/version.rb
|
76
|
+
- lib/rack/jekyll/ext.rb
|
64
77
|
homepage: http://github.com/adaoraul/rack-jekyll
|
65
78
|
licenses: []
|
66
|
-
|
67
79
|
post_install_message:
|
68
80
|
rdoc_options: []
|
69
|
-
|
70
|
-
require_paths:
|
81
|
+
require_paths:
|
71
82
|
- lib
|
72
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
84
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version:
|
78
|
-
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
segments:
|
90
|
+
- 0
|
91
|
+
hash: 849397492136401640
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
93
|
none: false
|
80
|
-
requirements:
|
81
|
-
- -
|
82
|
-
- !ruby/object:Gem::Version
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
83
97
|
version: 1.3.6
|
84
98
|
requirements: []
|
85
|
-
|
86
99
|
rubyforge_project: rack-jekyll
|
87
|
-
rubygems_version: 1.8.
|
100
|
+
rubygems_version: 1.8.23
|
88
101
|
signing_key:
|
89
102
|
specification_version: 3
|
90
103
|
summary: rack-jekyll
|
91
104
|
test_files: []
|
92
|
-
|