middleman-sprockets 3.2.0 → 3.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c368bc22bab155dbb04fa6a767a432d80a2e70bc
4
- data.tar.gz: d02e8b1fc0c0964520f1378f01dd7ea5135c2753
3
+ metadata.gz: 2706ab113d91037dbef37ebada72f4d62a8cdc50
4
+ data.tar.gz: db48cea1c6e261cdbe473842e1982ffeba658598
5
5
  SHA512:
6
- metadata.gz: 7d239a855d5ff1606ecf6b6090417f4e807eb1a99692f5f345147e9bdab300df6dd39c47ede15418f488d6278723b6a97226b418ed5a34589dbc16e7a356a596
7
- data.tar.gz: b6c0e40d4378056862f11a9cccbbeabe4e29b442a0b1bfd7b4a28b542c77511f89f15b50d1e64688c887ad0a0b533e53f96e9370dc10d6f0ac742c2793e4061a
6
+ metadata.gz: dae92a7bca105c4fd757d307210f782240bd1f177b7cbae5e33e640d0c4a796d956b14ec96adcccec42fc4d26cbeb919bb6619391a5c46c9ac6641e098b77a93
7
+ data.tar.gz: 2261c1d32d5e6f4bb363bdb53dee89171644248785b165533e227dab2e653406e6fa2e7520d899d2ef2954697c37d5191f1fb983c8253e414107e1fe2f75e73b
data/.gitignore CHANGED
@@ -6,3 +6,4 @@ tmp
6
6
  pkg
7
7
  build
8
8
  .ruby-version
9
+ .cache
data/CHANGELOG.md CHANGED
@@ -1,6 +1,20 @@
1
- master
1
+ 3.3.0
2
2
  ===
3
3
 
4
+ * Prep work for Middleman v4.
5
+ * Work around sstephenson/sprockets#533 by serving bower.json directly, skipping Sprockets.
6
+ * Only attempt to patch up Sass if Sass is present.
7
+ * :bower_dir is deprecated in favor of just adding your bower_components folder to the sprockets load path.
8
+ * Convert to a new-style Middleman extension. #48
9
+ * Use a file-based cache to persist compiled assets between sessions #47
10
+
11
+ 3.2.0
12
+ ===
13
+
14
+ * Require Middleman 3.2 or later.
15
+ * No longer require 'middleman-more'
16
+ * Fix import_asset. #38
17
+
4
18
  3.1.3
5
19
  ===
6
20
 
@@ -37,11 +51,10 @@ master
37
51
  * When `:debug_assets` is on, do not add `?body=1` multiple times. #24
38
52
  * :js_assets_paths configuration is deprecated in favor of just calling sprockets.append_path. #22
39
53
  * Sprockets integration, especially with regard to helper methods, is significantly improved. #22
40
- * Images and fonts from gems added to the Sprockets load path will now be copied to the build output. #22
54
+ * Images and fonts from gems added to the Sprockets load path will now be copied to the build output. #22
41
55
  * Compatibility with newer Sprockets versions.
42
56
 
43
57
  3.0.10
44
58
  ===
45
59
 
46
60
  * No longer expire Sprockets index in development mode. #18
47
-
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem "middleman-core", :github => "middleman/middleman"
3
+ gem "middleman-core", :github => "middleman/middleman", :branch => "v3-stable"
4
4
 
5
5
  # Specify your gem's dependencies in middleman-sprockets.gemspec
6
6
  gemspec
@@ -9,4 +9,11 @@ Feature: Bower
9
9
  When I cd to "build"
10
10
  Then the following files should exist:
11
11
  | javascripts/get_jquery.js |
12
- And the file "javascripts/get_jquery.js" should contain "window.jQuery ="
12
+ And the file "javascripts/get_jquery.js" should contain "window.jQuery ="
13
+
14
+ Scenario: Sprockets should not mess with bower.json
15
+ Given a successfully built app at "bower-json-app"
16
+ When I cd to "build"
17
+ Then the following files should exist:
18
+ | javascripts/bower.json |
19
+ And the file "javascripts/bower.json" should contain '"name": "my-project",'
@@ -1 +1,3 @@
1
- set :bower_dir, "components"
1
+ ready do
2
+ sprockets.append_path "components"
3
+ end
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "my-project",
3
+ "version": "1.0.0",
4
+ "main": "application.js"
5
+ }
@@ -2,5 +2,5 @@ require "middleman-core"
2
2
 
3
3
  Middleman::Extensions.register(:sprockets) do
4
4
  require "middleman-sprockets/extension"
5
- Middleman::Sprockets
5
+ Middleman::SprocketsExtension
6
6
  end
