rack-jekyll 0.4.5 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff66ebdda97455aea827328639ec115c78ea52ca
4
- data.tar.gz: e250fa094a11503db4a51a6e360ee5bfa5022119
3
+ metadata.gz: 8197071d69920fb886e7a188cb18c1cf7397c2ca
4
+ data.tar.gz: e7a2ee5f2c1d15b6e4f8a24236d7e5a073399958
5
5
  SHA512:
6
- metadata.gz: 6872f504907bb61f822d9b37aa2db5272e8b6e4d5969de0728947d800914545689b856dbd5db061f72dc847766998fe164303fef0e08cc77a11055e494830d5d
7
- data.tar.gz: 126d49203f5fb68b8d6297ab9c8af1f92c607016e507b17c0b14adfb13e5fe3abcde81c7a2253b06ee8a72a6cd9031b147b491dd1c157365ec2ad32d4ae813ce
6
+ metadata.gz: 76e0cfca74a9b4a389f615b080f0607ec9cacca41f35911a96c3a8bcd47c2e65cae1c9be86df4b8a8961a9b4fc576a25e914fd13fd33194c661bfeb217332871
7
+ data.tar.gz: 615e0ff6f289188b6208ecfb351d76d8d8a695ace32d8a52995e2ed28d21d0ffb8053fde69468b52d460474da3efc951ad00a052c67fb54c1454224c37be96e5
@@ -0,0 +1,89 @@
1
+ # Rack-Jekyll Release History
2
+
3
+ ## master / 2016-03-09
4
+
5
+ ### Enhancements
6
+
7
+ * Drop support of Ruby < 1.9.3
8
+ * Add release history
9
+ * Include example/ directory in the gem
10
+ * Use markdown source files for demo site instead of HTML
11
+ * Improve demo site pages, CSS, and `_config.yml`
12
+ * Remove Thorfile
13
+
14
+ ### Bug Fixes
15
+
16
+ * Fix wrong HTML tag in default layout of demo site
17
+
18
+ ### Development Fixes
19
+
20
+ * Move helper methods into a tested Utils module
21
+ * Use require_relative
22
+ * Remove unnecessary require statements
23
+ * Remove Rack::ShowStatus middleware from demo site
24
+ * Avoid "unused variable" warning for ruby -w
25
+
26
+
27
+ ## 0.4.5 / 2015-11-06
28
+
29
+ ### Enhancements
30
+
31
+ * Allow serving of files with unknown media type
32
+ * Support HEAD requests
33
+
34
+ ### Bug Fixes
35
+
36
+ * Fix detection of 404s for directories without index.html
37
+ * Fix detection of 404s with partially matching paths
38
+ * Fix default media type for unknown extension (`application/octet-stream`)
39
+
40
+ ### Development Fixes
41
+
42
+ * Increase test coverage
43
+ * Major refactorings
44
+
45
+
46
+ ## 0.4.3, 0.4.4
47
+
48
+ not to be used, superseded by 0.4.5
49
+
50
+
51
+ ## 0.4.2 / 2015-10-12
52
+
53
+ ### Enhancements
54
+
55
+ * Loosen dependency on Jekyll to also allow Jekyll 2
56
+ * Add `:config` option for custom configuration file
57
+ * Add `:force_build` option to always generate site
58
+ * Wait while regenerating the site before returning a response
59
+ * Use "listen" gem instead of "directory_watcher"
60
+ * Clean up and improve demo site: use Markdown, add CSS, ...
61
+ * Clean up and improve README
62
+ * Add some RDoc
63
+
64
+ ### Bug Fixes
65
+
66
+ * Fix typo in Content-Length header
67
+ * Fix broken initialization of instance variables
68
+ * Fix broken configuration loading
69
+ * Fix updating of @files list
70
+ * Fix auto-regeneration
71
+
72
+ ### Development Fixes
73
+
74
+ * Major refactorings
75
+ * Start testing the actual code instead of a fake app
76
+ * Add many test cases and clean up tests
77
+ * Use "minitest" instead of "test-unit"
78
+ * Fix Cucumber tests which were always passing
79
+ * Let the @files list be an array
80
+ * Fix misplaced instance variable assignment
81
+ * Fix effectless debugging statement
82
+ * Add "listen" gem as dependency
83
+ * Clean up gemspec
84
+ * Remove some unused legacy code
85
+
86
+
87
+ ## 0.4.1 / 2013-05-15
88
+
89
+ See commit log.
@@ -62,6 +62,7 @@ Additional Rack-Jekyll initialization options:
62
62
  :force_build - whether to always generate the site at startup, even
