middleman-sprockets 4.0.0.rc.2 → 4.0.0.rc.3
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/.travis.yml +7 -10
- data/Gemfile +7 -1
- data/Rakefile +1 -0
- data/features/linked_assets.feature +1 -1
- data/features/middleman_helpers.feature +3 -5
- data/features/step_definitions/server_steps.rb +9 -0
- data/features/test_cases/asset_hash.feature +4 -4
- data/features/test_cases/excluded_file_extensions.feature +11 -0
- data/features/test_cases/file_not_found.feature +25 -4
- data/features/test_cases/handles_string_resource.feature +22 -0
- data/features/test_cases/linked_asset_addition_and_removal.feature +195 -0
- data/features/test_cases/partial_rendering.feature +50 -0
- data/features/test_cases/sass_globs.feature +1 -1
- data/features/test_cases/usage_of_environment.feature +32 -0
- data/lib/middleman-sprockets/extension.rb +45 -33
- data/lib/middleman-sprockets/interface.rb +2 -1
- data/lib/middleman-sprockets/resource.rb +2 -2
- data/lib/middleman-sprockets/resource_store.rb +39 -0
- data/lib/middleman-sprockets/version.rb +1 -1
- data/middleman-sprockets.gemspec +2 -0
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 51021db335e75bc9e5a93a65b56db0fb1b89fc5e
|
4
|
+
data.tar.gz: 7200150e16a3888f9015c759fde9b14e5a65e6be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7272ff377038976d9fe1d314c9b931c5dbefb7b46122a605012a4fc6e9301b4105d0ee6f9ff639f099fa17c400f6e27b422ece03308381ad3ae1ca3c54f67f67
|
7
|
+
data.tar.gz: 64cdd14315877463aad4eeb6b987ff1fd44d545a7e0ada7fefad291db366da1debc8036455fbda110014481fa705a4f8e637e8c52ed65e2d7a6e08175f6a443d
|
data/.travis.yml
CHANGED
@@ -6,29 +6,26 @@ env: TEST=true
|
|
6
6
|
rvm:
|
7
7
|
- 2.0.0
|
8
8
|
- 2.1
|
9
|
-
- 2.2
|
10
|
-
- 2.3.
|
9
|
+
- 2.2.5
|
10
|
+
- 2.3.1
|
11
11
|
- ruby-head
|
12
|
-
- jruby-19mode
|
13
|
-
- jruby-head
|
14
12
|
|
15
13
|
gemfile:
|
16
14
|
- gemfiles/middleman-4.1.gemfile
|
17
15
|
|
18
16
|
matrix:
|
19
17
|
include:
|
20
|
-
- rvm: 2.
|
18
|
+
- rvm: 2.3.1
|
21
19
|
gemfile: gemfiles/middleman-head.gemfile
|
22
|
-
|
20
|
+
env: SKIP_ASSET_HASH=true MIDDLEMAN_HEAD=true
|
21
|
+
- rvm: 2.3.1
|
23
22
|
gemfile: gemfiles/middleman-4.0.gemfile
|
24
23
|
env: SKIP_ASSET_HASH=true
|
25
|
-
- rvm: 2.
|
24
|
+
- rvm: 2.3.1
|
26
25
|
gemfile: gemfiles/sprockets-4.0.gemfile
|
27
26
|
env: SKIP_ASSET_HASH=true
|
28
27
|
|
29
28
|
allow_failures:
|
30
29
|
- rvm: ruby-head
|
31
|
-
- rvm:
|
32
|
-
- rvm: jruby-head
|
33
|
-
- rvm: 2.2
|
30
|
+
- rvm: 2.3.1
|
34
31
|
gemfile: gemfiles/sprockets-4.0.gemfile
|
data/Gemfile
CHANGED
@@ -29,7 +29,13 @@ gem 'ejs', '~> 1.1.1'
|
|
29
29
|
gem 'eco', '~> 1.0.0'
|
30
30
|
gem 'erubis', '~> 2.7.0'
|
31
31
|
gem 'haml', '~> 4.0', require: false
|
32
|
-
gem 'sassc',
|
32
|
+
gem 'sassc', require: false
|
33
|
+
|
34
|
+
# catch the version of listen
|
35
|
+
# working around bundler not switching the dependency graph itself
|
36
|
+
if RUBY_VERSION < '2.2'
|
37
|
+
gem 'listen', '~> 3.0.6'
|
38
|
+
end
|
33
39
|
|
34
40
|
# Code Quality
|
35
41
|
group :test do
|
data/Rakefile
CHANGED
@@ -21,6 +21,7 @@ Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
|
|
21
21
|
end
|
22
22
|
|
23
23
|
exempt_tags.push '--tags ~@asset_hash' if ENV['SKIP_ASSET_HASH'] == 'true'
|
24
|
+
exempt_tags.push '--tags ~@middleman_head' unless ENV['MIDDLEMAN_HEAD'] == 'true'
|
24
25
|
t.cucumber_opts = "--color #{exempt_tags.join(' ')} --strict"
|
25
26
|
end
|
26
27
|
|
@@ -100,13 +100,11 @@ Feature: Access to Middleman helpers
|
|
100
100
|
Then I should see "console.log('hello');"
|
101
101
|
|
102
102
|
|
103
|
-
Scenario: current_resource is
|
103
|
+
Scenario: current_resource is available
|
104
104
|
Given a fixture app "base-app"
|
105
105
|
And a file named "config.rb" with:
|
106
106
|
"""
|
107
|
-
activate :sprockets
|
108
|
-
c.expose_middleman_helpers = true
|
109
|
-
end
|
107
|
+
activate :sprockets
|
110
108
|
"""
|
111
109
|
And a file named "source/index.html.erb" with:
|
112
110
|
"""
|
@@ -122,7 +120,7 @@ Feature: Access to Middleman helpers
|
|
122
120
|
Then I should see "<pre>/</pre>"
|
123
121
|
|
124
122
|
When going to "/javascripts/site.js" should not raise an exception
|
125
|
-
And I should see "
|
123
|
+
And I should see "console.log('/javascripts/site.js');"
|
126
124
|
|
127
125
|
|
128
126
|
Scenario: Helpers are not included by default
|
@@ -10,6 +10,15 @@ Given /^the file "([^\"]*)" content is changed to\:$/ do |name, content|
|
|
10
10
|
step %Q{a file named "#{name}" with:}, content
|
11
11
|
sleep 1
|
12
12
|
system "touch #{File.join(ENV['MM_ROOT'], name)}"
|
13
|
+
step %Q{the filesystem is polled}
|
14
|
+
end
|
15
|
+
|
16
|
+
Then /^the filesystem is polled$/ do
|
17
|
+
if @server_inst.files.respond_to?(:poll_once!)
|
18
|
+
@server_inst.files.poll_once!
|
19
|
+
elsif @server_inst.files.respond_to?(:find_new_files!)
|
20
|
+
@server_inst.files.find_new_files!
|
21
|
+
end
|
13
22
|
end
|
14
23
|
|
15
24
|
Then /^sprockets paths should include "([^\"]*)"$/ do |path|
|
@@ -60,15 +60,15 @@ Feature: Assets get a file hash appended to their URL and references to them are
|
|
60
60
|
Scenario: Enabling an asset host still produces hashed files and references
|
61
61
|
Given the Server is running at "asset-hash-host-app"
|
62
62
|
When I go to "/"
|
63
|
-
Then I should see 'href="http://middlemanapp.com/stylesheets/site-
|
63
|
+
Then I should see 'href="http://middlemanapp.com/stylesheets/site-2f4798cc.css"'
|
64
64
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
65
65
|
When I go to "/subdir/"
|
66
|
-
Then I should see 'href="http://middlemanapp.com/stylesheets/site-
|
66
|
+
Then I should see 'href="http://middlemanapp.com/stylesheets/site-2f4798cc.css"'
|
67
67
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
68
68
|
When I go to "/other/"
|
69
|
-
Then I should see 'href="http://middlemanapp.com/stylesheets/site-
|
69
|
+
Then I should see 'href="http://middlemanapp.com/stylesheets/site-2f4798cc.css"'
|
70
70
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
71
|
-
When I go to "/stylesheets/site-
|
71
|
+
When I go to "/stylesheets/site-2f4798cc.css"
|
72
72
|
Then I should see 'background-image: url(http://middlemanapp.com/images/100px-5fd6fb90.jpg)'
|
73
73
|
|
74
74
|
@asset_hash
|
@@ -37,3 +37,14 @@ Feature: Files with unhandled file extensions are ignored
|
|
37
37
|
|
38
38
|
When I go to "/library/js/index.js"
|
39
39
|
Then I should see "alert('why haml?');"
|
40
|
+
|
41
|
+
Scenario: Json files should be ignored for sprockets 4
|
42
|
+
Given a file named "source/file.json.coffee" with:
|
43
|
+
"""
|
44
|
+
data:
|
45
|
+
title: "file"
|
46
|
+
"""
|
47
|
+
And the Server is running
|
48
|
+
|
49
|
+
When I go to "/file.json"
|
50
|
+
Then I should see 'title: "file"'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Feature: Throw sane error when Sprockets doesn't find an asset
|
2
2
|
|
3
|
-
|
3
|
+
Scenario: When a file is removed, a FileNotFound is caught
|
4
4
|
Given a fixture app "base-app"
|
5
5
|
And a file named "config.rb" with:
|
6
6
|
"""
|
@@ -20,12 +20,33 @@ Feature: Throw sane error when Sprockets doesn't find an asset
|
|
20
20
|
"""
|
21
21
|
console.log 'main'
|
22
22
|
"""
|
23
|
-
|
24
|
-
Scenario: When a file is removed, a FileNotFound is caught
|
25
|
-
Given the Server is running
|
23
|
+
And the Server is running
|
26
24
|
|
27
25
|
When I go to "/stylesheets/main.css"
|
28
26
|
Then I should see "Sprockets::FileNotFound: stylesheets/main.css"
|
29
27
|
|
30
28
|
When I go to "/javascripts/main.js"
|
31
29
|
Then I should see "Sprockets::FileNotFound: javascripts/main.js"
|
30
|
+
|
31
|
+
Scenario: Importing a missing sass file
|
32
|
+
In Sprockets 4, with ruby Sass -- having environment available is required otherwise the printer for load path with fail.
|
33
|
+
|
34
|
+
Given a fixture app "base-app"
|
35
|
+
And a file named "config.rb" with:
|
36
|
+
"""
|
37
|
+
# simulate not having sassc
|
38
|
+
# trying to catch a spefic sprockets error
|
39
|
+
#
|
40
|
+
Object.send :remove_const, :SassC if defined?(SassC)
|
41
|
+
activate :sprockets do |c|
|
42
|
+
c.expose_middleman_helpers = true
|
43
|
+
end
|
44
|
+
"""
|
45
|
+
And a file named "source/stylesheets/site.css.scss" with:
|
46
|
+
"""
|
47
|
+
@import "missing";
|
48
|
+
"""
|
49
|
+
And the Server is running
|
50
|
+
|
51
|
+
When I go to "/stylesheets/site.css"
|
52
|
+
Then I should see "Error: File to import not found or unreadable: missing."
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Feature: Sitemaps that include StringResource
|
2
|
+
|
3
|
+
Scenario: No exception is raised determining if the resource is processible
|
4
|
+
Given a fixture app "base-app"
|
5
|
+
And a file named "config.rb" with:
|
6
|
+
"""
|
7
|
+
class StringResourceGenerator < Middleman::Extension
|
8
|
+
def manipulate_resource_list resources
|
9
|
+
resources + [Middleman::Sitemap::StringResource.new(app.sitemap, 'stringy/index.html', 'Stringy!')]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
::Middleman::Extensions.register(:stringy, StringResourceGenerator)
|
14
|
+
|
15
|
+
activate :stringy
|
16
|
+
activate :sprockets
|
17
|
+
"""
|
18
|
+
And the Server is running
|
19
|
+
|
20
|
+
When I go to "/stringy"
|
21
|
+
Then I should see "Stringy!"
|
22
|
+
|
@@ -0,0 +1,195 @@
|
|
1
|
+
Feature: Detecting linked asset addition and removal
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given a fixture app "base-app"
|
5
|
+
And a file named "config.rb" with:
|
6
|
+
"""
|
7
|
+
config[:watcher_disable] = false
|
8
|
+
config[:watcher_force_polling] = true
|
9
|
+
|
10
|
+
activate :sprockets
|
11
|
+
sprockets.append_path File.join(root, 'imports')
|
12
|
+
"""
|
13
|
+
And a file named "imports/a.jpg" with:
|
14
|
+
"""
|
15
|
+
"""
|
16
|
+
And a file named "imports/b.jpg" with:
|
17
|
+
"""
|
18
|
+
"""
|
19
|
+
|
20
|
+
Scenario: Asset-path helper reference added for an asset
|
21
|
+
The linked assets will be added to the sitemap
|
22
|
+
|
23
|
+
Given a file named "source/stylesheets/manifest.css.scss" with:
|
24
|
+
"""
|
25
|
+
"""
|
26
|
+
And the Server is running
|
27
|
+
|
28
|
+
When I go to "/assets/b.jpg"
|
29
|
+
Then the status code should be "404"
|
30
|
+
|
31
|
+
Given the file "source/stylesheets/manifest.css.scss" content is changed to:
|
32
|
+
"""
|
33
|
+
body { background: asset_url('b.jpg'); }
|
34
|
+
"""
|
35
|
+
When I go to "/assets/b.jpg"
|
36
|
+
Then the status code should be "200"
|
37
|
+
|
38
|
+
|
39
|
+
Scenario: Link directive added for an asset
|
40
|
+
The linked assets will be added to the sitemap
|
41
|
+
|
42
|
+
Given a file named "source/stylesheets/manifest.css.scss" with:
|
43
|
+
"""
|
44
|
+
"""
|
45
|
+
And the Server is running
|
46
|
+
|
47
|
+
When I go to "/assets/a.jpg"
|
48
|
+
Then the status code should be "404"
|
49
|
+
|
50
|
+
Given the file "source/stylesheets/manifest.css.scss" content is changed to:
|
51
|
+
"""
|
52
|
+
//= link a.jpg
|
53
|
+
"""
|
54
|
+
|
55
|
+
When I go to "/assets/a.jpg"
|
56
|
+
Then the status code should be "200"
|
57
|
+
|
58
|
+
|
59
|
+
Scenario: Link directive removed from file
|
60
|
+
The linked assets are removed from the sitemap
|
61
|
+
|
62
|
+
Given a file named "source/stylesheets/manifest.css.scss" with:
|
63
|
+
"""
|
64
|
+
//= link a.jpg
|
65
|
+
"""
|
66
|
+
And the Server is running
|
67
|
+
|
68
|
+
When I go to "/assets/a.jpg"
|
69
|
+
Then the status code should be "200"
|
70
|
+
|
71
|
+
Given the file "source/stylesheets/manifest.css.scss" content is changed to:
|
72
|
+
"""
|
73
|
+
"""
|
74
|
+
|
75
|
+
When I go to "/assets/a.jpg"
|
76
|
+
Then the status code should be "404"
|
77
|
+
|
78
|
+
|
79
|
+
Scenario: Asset path helper removed from file
|
80
|
+
The linked assets are removed from the sitemap
|
81
|
+
|
82
|
+
Given a file named "source/stylesheets/manifest.css.scss" with:
|
83
|
+
"""
|
84
|
+
body { background: asset_url('b.jpg'); }
|
85
|
+
"""
|
86
|
+
And the Server is running
|
87
|
+
|
88
|
+
When I go to "/assets/b.jpg"
|
89
|
+
Then the status code should be "200"
|
90
|
+
|
91
|
+
Given the file "source/stylesheets/manifest.css.scss" content is changed to:
|
92
|
+
"""
|
93
|
+
"""
|
94
|
+
|
95
|
+
When I go to "/assets/b.jpg"
|
96
|
+
Then the status code should be "404"
|
97
|
+
|
98
|
+
|
99
|
+
Scenario: Asset file with linked assets removed [asset-path helper]
|
100
|
+
The linked assets are removed from the sitemap
|
101
|
+
|
102
|
+
Given a file named "source/stylesheets/manifest.css.scss" with:
|
103
|
+
"""
|
104
|
+
body { background: asset_url('b.jpg'); }
|
105
|
+
"""
|
106
|
+
And the Server is running
|
107
|
+
|
108
|
+
When I go to "/assets/b.jpg"
|
109
|
+
Then the status code should be "200"
|
110
|
+
|
111
|
+
Given the file "source/stylesheets/manifest.css.scss" is removed
|
112
|
+
|
113
|
+
When I go to "/assets/b.jpg"
|
114
|
+
Then the status code should be "404"
|
115
|
+
|
116
|
+
|
117
|
+
Scenario: Asset file with linked assets removed [directive]
|
118
|
+
The linked assets are removed from the sitemap
|
119
|
+
|
120
|
+
Given a file named "source/stylesheets/manifest.css.scss" with:
|
121
|
+
"""
|
122
|
+
//= link a.jpg
|
123
|
+
"""
|
124
|
+
And the Server is running
|
125
|
+
|
126
|
+
When I go to "/assets/a.jpg"
|
127
|
+
Then the status code should be "200"
|
128
|
+
|
129
|
+
Given the file "source/stylesheets/manifest.css.scss" is removed
|
130
|
+
|
131
|
+
When I go to "/assets/a.jpg"
|
132
|
+
Then the status code should be "404"
|
133
|
+
|
134
|
+
|
135
|
+
Scenario: Asset file with linked assets added [path helper]
|
136
|
+
The linked assets are added to the sitemap
|
137
|
+
|
138
|
+
Given the Server is running
|
139
|
+
|
140
|
+
When I go to "/assets/b.jpg"
|
141
|
+
Then the status code should be "404"
|
142
|
+
|
143
|
+
Given a file named "source/stylesheets/manifest.css.scss" with:
|
144
|
+
"""
|
145
|
+
body { background: asset_url('b.jpg'); }
|
146
|
+
"""
|
147
|
+
And the filesystem is polled
|
148
|
+
|
149
|
+
When I go to "/assets/b.jpg"
|
150
|
+
Then the status code should be "200"
|
151
|
+
|
152
|
+
|
153
|
+
Scenario: Asset file with linked assets added [directive]
|
154
|
+
The linked assets are added to the sitemap
|
155
|
+
|
156
|
+
Given the Server is running
|
157
|
+
|
158
|
+
When I go to "/assets/a.jpg"
|
159
|
+
Then the status code should be "404"
|
160
|
+
|
161
|
+
Given a file named "source/stylesheets/manifest.css.scss" with:
|
162
|
+
"""
|
163
|
+
//= link a.jpg
|
164
|
+
"""
|
165
|
+
And the filesystem is polled
|
166
|
+
|
167
|
+
When I go to "/assets/a.jpg"
|
168
|
+
Then the status code should be "200"
|
169
|
+
|
170
|
+
|
171
|
+
Scenario: Asset file with linked assets (linked in other files) removed
|
172
|
+
The linked assets remain in the sitemap
|
173
|
+
|
174
|
+
Given a file named "source/stylesheets/base.css.scss" with:
|
175
|
+
"""
|
176
|
+
//= link a.jpg
|
177
|
+
"""
|
178
|
+
And a file named "source/stylesheets/manifest.css.scss" with:
|
179
|
+
"""
|
180
|
+
//= link a.jpg
|
181
|
+
//= link b.jpg
|
182
|
+
"""
|
183
|
+
And the Server is running
|
184
|
+
|
185
|
+
When I go to "/assets/a.jpg"
|
186
|
+
Then the status code should be "200"
|
187
|
+
When I go to "/assets/b.jpg"
|
188
|
+
Then the status code should be "200"
|
189
|
+
|
190
|
+
Given the file "source/stylesheets/manifest.css.scss" is removed
|
191
|
+
|
192
|
+
When I go to "/assets/a.jpg"
|
193
|
+
Then the status code should be "200"
|
194
|
+
When I go to "/assets/b.jpg"
|
195
|
+
Then the status code should be "404"
|
@@ -0,0 +1,50 @@
|
|
1
|
+
Feature: Partials can be rendered from a Sprockets Asset
|
2
|
+
|
3
|
+
Scenario: Rendering a partial in a file in source
|
4
|
+
Given a fixture app "base-app"
|
5
|
+
And a file named "config.rb" with:
|
6
|
+
"""
|
7
|
+
activate :sprockets do |c|
|
8
|
+
c.expose_middleman_helpers = true
|
9
|
+
end
|
10
|
+
"""
|
11
|
+
And a file named "source/partials/_maybe_a_js_template.mustache.erb" with:
|
12
|
+
"""
|
13
|
+
<h1>{{ hello }}</h1>
|
14
|
+
"""
|
15
|
+
And a file named "source/javascripts/main.js.erb" with:
|
16
|
+
"""
|
17
|
+
var template = "<%= partial 'partials/maybe_a_js_template.mustache' %>";
|
18
|
+
"""
|
19
|
+
And the Server is running
|
20
|
+
|
21
|
+
When I go to "/javascripts/main.js"
|
22
|
+
Then I should see "<h1>{{ hello }}</h1>"
|
23
|
+
|
24
|
+
@middleman_head
|
25
|
+
Scenario: Rendering a partial in a required file outside source
|
26
|
+
This is only possible in middleman 4.1.9+
|
27
|
+
|
28
|
+
Given a fixture app "base-app"
|
29
|
+
And a file named "config.rb" with:
|
30
|
+
"""
|
31
|
+
activate :sprockets do |c|
|
32
|
+
c.expose_middleman_helpers = true
|
33
|
+
end
|
34
|
+
"""
|
35
|
+
And a file named "source/partials/_template.mustache.erb" with:
|
36
|
+
"""
|
37
|
+
<h1>{{ hello }}</h1>
|
38
|
+
"""
|
39
|
+
And a file named "source/javascripts/_template.js.erb" with:
|
40
|
+
"""
|
41
|
+
var template = "<%= partial 'partials/template.mustache' %>";
|
42
|
+
"""
|
43
|
+
And a file named "source/javascripts/main.js" with:
|
44
|
+
"""
|
45
|
+
//= require '_template'
|
46
|
+
"""
|
47
|
+
And the Server is running
|
48
|
+
|
49
|
+
When I go to "/javascripts/main.js"
|
50
|
+
Then I should see "<h1>{{ hello }}</h1>"
|
@@ -46,7 +46,7 @@ Feature: Sass should glob partials like sass-rails
|
|
46
46
|
|
47
47
|
Given a file named "config.rb" with:
|
48
48
|
"""
|
49
|
-
Object.send :remove_const, :SassC # simulate not having sassc
|
49
|
+
Object.send :remove_const, :SassC if defined?(SassC)# simulate not having sassc
|
50
50
|
require 'sass-globbing'
|
51
51
|
activate :sprockets
|
52
52
|
"""
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature: Usage of MM's environment method in a Sprockets asset
|
2
|
+
In some cases sprockets requires `environment` to return the sprockets environment so we can't overwrite that method in our rendering context. Instead you should use the `environment?` method to test against.
|
3
|
+
|
4
|
+
If the raw symbol for the environment is required, you can call `app.environment`.
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a fixture app "base-app"
|
8
|
+
And a file named "config.rb" with:
|
9
|
+
"""
|
10
|
+
activate :sprockets do |c|
|
11
|
+
c.expose_middleman_helpers = true
|
12
|
+
end
|
13
|
+
"""
|
14
|
+
And a file named "source/javascripts/site.js.erb" with:
|
15
|
+
"""
|
16
|
+
console.log('In development? <%= environment?(:development) ? "yes" : "no" %>');
|
17
|
+
console.log('<%= app.environment %>');
|
18
|
+
"""
|
19
|
+
|
20
|
+
|
21
|
+
Scenario: Should output the sprockets environment on build
|
22
|
+
Given a successfully built app
|
23
|
+
And I cd to "build"
|
24
|
+
|
25
|
+
Then the file "javascripts/site.js" should contain "console.log('In development? no');"
|
26
|
+
|
27
|
+
|
28
|
+
Scenario: Should output the environment in preview server calling app.environment
|
29
|
+
Given the Server is running
|
30
|
+
And I go to "/javascripts/site.js"
|
31
|
+
|
32
|
+
Then I should see "console.log('development');"
|
@@ -3,13 +3,15 @@ require 'middleman-core/contracts'
|
|
3
3
|
require 'middleman-core/sitemap/resource'
|
4
4
|
|
5
5
|
require_relative 'resource'
|
6
|
+
require_relative 'resource_store'
|
6
7
|
require_relative 'interface'
|
7
8
|
|
8
9
|
module Middleman
|
9
10
|
module Sprockets
|
10
11
|
class Extension < Extension
|
11
12
|
attr_reader :environment,
|
12
|
-
:interface
|
13
|
+
:interface,
|
14
|
+
:resources
|
13
15
|
|
14
16
|
expose_to_config sprockets: :environment
|
15
17
|
expose_to_template sprockets: :environment
|
@@ -22,9 +24,9 @@ module Middleman
|
|
22
24
|
def initialize app, options_hash={}, &block
|
23
25
|
super
|
24
26
|
|
25
|
-
@
|
26
|
-
@environment
|
27
|
-
@interface
|
27
|
+
@resources = ResourceStore.new
|
28
|
+
@environment = ::Sprockets::Environment.new
|
29
|
+
@interface = Interface.new options, @environment
|
28
30
|
|
29
31
|
use_sassc_if_available
|
30
32
|
end
|
@@ -45,6 +47,14 @@ module Middleman
|
|
45
47
|
@environment.context_class.send(:define_method, :env) { the_env }
|
46
48
|
|
47
49
|
@environment.context_class.class_eval do
|
50
|
+
def current_resource
|
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
|
+
|
48
58
|
def asset_path path, options={}
|
49
59
|
# Handle people calling with the Middleman/Padrino asset path signature
|
50
60
|
if path.is_a?(::Symbol) && !options.is_a?(::Hash)
|
@@ -64,7 +74,8 @@ module Middleman
|
|
64
74
|
end
|
65
75
|
|
66
76
|
if app.extensions[:sprockets].check_asset(path)
|
67
|
-
|
77
|
+
link_asset(path)
|
78
|
+
app.extensions[:sprockets].sprockets_asset_path(env[path]).sub(/^\/?/, '/')
|
68
79
|
else
|
69
80
|
app.asset_path(kind, path)
|
70
81
|
end
|
@@ -76,37 +87,30 @@ module Middleman
|
|
76
87
|
|
77
88
|
Contract ResourceList => ResourceList
|
78
89
|
def manipulate_resource_list resources
|
79
|
-
sprockets_resources =
|
80
|
-
|
81
|
-
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
linked_resources = ::Middleman::Util.instrument 'sprockets', name: 'manipulator.linked_resources' do
|
86
|
-
@inline_asset_references.map do |path|
|
87
|
-
asset = environment[path]
|
88
|
-
generate_resource(sprockets_asset_path(asset), asset.filename, asset.logical_path)
|
89
|
-
end
|
90
|
+
sprockets_resources, base_resources = resources.partition(&method(:processible?))
|
91
|
+
::Middleman::Util.instrument 'sprockets', name: 'manipulator.sprockets_resources' do
|
92
|
+
sprockets_resources.map!(&method(:process_sprockets_resource))
|
90
93
|
end
|
91
94
|
|
92
95
|
::Middleman::Util.instrument 'sprockets', name: 'manipulator.ignore_resources' do
|
96
|
+
all_resources = base_resources + sprockets_resources + linked_resources!.to_a
|
97
|
+
|
93
98
|
if app.extensions[:sitemap_ignore].respond_to?(:manipulate_resource_list)
|
94
|
-
app.extensions[:sitemap_ignore].manipulate_resource_list
|
99
|
+
app.extensions[:sitemap_ignore].manipulate_resource_list all_resources
|
95
100
|
else
|
96
|
-
|
101
|
+
all_resources
|
97
102
|
end
|
98
103
|
end
|
99
104
|
end
|
100
105
|
|
101
106
|
Contract ::Middleman::Sitemap::Resource => Bool
|
102
107
|
def processible? r
|
103
|
-
!r.is_a?(Resource) && interface.processible?(r.source_file)
|
108
|
+
!r.is_a?(Resource) && !r.file_descriptor.nil? && interface.processible?(r.source_file)
|
104
109
|
end
|
105
110
|
|
106
111
|
Contract String => Bool
|
107
112
|
def check_asset path
|
108
113
|
if environment[path]
|
109
|
-
@inline_asset_references << path
|
110
114
|
true
|
111
115
|
else
|
112
116
|
false
|
@@ -120,15 +124,28 @@ module Middleman
|
|
120
124
|
|
121
125
|
private
|
122
126
|
|
127
|
+
def linked_resources
|
128
|
+
@_linked_resources ||= (@resources.resources
|
129
|
+
.map(&:sprockets_asset)
|
130
|
+
.map(&:links)
|
131
|
+
.reduce(&:merge) || Set.new())
|
132
|
+
.map do |path|
|
133
|
+
asset = environment[path]
|
134
|
+
generate_resource(sprockets_asset_path(asset),
|
135
|
+
asset.filename,
|
136
|
+
asset.logical_path)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def linked_resources!
|
141
|
+
@_linked_resources = nil
|
142
|
+
linked_resources
|
143
|
+
end
|
144
|
+
|
123
145
|
def expose_app_helpers_to_sprockets!
|
124
146
|
@environment.context_class.class_eval do
|
125
|
-
def current_resource
|
126
|
-
logger.error "The use of `current_resource` in sprockets assets isn't currently implemented"
|
127
|
-
nil
|
128
|
-
end
|
129
|
-
|
130
147
|
def mm_context
|
131
|
-
@_mm_context ||= app.template_context_class.new(app)
|
148
|
+
@_mm_context ||= app.template_context_class.new(app, current_path: current_path)
|
132
149
|
end
|
133
150
|
|
134
151
|
def method_missing method, *args, &block
|
@@ -146,15 +163,10 @@ module Middleman
|
|
146
163
|
end
|
147
164
|
|
148
165
|
Contract ::Middleman::Sitemap::Resource => Or[::Middleman::Sitemap::Resource, Resource]
|
149
|
-
def
|
150
|
-
return resource unless processible?(resource)
|
151
|
-
|
166
|
+
def process_sprockets_resource resource
|
152
167
|
::Middleman::Util.instrument 'sprockets', name: 'process_resource', resource: resource do
|
153
168
|
sprockets_resource = generate_resource(resource.path, resource.source_file, resource.path)
|
154
|
-
|
155
|
-
if sprockets_resource.respond_to?(:sprockets_asset) && !sprockets_resource.errored?
|
156
|
-
@inline_asset_references.merge sprockets_resource.sprockets_asset.links
|
157
|
-
end
|
169
|
+
@resources.add sprockets_resource
|
158
170
|
|
159
171
|
sprockets_resource
|
160
172
|
end
|
@@ -36,7 +36,8 @@ 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
|
+
options[:supported_output_extensions].include?(target_ext) && extensions.include?(file_ext)
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Sprockets
|
3
|
+
class ResourceStore
|
4
|
+
include Contracts
|
5
|
+
|
6
|
+
attr_reader :store
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@store = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
Contract IsA['::Middleman::Sprockets::Resource'] => Any
|
13
|
+
def add resource
|
14
|
+
store[resource.file_descriptor.full_path] = resource
|
15
|
+
end
|
16
|
+
|
17
|
+
Contract ArrayOf[IsA['::Middleman::Sprockets::Resource']]
|
18
|
+
def resources
|
19
|
+
store.values
|
20
|
+
end
|
21
|
+
|
22
|
+
Contract ArrayOf[Pathname]
|
23
|
+
def paths
|
24
|
+
store.keys
|
25
|
+
end
|
26
|
+
|
27
|
+
Contract Pathname => Bool
|
28
|
+
def matching_path? path
|
29
|
+
paths.include?(path)
|
30
|
+
end
|
31
|
+
|
32
|
+
Contract Or[String, Pathname] => Maybe[IsA['::Middleman::Sprockets::Resource']]
|
33
|
+
def find_by_path path
|
34
|
+
path = Pathname.new(path) unless path.is_a?(Pathname)
|
35
|
+
store.fetch path, nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/middleman-sprockets.gemspec
CHANGED
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.0.0.rc.
|
4
|
+
version: 4.0.0.rc.3
|
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-05-24 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: middleman-core
|
@@ -40,6 +40,20 @@ dependencies:
|
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '3.0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: capybara
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 2.5.0
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 2.5.0
|
43
57
|
description: Sprockets support for Middleman
|
44
58
|
email:
|
45
59
|
- me@tdreyno.com
|
@@ -74,15 +88,19 @@ files:
|
|
74
88
|
- features/test_cases/exception_response.feature
|
75
89
|
- features/test_cases/excluded_file_extensions.feature
|
76
90
|
- features/test_cases/file_not_found.feature
|
91
|
+
- features/test_cases/handles_string_resource.feature
|
77
92
|
- features/test_cases/ignore_directive_is_respected.feature
|
78
93
|
- features/test_cases/imported_asset_extensions.feature
|
79
94
|
- features/test_cases/jst.feature
|
95
|
+
- features/test_cases/linked_asset_addition_and_removal.feature
|
80
96
|
- features/test_cases/long_filenames.feature
|
97
|
+
- features/test_cases/partial_rendering.feature
|
81
98
|
- features/test_cases/path_helpers.feature
|
82
99
|
- features/test_cases/processible_outside_asset_dir.feature
|
83
100
|
- features/test_cases/sass_globs.feature
|
84
101
|
- features/test_cases/sass_partials.feature
|
85
102
|
- features/test_cases/sassc.feature
|
103
|
+
- features/test_cases/usage_of_environment.feature
|
86
104
|
- features/test_cases/use_from_templates.feature
|
87
105
|
- features/test_cases/using_assets_gem_assets.feature
|
88
106
|
- fixtures/asset-hash-app/config.rb
|
@@ -127,6 +145,7 @@ files:
|
|
127
145
|
- lib/middleman-sprockets/extension.rb
|
128
146
|
- lib/middleman-sprockets/interface.rb
|
129
147
|
- lib/middleman-sprockets/resource.rb
|
148
|
+
- lib/middleman-sprockets/resource_store.rb
|
130
149
|
- lib/middleman-sprockets/version.rb
|
131
150
|
- middleman-sprockets.gemspec
|
132
151
|
- spec/spec_helper.rb
|
@@ -170,15 +189,19 @@ test_files:
|
|
170
189
|
- features/test_cases/exception_response.feature
|
171
190
|
- features/test_cases/excluded_file_extensions.feature
|
172
191
|
- features/test_cases/file_not_found.feature
|
192
|
+
- features/test_cases/handles_string_resource.feature
|
173
193
|
- features/test_cases/ignore_directive_is_respected.feature
|
174
194
|
- features/test_cases/imported_asset_extensions.feature
|
175
195
|
- features/test_cases/jst.feature
|
196
|
+
- features/test_cases/linked_asset_addition_and_removal.feature
|
176
197
|
- features/test_cases/long_filenames.feature
|
198
|
+
- features/test_cases/partial_rendering.feature
|
177
199
|
- features/test_cases/path_helpers.feature
|
178
200
|
- features/test_cases/processible_outside_asset_dir.feature
|
179
201
|
- features/test_cases/sass_globs.feature
|
180
202
|
- features/test_cases/sass_partials.feature
|
181
203
|
- features/test_cases/sassc.feature
|
204
|
+
- features/test_cases/usage_of_environment.feature
|
182
205
|
- features/test_cases/use_from_templates.feature
|
183
206
|
- features/test_cases/using_assets_gem_assets.feature
|
184
207
|
- fixtures/asset-hash-app/config.rb
|