@@ -0,0 +1,59 @@
1
+ module Middleman
2
+ module Sprockets
3
+ module AssetTagHelpers
4
+
5
+ # extend padrinos javascript_include_tag with debug functionality
6
+ # splits up script dependencies in individual files when
7
+ # configuration variable :debug_assets is set to true
8
+ def javascript_include_tag(*sources)
9
+ if debug_assets?
10
+ options = sources.extract_options!.symbolize_keys
11
+ sources.map do |source|
12
+ super(dependencies_paths('.js', source), options)
13
+ end.join("").gsub("body=1.js", "body=1")
14
+ else
15
+ super
16
+ end
17
+ end
18
+
19
+ # extend padrinos stylesheet_link_tag with debug functionality
20
+ # splits up stylesheets dependencies in individual files when
21
+ # configuration variable :debug_assets is set to true
22
+ def stylesheet_link_tag(*sources)
23
+ if debug_assets?
24
+ options = sources.extract_options!.symbolize_keys
25
+ sources.map do |source|
26
+ super(dependencies_paths('.css', source), options)
27
+ end.join("").gsub("body=1.css", "body=1")
28
+ else
29
+ super
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ # Should we "debug assets" by outputting each as an individual script tag instead of combining them?
36
+ def debug_assets?
37
+ !build? && (sprockets.options.debug_assets || (respond_to?(:debug_assets) && debug_assets))
38
+ end
39
+
40
+ # Find the paths for all the dependencies of a given source file.
41
+ def dependencies_paths(extension, source)
42
+ source_file_name = source.to_s
43
+
44
+ if source_file_name.start_with?('//', 'http')
45
+ # Don't touch external sources
46
+ source_file_name
47
+ else
48
+ source_file_name << extension unless source_file_name.end_with?(extension)
49
+
50
+ dependencies_paths = sprockets[source_file_name].to_a.map do |dependency|
51
+ # if sprockets sees "?body=1" it only gives back the body
52
+ # of the script without the dependencies included
53
+ dependency.logical_path + "?body=1"
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,201 @@
1
+ module Middleman
2
+ module Sprockets
3
+ # Generic Middleman Sprockets env
4
+ class Environment < ::Sprockets::Environment
5
+ attr_accessor :options
6
+
7
+ # Setup
8
+ def initialize(app)
9
+ @imported_assets = []
10
+ @app = app
11
+ @options = {}
12
+
13
+ super app.source_dir
14
+
15
+ # By default, sprockets has no cache! Give it a file-based cache so that
16
+ # the cache is persisted between sessions
17
+ @cache = ::Sprockets::Cache::FileStore.new(File.join app.root, '.cache')
18
+
19
+ enhance_context_class!
20
+
21
+ # Remove compressors, we handle these with middleware
22
+ unregister_bundle_processor 'application/javascript', :js_compressor
23
+ unregister_bundle_processor 'text/css', :css_compressor
24
+
25
+ # configure search paths
26
+ append_path app.config[:js_dir]
27
+ append_path app.config[:css_dir]
28
+ append_path app.config[:images_dir]
29
+ append_path app.config[:fonts_dir]
30
+
31
+ if app.config.respond_to?(:bower_dir)
32
+ warn ":bower_dir is deprecated. Call sprockets.append_path from a 'ready' block instead."
33
+ append_path app.config[:bower_dir]
34
+ end
35
+
36
+ # add custom assets paths to the scope
37
+ app.config[:js_assets_paths].each do |p|
38
+ warn ":js_assets_paths is deprecated. Call sprockets.append_path from a 'ready' block instead."
39
+ append_path p
40
+ end if app.config.respond_to?(:js_assets_paths)
41
+
42
+ # Stylus support
43
+ if defined?(::Stylus)
44
+ require 'stylus/sprockets'
45
+ ::Stylus.setup(self, app.config[:styl])
46
+ end
47
+ end
48
+
49
+ # Add our own customizations to the Sprockets context class
50
+ def enhance_context_class!
51
+ app = @app
52
+
53
+ # Make the app context available to Sprockets
54
+ context_class.send(:define_method, :app) { app }
55
+
56
+ context_class.class_eval do
57
+ def asset_path(path, options={})
58
+ # Handle people calling with the Middleman/Padrino asset path signature
59
+ if path.is_a?(::Symbol) && !options.is_a?(::Hash)
60
+ return app.asset_path(path, options)
61
+ end
62
+
63
+ kind = case options[:type]
64
+ when :image then :images
65
+ when :font then :fonts
66
+ when :javascript then :js
67
+ when :stylesheet then :css
68
+ else options[:type]
69
+ end
70
+
71
+ app.asset_path(kind, path)
72
+ end
73
+
74
+ # These helpers are already defined in later versions of Sprockets, but we define
75
+ # them ourself to help older versions and to provide extra options that Sass wants.
76
+
77
+ # Expand logical image asset path.
78
+ def image_path(path, options={})
79
+ asset_path(path, :type => :image)
80
+ end
81
+
82
+ # Expand logical font asset path.
83
+ def font_path(path, options={})
84
+ # Knock .fonts off the end, because Middleman < 3.1 doesn't handle fonts
85
+ # in asset_path
86
+ asset_path(path, :type => :font).sub(/\.fonts$/, '')
87
+ end
88
+
89
+ # Expand logical javascript asset path.
90
+ def javascript_path(path, options={})
91
+ asset_path(path, :type => :javascript)
92
+ end
93
+
94
+ # Expand logical stylesheet asset path.
95
+ def stylesheet_path(path, options={})
96
+ asset_path(path, :type => :stylesheet)
97
+ end
98
+
99
+ def method_missing(*args)
100
+ name = args.first
101
+ if app.respond_to?(name)
102
+ app.send(*args)
103
+ else
104
+ super
105
+ end
106
+ end
107
+
108
+ # Needed so that method_missing makes sense
109
+ def respond_to?(method, include_private = false)
110
+ super || app.respond_to?(method, include_private)
111
+ end
112
+ end
113
+ end
114
+ private :enhance_context_class!
115
+
116
+ # Override Sprockets' default digest function to *not*
117
+ # change depending on the exact Sprockets version. It still takes
118
+ # into account "version" which is a user-suppliable version
119
+ # number that can be used to force assets to have a new
120
+ # hash.
121
+ def digest
122
+ @digest ||= Digest::SHA1.new.update(version.to_s)
123
+ @digest.dup
124
+ end
125
+
126
+ # Strip our custom 8-char hex/sha
127
+ def path_fingerprint(path)
128
+ path[/-([0-9a-f]{8})\.[^.]+$/, 1]
129
+ end
130
+
131
+ # Invalidate sitemap when users mess with the sprockets load paths
132
+ def append_path(*args)
133
+ @app.sitemap.rebuild_resource_list!(:sprockets_paths)
134
+ super
135
+ end
136
+
137
+ def prepend_path(*args)
138
+ @app.sitemap.rebuild_resource_list!(:sprockets_paths)
139
+ super
140
+ end
141
+
142
+ def clear_paths
143
+ @app.sitemap.rebuild_resource_list!(:sprockets_paths)
144
+ super
145
+ end
146
+
147
+ def css_exception_response(exception)
148
+ raise exception if @app.build?
149
+ super
150
+ end
151
+
152
+ def javascript_exception_response(exception)
153
+ raise exception if @app.build?
154
+ super
155
+ end
156
+
157
+ def call(env)
158
+ # Set the app current path based on the full URL so that helpers work
159
+ request_path = URI.decode(File.join(env['SCRIPT_NAME'], env['PATH_INFO']))
160
+ if request_path.respond_to? :force_encoding
161
+ request_path.force_encoding('UTF-8')
162
+ end
163
+ resource = @app.sitemap.find_resource_by_destination_path(request_path)
164
+
165
+ debug_assets = !@app.build? && (@options.debug_assets || (@app.respond_to?(:debug_assets) && @app.debug_assets))
166
+ if !resource && !debug_assets
167
+ response = ::Rack::Response.new
168
+ response.status = 404
169
+ response.write """<html><body><h1>File Not Found</h1><p>#{request_path}</p>
170
+ <p>If this is an an asset from a gem, add <tt>sprockets.import_asset '#{File.basename(request_path)}'</tt>
171
+ to your <tt>config.rb</tt>.</body>"""
172
+ return response.finish
173
+ end
174
+
175
+ if @app.respond_to?(:current_path=)
176
+ @app.current_path = request_path
177
+ end
178
+
179
+ # Fix https://github.com/sstephenson/sprockets/issues/533
180
+ if resource && File.basename(resource.path) == 'bower.json'
181
+ file = ::Rack::File.new nil
182
+ file.path = resource.source_file
183
+ response = file.serving({})
184
+ response[1]['Content-Type'] = resource.content_type
185
+ return response
186
+ end
187
+
188
+ super
189
+ end
190
+
191
+ # A list of Sprockets logical paths for assets that should be brought into the
192
+ # Middleman application and built.
193
+ attr_accessor :imported_assets
194
+
195
+ # Tell Middleman to build this asset, referenced as a logical path.
196
+ def import_asset(asset_logical_path)
197
+ imported_assets << asset_logical_path
198
+ end
199
+ end
200
+ end
201
+ end
@@ -1,337 +1,90 @@
1
1
  require "sprockets"
