guard-jekyll-plus 1.3.0 → 1.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/CHANGELOG.md CHANGED
@@ -42,3 +42,9 @@ New config options
42
42
  ### 1.3.0
43
43
 
44
44
  - Changed guard name to jekyll-plus to help Guard properly init the Guardfile.
45
+
46
+ ### 1.4.0
47
+
48
+ - Now allowing Rack server as an alternative to Jekyll's WEBrick server.
49
+ - Ships with an internal config for Rack, but users can override it in the guard config options.
50
+
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- guard-jekyll-plus (1.2.3)
4
+ guard-jekyll-plus (1.3.0)
5
5
  guard (>= 1.1.0)
6
6
  jekyll (>= 1.0.0)
7
7
 
@@ -12,7 +12,7 @@ GEM
12
12
  fast-stemmer (>= 1.0.0)
13
13
  coderay (1.0.9)
14
14
  colorator (0.1)
15
- commander (4.1.3)
15
+ commander (4.1.4)
16
16
  highline (~> 1.6.11)
17
17
  directory_watcher (1.4.1)
18
18
  fast-stemmer (1.0.2)
@@ -25,19 +25,19 @@ GEM
25
25
  pry (>= 0.9.10)
26
26
  thor (>= 0.14.6)
27
27
  highline (1.6.19)
28
- jekyll (1.1.0)
28
+ jekyll (1.1.2)
29
29
  classifier (~> 1.3)
30
30
  colorator (~> 0.1)
31
31
  commander (~> 4.1.3)
32
32
  directory_watcher (~> 1.4.1)
33
33
  kramdown (~> 1.0.2)
34
- liquid (~> 2.3)
34
+ liquid (~> 2.5.1)
35
35
  maruku (~> 0.5)
36
36
  pygments.rb (~> 0.5.0)
37
37
  redcarpet (~> 2.2.2)
38
38
  safe_yaml (~> 0.7.0)
39
39
  kramdown (1.0.2)
40
- liquid (2.5.0)
40
+ liquid (2.5.1)
41
41
  listen (1.2.2)
42
42
  rb-fsevent (>= 0.9.3)
43
43
  rb-inotify (>= 0.9)
data/README.md CHANGED
@@ -75,15 +75,34 @@ This guard has two configurations.
75
75
  |:--------------|:-------------------------------------------------|:-----------------------------------------------------------------------------------|
76
76
  | `extensions` | Array of file extensions to trigger Jekyll build | ['md', 'mkd', 'mkdn', 'markdown', 'textile', 'html', 'haml', 'slim', 'xml', 'yml'] |
77
77
  | `config` | Array of configuration files | ['_config.yml'] |
78
- | `serve` | Use Jekyll's build in WEBrick server | false |
78
+ | `serve` | Serve your site with Jekyll or a Rack server | false |
79
79
  | `drafts` | Build your site with draft posts | false |
80
80
  | `future` | Build your site with future dated posts | false |
81
81
  | `config_hash` | Use a config hash instead of an array of files | nil |
82
82
  | `silent` | Slience all output other than exception message | false |
83
83
  | `msg_prefix` | Output messages are prefixed with with this | 'Jekyll' |
84
+ | `rack_config` | Optional configuration for using the rack server | nil |
84
85
 
85
86
  **Note:** customizations to the `extensions` configuration are additive.
86
87
 
