asset_hat 0.2.1 → 0.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.
- data/HISTORY +38 -19
- data/README.rdoc +99 -41
- data/Rakefile +17 -10
- data/VERSION.yml +3 -3
- data/app/helpers/asset_hat_helper.rb +40 -20
- data/asset_hat.gemspec +105 -101
- data/doc/classes/AssetHat.html +173 -59
- data/doc/classes/AssetHat/CSS.html +35 -26
- data/doc/classes/AssetHat/CSS/Engines.html +13 -12
- data/doc/classes/AssetHat/JS.html +11 -11
- data/doc/classes/AssetHat/JS/Engines.html +10 -10
- data/doc/classes/AssetHat/JS/Vendors.html +9 -5
- data/doc/classes/AssetHatHelper.html +18 -14
- data/doc/created.rid +1 -1
- data/doc/files/HISTORY.html +66 -24
- data/doc/files/LICENSE.html +1 -1
- data/doc/files/README_rdoc.html +112 -37
- data/doc/files/app/helpers/asset_hat_helper_rb.html +1 -1
- data/doc/files/lib/asset_hat/capistrano_rb.html +1 -1
- data/doc/files/lib/asset_hat/css_rb.html +1 -1
- data/doc/files/lib/asset_hat/js/vendors_rb.html +1 -1
- data/doc/files/lib/asset_hat/js_rb.html +1 -1
- data/doc/files/lib/asset_hat/tasks/css_rb.html +1 -1
- data/doc/files/lib/asset_hat/tasks/js_rb.html +1 -1
- data/doc/files/lib/asset_hat/tasks_rb.html +1 -1
- data/doc/files/lib/asset_hat/vcs_rb.html +1 -1
- data/doc/files/lib/asset_hat/version_rb.html +1 -1
- data/doc/files/lib/asset_hat_rb.html +1 -1
- data/doc/fr_method_index.html +54 -46
- data/lib/asset_hat.rb +100 -16
- data/lib/asset_hat/capistrano.rb +4 -3
- data/lib/asset_hat/css.rb +69 -20
- data/lib/asset_hat/js.rb +2 -2
- data/lib/asset_hat/js/vendors.rb +14 -10
- data/lib/asset_hat/tasks.rb +22 -3
- data/lib/asset_hat/tasks/css.rb +118 -74
- data/lib/asset_hat/tasks/js.rb +79 -35
- data/lib/asset_hat/vcs.rb +19 -0
- data/public/stylesheets/bundles/ssl/css-bundle-1.min.css +3 -0
- data/public/stylesheets/bundles/ssl/css-bundle-2.min.css +3 -0
- data/public/stylesheets/bundles/ssl/css-bundle-3.min.css +3 -0
- data/rails/init.rb +1 -16
- data/test/asset_hat_helper_test.rb +172 -28
- data/test/asset_hat_test.rb +167 -25
- metadata +54 -21
- data/.gitignore +0 -2
data/HISTORY
CHANGED
@@ -1,40 +1,59 @@
|
|
1
1
|
= HISTORY
|
2
2
|
|
3
|
+
* FEATURE: Added ERb support in `config/assets.yml`.
|
4
|
+
* FEATURE: Added support for auto-creating SSL versions of every stylesheet.
|
5
|
+
* FEATURE: Added support for loading remote JS via SSL. Includes loading
|
6
|
+
popular JS from `https://ajax.googleapis.com` or your own CDN.
|
7
|
+
* FEATURE: Added support for `FORMAT=long|short|dot` flags for
|
8
|
+
`rake asset_hat:minify`. Useful for shortening output from deployment
|
9
|
+
scripts.
|
10
|
+
* FEATURE: Added support for absolute paths in `config/assets.yml`. Allows
|
11
|
+
pointing to assets directly inside `public/`.
|
12
|
+
* FEATURE: Added `asset_hat:minify:css` and `asset_hat:minify:js` Rake task
|
13
|
+
aliases.
|
14
|
+
* IMPROVEMENT: Updated default CSS minification engine to remove rules that
|
15
|
+
have empty declaration blocks.
|
16
|
+
* IMPROVEMENT: Stopped pre-caching asset commit IDs when launching console.
|
17
|
+
* IMPROVEMENT: Added support for single/double quotation marks in `url()` CSS
|
18
|
+
when adding asset hosts and cache busters
|
19
|
+
* FIX: Fixed adding asset commit IDs to URLs containing "?" in stylesheets.
|
20
|
+
|
3
21
|
== Version 0.2.1 (2010-07-21)
|
4
|
-
* Added WebFont Loader to supported JS vendors.
|
5
|
-
* Stopped adding asset hosts to `url(/htc/...)` URLs because IE 6, by
|
6
|
-
refuses to run .htc files from other domains, including CDN
|
22
|
+
* FEATURE: Added WebFont Loader to supported JS vendors.
|
23
|
+
* FIX: Stopped adding asset hosts to `url(/htc/...)` URLs because IE 6, by
|
24
|
+
default, refuses to run .htc files from other domains, including CDN
|
25
|
+
subdomains.
|
7
26
|
|
8
27
|
== Version 0.2.0 (2010-06-10)
|
9
|
-
* Added support for loading many more JS vendors from Google's CDN,
|
10
|
-
Prototype, MooTools, and SWFObject.
|
11
|
-
* Cleaned up existing docs, and added complete RDoc documentation.
|
12
|
-
* Added example integration script for Capistrano deployments.
|
28
|
+
* FEATURE: Added support for loading many more JS vendors from Google's CDN,
|
29
|
+
including Prototype, MooTools, and SWFObject.
|
30
|
+
* FEATURE: Cleaned up existing docs, and added complete RDoc documentation.
|
31
|
+
* FEATURE: Added example integration script for Capistrano deployments.
|
13
32
|
|
14
33
|
== Version 0.1.5 (2010-03-11)
|
15
|
-
* Fixed fetching asset commit IDs in some environments. The bug was
|
16
|
-
caused by older versions of Git, which fail to read logs properly
|
17
|
-
absolute paths, rather than relative paths.
|
18
|
-
* Stopped app tests from running twice in some environments.
|
34
|
+
* FIX: Fixed fetching asset commit IDs in some environments. The bug was
|
35
|
+
possibly caused by older versions of Git, which fail to read logs properly
|
36
|
+
when given absolute paths, rather than relative paths.
|
37
|
+
* FIX: Stopped app tests from running twice in some environments.
|
19
38
|
|
20
39
|
== Version 0.1.4 (2010-03-03)
|
21
|
-
* Fixed config filepaths in `asset_hat:config` task.
|
40
|
+
* FIX: Fixed config filepaths in `asset_hat:config` task.
|
22
41
|
|
23
42
|
== Version 0.1.3 (2010-03-03)
|
24
|
-
* Allowed adding commit IDs and asset hosts to `url(/htc/...)` URLs
|
25
|
-
`/htc/iepngfix.htc`) in CSS, not just images.
|
26
|
-
* Changed `AssetHat.config` to memoize only if `cache?` is true. In
|
43
|
+
* FIX: Allowed adding commit IDs and asset hosts to `url(/htc/...)` URLs
|
44
|
+
(e.g., `/htc/iepngfix.htc`) in CSS, not just images.
|
45
|
+
* FIX: Changed `AssetHat.config` to memoize only if `cache?` is true. In
|
27
46
|
development environments, this means the config file will be reread with
|
28
47
|
every request.
|
29
48
|
|
30
49
|
== Version 0.1.2 (2010-01-27)
|
31
|
-
* Memoized HTML output from `include_css` and `include_js` when
|
50
|
+
* IMPROVEMENT: Memoized HTML output from `include_css` and `include_js` when
|
32
51
|
`AssetHat.cache?` is true.
|
33
52
|
|
34
53
|
== Version 0.1.1 (2010-01-20)
|
35
|
-
* Rewrote `AssetHat::VERSION` to be based on `VERSION.yml`.
|
36
|
-
* Prefixed `AssetHat::CONFIG_FILEPATH` with `RAILS_ROOT`, which fixes
|
37
|
-
to run an app's individual test files.
|
54
|
+
* FIX: Rewrote `AssetHat::VERSION` to be based on `VERSION.yml`.
|
55
|
+
* FIX: Prefixed `AssetHat::CONFIG_FILEPATH` with `RAILS_ROOT`, which fixes
|
56
|
+
ability to run an app's individual test files.
|
38
57
|
|
39
58
|
== Version 0.1.0 (2010-01-19)
|
40
59
|
* Initial release.
|
data/README.rdoc
CHANGED
@@ -8,56 +8,59 @@ AssetHat can automatically:
|
|
8
8
|
|
9
9
|
* Easily *minify* and *bundle* CSS and JS on deploy to reduce file sizes and
|
10
10
|
HTTP requests.
|
11
|
-
* Load popular <
|
12
|
-
from {<
|
11
|
+
* Load popular <b>third-party JS</b> (like jQuery and Prototype)
|
12
|
+
from {<b>Google's CDN</b>}[http://code.google.com/apis/ajaxlibs/]
|
13
13
|
when in production, or from localhost in development.
|
14
|
-
* Force image URLs in your CSS to use <
|
15
|
-
just the current host.
|
14
|
+
* Force image URLs in your CSS to use <b>CDN subdomains</b>
|
15
|
+
(including SSL support), not just the current host.
|
16
16
|
* Add an image's last Git[http://git-scm.com/] commit ID to its CSS URLs to
|
17
|
-
<
|
18
|
-
<code>/images/foo.png?
|
17
|
+
<b>bust browser caches</b> (e.g.,
|
18
|
+
<code>/images/foo.png?ab12cd3</code>).
|
19
19
|
|
20
|
-
After setup, you can use
|
20
|
+
After setup, you can use this in your layouts and views:
|
21
21
|
|
22
22
|
<%= include_css :bundle => 'application' %>
|
23
|
-
|
24
|
-
# media="screen,projection" rel="stylesheet" type="text/css" />
|
23
|
+
<%= include_js :jquery, :bundles => ['plugins', 'common'] %>
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
Which turns into:
|
26
|
+
|
27
|
+
<link href="/stylesheets/bundles/application.min.css"
|
28
|
+
media="screen,projection" rel="stylesheet" type="text/css" />
|
29
|
+
<script src="/javascripts/jquery-1.x.x.min.js"
|
30
|
+
type="text/javascript"></script>
|
31
|
+
<!-- In production, jQuery loads from Google's CDN instead. -->
|
32
|
+
<script src="/javascripts/bundles/plugins.min.js"
|
33
|
+
type="text/javascript"></script>
|
34
|
+
<script src="/javascripts/bundles/common.min.js"
|
35
|
+
type="text/javascript"></script>
|
31
36
|
|
32
37
|
And this in your deploy script:
|
33
38
|
|
34
39
|
rake asset_hat:minify
|
35
40
|
|
36
|
-
Tested with Rails 2.3.x.
|
41
|
+
Tested with Rails 2.3.x. For the gritty details, check the
|
42
|
+
{complete docs}[http://mintdigital.github.com/asset_hat/doc/] and
|
43
|
+
{change history}[http://mintdigital.github.com/asset_hat/doc/files/HISTORY.html].
|
37
44
|
|
38
45
|
|
39
46
|
|
40
47
|
== Installation
|
41
48
|
|
42
|
-
1.
|
49
|
+
1. Configure the gem:
|
43
50
|
|
44
|
-
|
45
|
-
|
46
|
-
2. Configure the gem:
|
47
|
-
|
48
|
-
* If you're using {Bundler 0.9+}[http://github.com/carlhuda/bundler]:
|
51
|
+
* If you're using Rails 3 and/or
|
52
|
+
{Bundler 0.9+}[http://github.com/carlhuda/bundler]:
|
49
53
|
|
50
54
|
1. Add to your app's Gemfile: <code>gem 'asset_hat', '0.x.x'</code>
|
51
55
|
2. Command-line: <code>bundle install</code>
|
52
56
|
|
53
|
-
* If you're using Rails' <code>config.gem</code
|
54
|
-
<code>config/environment.rb</code>:
|
55
|
-
|
56
|
-
config.gem 'asset_hat', :version => '0.x.x'
|
57
|
+
* If you're using Rails 2.x's <code>config.gem</code>:
|
57
58
|
|
58
|
-
|
59
|
+
1. Add to your app's <code>config/environment.rb</code>:
|
60
|
+
<code>config.gem 'asset_hat', :version => '0.x.x'</code>
|
61
|
+
2. Command-line: <code>gem install asset_hat</code>
|
59
62
|
|
60
|
-
|
63
|
+
2. Add to your app's Rakefile: <code>require 'asset_hat/tasks'</code>
|
61
64
|
|
62
65
|
|
63
66
|
|
@@ -82,17 +85,21 @@ Tested with Rails 2.3.x.
|
|
82
85
|
Bundles are created as new files in
|
83
86
|
<code>public/stylesheets/bundles/</code> and
|
84
87
|
<code>public/javascripts/bundles/</code>. Your original CSS/JS files
|
85
|
-
remain
|
88
|
+
remain untouched.
|
86
89
|
|
87
90
|
4. Set your deployment script to run <code>rake asset_hat:minify</code> after
|
88
91
|
deploying your latest CSS/JS. This overwrites previously minified bundles,
|
89
|
-
and leaves your original CSS/JS files
|
92
|
+
and leaves your original CSS/JS files untouched.
|
90
93
|
|
91
94
|
=== Advanced configuration
|
92
95
|
|
93
96
|
If you manage deployments with Capistrano[http://www.capify.org/], see the
|
94
97
|
gem's packaged example at <code>lib/asset_hat/capistrano.rb</code>.
|
95
98
|
|
99
|
+
If you want shorter output during deployments, you can use
|
100
|
+
`rake asset_hat:minify FORMAT=short` (one output line per bundle) or
|
101
|
+
`FORMAT=dot` (one output line total) in your deploy script.
|
102
|
+
|
96
103
|
Additional settings are supported in <code>config/assets.yml</code>:
|
97
104
|
|
98
105
|
* <code>engine</code>: Indicates how CSS and JS are minified; omit this
|
@@ -102,26 +109,64 @@ Additional settings are supported in <code>config/assets.yml</code>:
|
|
102
109
|
rgrove/jsmin[http://github.com/rgrove/jsmin] (a Ruby port of Crockford's
|
103
110
|
JSMin).
|
104
111
|
|
105
|
-
If
|
106
|
-
|
107
|
-
|
112
|
+
If you'd prefer to have slightly more readable code for debugging purposes,
|
113
|
+
you can switch both the CSS and JS engines to <code>weak</code>. However,
|
114
|
+
the <code>weak</code> engines don't save as many bytes.
|
108
115
|
|
109
|
-
* <code>vendors</code>:
|
110
|
-
|
116
|
+
* <code>vendors</code>: Configures third-party JS that's loaded from a CDN or
|
117
|
+
other external source. The following example configures jQuery and jQuery UI
|
118
|
+
for use throughout the app:
|
111
119
|
|
112
120
|
js:
|
113
121
|
vendors:
|
114
122
|
jquery:
|
115
|
-
version:
|
123
|
+
version: 1.4.4
|
124
|
+
jquery_ui:
|
125
|
+
version: 1.8.5
|
126
|
+
remote_url: http://cdn.example.com/js/jquery-ui-1.8.5.min.js
|
127
|
+
remote_ssl_url: https://cdn-ssl.example.com/js/jquery-ui-1.8.5.min.js
|
128
|
+
|
129
|
+
Configuration keys per vendor:
|
116
130
|
|
117
|
-
|
118
|
-
|
131
|
+
* <code>version</code>: Sets the default version across the app. In the
|
132
|
+
example above, <code><%= include_js :jquery %></code> uses version 1.4.4
|
133
|
+
by default. You can override this for special layouts/views with
|
134
|
+
<code><%= include_js :jquery, :version => '1.3.2' %></code>.
|
135
|
+
* <code>remote_url</code>, <code>remote_ssl_url</code>: By default, vendor
|
136
|
+
JS will load from {Google's CDN}[http://code.google.com/apis/ajaxlibs/]
|
137
|
+
in production (or any environment where
|
138
|
+
<code>config.action_controller.consider_all_requests_local</code> is set
|
139
|
+
to <code>true</code>). If the original request to your app used SSL, the
|
140
|
+
vendor JS will also load from Google's CDN via SSL. If you prefer to use a
|
141
|
+
different CDN, specify its SSL/non-SSL URLs, and the appropriate URL will
|
142
|
+
be used per request.
|
143
|
+
|
144
|
+
A full list of supported vendors is in the AssetHat::JS::Vendors module.
|
145
|
+
|
146
|
+
=== SSL configuration
|
147
|
+
|
148
|
+
When you request a page via SSL, some browsers (euphemism for "IE") show
|
149
|
+
errors if any assets -- stylesheets, JS files, images -- are served _without_
|
150
|
+
SSL.
|
151
|
+
|
152
|
+
AssetHat plays well with SSL pages that load assets from a CDN. Put this in
|
153
|
+
<code>config/environments/production.rb</code> or similar:
|
154
|
+
|
155
|
+
config.action_controller.asset_host = Proc.new do |source, request|
|
156
|
+
"#{request.protocol}cdn#{source.hash % 4}.example.com"
|
157
|
+
# => 'http://cdn0.example.com', 'https://cdn1.example.com', etc.
|
158
|
+
end
|
159
|
+
|
160
|
+
This switches to a different CDN URL if the request used SSL. When you run
|
161
|
+
<code>rake asset_hat:minify</code> at deploy time, AssetHat detects this
|
162
|
+
configuration, and generates special SSL versions of each stylesheet that also
|
163
|
+
load images from CDN via SSL. (Non-SSL pages still get non-SSL stylesheets.)
|
119
164
|
|
120
165
|
|
121
166
|
|
122
167
|
== Usage
|
123
168
|
|
124
|
-
In your layouts and views, instead of these
|
169
|
+
In your layouts and views, <b>instead of these</b>:
|
125
170
|
|
126
171
|
<%= stylesheet_link_tag 'reset', 'application', 'clearfix',
|
127
172
|
:media => 'screen,projection',
|
@@ -129,7 +174,7 @@ In your layouts and views, instead of these:
|
|
129
174
|
<%= javascript_include_tag 'plugin-1', 'plugin-2', 'plugin-3',
|
130
175
|
:cache => 'bundles/application' %>
|
131
176
|
|
132
|
-
<
|
177
|
+
<b>Use these:</b>
|
133
178
|
|
134
179
|
<%= include_css :bundle => 'application' %>
|
135
180
|
<%= include_js :bundle => 'application' %>
|
@@ -150,6 +195,11 @@ minified bundle files. Otherwise, the separate, unminified files will be
|
|
150
195
|
included, based on the bundle contents you define in
|
151
196
|
<code>config/assets.yml</code>.
|
152
197
|
|
198
|
+
If your environment has <code>config.action_controller.asset_host</code>
|
199
|
+
pointing to a CDN, your CSS/JS files will load from there. If your
|
200
|
+
configuration supports using the CDN via SSL (see the section "SSL
|
201
|
+
configuration"), SSL requests will also load CSS/JS files via SSL.
|
202
|
+
|
153
203
|
=== Advanced usage
|
154
204
|
|
155
205
|
You can also include single files as expected:
|
@@ -167,5 +217,13 @@ When including multiple bundles at once, this yields one
|
|
167
217
|
You may want to use multiple bundles to separate plugins (rarely changed) from
|
168
218
|
application code (frequently changed). If all code is in one huge bundle, then
|
169
219
|
whenever there's a change, browsers have to re-download the whole bundle. By
|
170
|
-
using multiple bundles based on
|
171
|
-
|
220
|
+
using multiple bundles based on update frequency, browsers cache the rarely
|
221
|
+
updated code, and only re-download the frequently updated code.
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
== {What is best in AssetHat?}[http://www.youtube.com/watch?v=V30tyaXv6EI]
|
226
|
+
|
227
|
+
* To crush your assets;
|
228
|
+
* See them bundled before you; and
|
229
|
+
* Hear no more lamentation about slow page loads.
|
data/Rakefile
CHANGED
@@ -5,19 +5,26 @@ require 'hanna/rdoctask'
|
|
5
5
|
begin
|
6
6
|
require 'jeweler'
|
7
7
|
Jeweler::Tasks.new do |gemspec|
|
8
|
-
gemspec.name =
|
9
|
-
gemspec.summary =
|
10
|
-
gemspec.description = %
|
11
|
-
|
8
|
+
gemspec.name = 'asset_hat'
|
9
|
+
gemspec.summary = 'Your assets are covered.'
|
10
|
+
gemspec.description = %{
|
11
|
+
Minifies, bundles, and optimizes CSS/JS assets ahead of time (e.g., on
|
12
|
+
deploy), not at runtime. Loads popular JS frameworks (like jQuery and
|
13
|
+
Prototype) from localhost in development, and auto-switches to Google's
|
14
|
+
CDN in production. Can rewrite stylesheets to use CDN hosts (not just
|
15
|
+
your web server) and cache-busting hashes for updated images.
|
16
|
+
}.strip.gsub(/\s+/, ' ')
|
17
|
+
gemspec.homepage = 'http://github.com/mintdigital/asset_hat'
|
12
18
|
|
13
19
|
gemspec.authors = ['Ron DeVera', 'Mint Digital']
|
14
|
-
gemspec.email =
|
20
|
+
gemspec.email = 'hello@rondevera.com'
|
15
21
|
|
16
|
-
gemspec.add_development_dependency 'flexmock', '
|
17
|
-
gemspec.add_development_dependency 'hanna', '
|
18
|
-
gemspec.add_development_dependency '
|
19
|
-
gemspec.
|
20
|
-
gemspec.add_runtime_dependency '
|
22
|
+
gemspec.add_development_dependency 'flexmock', '~> 0.8.6'
|
23
|
+
gemspec.add_development_dependency 'hanna', '~> 0.1.12'
|
24
|
+
gemspec.add_development_dependency 'jeweler', '~> 1.4.0'
|
25
|
+
gemspec.add_development_dependency 'shoulda', '~> 2.10.2'
|
26
|
+
gemspec.add_runtime_dependency 'cssmin', '~> 1.0.2'
|
27
|
+
gemspec.add_runtime_dependency 'jsmin', '~> 1.0.1'
|
21
28
|
end
|
22
29
|
Jeweler::GemcutterTasks.new
|
23
30
|
rescue LoadError
|
data/VERSION.yml
CHANGED
@@ -19,10 +19,7 @@ module AssetHatHelper
|
|
19
19
|
return
|
20
20
|
end
|
21
21
|
|
22
|
-
options
|
23
|
-
options.symbolize_keys!
|
24
|
-
options.reverse_merge!(:media => 'screen,projection') if type == :css
|
25
|
-
|
22
|
+
options = args.extract_options!.symbolize_keys
|
26
23
|
filenames = []
|
27
24
|
sources = [] # The URLs that are ultimately included via HTML
|
28
25
|
source_commit_ids = {} # Last commit ID for each source
|
@@ -36,7 +33,10 @@ module AssetHatHelper
|
|
36
33
|
bundles = [options.delete(:bundle), options.delete(:bundles)].
|
37
34
|
flatten.reject(&:blank?)
|
38
35
|
if use_caching
|
39
|
-
sources += bundles.map
|
36
|
+
sources += bundles.map do |bundle|
|
37
|
+
File.join(AssetHat.bundles_dir(options.slice(:ssl)),
|
38
|
+
"#{bundle}.min.#{type}")
|
39
|
+
end
|
40
40
|
else
|
41
41
|
config = AssetHat.config
|
42
42
|
filenames = bundles.map { |b| AssetHat.bundle_filenames(b, type) }.
|
@@ -46,6 +46,7 @@ module AssetHatHelper
|
|
46
46
|
filenames = args
|
47
47
|
end
|
48
48
|
|
49
|
+
# Add extensions if needed, using minified file if it already exists
|
49
50
|
filenames.each do |filename|
|
50
51
|
if filename.match(/\.#{type}$/)
|
51
52
|
sources << filename
|
@@ -69,9 +70,11 @@ module AssetHatHelper
|
|
69
70
|
sources.map! do |src|
|
70
71
|
if src =~ %r{^http(s?)://} || src =~ %r{^//}
|
71
72
|
# Absolute URL; do nothing
|
72
|
-
elsif src =~
|
73
|
+
elsif src =~ /^#{AssetHat.bundles_dir}\//
|
73
74
|
# Get commit ID of bundle file with most recently committed update
|
74
|
-
bundle = src.
|
75
|
+
bundle = src.
|
76
|
+
match(/^#{AssetHat.bundles_dir}\/(ssl\/)?(.*)\.min\.#{type}$/).
|
77
|
+
to_a.last
|
75
78
|
commit_id = AssetHat.last_bundle_commit_id(bundle, type)
|
76
79
|
else
|
77
80
|
# Get commit ID of file's most recently committed update
|
@@ -86,12 +89,11 @@ module AssetHatHelper
|
|
86
89
|
end
|
87
90
|
|
88
91
|
# Build output HTML
|
92
|
+
options.delete :ssl
|
89
93
|
sources.map do |src|
|
90
94
|
case type
|
91
|
-
when :css
|
92
|
-
|
93
|
-
when :js
|
94
|
-
javascript_include_tag(src, options)
|
95
|
+
when :css ; stylesheet_link_tag(src, options)
|
96
|
+
when :js ; javascript_include_tag(src, options)
|
95
97
|
else nil
|
96
98
|
end
|
97
99
|
end.join("\n")
|
@@ -119,16 +121,27 @@ module AssetHatHelper
|
|
119
121
|
# => <link href="/stylesheets/reset.min.css" ... />
|
120
122
|
# <link href="/stylesheets/application.min.css" ... />
|
121
123
|
# <link href="/stylesheets/clearfix.min.css" ... />
|
124
|
+
#
|
125
|
+
# Include a stylesheet with extra media types:
|
126
|
+
# include_css 'mobile', :media => 'handheld,screen,projection'
|
127
|
+
# => <link href="/stylesheets/mobile.min.css"
|
128
|
+
# media="handheld,screen,projection" ... />
|
122
129
|
def include_css(*args)
|
123
130
|
return if args.blank?
|
124
131
|
|
125
132
|
AssetHat.html_cache ||= {}
|
126
133
|
AssetHat.html_cache[:css] ||= {}
|
127
|
-
|
134
|
+
|
135
|
+
options = args.extract_options!
|
136
|
+
options.symbolize_keys!.reverse_merge!(
|
137
|
+
:media => 'screen,projection', :ssl => controller.request.ssl?)
|
138
|
+
cache_key = (args + [options]).inspect
|
128
139
|
|
129
140
|
if !AssetHat.cache? || AssetHat.html_cache[:css][cache_key].blank?
|
130
141
|
# Generate HTML and write to cache
|
131
|
-
|
142
|
+
options[:ssl] &&= AssetHat.ssl_asset_host_differs?
|
143
|
+
html = AssetHat.html_cache[:css][cache_key] =
|
144
|
+
include_assets(:css, *(args + [options]))
|
132
145
|
end
|
133
146
|
|
134
147
|
html ||= AssetHat.html_cache[:css][cache_key]
|
@@ -148,15 +161,18 @@ module AssetHatHelper
|
|
148
161
|
# => <script src="/javascripts/application.js" type="text/javascript"></script>
|
149
162
|
#
|
150
163
|
# Include jQuery:
|
151
|
-
#
|
164
|
+
# # Development/test environment:
|
165
|
+
# include_js :jquery
|
152
166
|
# => <script src="/javascripts/jquery-VERSION.min.js" ...></script>
|
153
|
-
#
|
167
|
+
#
|
168
|
+
# # Staging/production environment:
|
169
|
+
# include_js :jquery
|
154
170
|
# => <script src="http://ajax.googleapis.com/.../jquery.min.js" ...></script>
|
155
171
|
# # Set jQuery versions either in `config/assets.yml`, or by using
|
156
172
|
# # `include_js :jquery, :version => '1.4'`.
|
157
173
|
#
|
158
174
|
# Include a bundle of JS files (i.e., a concatenated set of files;
|
159
|
-
# configure in config/assets.yml):
|
175
|
+
# configure in <code>config/assets.yml</code>):
|
160
176
|
# include_js :bundle => 'application'
|
161
177
|
# => <script src="/javascripts/bundles/application.min.js" ...></script>
|
162
178
|
#
|
@@ -175,21 +191,25 @@ module AssetHatHelper
|
|
175
191
|
|
176
192
|
AssetHat.html_cache ||= {}
|
177
193
|
AssetHat.html_cache[:js] ||= {}
|
178
|
-
|
194
|
+
|
195
|
+
options = args.extract_options!
|
196
|
+
options.symbolize_keys!.reverse_merge!(:ssl => controller.request.ssl?)
|
197
|
+
cache_key = (args + [options]).inspect
|
179
198
|
|
180
199
|
if !AssetHat.cache? || AssetHat.html_cache[:js][cache_key].blank?
|
181
200
|
# Generate HTML and write to cache
|
182
201
|
|
183
202
|
html = []
|
184
|
-
options = args.extract_options!
|
185
|
-
|
186
203
|
included_vendors = (args & AssetHat::JS::VENDORS)
|
187
204
|
included_vendors.each do |vendor|
|
188
205
|
args.delete vendor
|
189
|
-
src = AssetHat::JS::Vendors.source_for(
|
206
|
+
src = AssetHat::JS::Vendors.source_for(
|
207
|
+
vendor, options.slice(:ssl, :version))
|
190
208
|
html << include_assets(:js, src, :cache => true)
|
191
209
|
end
|
192
210
|
|
211
|
+
options.except! :ssl, :version
|
212
|
+
|
193
213
|
html << include_assets(:js, *(args + [options]))
|
194
214
|
html = html.join("\n").strip
|
195
215
|
AssetHat.html_cache[:js][cache_key] = html
|