2
2
  require "sprockets-sass"
3
- require "middleman-sprockets/sass_function_hack"
3
+ require "middleman-sprockets/environment"
4
+ require "middleman-sprockets/asset_tag_helpers"
4
5
 
5
6
  # Sprockets extension
6
- module Middleman::Sprockets
7
+ module Middleman
8
+ class SprocketsExtension < Extension
9
+ option :debug_assets, false, 'Split up each required asset into its own script/style tag instead of combining them (development only)'
7
10
 
8
- # Setup extension
9
- class << self
11
+ def initialize(klass, options_hash={}, &block)
12
+ require "middleman-sprockets/sass_function_hack"
10
13
 
11
- # Once registered
12
- def registered(app)
13
- # Add class methods to context
14
- app.send :include, InstanceMethods
15
-
16
- app.helpers JavascriptTagHelper
17
- app.helpers StylesheetTagHelper
18
-
19
- ::Tilt.register ::Sprockets::EjsTemplate, 'ejs'
20
- ::Tilt.register ::Sprockets::EcoTemplate, 'eco'
21
- ::Tilt.register ::Sprockets::JstProcessor, 'jst'
22
-
23
- app.after_configuration do
24
- template_extensions :jst => :js, :eco => :js, :ejs => :js
25
-
26
- sitemap.rebuild_resource_list!
27
-
28
- # Add any gems with (vendor|app|.)/assets/javascripts to paths
29
- # also add similar directories from project root (like in rails)
30
- try_paths = [
31
- %w{ assets },
32
- %w{ app },
33
- %w{ app assets },
34
- %w{ vendor },
35
- %w{ vendor assets },
36
- %w{ lib },
37
- %w{ lib assets }
38
- ].inject([]) do |sum, v|
39
- sum + [
40
- File.join(v, 'javascripts'),
41
- File.join(v, 'stylesheets'),
42
- File.join(v, 'images'),
43
- File.join(v, 'fonts')
44
- ]
45
- end
46
-
47
- ([root] + ::Middleman.rubygems_latest_specs.map(&:full_gem_path)).each do |root_path|
48
- try_paths.map {|p| File.join(root_path, p) }.
49
- select {|p| File.directory?(p) }.
50
- each {|path| sprockets.append_path(path) }
51
- end
52
-
53
- # Setup Sprockets Sass options
54
- sass.each { |k, v| ::Sprockets::Sass.options[k] = v }
55
-
56
- # Intercept requests to /javascripts and /stylesheets and pass to sprockets
57
- our_sprockets = sprockets
58
-
59
- map("/#{js_dir}") { run our_sprockets }
60
- map("/#{css_dir}") { run our_sprockets }
61
- map("/#{images_dir}") { run our_sprockets }
62
- map("/#{fonts_dir}") { run our_sprockets }
63
-
64
- # register resource list manipulator to add assets_load_paths to sitemap
65
- sitemap.register_resource_list_manipulator(:assets_load_paths, SitemapExtension.new(self), false)
66
- end
67
- end
68
- alias :included :registered
69
- end
70
-
71
- module InstanceMethods
72
- # @return [Middleman::CoreExtensions::Sprockets::MiddlemanSprocketsEnvironment]
73
- def sprockets
74
- @sprockets ||= MiddlemanSprocketsEnvironment.new(self)
14
+ super
75
15
  end