63
63
  when the destination path is not empty (default: false)
64
64
  :auto - whether to watch for changes and rebuild (default: false)
65
+ :wait_page - a page to display while pages are rendering
65
66
 
66
67
  Note that on read-only filesystems a site build will fail,
67
68
  so do not set `:force_build => true` in these cases.
@@ -73,6 +74,22 @@ In your site's root directory you can provide a custom `404.html` file
73
74
  with YAML front matter.
74
75
 
75
76
 
77
+ ## Wait page
78
+
79
+ You can create a custom HTML page to display while Jekyll is rendering the
80
+ site. Set the `:wait_page` initialization option to point to a file relative
81
+ to the root of your Jekyll project.
82
+
83
+ *Example:*
84
+
85
+ run Rack::Jekyll.new(:wait_page => "hold_on.html")
86
+
87
+ Note that this page should be self-contained (no links to external CSS
88
+ or JS). It is also not a bad idea to add a `<meta http-equiv="refresh"
89
+ content="60"/>` to the `head` section so that the page will periodically
90
+ refresh itself and display the site once Jekyll has finished rendering.
91
+
92
+
76
93
  ## Contributing
77
94
 
78
95
  Contributions are more than just welcome.
data/Rakefile CHANGED
@@ -1,9 +1,5 @@
1
- require 'rubygems'
2
- require 'rubygems/specification'
3
- require 'rubygems/package_task'
4
1
  require 'rake/testtask'
5
- #require 'extensions/all'
6
- require_relative 'lib/rack/jekyll'
2
+
7
3
 
8
4
  task :default => :test
9
5
 
