middleman-sprockets 4.0.0 → 4.1.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +8 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +2 -3
- data/README.md +21 -3
- data/features/step_definitions/builder_steps.rb +3 -3
- data/features/step_definitions/server_steps.rb +6 -4
- data/features/support/env.rb +4 -4
- data/features/test_cases/asset_hash.feature +4 -4
- data/features/test_cases/http_prefix_linked_assets.feature +56 -0
- data/features/test_cases/imported_asset_processor.feature +89 -0
- data/fixtures/asset-hash-app/config.rb +0 -2
- data/fixtures/gems/assets_gem/assets_gem.gemspec +5 -7
- data/lib/middleman-sprockets/extension.rb +17 -65
- data/lib/middleman-sprockets/extension/context_methods.rb +44 -0
- data/lib/middleman-sprockets/extension/expose_middleman_helpers.rb +23 -0
- data/lib/middleman-sprockets/interface.rb +1 -1
- data/lib/middleman-sprockets/version.rb +1 -1
- data/middleman-sprockets.gemspec +3 -3
- data/tasks/matrix.rake +11 -14
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b05f69c2af0e939cb74267c61976401d5e5b421
|
4
|
+
data.tar.gz: 0a97406cc10465aa6c19ddc6b624a9327699accb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d59ffb935b66a302c5d4ee3df787dfb5d69189a13547f7a74bd0270eeec410713c7518b66a6dd605017291576380babab346ff946db61791e84f4984f02c3f3d
|
7
|
+
data.tar.gz: a92202dd7d0460ea58f8bf91d192e2900bde148916d3694cf2007c7ce34cce1ed648edcc2d29dccf35f35b877649ad90f2b3ab47afef4a506586e1d59092540e
|
data/.rubocop.yml
CHANGED
@@ -38,6 +38,11 @@ Style/RegexpLiteral:
|
|
38
38
|
Style/SignalException:
|
39
39
|
Enabled: false
|
40
40
|
|
41
|
+
Style/PercentLiteralDelimiters:
|
42
|
+
Enabled: true
|
43
|
+
PreferredDelimiters:
|
44
|
+
'%': '{}'
|
45
|
+
'%w': '[]'
|
41
46
|
|
42
47
|
# Metrics ----------------------------------
|
43
48
|
|
@@ -55,3 +60,6 @@ Metrics/MethodLength:
|
|
55
60
|
|
56
61
|
Lint/EndAlignment:
|
57
62
|
AlignWith: variable
|
63
|
+
|
64
|
+
Lint/AmbiguousRegexpLiteral:
|
65
|
+
Exclude: ["features/step_definitions/**/*"]
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
4.1.0
|
2
|
+
=====
|
3
|
+
|
4
|
+
**fixes**
|
5
|
+
- respect http_prefix in asset_path helper [@vvasabi](https://github.com/middleman/middleman-sprockets/pull/124)
|
6
|
+
|
7
|
+
**features**
|
8
|
+
- allow passing proc/class to `imported_asset_path` option to determine imported asset location [@vvasabi](https://github.com/middleman/middleman-sprockets/pull/123)
|
9
|
+
|
10
|
+
|
1
11
|
4.0.0
|
2
12
|
=====
|
3
13
|
|
data/Gemfile
CHANGED
@@ -33,9 +33,7 @@ gem 'sassc', require: false
|
|
33
33
|
|
34
34
|
# catch the version of listen
|
35
35
|
# working around bundler not switching the dependency graph itself
|
36
|
-
if RUBY_VERSION < '2.2'
|
37
|
-
gem 'listen', '~> 3.0.6'
|
38
|
-
end
|
36
|
+
gem 'listen', '~> 3.0.6' if RUBY_VERSION < '2.2'
|
39
37
|
|
40
38
|
# Code Quality
|
41
39
|
group :test do
|
@@ -43,4 +41,5 @@ group :test do
|
|
43
41
|
gem 'simplecov', '~> 0.9', require: false
|
44
42
|
gem 'coveralls', '~> 0.8', require: false
|
45
43
|
gem 'codeclimate-test-reporter', '~> 0.3', require: false
|
44
|
+
gem 'benchmark-ips'
|
46
45
|
end
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
> The master branch is
|
2
|
-
> -
|
1
|
+
> The master branch is the 4.x version of Middleman-Sprockets.
|
2
|
+
> - If you're upgrading from 3.x, the [upgrading guide](docs/upgrade-3-to-4.md) should get you started.
|
3
3
|
> - For 3.x stable usage please see the [`v3-stable-real` branch](https://github.com/middleman/middleman-sprockets/tree/v3-stable-real)
|
4
4
|
|
5
5
|
# Middleman-Sprockets
|
@@ -45,10 +45,28 @@ To configure, in `config.rb`:
|
|
45
45
|
|
46
46
|
```ruby
|
47
47
|
activate :sprockets do |c|
|
48
|
-
c.imported_asset_path = YOUR_PATH
|
48
|
+
c.imported_asset_path = "YOUR_PATH"
|
49
49
|
end
|
50
50
|
```
|
51
51
|
|
52
|
+
You can also pass an object (proc/lambda/class) that responds to `#call` to `imported_asset_path` to conditionally determine where assets go.
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
activate :sprockets do |c|
|
56
|
+
c.imported_asset_path = ->(sprockets_asset) do
|
57
|
+
if sprockets_asset.logical_path =~ /\.js$/
|
58
|
+
# all files ending with .js get put in /vendor-js
|
59
|
+
File.join('vendor-js', sprockets_asset.logical_path)
|
60
|
+
else
|
61
|
+
# other assets head to /imported
|
62
|
+
File.join('imported', sprockets_asset.logical_path)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
```
|
67
|
+
|
68
|
+
[View the imported_asset_processor test](features/test_cases/imported_asset_processor.feature) for an example using a class.
|
69
|
+
|
52
70
|
|
53
71
|
**`expose_middleman_helpers` [default: false]**
|
54
72
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
Given /^a built app$/ do
|
2
|
-
step %
|
2
|
+
step %{I run `middleman build --verbose`}
|
3
3
|
end
|
4
4
|
|
5
5
|
Given /^a successfully built app$/ do
|
6
|
-
step %
|
7
|
-
step %
|
6
|
+
step %{a built app}
|
7
|
+
step %{was successfully built}
|
8
8
|
end
|
@@ -2,15 +2,17 @@ Given /^wait a second$/ do
|
|
2
2
|
sleep(1)
|
3
3
|
end
|
4
4
|
|
5
|
+
# rubocop:disable Lint/Debugger
|
5
6
|
Given /^binding.pry/ do
|
6
7
|
binding.pry
|
7
8
|
end
|
9
|
+
# rubocop:enable Lint/Debugger
|
8
10
|
|
9
11
|
Given /^the file "([^\"]*)" content is changed to\:$/ do |name, content|
|
10
|
-
step %
|
12
|
+
step %{a file named "#{name}" with:}, content
|
11
13
|
sleep 1
|
12
14
|
system "touch #{File.join(ENV['MM_ROOT'], name)}"
|
13
|
-
step %
|
15
|
+
step %{the filesystem is polled}
|
14
16
|
end
|
15
17
|
|
16
18
|
Then /^the filesystem is polled$/ do
|
@@ -23,10 +25,10 @@ end
|
|
23
25
|
|
24
26
|
Then /^sprockets paths should include "([^\"]*)"$/ do |path|
|
25
27
|
sprockets = @server_inst.extensions[:sprockets].environment
|
26
|
-
expect(
|
28
|
+
expect(sprockets.paths).to include File.join(ENV['MM_ROOT'], path)
|
27
29
|
end
|
28
30
|
|
29
31
|
Then /^sprockets paths should include gem path "([^\"]*)"/ do |path|
|
30
32
|
sprockets = @server_inst.extensions[:sprockets].environment
|
31
|
-
expect(
|
33
|
+
expect(sprockets.paths).to include File.join(PROJECT_ROOT_PATH, 'fixtures', 'gems', path)
|
32
34
|
end
|
data/features/support/env.rb
CHANGED
@@ -9,9 +9,9 @@ require 'bundler'
|
|
9
9
|
Bundler.require :default, :test, :development
|
10
10
|
|
11
11
|
ENV['TEST'] = 'true'
|
12
|
-
ENV[
|
12
|
+
ENV['AUTOLOAD_SPROCKETS'] = 'true'
|
13
13
|
|
14
|
-
require
|
15
|
-
require
|
14
|
+
require 'middleman-core'
|
15
|
+
require 'middleman-core/step_definitions'
|
16
16
|
require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-sprockets')
|
17
|
-
require
|
17
|
+
require 'erubis'
|
@@ -98,8 +98,8 @@ Feature: Assets get a file hash appended to their URL and references to them are
|
|
98
98
|
function sprockets_sub_function() { }
|
99
99
|
"""
|
100
100
|
When I go to "/partials/"
|
101
|
-
Then I should see 'src="../javascripts/sprockets_base-
|
102
|
-
When I go to "/javascripts/sprockets_base-
|
101
|
+
Then I should see 'src="../javascripts/sprockets_base-0252a861.js'
|
102
|
+
When I go to "/javascripts/sprockets_base-0252a861.js"
|
103
103
|
Then I should see "sprockets_sub_function"
|
104
104
|
And wait a second
|
105
105
|
And the file "source/javascripts/sprockets_sub.js" has the contents
|
@@ -107,6 +107,6 @@ Feature: Assets get a file hash appended to their URL and references to them are
|
|
107
107
|
function sprockets_sub2_function() { }
|
108
108
|
"""
|
109
109
|
When I go to "/partials/"
|
110
|
-
Then I should see 'src="../javascripts/sprockets_base-
|
111
|
-
When I go to "/javascripts/sprockets_base-
|
110
|
+
Then I should see 'src="../javascripts/sprockets_base-5121d891.js'
|
111
|
+
When I go to "/javascripts/sprockets_base-5121d891.js"
|
112
112
|
Then I should see "sprockets_sub2_function"
|
@@ -0,0 +1,56 @@
|
|
1
|
+
Feature: Allow http_prefix to be prepended correctly to image-url when referencing a linked asset
|
2
|
+
Background:
|
3
|
+
Given a fixture app "base-app"
|
4
|
+
And a file named "source/stylesheets/style.css.scss" with:
|
5
|
+
"""
|
6
|
+
.foo {
|
7
|
+
background: image-url("logo.png");
|
8
|
+
}
|
9
|
+
"""
|
10
|
+
|
11
|
+
Scenario: Assets built have the correct http_prefix prepended
|
12
|
+
Given a file named "config.rb" with:
|
13
|
+
"""
|
14
|
+
activate :sprockets
|
15
|
+
config[:http_prefix] = '/foo/bar'
|
16
|
+
"""
|
17
|
+
And a successfully built app
|
18
|
+
|
19
|
+
When I cd to "build"
|
20
|
+
Then the following files should exist:
|
21
|
+
| stylesheets/style.css |
|
22
|
+
| assets/logo.png |
|
23
|
+
And the file "stylesheets/style.css" should contain:
|
24
|
+
"""
|
25
|
+
.foo {
|
26
|
+
background: url(/foo/bar/assets/logo.png); }
|
27
|
+
"""
|
28
|
+
|
29
|
+
Scenario: When http_prefix is not set, just prepend /
|
30
|
+
Given a file named "config.rb" with:
|
31
|
+
"""
|
32
|
+
activate :sprockets
|
33
|
+
"""
|
34
|
+
And a successfully built app
|
35
|
+
|
36
|
+
When I cd to "build"
|
37
|
+
Then the file "stylesheets/style.css" should contain:
|
38
|
+
"""
|
39
|
+
.foo {
|
40
|
+
background: url(/assets/logo.png); }
|
41
|
+
"""
|
42
|
+
|
43
|
+
Scenario: relative_assets should still work
|
44
|
+
Given a file named "config.rb" with:
|
45
|
+
"""
|
46
|
+
activate :sprockets
|
47
|
+
activate :relative_assets
|
48
|
+
"""
|
49
|
+
And a successfully built app
|
50
|
+
|
51
|
+
When I cd to "build"
|
52
|
+
Then the file "stylesheets/style.css" should contain:
|
53
|
+
"""
|
54
|
+
.foo {
|
55
|
+
background: url(../assets/logo.png); }
|
56
|
+
"""
|
@@ -0,0 +1,89 @@
|
|
1
|
+
Feature: Imported assets can be placed in paths determined by a processor
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given a fixture app "base-app"
|
5
|
+
And a file named "config.rb" with:
|
6
|
+
"""
|
7
|
+
config[:images_dir] = "images"
|
8
|
+
config[:fonts_dir] = "fonts"
|
9
|
+
|
10
|
+
class ImportedAssetPathProcessor
|
11
|
+
attr_reader :app
|
12
|
+
|
13
|
+
def initialize(app)
|
14
|
+
@app = app
|
15
|
+
end
|
16
|
+
|
17
|
+
def call(sprockets_asset)
|
18
|
+
directory = case sprockets_asset.logical_path
|
19
|
+
when /^images\// then app.config[:images_dir]
|
20
|
+
when /^fonts\// then app.config[:fonts_dir]
|
21
|
+
else
|
22
|
+
"imported"
|
23
|
+
end
|
24
|
+
relative_path = sprockets_asset.logical_path.sub(/^#{directory}/, '')
|
25
|
+
File.join(directory, relative_path)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
activate :sprockets do |config|
|
30
|
+
config.imported_asset_path = ImportedAssetPathProcessor.new(app)
|
31
|
+
end
|
32
|
+
sprockets.append_path File.join(root, 'vendor')
|
33
|
+
"""
|
34
|
+
And a file named "vendor/fonts/webfont-vendor.eot" with:
|
35
|
+
"""
|
36
|
+
"""
|
37
|
+
And a file named "vendor/images/vendor-image.jpg" with:
|
38
|
+
"""
|
39
|
+
"""
|
40
|
+
And a file named "vendor/foo/bar.jpg" with:
|
41
|
+
"""
|
42
|
+
"""
|
43
|
+
And a file named "source/fonts/webfont-source.eot" with:
|
44
|
+
"""
|
45
|
+
"""
|
46
|
+
And a file named "source/images/source-image.jpg" with:
|
47
|
+
"""
|
48
|
+
"""
|
49
|
+
|
50
|
+
|
51
|
+
Scenario: Assets built by being linked (fully resolved) are built in the custom path
|
52
|
+
Given a file named "source/stylesheets/manifest.css" with:
|
53
|
+
"""
|
54
|
+
//= link 'webfont-vendor.eot'
|
55
|
+
//= link 'vendor-image.jpg'
|
56
|
+
//= link 'foo/bar.jpg'
|
57
|
+
"""
|
58
|
+
And the Server is running
|
59
|
+
|
60
|
+
When I go to "/fonts/webfont-vendor.eot"
|
61
|
+
Then the status code should be "200"
|
62
|
+
When I go to "/fonts/webfont-source.eot"
|
63
|
+
Then the status code should be "200"
|
64
|
+
When I go to "/images/vendor-image.jpg"
|
65
|
+
Then the status code should be "200"
|
66
|
+
When I go to "/images/source-image.jpg"
|
67
|
+
Then the status code should be "200"
|
68
|
+
When I go to "/imported/foo/bar.jpg"
|
69
|
+
Then the status code should be "200"
|
70
|
+
|
71
|
+
Scenario: Assets built by being linked (minimally resolved) are built in the custom path
|
72
|
+
Given a file named "source/stylesheets/manifest.css" with:
|
73
|
+
"""
|
74
|
+
//= link 'fonts/webfont-vendor.eot'
|
75
|
+
//= link 'images/vendor-image.jpg'
|
76
|
+
//= link 'foo/bar.jpg'
|
77
|
+
"""
|
78
|
+
And the Server is running
|
79
|
+
|
80
|
+
When I go to "/fonts/webfont-vendor.eot"
|
81
|
+
Then the status code should be "200"
|
82
|
+
When I go to "/fonts/webfont-source.eot"
|
83
|
+
Then the status code should be "200"
|
84
|
+
When I go to "/images/vendor-image.jpg"
|
85
|
+
Then the status code should be "200"
|
86
|
+
When I go to "/images/source-image.jpg"
|
87
|
+
Then the status code should be "200"
|
88
|
+
When I go to "/imported/foo/bar.jpg"
|
89
|
+
Then the status code should be "200"
|
@@ -1,16 +1,14 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
|
-
|
3
2
|
gem.name = 'assets_gem'
|
4
3
|
gem.version = '0.0.0'
|
5
4
|
gem.platform = Gem::Platform::RUBY
|
6
5
|
|
7
6
|
gem.summary = 'dummy gem for a fixture'
|
8
|
-
gem.description =
|
9
|
-
gem.authors = [
|
10
|
-
gem.email = [
|
7
|
+
gem.description = 'dummy gem for a fixture'
|
8
|
+
gem.authors = ['Steven Sloan']
|
9
|
+
gem.email = ['stevenosloan@gmail.com']
|
11
10
|
gem.license = 'MIT'
|
12
11
|
|
13
|
-
gem.files = Dir[
|
14
|
-
gem.require_path =
|
15
|
-
|
12
|
+
gem.files = Dir['lib/**/*.rb', 'vendor/**/*']
|
13
|
+
gem.require_path = 'lib'
|
16
14
|
end
|
@@ -16,9 +16,9 @@ module Middleman
|
|
16
16
|
expose_to_config sprockets: :environment
|
17
17
|
expose_to_template sprockets: :environment
|
18
18
|
|
19
|
-
option :supported_output_extensions,
|
20
|
-
option :imported_asset_path,
|
21
|
-
option :expose_middleman_helpers,
|
19
|
+
option :supported_output_extensions, ['.css', '.js'], 'Output extensions sprockets should process'
|
20
|
+
option :imported_asset_path, 'assets', 'Where under source imported assets should be placed.'
|
21
|
+
option :expose_middleman_helpers, false, 'Whether to expose middleman helpers to sprockets.'
|
22
22
|
|
23
23
|
Contract ::Middleman::Application, Hash, Maybe[Proc] => Any
|
24
24
|
def initialize app, options_hash={}, &block
|
@@ -46,43 +46,8 @@ module Middleman
|
|
46
46
|
@environment.context_class.send(:define_method, :data) { the_app.data }
|
47
47
|
@environment.context_class.send(:define_method, :env) { the_env }
|
48
48
|
|
49
|
-
@environment.context_class.
|
50
|
-
|
51
|
-
app.extensions[:sprockets].resources.find_by_path(filename)
|
52
|
-
end
|
53
|
-
|
54
|
-
def current_path
|
55
|
-
current_resource.destination_path if current_resource
|
56
|
-
end
|
57
|
-
|
58
|
-
def asset_path path, options={}
|
59
|
-
# Handle people calling with the Middleman/Padrino asset path signature
|
60
|
-
if path.is_a?(::Symbol) && !options.is_a?(::Hash)
|
61
|
-
kind = path
|
62
|
-
path = options
|
63
|
-
else
|
64
|
-
kind = {
|
65
|
-
image: :images,
|
66
|
-
font: :fonts,
|
67
|
-
javascript: :js,
|
68
|
-
stylesheet: :css
|
69
|
-
}.fetch(options[:type], options[:type])
|
70
|
-
end
|
71
|
-
|
72
|
-
if File.extname(path).empty?
|
73
|
-
path << { js: '.js', css: '.css' }.fetch(kind, '')
|
74
|
-
end
|
75
|
-
|
76
|
-
if app.extensions[:sprockets].check_asset(path)
|
77
|
-
link_asset(path)
|
78
|
-
app.extensions[:sprockets].sprockets_asset_path(env[path]).sub(/^\/?/, '/')
|
79
|
-
else
|
80
|
-
app.asset_path(kind, path)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
expose_app_helpers_to_sprockets! if options[:expose_middleman_helpers]
|
49
|
+
@environment.context_class.send(:include, ContextMethods)
|
50
|
+
@environment.context_class.send(:prepend, ExposeMiddlemanHelpers) if options[:expose_middleman_helpers]
|
86
51
|
end
|
87
52
|
|
88
53
|
Contract ResourceList => ResourceList
|
@@ -119,7 +84,11 @@ module Middleman
|
|
119
84
|
|
120
85
|
Contract ::Sprockets::Asset => String
|
121
86
|
def sprockets_asset_path sprockets_asset
|
122
|
-
|
87
|
+
if options[:imported_asset_path].is_a?(String)
|
88
|
+
File.join(options[:imported_asset_path], sprockets_asset.logical_path)
|
89
|
+
else
|
90
|
+
options[:imported_asset_path].call(sprockets_asset)
|
91
|
+
end
|
123
92
|
end
|
124
93
|
|
125
94
|
private
|
@@ -128,8 +97,8 @@ module Middleman
|
|
128
97
|
@_linked_resources ||= (@resources.resources
|
129
98
|
.map(&:sprockets_asset)
|
130
99
|
.map(&:links)
|
131
|
-
.reduce(&:merge) || Set.new
|
132
|
-
|
100
|
+
.reduce(&:merge) || Set.new
|
101
|
+
).map do |path|
|
133
102
|
asset = environment[path]
|
134
103
|
generate_resource(sprockets_asset_path(asset),
|
135
104
|
asset.filename,
|
@@ -142,26 +111,6 @@ module Middleman
|
|
142
111
|
linked_resources
|
143
112
|
end
|
144
113
|
|
145
|
-
def expose_app_helpers_to_sprockets!
|
146
|
-
@environment.context_class.class_eval do
|
147
|
-
def mm_context
|
148
|
-
@_mm_context ||= app.template_context_class.new(app, current_path: current_path)
|
149
|
-
end
|
150
|
-
|
151
|
-
def method_missing method, *args, &block
|
152
|
-
if mm_context.respond_to?(method)
|
153
|
-
return mm_context.send method, *args, &block
|
154
|
-
end
|
155
|
-
|
156
|
-
super
|
157
|
-
end
|
158
|
-
|
159
|
-
def respond_to? method, include_private=false
|
160
|
-
super || mm_context.respond_to?(method, include_private)
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
114
|
Contract ::Middleman::Sitemap::Resource => Or[::Middleman::Sitemap::Resource, Resource]
|
166
115
|
def process_sprockets_resource resource
|
167
116
|
::Middleman::Util.instrument 'sprockets', name: 'process_resource', resource: resource do
|
@@ -215,8 +164,8 @@ module Middleman
|
|
215
164
|
# Add any directories from gems with Rails-like paths to sprockets load path
|
216
165
|
def append_paths_from_gems
|
217
166
|
root_paths = rubygems_latest_specs.map(&:full_gem_path) << app.root
|
218
|
-
base_paths = %w
|
219
|
-
asset_dirs = %w
|
167
|
+
base_paths = %w[assets app app/assets vendor vendor/assets lib lib/assets]
|
168
|
+
asset_dirs = %w[javascripts js stylesheets css images img fonts]
|
220
169
|
|
221
170
|
root_paths.product(base_paths.product(asset_dirs)).each do |root, (base, asset)|
|
222
171
|
path = File.join(root, base, asset)
|
@@ -226,3 +175,6 @@ module Middleman
|
|
226
175
|
end
|
227
176
|
end
|
228
177
|
end
|
178
|
+
|
179
|
+
require_relative 'extension/context_methods'
|
180
|
+
require_relative 'extension/expose_middleman_helpers'
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Sprockets
|
3
|
+
class Extension
|
4
|
+
module ContextMethods
|
5
|
+
def current_resource
|
6
|
+
app.extensions[:sprockets].resources.find_by_path(filename)
|
7
|
+
end
|
8
|
+
|
9
|
+
def current_path
|
10
|
+
current_resource.destination_path if current_resource
|
11
|
+
end
|
12
|
+
|
13
|
+
def asset_path path, options={}
|
14
|
+
# Handle people calling with the Middleman/Padrino asset path signature
|
15
|
+
if path.is_a?(::Symbol) && !options.is_a?(::Hash)
|
16
|
+
kind = path
|
17
|
+
path = options
|
18
|
+
else
|
19
|
+
kind = {
|
20
|
+
image: :images,
|
21
|
+
font: :fonts,
|
22
|
+
javascript: :js,
|
23
|
+
stylesheet: :css
|
24
|
+
}.fetch(options[:type], options[:type])
|
25
|
+
end
|
26
|
+
|
27
|
+
if File.extname(path).empty?
|
28
|
+
path << { js: '.js', css: '.css' }.fetch(kind, '')
|
29
|
+
end
|
30
|
+
|
31
|
+
if app.extensions[:sprockets].check_asset(path)
|
32
|
+
link_asset(path)
|
33
|
+
|
34
|
+
File.join *[app.config[:http_prefix],
|
35
|
+
app.extensions[:sprockets].sprockets_asset_path(env[path])].compact
|
36
|
+
else
|
37
|
+
app.asset_path(kind, path)
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Sprockets
|
3
|
+
class Extension
|
4
|
+
module ExposeMiddlemanHelpers
|
5
|
+
def mm_context
|
6
|
+
@_mm_context ||= app.template_context_class.new(app, current_path: current_path)
|
7
|
+
end
|
8
|
+
|
9
|
+
def method_missing method, *args, &block
|
10
|
+
if mm_context.respond_to?(method)
|
11
|
+
return mm_context.send method, *args, &block
|
12
|
+
end
|
13
|
+
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def respond_to? method, include_private=false
|
18
|
+
super || mm_context.respond_to?(method, include_private)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -36,7 +36,7 @@ module Middleman
|
|
36
36
|
Contract String => Bool
|
37
37
|
def processible? filename
|
38
38
|
file_ext, _mime = ::Sprockets::PathUtils.match_path_extname(filename, environment.config[:mime_exts])
|
39
|
-
*
|
39
|
+
*_template_exts, target_ext = Middleman::Util.collect_extensions(filename)
|
40
40
|
options[:supported_output_extensions].include?(target_ext) && extensions.include?(file_ext)
|
41
41
|
end
|
42
42
|
end
|
data/middleman-sprockets.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
3
3
|
require 'middleman-sprockets/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
@@ -9,8 +9,8 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.authors = ['Thomas Reynolds', 'Ben Hollis', 'Karl Freeman']
|
10
10
|
s.email = ['me@tdreyno.com', 'ben@benhollis.net', 'karlfreeman@gmail.com']
|
11
11
|
s.homepage = 'https://github.com/middleman/middleman-sprockets'
|
12
|
-
s.summary =
|
13
|
-
s.description =
|
12
|
+
s.summary = 'Sprockets support for Middleman'
|
13
|
+
s.description = 'Sprockets support for Middleman'
|
14
14
|
s.license = 'MIT'
|
15
15
|
s.files = `git ls-files -z`.split("\0")
|
16
16
|
s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
|
data/tasks/matrix.rake
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
namespace :matrix do
|
2
|
-
|
3
|
-
def with_gemfile gemfile, &block
|
2
|
+
def with_gemfile gemfile
|
4
3
|
Bundler.with_clean_env do
|
5
4
|
gemfile = File.expand_path(gemfile)
|
6
5
|
ENV['BUNDLE_GEMFILE'] = gemfile
|
@@ -9,8 +8,8 @@ namespace :matrix do
|
|
9
8
|
system "rm #{gemfile}.lock"
|
10
9
|
end
|
11
10
|
|
12
|
-
unless File.exist?(
|
13
|
-
args = [
|
11
|
+
unless File.exist?("#{gemfile}.lock")
|
12
|
+
args = ['--quiet']
|
14
13
|
puts "bundling #{gemfile}"
|
15
14
|
`bundle install --gemfile='#{gemfile}' #{args.join(' ')}`
|
16
15
|
end
|
@@ -20,27 +19,25 @@ namespace :matrix do
|
|
20
19
|
end
|
21
20
|
|
22
21
|
def tracer msg
|
23
|
-
|
24
|
-
puts
|
22
|
+
tracer_length = msg.length + 10
|
23
|
+
puts ''
|
24
|
+
puts tracer_length.times.to_a.map { '=' }.join
|
25
25
|
puts " #{msg}"
|
26
|
-
puts
|
26
|
+
puts tracer_length.times.to_a.map { '=' }.join
|
27
27
|
end
|
28
28
|
|
29
|
-
MATRIX = %w[
|
29
|
+
MATRIX = %w[middleman-4.0 middleman-4.1 middleman-head sprockets-4.0].freeze
|
30
30
|
|
31
31
|
MATRIX.each do |gemfile_name|
|
32
|
-
|
33
32
|
desc "run tests with #{gemfile_name} gemfile"
|
34
33
|
task :"#{gemfile_name}" do
|
35
34
|
tracer "running tests with #{gemfile_name} gemfile"
|
36
35
|
with_gemfile "gemfiles/#{gemfile_name}.gemfile" do
|
37
|
-
|
36
|
+
'rake test'
|
38
37
|
end
|
39
38
|
end
|
40
|
-
|
41
39
|
end
|
42
40
|
|
43
|
-
desc
|
44
|
-
task :
|
45
|
-
|
41
|
+
desc 'run test on full matrix'
|
42
|
+
task all: MATRIX.map { |gn| "matrix:#{gn}" }
|
46
43
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-sprockets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Reynolds
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-10-26 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: middleman-core
|
@@ -90,8 +90,10 @@ files:
|
|
90
90
|
- features/test_cases/excluded_file_extensions.feature
|
91
91
|
- features/test_cases/file_not_found.feature
|
92
92
|
- features/test_cases/handles_string_resource.feature
|
93
|
+
- features/test_cases/http_prefix_linked_assets.feature
|
93
94
|
- features/test_cases/ignore_directive_is_respected.feature
|
94
95
|
- features/test_cases/imported_asset_extensions.feature
|
96
|
+
- features/test_cases/imported_asset_processor.feature
|
95
97
|
- features/test_cases/jst.feature
|
96
98
|
- features/test_cases/linked_asset_addition_and_removal.feature
|
97
99
|
- features/test_cases/long_filenames.feature
|
@@ -144,6 +146,8 @@ files:
|
|
144
146
|
- gemfiles/sprockets-4.0.gemfile
|
145
147
|
- lib/middleman-sprockets.rb
|
146
148
|
- lib/middleman-sprockets/extension.rb
|
149
|
+
- lib/middleman-sprockets/extension/context_methods.rb
|
150
|
+
- lib/middleman-sprockets/extension/expose_middleman_helpers.rb
|
147
151
|
- lib/middleman-sprockets/interface.rb
|
148
152
|
- lib/middleman-sprockets/resource.rb
|
149
153
|
- lib/middleman-sprockets/resource_store.rb
|
@@ -173,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
173
177
|
version: '0'
|
174
178
|
requirements: []
|
175
179
|
rubyforge_project:
|
176
|
-
rubygems_version: 2.
|
180
|
+
rubygems_version: 2.5.1
|
177
181
|
signing_key:
|
178
182
|
specification_version: 4
|
179
183
|
summary: Sprockets support for Middleman
|
@@ -191,8 +195,10 @@ test_files:
|
|
191
195
|
- features/test_cases/excluded_file_extensions.feature
|
192
196
|
- features/test_cases/file_not_found.feature
|
193
197
|
- features/test_cases/handles_string_resource.feature
|
198
|
+
- features/test_cases/http_prefix_linked_assets.feature
|
194
199
|
- features/test_cases/ignore_directive_is_respected.feature
|
195
200
|
- features/test_cases/imported_asset_extensions.feature
|
201
|
+
- features/test_cases/imported_asset_processor.feature
|
196
202
|
- features/test_cases/jst.feature
|
197
203
|
- features/test_cases/linked_asset_addition_and_removal.feature
|
198
204
|
- features/test_cases/long_filenames.feature
|
@@ -239,4 +245,3 @@ test_files:
|
|
239
245
|
- fixtures/gems/assets_gem/vendor/assets/fonts/font.ttf
|
240
246
|
- fixtures/gems/assets_gem/vendor/assets/images/logo.png
|
241
247
|
- fixtures/gems/assets_gem/vendor/assets/javascripts/_imports/import.js
|
242
|
-
has_rdoc:
|