76
- end
77
-
78
- # Generic Middleman Sprockets env
79
- class MiddlemanSprocketsEnvironment < ::Sprockets::Environment
80
- # Setup
81
- def initialize(app)
82
- @imported_assets = []
83
- @app = app
84
-
85
- super app.source_dir
86
16
 
87
- # By default, sprockets has no cache! Give it an in-memory one using a Hash
88
- @cache = {}
89
-
90
- enhance_context_class!
91
-
92
- # Remove compressors, we handle these with middleware
93
- unregister_bundle_processor 'application/javascript', :js_compressor
94
- unregister_bundle_processor 'text/css', :css_compressor
95
-
96
- # configure search paths
97
- append_path app.js_dir
98
- append_path app.css_dir
99
- append_path app.images_dir
100
- append_path app.fonts_dir
101
- append_path app.bower_dir if app.respond_to?(:bower_dir)
102
-
103
- # add custom assets paths to the scope
104
- app.js_assets_paths.each do |p|
105
- warn ":js_assets_paths is deprecated. Call sprockets.append_path instead."
106
- append_path p
107
- end if app.respond_to?(:js_assets_paths)
108
-
109
- # Stylus support
110
- if defined?(::Stylus)
111
- require 'stylus/sprockets'
112
- ::Stylus.setup(self, app.styl)
17
+ helpers do
18
+ # The sprockets environment
19
+ # @return [Middleman::MiddlemanSprocketsEnvironment]
20
+ def sprockets
21
+ extensions[:sprockets].environment
113
22
  end
114
- end
115
23
 