@@ -0,0 +1,10 @@
1
+ ---
2
+ layout: default
3
+ title: 404
4
+ ---
5
+
6
+ # 404: Not Found
7
+
8
+ The requested page does not exist.
9
+
10
+ [Go back to home page](/)
@@ -0,0 +1,5 @@
1
+ permalink: /:year/:month/:day/:title/
2
+ markdown: kramdown
3
+
4
+ exclude:
5
+ - config.ru
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <link rel="stylesheet" type="text/css" href="/css/site.css">
6
+ {% if page.title != null %}
7
+ <title>Rack-Jekyll Demo - {{ page.title }}</title>
8
+ {% else %}
9
+ <title>Rack-Jekyll Demo</title>
10
+ {% endif %}
11
+ </head>
12
+ <body>
13
+ {{ content }}
14
+ </body>
15
+ </html>
@@ -0,0 +1,7 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ {{ content }}
6
+
7
+ <p><a href="/">Go back to home page</a></p>
@@ -0,0 +1,8 @@
1
+ ---
2
+ layout: post
3
+ title: Hello World!
4
+ ---
5
+
6
+ # Hello World!
7
+
8
+ A demo blog post for Rack-Jekyll.
@@ -0,0 +1,6 @@
1
+ require_relative "../lib/rack/jekyll"
2
+
3
+ # Middleware
4
+ use Rack::ShowExceptions # Nice looking errors
5
+
6
+ run Rack::Jekyll.new
@@ -0,0 +1,6 @@
1
+ body {
2
+ background-color: #f0f0f0;
3
+ font-family: sans-serif;
4
+ }
5
+
6
+ .date { color: #808080; }
@@ -0,0 +1,16 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ # Rack-Jekyll Demo
6
+
7
+ Blog posts:
8
+
9
+ <ul>
10
+ {% for post in site.posts %}
11
+ <li>
12
+ <span class="date">{{ post.date | date_to_string }}:</span>
13
+ <a href="{{ post.url }}">{{ post.title }}</a>
14
+ </li>
15
+ {% endfor %}
16
+ </ul>
@@ -1,16 +1,15 @@
1
1
  require "rack"
2
2
  require "jekyll"
3
- require "rack/request"
4
- require "rack/response"
5
- require File.join(File.dirname(__FILE__), 'jekyll', 'filehandler')
6
- require File.join(File.dirname(__FILE__), 'jekyll', 'helpers')
7
- require File.join(File.dirname(__FILE__), 'jekyll', 'version')
8
- require File.join(File.dirname(__FILE__), 'jekyll', 'ext')
3
+ require "thread"
4
+
5
+ require_relative "jekyll/filehandler"
6
+ require_relative "jekyll/utils"
7
+ require_relative "jekyll/version"
9
8
 
10
9
  module Rack
11
10
  class Jekyll
12
11
 
13
- attr_reader :config, :destination
12
+ attr_reader :config, :destination, :wait_page
14
13
 
15
14
  # Initializes a new Rack::Jekyll site.
16
15
  #
@@ -23,15 +22,19 @@ module Rack
23
22
  #
24
23
  # +:auto+:: whether to watch for changes and rebuild (default: +false+)
25
24
  #
25
+ # +:wait_page+:: a page to display while pages are rendering (default: "templates/wait.html")
26
+ #
26
27
  # Other options are passed on to Jekyll::Site.
27
28
  def initialize(options = {})
28
29
  overrides = options.dup
29
- @compiling = false
30
30
  @force_build = overrides.fetch(:force_build, false)
31
31
  @auto = overrides.fetch(:auto, false)
32
+ @wait_page = read_wait_page(overrides)
33
+ @compile_queue = Queue.new
32
34
 
33
35
  overrides.delete(:force_build)
34
36
  overrides.delete(:auto)
37
+ overrides.delete(:wait_page)
35
38
  @config = ::Jekyll.configuration(overrides)
36
39
 
37
40
  @destination = @config["destination"]
@@ -59,27 +62,29 @@ module Rack
59
62
  ignore_pattern = %r{#{Regexp.escape(relative_path_to_dest)}}
60
63
 
61
64
  listener = Listen.to(@source, :ignore => ignore_pattern) do |modified, added, removed|
62
- t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
63
- n = modified.length + added.length + removed.length
64
- process("[#{t}] Regenerating: #{n} file(s) changed")
65
+ unless compiling?
66
+ t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
67
+ n = modified.length + added.length + removed.length
68
+ process("[#{t}] Regenerating: #{n} file(s) changed")
69
+ end
65
70
  end
66
71
  listener.start unless Listen::VERSION =~ /\A[0-1]\./
67
72
  end
68
73
  end
69
74
 
70
75
  def call(env)
71
- while @compiling
72
- sleep 0.1
73
- end
74
-
75
76
  request = Rack::Request.new(env)
76
77
 
78
+ while compiling?
79
+ return serve_wait_page(request)
80
+ end
81
+
77
82
  filename = @files.get_filename(request.path_info)
78
83
 
79
84
  if filename
80
- mime = mime(filename)
85
+ media_type = Utils.media_type(filename)
81
86
 
82
- file = file_info(filename)
87
+ file = Utils.file_info(filename)
83
88
  body = file[:body]
84
89
  time = file[:time]
85
90
  hdrs = { "Last-Modified" => time }
@@ -88,7 +93,7 @@ module Rack
88
93
  response = [304, hdrs, []]
89
94
  else
90
95
  hdrs.update({ "Content-Length" => body.bytesize.to_s,
91
- "Content-Type" => mime })
96
+ "Content-Type" => media_type })
92
97
  response = [200, hdrs, [body]]
93
98
  end
94
99
 
@@ -102,14 +107,21 @@ module Rack
102
107
  request.head? ? remove_body(response) : response
103
108
  end
104
109
 
110
+ def compiling?
111
+ !@compile_queue.empty?
112
+ end
113
+
105
114
  private
106
115
 
107
116
  def process(message = nil)
