rack-jekyll 0.3.7 → 0.4.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.
- 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
|
-
|