116
- # Add our own customizations to the Sprockets context class
117
- def enhance_context_class!
118
- app = @app
119
-
120
- # Make the app context available to Sprockets
121
- context_class.send(:define_method, :app) { app }
122
-
123
- context_class.class_eval do
124
- def asset_path(path, options={})
125
- # Handle people calling with the Middleman/Padrino asset path signature
126
- if path.is_a?(::Symbol) && !options.is_a?(::Hash)
127
- return app.asset_path(path, options)
128
- end
129
-
130
- kind = case options[:type]
131
- when :image then :images
132
- when :font then :fonts
133
- when :javascript then :js
134
- when :stylesheet then :css
135
- else options[:type]
136
- end
137
-
138
- app.asset_path(kind, path)
139
- end
140
-
141
- # These helpers are already defined in later versions of Sprockets, but we define
142
- # them ourself to help older versions and to provide extra options that Sass wants.
143
-
144
- # Expand logical image asset path.
145
- def image_path(path, options={})
146
- asset_path(path, :type => :image)
147
- end
148
-
149
- # Expand logical font asset path.
150
- def font_path(path, options={})
151
- # Knock .fonts off the end, because Middleman < 3.1 doesn't handle fonts
152
- # in asset_path
153
- asset_path(path, :type => :font).sub(/\.fonts$/, '')
154
- end
155
-
156
- # Expand logical javascript asset path.
157
- def javascript_path(path, options={})
158
- asset_path(path, :type => :javascript)
159
- end
160
-
161
- # Expand logical stylesheet asset path.
162
- def stylesheet_path(path, options={})
163
- asset_path(path, :type => :stylesheet)
164
- end
165
-
166
- def method_missing(*args)
167
- name = args.first
168
- if app.respond_to?(name)
169
- app.send(*args)
170
- else
171
- super
172
- end
173
- end
174
-
175
- # Needed so that method_missing makes sense
176
- def respond_to?(method, include_private = false)
177
- super || app.respond_to?(method, include_private)
178
- end
179
- end
180
- end
181
- private :enhance_context_class!
182
-
183
- # Override Sprockets' default digest function to *not*
184
- # change depending on the exact Sprockets version. It still takes
185
- # into account "version" which is a user-suppliable version
186
- # number that can be used to force assets to have a new
187
- # hash.
188
- def digest
189
- @digest ||= Digest::SHA1.new.update(version.to_s)
190
- @digest.dup
24
+ include ::Middleman::Sprockets::AssetTagHelpers
191
25
  end
192
26
 
193
- # Strip our custom 8-char hex/sha
194
- def path_fingerprint(path)
195
- path[/-([0-9a-f]{8})\.[^.]+$/, 1]
196
- end
197
-
198
- # Invalidate sitemap when users mess with the sprockets load paths
199
- def append_path(*args)
200
- @app.sitemap.rebuild_resource_list!(:sprockets_paths)
201
- super
202
- end
203
-
204
- def prepend_path(*args)
205
- @app.sitemap.rebuild_resource_list!(:sprockets_paths)
206
- super
27
+ def environment
28
+ @sprockets ||= ::Middleman::Sprockets::Environment.new(app)
207
29
  end
208
30
 
209
- def clear_paths
210
- @app.sitemap.rebuild_resource_list!(:sprockets_paths)
211
- super
31
+ def instance_available
32
+ if defined?(::Middleman::ConfigContext)
33
+ app.add_to_config_context :sprockets, &method(:environment)
34
+ end
212
35
  end
213
36
 
214
- def css_exception_response(exception)
215
- raise exception if @app.build?
216
- super
217
- end
37
+ def after_configuration
38
+ self.environment.options = options
218
39
 
219
- def javascript_exception_response(exception)
220
- raise exception if @app.build?
221
- super
222
- end
223
-
224
- def call(env)
225
- # Set the app current path based on the full URL so that helpers work
226
- request_path = URI.decode(File.join(env['SCRIPT_NAME'], env['PATH_INFO']))
227
- if request_path.respond_to? :force_encoding
228
- request_path.force_encoding('UTF-8')
40
+ ::Tilt.register ::Sprockets::EjsTemplate, 'ejs'
41
+ ::Tilt.register ::Sprockets::EcoTemplate, 'eco'
42
+ ::Tilt.register ::Sprockets::JstProcessor, 'jst'
43
+ app.template_extensions :jst => :js, :eco => :js, :ejs => :js
44
+
45
+ app.sitemap.rebuild_resource_list!
46
+
47
+ # Add any gems with (vendor|app|.)/assets/javascripts to paths
48
+ # also add similar directories from project root (like in rails)
49
+ try_paths = [
50
+ %w{ assets },
51
+ %w{ app },
52
+ %w{ app assets },
53
+ %w{ vendor },
54
+ %w{ vendor assets },
55
+ %w{ lib },
56
+ %w{ lib assets }
57
+ ].inject([]) do |sum, v|
58
+ sum + [
59
+ File.join(v, 'javascripts'),
60
+ File.join(v, 'stylesheets'),
61
+ File.join(v, 'images'),
62
+ File.join(v, 'fonts')
63
+ ]
229
64
  end