108
- @compiling = true
109
- puts message if message
110
- @site.process
111
- @files.update
112
- @compiling = false
117
+ puts message if message
118
+ @compile_queue << '.'
119
+
120
+ Thread.new do
121
+ @site.process
122
+ @files.update
123
+ @compile_queue.clear
124
+ end
113
125
  end
114
126
 
115
127
  def not_found_message
@@ -123,7 +135,27 @@ module Rack
123
135
  def custom_404
124
136
  filename = @files.get_filename("/404.html")
125
137
 
126
- filename ? file_info(filename)[:body] : nil
138
+ filename ? Utils.file_info(filename)[:body] : nil
139
+ end
140
+
141
+ def read_wait_page(options)
142
+ path = ::File.expand_path("templates/wait.html", ::File.dirname(__FILE__))
143
+ if options.key?(:wait_page)
144
+ if ::File.exist?(options[:wait_page])
145
+ path = options[:wait_page]
146
+ else
147
+ puts "Could not read #{options[:wait_page]}. Using default."
148
+ end
149
+ end
150
+ ::File.open(path, 'r').read
151
+ end
152
+
153
+ def serve_wait_page(req)
154
+ headers ||= {}
155
+ headers['Content-Length'] = @wait_page.bytesize.to_s
156
+ headers['Content-Type'] = 'text/html'
157
+ headers['Connection'] = 'keep-alive'
158
+ [200, headers, [@wait_page]]
127
159
  end
128
160
 
129
161
  def remove_body(response)
@@ -0,0 +1,21 @@
1
+ module Rack
2
+ class Jekyll
3
+ module Utils
4
+
5
+ def self.media_type(filename)
6
+ extension = ::File.extname(filename)
7
+
8
+ Rack::Mime.mime_type(extension)
9
+ end
10
+
11
+ def self.file_info(path)
12
+ info = {
13
+ :body => ::File.read(path),
14
+ :time => ::File.mtime(path).httpdate
15
+ }
16
+
17
+ info
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,7 +1,7 @@
1
1
  module Rack
2
2
  class Jekyll
3
3
  def self.version
4
- '0.4.5'
4
+ '0.5.0'
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,48 @@
1
+ <!DOCTYPE HTML>
2
+ <html lang="en-US">
3
+ <head>
4
+ <meta charset="UTF-8"/>
5
+ <meta http-equiv="refresh" content="60"/>
6
+ <title>Jekyll is working</title>
7
+ <style type="text/css">
8
+ html {
9
+ position: relative;
10
+ min-height: 100%;
11
+ }
12
+
13
+ body {
14
+ font-family: "Liberation Sans", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
15
+ background-color: #555;
16
+ background-image: linear-gradient(to bottom, #555 0%, #333 100%);
17
+ background-repeat: repeat-x;
18
+ }
19
+
20
+ div#message {
21
+ position: absolute;
22
+ top: 50%;
23
+ left: 50%;
24
+ transform: translate(-50%, -50%);
25
+
26
+ background-color: #c00;
27
+ background-image: linear-gradient(to bottom, #a70000 0%, #7d0000 100%);
28
+ background-repeat: repeat-x;
29
+
30
+ border-color: #730000;
31
+ border-radius: 5px;
32
+
33
+ color: #fff;
34
+ padding: 15px;
35
+ }
36
+
37
+ div#message h1 {
38
+ margin-top: 5px;
39
+ margin-bottom: 5px;
40
+ }
41
+ </style>
42
+ </head>
43
+ <body>
44
+ <div id="message">
45
+ <h1>Jekyll is currently rendering the site.</h1>
46
+ <h1>Please try again shortly.</h1>
47
+ </div>
48
+ </body>
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
- require File.join(File.dirname(__FILE__), "lib", "rack", "jekyll", "version")
3
+ require_relative "lib/rack/jekyll/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.required_rubygems_version = ">= 1.3.6"
@@ -20,15 +20,19 @@ Gem::Specification.new do |s|
20
20
  rack-jekyll.gemspec
21
21
  Gemfile
22
22
  Rakefile
23
+ History.markdown
23
24
  LICENSE
24
25
  } +
25
- Dir.glob("lib/**/*")
26
+ Dir.glob("lib/**/*") +
27
+ Dir.glob("example/**/*").reject {|f| f =~ %r(\Aexample/_site/) }
26
28
  s.test_files = Dir.glob("{test,features}/**/*")
