middleman-more 3.0.4 → 3.0.5
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/features/asset_hash.feature
CHANGED
@@ -84,4 +84,23 @@ Feature: Assets get a file hash appended to their and references to them are upd
|
|
84
84
|
font-size: 18px !important
|
85
85
|
"""
|
86
86
|
When I go to "/partials/"
|
87
|
-
Then I should see 'href="../stylesheets/uses_partials-e8c3d4eb.css'
|
87
|
+
Then I should see 'href="../stylesheets/uses_partials-e8c3d4eb.css'
|
88
|
+
|
89
|
+
Scenario: The asset hash should change when a Rack-based filter changes
|
90
|
+
Given a fixture app "asset-hash-app"
|
91
|
+
And a file named "config.rb" with:
|
92
|
+
"""
|
93
|
+
activate :asset_hash
|
94
|
+
activate :relative_assets
|
95
|
+
activate :directory_indexes
|
96
|
+
require 'lib/middleware.rb'
|
97
|
+
use Middleware
|
98
|
+
"""
|
99
|
+
Given the Server is running at "asset-hash-app"
|
100
|
+
When I go to "/"
|
101
|
+
Then I should see 'href="stylesheets/site-5770af52.css'
|
102
|
+
When I go to "stylesheets/site-5770af52.css"
|
103
|
+
Then I should see 'background-image'
|
104
|
+
Then I should see 'Added by Rack filter'
|
105
|
+
When I go to "stylesheets/site-50eaa978.css"
|
106
|
+
Then I should see 'Not Found'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Middleware
|
2
|
+
def initialize(app)
|
3
|
+
@app = app
|
4
|
+
end
|
5
|
+
|
6
|
+
def call(env)
|
7
|
+
status, headers, response = @app.call(env)
|
8
|
+
body = ''
|
9
|
+
response.each {|part| body += part }
|
10
|
+
if (env["PATH_INFO"] =~ /css$/)
|
11
|
+
body += "\n/* Added by Rack filter */"
|
12
|
+
status, headers, response = Rack::Response.new(body, status, headers).finish
|
13
|
+
end
|
14
|
+
[status, headers, response]
|
15
|
+
end
|
16
|
+
end
|
@@ -29,20 +29,18 @@ module Middleman
|
|
29
29
|
module Helpers
|
30
30
|
# Output a stylesheet link tag based on the current path
|
31
31
|
#
|
32
|
-
# @param [String] separator How to break up path in parts
|
33
32
|
# @return [String]
|
34
|
-
def auto_stylesheet_link_tag
|
35
|
-
auto_tag(:css
|
33
|
+
def auto_stylesheet_link_tag
|
34
|
+
auto_tag(:css) do |path|
|
36
35
|
stylesheet_link_tag path
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
40
39
|
# Output a javascript tag based on the current path
|
41
40
|
#
|
42
|
-
# @param [String] separator How to break up path in parts
|
43
41
|
# @return [String]
|
44
|
-
def auto_javascript_include_tag
|
45
|
-
auto_tag(:js
|
42
|
+
def auto_javascript_include_tag
|
43
|
+
auto_tag(:js) do |path|
|
46
44
|
javascript_include_tag path
|
47
45
|
end
|
48
46
|
end
|
@@ -53,7 +51,7 @@ module Middleman
|
|
53
51
|
# @param [String] separator How to break up path in parts
|
54
52
|
# @param [String] asset_dir Where to look for assets
|
55
53
|
# @return [void]
|
56
|
-
def auto_tag(asset_ext,
|
54
|
+
def auto_tag(asset_ext, asset_dir=nil)
|
57
55
|
if asset_dir.nil?
|
58
56
|
asset_dir = case asset_ext
|
59
57
|
when :js then js_dir
|
@@ -63,12 +61,10 @@ module Middleman
|
|
63
61
|
|
64
62
|
# If the basename of the request as no extension, assume we are serving a
|
65
63
|
# directory and join index_file to the path.
|
66
|
-
path =
|
67
|
-
path = path.sub(%r{^/}, '')
|
64
|
+
path = File.join(asset_dir, current_path)
|
68
65
|
path = path.gsub(File.extname(path), ".#{asset_ext}")
|
69
|
-
path = path.gsub("/", separator)
|
70
66
|
|
71
|
-
yield path if sitemap.find_resource_by_path(
|
67
|
+
yield path if sitemap.find_resource_by_path(path)
|
72
68
|
end
|
73
69
|
|
74
70
|
# Generate body css classes based on the current path
|
@@ -130,7 +126,7 @@ module Middleman
|
|
130
126
|
args[url_arg_index] = url.url
|
131
127
|
elsif url.include? '://'
|
132
128
|
raise "Can't use the relative option with an external URL" if relative
|
133
|
-
|
129
|
+
elsif current_resource
|
134
130
|
# Handle relative urls
|
135
131
|
current_source_dir = Pathname('/' + current_resource.path).dirname
|
136
132
|
|
@@ -14,6 +14,7 @@ module Middleman
|
|
14
14
|
:asset_hash,
|
15
15
|
AssetHashManager.new(self, exts, ignore)
|
16
16
|
)
|
17
|
+
|
17
18
|
use Middleware, :exts => exts, :middleman_app => self, :ignore => ignore
|
18
19
|
end
|
19
20
|
end
|
@@ -36,7 +37,12 @@ module Middleman
|
|
36
37
|
next if @ignore.any? { |ignore| Middleman::Util.path_match(ignore, resource.destination_path) }
|
37
38
|
|
38
39
|
if resource.template? # if it's a template, render it out
|
39
|
-
|
40
|
+
# Render through the Rack interface so middleware and mounted apps get a shot
|
41
|
+
rack_client = ::Rack::Test::Session.new(@app.class)
|
42
|
+
response = rack_client.get(URI.escape(resource.destination_path), {}, { "bypass_asset_hash" => true })
|
43
|
+
raise "#{resource.path} should be in the sitemap!" unless response.status == 200
|
44
|
+
|
45
|
+
digest = Digest::SHA1.hexdigest(response.body)[0..7]
|
40
46
|
else # if it's a static file, just hash it
|
41
47
|
digest = Digest::SHA1.file(resource.source_file).hexdigest[0..7]
|
42
48
|
end
|
@@ -60,6 +66,9 @@ module Middleman
|
|
60
66
|
def call(env)
|
61
67
|
status, headers, response = @rack_app.call(env)
|
62
68
|
|
69
|
+
# We don't want to use this middleware when rendering files to figure out their hash!
|
70
|
+
return [status, headers, response] if env["bypass_asset_hash"]
|
71
|
+
|
63
72
|
path = @middleman_app.full_path(env["PATH_INFO"])
|
64
73
|
dirpath = Pathname.new(File.dirname(path))
|
65
74
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-more
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-09-
|
13
|
+
date: 2012-09-24 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: middleman-core
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - '='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 3.0.
|
22
|
+
version: 3.0.5
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,7 +27,7 @@ dependencies:
|
|
27
27
|
requirements:
|
28
28
|
- - '='
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: 3.0.
|
30
|
+
version: 3.0.5
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
32
|
name: uglifier
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
@@ -246,6 +246,7 @@ files:
|
|
246
246
|
- features/twitter-bootstrap-compile.feature
|
247
247
|
- features/wildcard_page_helper.feature
|
248
248
|
- fixtures/asset-hash-app/config.rb
|
249
|
+
- fixtures/asset-hash-app/lib/middleware.rb
|
249
250
|
- fixtures/asset-hash-app/source/apple-touch-icon.png
|
250
251
|
- fixtures/asset-hash-app/source/favicon.ico
|
251
252
|
- fixtures/asset-hash-app/source/images/100px.gif
|
@@ -631,7 +632,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
631
632
|
version: '0'
|
632
633
|
segments:
|
633
634
|
- 0
|
634
|
-
hash:
|
635
|
+
hash: 4494710196171968679
|
635
636
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
636
637
|
none: false
|
637
638
|
requirements:
|
@@ -640,10 +641,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
640
641
|
version: '0'
|
641
642
|
segments:
|
642
643
|
- 0
|
643
|
-
hash:
|
644
|
+
hash: 4494710196171968679
|
644
645
|
requirements: []
|
645
646
|
rubyforge_project:
|
646
|
-
rubygems_version: 1.8.
|
647
|
+
rubygems_version: 1.8.24
|
647
648
|
signing_key:
|
648
649
|
specification_version: 3
|
649
650
|
summary: Hand-crafted frontend development
|
@@ -692,6 +693,7 @@ test_files:
|
|
692
693
|
- features/twitter-bootstrap-compile.feature
|
693
694
|
- features/wildcard_page_helper.feature
|
694
695
|
- fixtures/asset-hash-app/config.rb
|
696
|
+
- fixtures/asset-hash-app/lib/middleware.rb
|
695
697
|
- fixtures/asset-hash-app/source/apple-touch-icon.png
|
696
698
|
- fixtures/asset-hash-app/source/favicon.ico
|
697
699
|
- fixtures/asset-hash-app/source/images/100px.gif
|