230
- resource = @app.sitemap.find_resource_by_destination_path(request_path)
231
65
 
232
- debug_assets = @app.respond_to?(:debug_assets) && @app.debug_assets && !@app.build?
233
- if !resource && !debug_assets
234
- response = ::Rack::Response.new
235
- response.status = 404
236
- response.write """<html><body><h1>File Not Found</h1><p>#{request_path}</p>
237
- <p>If this is an an asset from a gem, add <tt>sprockets.import_asset '#{File.basename(request_path)}'</tt>
238
- to your <tt>config.rb</tt>.</body>"""
239
- return response.finish
66
+ ([app.root] + ::Middleman.rubygems_latest_specs.map(&:full_gem_path)).each do |root_path|
67
+ try_paths.map {|p| File.join(root_path, p) }.
68
+ select {|p| File.directory?(p) }.
69
+ each {|path| self.environment.append_path(path) }
240
70
  end
241
71
 
242
- @app.current_path = request_path
243
-
244
- super
245
- end
246
-
247
- # A list of Sprockets logical paths for assets that should be brought into the
248
- # Middleman application and built.
249
- attr_accessor :imported_assets
250
-
251
- # Tell Middleman to build this asset, referenced as a logical path.
252
- def import_asset(asset_logical_path)
253
- imported_assets << asset_logical_path
254
- end
255
- end
256
-
257
- module JavascriptTagHelper
258
-
259
- # extend padrinos javascript_include_tag with debug functionality
260
- # splits up script dependencies in individual files when
261
- # configuration variable :debug_assets is set to true
262
- def javascript_include_tag(*sources)
263
- if respond_to?(:debug_assets) && debug_assets && !build?
264
- options = sources.extract_options!.symbolize_keys
265
-
266
- # loop through all sources and the dependencies and
267
- # output each as script tag in the correct order
268
- sources.map do |source|
269
- source_file_name = source.to_s
270
-
271
- dependencies_paths = if source_file_name.start_with?('//', 'http')
272
- # Don't touch external sources
273
- source_file_name
274
- else
275
- source_file_name << ".js" unless source_file_name.end_with?(".js")
276
-
277
- sprockets[source_file_name].to_a.map do |dependency|
278
- # if sprockets sees "?body=1" it only gives back the body
279
- # of the script without the dependencies included
280
- dependency.logical_path + "?body=1"
281
- end
282
- end
283
-
284
- super(dependencies_paths, options)
285
- end.join("").gsub("body=1.js", "body=1")
286
- else
287
- super
72
+ # Setup Sprockets Sass options
73
+ if app.config.respond_to?(:sass)
74
+ app.config[:sass].each { |k, v| ::Sprockets::Sass.options[k] = v }
288
75
  end
289
- end
290
- end
291
-
292
- module StylesheetTagHelper
293
-
294
- # extend padrinos stylesheet_link_tag with debug functionality
295
- # splits up stylesheets dependencies in individual files when
296
- # configuration variable :debug_assets is set to true
297
- def stylesheet_link_tag(*sources)
298
- if respond_to?(:debug_assets) && debug_assets && !build?
299
- options = sources.extract_options!.symbolize_keys
300
- # loop through all sources and the dependencies and
301
- # output each as script tag in the correct order
302
-
303
- sources.map do |source|
304
- source_file_name = source.to_s
305
76
 
306
- dependencies_paths = if source_file_name.start_with?('//', 'http')
307
- # Don't touch external sources
308
- source_file_name
309
- else
310
- source_file_name << ".css" unless source_file_name.end_with?(".css")
77
+ # Intercept requests to /javascripts and /stylesheets and pass to sprockets
78
+ our_sprockets = self.environment
311
79
 
312
- dependencies_paths = sprockets[source_file_name].to_a.map do |dependency|
313
- # if sprockets sees "?body=1" it only gives back the body
314
- # of the script without the dependencies included
315
- dependency.logical_path + "?body=1"
316
- end
317
- end
318
-
319
- super(dependencies_paths, options)
320
- end.join("").gsub("body=1.css", "body=1")
321
- else
322
- super
80
+ [app.config[:js_dir], app.config[:css_dir], app.config[:images_dir], app.config[:fonts_dir]].each do |dir|
81
+ app.map("/#{dir}") { run our_sprockets }
323
82
  end
324
83
  end
325
- end
326
-
327
- class SitemapExtension
328
- def initialize(app)
329
- @app = app
330
- end
331
84
 
332
85
  # Add sitemap resource for every image in the sprockets load path
333
86
  def manipulate_resource_list(resources)
334
- sprockets = @app.sprockets
87
+ sprockets = self.environment
335
88
 
336
89
  imported_assets = []