27
29
  s.require_paths = ["lib"]
28
30
 
29
- s.extra_rdoc_files = ["README.markdown"]
31
+ s.extra_rdoc_files = %w[README.markdown History.markdown LICENSE]
30
32
  s.rdoc_options = ['--charset=UTF-8', '--main=README.markdown']
31
33
 
34
+ s.required_ruby_version = '>= 1.9.3'
35
+
32
36
  s.add_dependency "jekyll", ">= 1.3"
33
37
  s.add_dependency "rack", "~> 1.5"
34
38
  s.add_dependency "listen", ">= 1.3"
@@ -47,6 +47,9 @@ def rack_jekyll(options = {})
47
47
  jekyll = nil
48
48
  silence_output do
49
49
  jekyll = Rack::Jekyll.new(options)
50
+ while jekyll.compiling?
51
+ sleep 0.4
52
+ end
50
53
  end
51
54
 
52
55
  jekyll
@@ -77,6 +77,16 @@ describe "when configuring site" do
77
77
  jekyll = rack_jekyll_without_build(:force_build => "ok")
78
78
  jekyll.config.wont_include "force_build"
79
79
  end
80
+
81
+ it ":wait_page is not passed on to Jekyll" do
82
+ jekyll = rack_jekyll_without_build(:wait_page => "foobar")
83
+ jekyll.config.wont_include "wait_page"
84
+ end
85
+
86
+ it ":wait_page uses default" do
87
+ jekyll = rack_jekyll_without_build(:wait_page => "/does/not/exist")
88
+ jekyll.wait_page.must_match %r{Please try again shortly}
89
+ end
80
90
  end
81
91
 
82
92
  describe "when initialization options are given and a config file exists" do
@@ -84,6 +84,34 @@ describe "when handling requests" do
84
84
  end
85
85
 
86
86
 
87
+ describe "when the site is compiling" do
88
+
89
+ it "should serve a wait page" do
90
+ begin
91
+ filename = File.join(@sourcedir, "custom_wait.html")
92
+ File.open(filename, "w") {|f| f.puts "Custom Wait" }
93
+
94
+ jekyll = nil
95
+ silence_output do
96
+ # This is a little brittle as the site renders in a separate thread
97
+ # Theoretically, if the site rendered fast enough, the request
98
+ # would end up getting actual content instead of the wait page
99
+ # and this test would fail.
100
+ jekyll = Rack::Jekyll.new(:force_build => true,
101
+ :source => @sourcedir,
102
+ :destination => @destdir,
103
+ :wait_page => filename)
104
+ end
105
+ request = Rack::MockRequest.new(jekyll)
106
+
107
+ request.get("/index.html").body.must_match %r{Custom Wait}
108
+ ensure
109
+ FileUtils.rm(filename)
110
+ end
111
+ end
112
+ end
113
+
114
+
87
115
  describe "when a directory is requested" do
88
116
 
89
117
  it "should redirect with status 301 to 'directory/' for 'directory' with index.html" do
@@ -0,0 +1,54 @@
1
+ require_relative "helper"
2
+
3
+
4
+ describe Rack::Jekyll::Utils do
5
+
6
+ before do
7
+ @utils = Rack::Jekyll::Utils
8
+ end
9
+
10
+
11
+ describe "when asked for #media_type" do
12
+
13
+ it "returns correct type for HTML" do
14
+ @utils.media_type("index.html").must_equal "text/html"
15
+ end
16
+
17
+ it "returns correct type for HTML with full path" do
18
+ @utils.media_type("/path/index.html").must_equal "text/html"
19
+ end
20
+
21
+ it "returns correct type for CSS" do
22
+ @utils.media_type("/path/style.css").must_equal "text/css"
23
+ end
24
+
25
+ it "returns correct type for *.min.js" do
26
+ @utils.media_type("script.min.js").must_equal "application/javascript"
27
+ end
28
+
29
+ it "returns correct default type for files without extension" do
30
+ @utils.media_type("README").must_equal "application/octet-stream"
31
+ end
32
+
33
+ it "ignores lower/upper case in file extensions" do
34
+ @utils.media_type("image.JpG").must_equal "image/jpeg"
35
+ end
36
+ end
37
+
38
+
39
+ describe "when asked for #file_info" do
40
+
41
+ before do
42
+ @filename = __FILE__
43
+ @info = @utils.file_info(@filename)
44
+ end
45
+
46
+ it "has the file content" do
47
+ @info[:body].must_equal ::File.read(@filename)
48
+ end
49
+
50
+ it "has the modification time in httpdate format" do
51
+ @info[:time].must_equal ::File.mtime(@filename).httpdate
52
+ end
53
+ end
54
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-jekyll
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Goines
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-11-06 00:00:00.000000000 Z
12
+ date: 2016-07-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jekyll
@@ -87,19 +87,30 @@ executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files:
89
89
  - README.markdown