88
+ ### Using Jekyll Server
89
+
90
+ To use Jekyll's built-in server, simply set `:server => true` in your rack options
91
+
92
+ ```ruby
93
+ guard "jekyll-plus", :server => true do
94
+ watch /.*/
95
+ ignore /^_site/
96
+ end
97
+ ```
98
+
99
+ ### Using Rack Server
100
+
101
+ Simply add `gem 'rack'` to your Gemfile and Jekyll Plus will use Rack instead with a [config file](lib/rack/config.ru) which redirects `404s` and auto-appends `index.html` to directory urls.
102
+ If you want to use [Thin](https://github.com/macournoyer/thin/), add `gem 'thin'` instead.
103
+
104
+ If you wish to use your own rack server configuration, simply drop a `config.ru` file into your site root, or use the option `:rack_config => 'path/to/config.ru'` to tell Jeklly Plus where to look for your rack config file.
105
+
87
106
  ### Configuring Jekyll watched file extensions
88
107
 
89
108
  Here's how you would add `txt` to the list of file extensions which triggers a Jekyll build.
@@ -1,5 +1,5 @@
1
1
  module Guard
2
2
  class JekyllPlusVersion
3
- VERSION = "1.3.0"
3
+ VERSION = "1.4.0"
4
4
  end
5
5
  end
@@ -4,6 +4,12 @@ require 'guard'
4
4
  require 'guard/guard'
5
5
 
6
6
  require 'jekyll'
7
+ #begin require 'thin' rescue false end
8
+ begin
9
+ require 'rack'
10
+ USE_RACK = true
11
+ rescue LoadError
12
+ end
7
13
 
8
14
  module Guard
9
15
  class Jekyllplus < Guard
@@ -14,14 +20,15 @@ module Guard
14
20
  default_extensions = ['md','mkd','mkdn','markdown','textile','html','haml','slim','xml','yml']
15
21
 
16
22
  @options = {
17
- :extensions => [],
18
- :config => ['_config.yml'],
19
- :serve => false,
20
- :drafts => false,
21
- :future => false,
22
- :config_hash => nil,
23
- :silent => false,
24
- :msg_prefix => 'Jekyll'
23
+ :extensions => [],
24
+ :config => ['_config.yml'],
25
+ :serve => false,
26
+ :rack_config => nil,
27
+ :drafts => false,
28
+ :future => false,
29
+ :config_hash => nil,
30
+ :silent => false,
31
+ :msg_prefix => 'Jekyll'
25
32
  }.merge(options)
26
33
 
27
34
  # The config_hash option should be a hash ready to be consumed by Jekyll's Site class.
@@ -51,6 +58,8 @@ module Guard
51
58
  # Create a Jekyll site
52
59
  #
53
60
  @site = ::Jekyll::Site.new @config
61
+ @rack = ::Rack::Server.new(rack_config) if USE_RACK
62
+ puts @rack
54
63
 
55
64
  end
56
65
 
@@ -199,13 +208,20 @@ module Guard
199
208
  if options[:config_hash]
200
209
  config = options[:config_hash]
201
210
  elsif options[:config]
202
- config_files = options[:config]
203
- config_files = [config_files] unless config_files.is_a? Array
204
- config = { "config" => config_files}
211
+ options[:config] = [options[:config]] unless options[:config].is_a? Array
212
+ config = options
205
213
  end
206
214
  ::Jekyll.configuration(config)
207
215
  end
208
216
 
217
+ def rack_config
218
+ default_config = File.expand_path("../rack/config.ru", File.dirname(__FILE__))
219
+ local_config = File.exist? 'config.ru' ? 'config.ru' : nil
220
+ config = (@config['rack_config'] || local_config || default_config)
221
+ puts config
222
+ { :config => config, :Port => @config['port'], :Host => @config['host'] }
223
+ end
224
+
209
225
  def local_path(path)
210
226
  Dir.chdir('.')
211
227
  current = Dir.pwd
@@ -231,7 +247,11 @@ module Guard
231
247
  end
232
248
 
233
249
  def server(config)
234
- proc{ Process.fork { ::Jekyll::Commands::Serve.process(config) } }
250
+ if @rack
251
+ proc{ Process.fork { @rack.start } }
252
+ else
253
+ proc{ Process.fork { ::Jekyll::Commands::Serve.process(config) } }
254
+ end
235
255
  end
236
256
 
237
257
  def kill
@@ -244,6 +264,7 @@ module Guard
244
264
  end
245
265
 
246
266
  def stop_server
267
+ #@rack.stop if @rack
247
268
  if alive?
248
269
  instance_eval do
249
270
  kill.call(@pid)
@@ -0,0 +1,37 @@
1
+ module Rack
2
+
3
+ class TryStatic
4
+
5
+ def initialize(app, options)
6
+ @app = app
7
+ @try = ['', *options.delete(:try)]
8
+ @static = ::Rack::Static.new(lambda { [404, {}, []] }, options)
9
+ end
10
+
11
+ def call(env)
12
+ orig_path = env['PATH_INFO']
13
+ found = nil
14
+ @try.each do |path|
15
+ resp = @static.call(env.merge!({'PATH_INFO' => orig_path + path}))
16
+ break if 404 != resp[0] && found = resp
17
+ end
18
+ found or @app.call(env.merge!('PATH_INFO' => orig_path))
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
25
+ def start_rack(root, not_found)
26
+ use Rack::TryStatic, :root => root, :urls => %w[/], :try => ['.html', 'index.html', '/index.html']
27
+
28
+ # Run your own Rack app here or use this one to serve 404 messages:
29
+ run lambda{ |env|
30
+ not_found_page = File.exist?(not_found) ? [File.read(not_found)] : ['404 - page not found']
31
+ [ 404, { 'Content-Type' => 'text/html' }, not_found_page ]
32
+ }
33
+ end
34
+
35
+ root = ENV['RACK_ROOT'] || '_site'
36
+
37
+ start_rack root, "#{root}/404.html"
data/test/404.html ADDED
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>404</title>
6
+ </head>
7
+ <body>
8
+ <h1>404</h1>
9
+ </body>
10
+ </html>
11
+
12
+
data/test/Gemfile CHANGED
@@ -1,3 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'guard-jekyll-plus', :path => "../"
4
+ gem 'rack'
data/test/Gemfile.lock CHANGED
@@ -54,6 +54,7 @@ GEM
54
54
  pygments.rb (0.5.2)
55
55
  posix-spawn (~> 0.3.6)
56
56
  yajl-ruby (~> 1.1.0)
57
+ rack (1.5.2)
57
58
  rb-fsevent (0.9.3)
58
59
  rb-inotify (0.9.0)
59
60
  ffi (>= 0.5.0)
@@ -71,3 +72,4 @@ PLATFORMS
71
72
 
72
73
  DEPENDENCIES
73
74
  guard-jekyll-plus!
75
+ rack
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-jekyll-plus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-22 00:00:00.000000000 Z
12
+ date: 2013-08-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: guard
@@ -61,7 +61,9 @@ files:
61
61
  - lib/guard/jekyll-plus.rb
62
62
  - lib/guard/jekyll-plus/templates/Guardfile
63
63
  - lib/guard/jekyll-plus/version.rb
64
+ - lib/rack/config.ru
64
65
  - test/.gitignore
66
+ - test/404.html
65
67
  - test/Gemfile
66
68
  - test/Gemfile.lock
67
69
  - test/Guardfile