337
90
  sprockets.imported_assets.each do |asset_logical_path|
@@ -349,15 +102,15 @@ module Middleman::Sprockets
349
102
  output_dir = nil
350
103
  export_all = false
351
104
  if load_path.end_with?('/images')
352
- output_dir = @app.images_dir
105
+ output_dir = @app.config[:images_dir]
353
106
  export_all = true
354
107
  elsif load_path.end_with?('/fonts')
355
- output_dir = @app.fonts_dir
108
+ output_dir = @app.config[:fonts_dir]
356
109
  export_all = true
357
110
  elsif load_path.end_with?('/stylesheets')
358
- output_dir = @app.css_dir
111
+ output_dir = @app.config[:css_dir]
359
112
  elsif load_path.end_with?('/javascripts')
360
- output_dir = @app.js_dir
113
+ output_dir = @app.config[:js_dir]
361
114
  end
362
115
 
363
116
  if output_dir
@@ -4,22 +4,24 @@
4
4
  #
5
5
  # See https://github.com/middleman/middleman/issues/864 for more info.
6
6
  #
7
- module Sass::Script::Functions
8
- def image_url(source, options = {}, cache_buster = nil)
9
- # Work with the Compass #image_url API
10
- if options.respond_to? :value
11
- case options.value
12
- when true
13
- return ::Sass::Script::String.new sprockets_context.image_path(source.value).to_s, :string
14
- else
15
- options = {}
7
+ if defined?(Sass)
8
+ module Sass::Script::Functions
9
+ def image_url(source, options = {}, cache_buster = nil)
10
+ # Work with the Compass #image_url API
11
+ if options.respond_to? :value
12
+ case options.value
13
+ when true
14
+ return ::Sass::Script::String.new sprockets_context.image_path(source.value).to_s, :string
15
+ else
16
+ options = {}
17
+ end
16
18
  end
19
+ ::Sass::Script::String.new "url(\"#{sprockets_context.image_path(source.value, map_options(options)).to_s}\")"
17
20
  end
18
- ::Sass::Script::String.new "url(\"#{sprockets_context.image_path(source.value, map_options(options)).to_s}\")"
19
- end
20
21
 
21
- # Also override generated_image_url to use Sprockets a la https://github.com/Compass/compass-rails/blob/98e4b115c8bb6395a1c3351926d574321396778b/lib/compass-rails/patches/3_1.rb
22
- def generated_image_url(path, only_path = nil)
23
- asset_url(path, Sass::Script::String.new("image"))
22
+ # Also override generated_image_url to use Sprockets a la https://github.com/Compass/compass-rails/blob/98e4b115c8bb6395a1c3351926d574321396778b/lib/compass-rails/patches/3_1.rb
23
+ def generated_image_url(path, only_path = nil)
24
+ asset_url(path, Sass::Script::String.new("image"))
25
+ end
24
26
  end
25
27
  end
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module Sprockets
3
- VERSION = "3.2.0"
3
+ VERSION = "3.3.0"
4
4
  end
5
- end
5
+ end
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
6
6
  s.name = "middleman-sprockets"
7
7
  s.version = Middleman::Sprockets::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Thomas Reynolds"]
10
- s.email = ["me@tdreyno.com"]
9
+ s.authors = ["Thomas Reynolds", "Ben Hollis"]
10
+ s.email = ["me@tdreyno.com", "ben@benhollis.net"]
11
11
  s.homepage = "https://github.com/middleman/middleman-sprockets"
12
12
  s.summary = %q{Sprockets support for Middleman}
13
13
  s.description = %q{Sprockets support for Middleman}
@@ -15,8 +15,8 @@ Gem::Specification.new do |s|
15
15
  s.files = `git ls-files -z`.split("\0")
16
16
  s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
17
17
  s.require_paths = ["lib"]
18
- s.add_dependency("middleman-core", ["~> 3.2"])
18
+ s.add_dependency("middleman-core", [">= 3.2"])
19
19
  s.add_dependency("sprockets", ["~> 2.1"])
20
20
  s.add_dependency("sprockets-sass", ["~> 1.0.0"])
21
21
  s.add_dependency("sprockets-helpers", ["~> 1.0.0"])
22
- end
22
+ end
metadata CHANGED
@@ -1,80 +1,82 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-sprockets
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Reynolds
8
+ - Ben Hollis
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-11-03 00:00:00.000000000 Z
12
+ date: 2014-03-04 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: middleman-core
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
- - - ~>
18
+ - - ">="
18
19
  - !ruby/object:Gem::Version
19
20
  version: '3.2'
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
- - - ~>
25
+ - - ">="
25
26
  - !ruby/object:Gem::Version
26
27
  version: '3.2'
27
28
  - !ruby/object:Gem::Dependency
28
29
  name: sprockets
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
- - - ~>
32
+ - - "~>"
32
33
  - !ruby/object:Gem::Version