90
+ - History.markdown
91
+ - LICENSE
90
92
  files:
91
93
  - Gemfile
94
+ - History.markdown
92
95
  - LICENSE
93
96
  - README.markdown
94
97
  - Rakefile
98
+ - example/404.md
99
+ - example/_config.yml
100
+ - example/_layouts/default.html
101
+ - example/_layouts/post.html
102
+ - example/_posts/2009-12-21-hello-world.md
103
+ - example/config.ru
104
+ - example/css/site.css
105
+ - example/index.md
95
106
  - features/requests.feature
96
107
  - features/step_definitions/rack_jekyll_steps.rb
97
108
  - features/support/env.rb
98
109
  - lib/rack/jekyll.rb
99
- - lib/rack/jekyll/ext.rb
100
110
  - lib/rack/jekyll/filehandler.rb
101
- - lib/rack/jekyll/helpers.rb
111
+ - lib/rack/jekyll/utils.rb
102
112
  - lib/rack/jekyll/version.rb
113
+ - lib/rack/templates/wait.html
103
114
  - rack-jekyll.gemspec
104
115
  - test/helper.rb
105
116
  - test/source/_config.yml
@@ -116,6 +127,7 @@ files:
116
127
  - test/test_configuration.rb
117
128
  - test/test_filehandler.rb
118
129
  - test/test_requests.rb
130
+ - test/test_utils.rb
119
131
  homepage: https://github.com/adaoraul/rack-jekyll
120
132
  licenses: []
121
133
  metadata: {}
@@ -129,7 +141,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
141
  requirements:
130
142
  - - ">="
131
143
  - !ruby/object:Gem::Version
132
- version: '0'
144
+ version: 1.9.3
133
145
  required_rubygems_version: !ruby/object:Gem::Requirement
134
146
  requirements:
135
147
  - - ">="
@@ -137,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
149
  version: 1.3.6
138
150
  requirements: []
139
151
  rubyforge_project: rack-jekyll
140
- rubygems_version: 2.4.5.1
152
+ rubygems_version: 2.5.1
141
153
  signing_key:
142
154
  specification_version: 4
143
155
  summary: Transform your Jekyll app into a Rack application.
@@ -157,6 +169,7 @@ test_files:
157
169
  - test/test_configuration.rb
158
170
  - test/test_filehandler.rb
159
171
  - test/test_requests.rb
172
+ - test/test_utils.rb
160
173
  - features/requests.feature
161
174
  - features/step_definitions/rack_jekyll_steps.rb
162
175
  - features/support/env.rb
@@ -1,7 +0,0 @@
1
- class String
2
- if RUBY_VERSION < "1.9"
3
- def bytesize
4
- size
5
- end
6
- end
7
- end
@@ -1,16 +0,0 @@
1
- module Rack
2
- class Jekyll
3
- def mime(filename)
4
- ext = ::File.extname(filename)
5
-
6
- Rack::Mime.mime_type(ext)
7
- end
8
-
9
- def file_info(path)
10
- expand_path = ::File.expand_path(path)
11
- ::File.open(expand_path, 'r') do |f|
12
- {:body => f.read, :time => f.mtime.httpdate, :expand_path => expand_path}
13
- end
14
- end
15
- end
16
- end