33
34
  version: '2.1'
34
35
  type: :runtime
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
- - - ~>
39
+ - - "~>"
39
40
  - !ruby/object:Gem::Version
40
41
  version: '2.1'
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: sprockets-sass
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
- - - ~>
46
+ - - "~>"
46
47
  - !ruby/object:Gem::Version
47
48
  version: 1.0.0
48
49
  type: :runtime
49
50
  prerelease: false
50
51
  version_requirements: !ruby/object:Gem::Requirement
51
52
  requirements:
52
- - - ~>
53
+ - - "~>"
53
54
  - !ruby/object:Gem::Version
54
55
  version: 1.0.0
55
56
  - !ruby/object:Gem::Dependency
56
57
  name: sprockets-helpers
57
58
  requirement: !ruby/object:Gem::Requirement
58
59
  requirements:
59
- - - ~>
60
+ - - "~>"
60
61
  - !ruby/object:Gem::Version
61
62
  version: 1.0.0
62
63
  type: :runtime
63
64
  prerelease: false
64
65
  version_requirements: !ruby/object:Gem::Requirement
65
66
  requirements:
66
- - - ~>
67
+ - - "~>"
67
68
  - !ruby/object:Gem::Version
68
69
  version: 1.0.0
69
70
  description: Sprockets support for Middleman
70
71
  email:
71
72
  - me@tdreyno.com
73
+ - ben@benhollis.net
72
74
  executables: []
73
75
  extensions: []
74
76
  extra_rdoc_files: []
75
77
  files:
76
- - .gitignore
77
- - .travis.yml
78
+ - ".gitignore"
79
+ - ".travis.yml"
78
80
  - CHANGELOG.md
79
81
  - CONTRIBUTING.md
80
82
  - Gemfile
@@ -133,6 +135,9 @@ files:
133
135
  - fixtures/bower-app/components/jquery/package.json
134
136
  - fixtures/bower-app/config.rb
135
137
  - fixtures/bower-app/source/javascripts/get_jquery.js
138
+ - fixtures/bower-json-app/config.rb
139
+ - fixtures/bower-json-app/source/javascripts/application.js.coffee
140
+ - fixtures/bower-json-app/source/javascripts/bower.json
136
141
  - fixtures/glob-app/config.rb
137
142
  - fixtures/glob-app/source/stylesheets/main.css.scss
138
143
  - fixtures/glob-app/source/stylesheets/module1/_i-am-mod.scss
@@ -193,10 +198,11 @@ files:
193
198
  - fixtures/sprockets-images-app/source/library/images/cat.jpg
194
199
  - fixtures/sprockets-images-app/vendor/assets/images/cat-2.jpg
195
200
  - lib/middleman-sprockets.rb
201
+ - lib/middleman-sprockets/asset_tag_helpers.rb
202
+ - lib/middleman-sprockets/environment.rb
196
203
  - lib/middleman-sprockets/extension.rb
197
204
  - lib/middleman-sprockets/sass_function_hack.rb
198
205
  - lib/middleman-sprockets/version.rb
199
- - lib/middleman_extension.rb
200
206
  - middleman-sprockets.gemspec
201
207
  homepage: https://github.com/middleman/middleman-sprockets
202
208
  licenses:
@@ -208,17 +214,17 @@ require_paths:
208
214
  - lib
209
215
  required_ruby_version: !ruby/object:Gem::Requirement
210
216
  requirements:
211
- - - '>='
217
+ - - ">="
212
218
  - !ruby/object:Gem::Version
213
219
  version: '0'
214
220
  required_rubygems_version: !ruby/object:Gem::Requirement
215
221
  requirements:
216
- - - '>='
222
+ - - ">="
217
223
  - !ruby/object:Gem::Version
218
224
  version: '0'
219
225
  requirements: []
220
226
  rubyforge_project:
221
- rubygems_version: 2.0.2
227
+ rubygems_version: 2.2.2
222
228
  signing_key:
223
229
  specification_version: 4
224
230
  summary: Sprockets support for Middleman
@@ -275,6 +281,9 @@ test_files:
275
281
  - fixtures/bower-app/components/jquery/package.json
276
282
  - fixtures/bower-app/config.rb
277
283
  - fixtures/bower-app/source/javascripts/get_jquery.js
284
+ - fixtures/bower-json-app/config.rb
285
+ - fixtures/bower-json-app/source/javascripts/application.js.coffee
286
+ - fixtures/bower-json-app/source/javascripts/bower.json
278
287
  - fixtures/glob-app/config.rb
279
288
  - fixtures/glob-app/source/stylesheets/main.css.scss
280
289
  - fixtures/glob-app/source/stylesheets/module1/_i-am-mod.scss
@@ -1 +0,0 @@
1
- require "middleman-sprockets"