asset_hat 0.1.5 → 0.2.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.
Files changed (48) hide show
  1. data/HISTORY +13 -14
  2. data/README.rdoc +171 -0
  3. data/Rakefile +24 -2
  4. data/VERSION.yml +3 -3
  5. data/app/helpers/asset_hat_helper.rb +67 -61
  6. data/asset_hat.gemspec +42 -8
  7. data/doc/classes/AssetHat/CSS/Engines.html +118 -0
  8. data/doc/classes/AssetHat/CSS.html +194 -0
  9. data/doc/classes/AssetHat/JS/Engines.html +122 -0
  10. data/doc/classes/AssetHat/JS/Vendors.html +110 -0
  11. data/doc/classes/AssetHat/JS.html +151 -0
  12. data/doc/classes/AssetHat.html +446 -0
  13. data/doc/classes/AssetHatHelper.html +161 -0
  14. data/doc/created.rid +1 -0
  15. data/doc/files/HISTORY.html +116 -0
  16. data/doc/files/LICENSE.html +76 -0
  17. data/doc/files/README_rdoc.html +234 -0
  18. data/doc/files/app/helpers/asset_hat_helper_rb.html +55 -0
  19. data/doc/files/lib/asset_hat/capistrano_rb.html +49 -0
  20. data/doc/files/lib/asset_hat/css_rb.html +57 -0
  21. data/doc/files/lib/asset_hat/js/vendors_rb.html +49 -0
  22. data/doc/files/lib/asset_hat/js_rb.html +57 -0
  23. data/doc/files/lib/asset_hat/tasks/css_rb.html +49 -0
  24. data/doc/files/lib/asset_hat/tasks/js_rb.html +49 -0
  25. data/doc/files/lib/asset_hat/tasks_rb.html +58 -0
  26. data/doc/files/lib/asset_hat/vcs_rb.html +49 -0
  27. data/doc/files/lib/asset_hat/version_rb.html +49 -0
  28. data/doc/files/lib/asset_hat_rb.html +49 -0
  29. data/doc/fr_class_index.html +23 -0
  30. data/doc/fr_file_index.html +33 -0
  31. data/doc/fr_method_index.html +4455 -0
  32. data/doc/index.html +15 -0
  33. data/doc/rdoc-style.css +328 -0
  34. data/lib/asset_hat/capistrano.rb +14 -0
  35. data/lib/asset_hat/css.rb +40 -10
  36. data/lib/asset_hat/js/vendors.rb +85 -0
  37. data/lib/asset_hat/js.rb +28 -29
  38. data/lib/asset_hat/tasks/css.rb +151 -0
  39. data/lib/asset_hat/tasks/js.rb +100 -0
  40. data/lib/asset_hat/tasks.rb +4 -272
  41. data/lib/asset_hat/vcs.rb +23 -20
  42. data/lib/asset_hat/version.rb +2 -0
  43. data/lib/asset_hat.rb +94 -19
  44. data/tasks/asset_hat.rake +1 -1
  45. data/test/asset_hat_helper_test.rb +63 -9
  46. data/test/test_helper.rb +5 -1
  47. metadata +94 -26
  48. data/README.markdown +0 -154
data/lib/asset_hat.rb CHANGED
@@ -2,19 +2,66 @@
2
2
  require File.join(File.dirname(__FILE__), 'asset_hat', x)
3
3
  end
4
4
 
5
+ # Your assets are covered.
6
+ #
7
+ # With Rails' default asset caching, CSS and JS are concatenated (not even
8
+ # minified) the first time that bundle is requested. Not good enough. AssetHat
9
+ # can automatically:
10
+ #
11
+ # * Easily *minify* and *bundle* CSS and JS on deploy to reduce file sizes and
12
+ # HTTP requests.
13
+ # * Load popular <strong>third-party JS</strong> (like jQuery and Prototype)
14
+ # from {<strong>Google's CDN</strong>}[http://code.google.com/apis/ajaxlibs/]
15
+ # when in production, or from localhost in development.
16
+ # * Force image URLs in your CSS to use <strong>CDN subdomains</strong>, not
17
+ # just the current host.
18
+ # * Add an image's last Git[http://git-scm.com/] commit ID to its CSS URLs to
19
+ # <strong>bust browser caches</strong> (e.g.,
20
+ # <code>/images/foo.png?ab12cd34e</code>).
21
+ #
22
+ # After setup, you can use these in your layouts and views:
23
+ #
24
+ # <%= include_css :bundle => 'application' %>
25
+ # # => <link href="/stylesheets/bundles/application.min.css"
26
+ # # media="screen,projection" rel="stylesheet" type="text/css" />
27
+ #
28
+ # <%= include_js :bundles => ['plugins', 'common'] %>
29
+ # # => <script src="/javascripts/bundles/plugins.min.js"
30
+ # # type="text/javascript"></script>
31
+ # # <script src="/javascripts/bundles/common.min.js"
32
+ # # type="text/javascript"></script>
33
+ #
34
+ # And this in your deploy script:
35
+ #
36
+ # rake asset_hat:minify
37
+ #
38
+ # See README.rdoc for more.
5
39
  module AssetHat
6
- RAILS_ROOT = File.join(File.dirname(__FILE__), '..') unless defined?(RAILS_ROOT)
7
- TYPES = [:css, :js]
8
- ASSETS_DIR = defined?(Rails.public_path) ? Rails.public_path : 'public'
9
- JAVASCRIPTS_DIR = "#{ASSETS_DIR}/javascripts"
40
+ RAILS_ROOT = File.join(File.dirname(__FILE__), '..') unless defined?(RAILS_ROOT) #:nodoc:
41
+
42
+ # Types of supported assets; currently <code>[:css, :js]</code>.
43
+ TYPES = [:css, :js]
44
+
45
+ # Base directory in which all assets are kept, e.g., 'public/'.
46
+ ASSETS_DIR = defined?(Rails.public_path) ? Rails.public_path : 'public'
47
+
48
+ # Directory in which all stylesheets are kept, e.g., 'public/stylesheets/'.
10
49
  STYLESHEETS_DIR = "#{ASSETS_DIR}/stylesheets"
50
+
51
+ # Directory in which all JavaScripts are kept, e.g., 'public/javascripts/'.
52
+ JAVASCRIPTS_DIR = "#{ASSETS_DIR}/javascripts"
53
+
54
+ # Relative path for the config file.
11
55
  RELATIVE_CONFIG_FILEPATH = File.join('config', 'assets.yml')
56
+
57
+ # Absolute path for the config file.
12
58
  CONFIG_FILEPATH = File.join(RAILS_ROOT, RELATIVE_CONFIG_FILEPATH)
13
59
 
14
60
  class << self
15
- attr_accessor :config, :asset_exists, :html_cache
61
+ attr_accessor :config, :asset_exists, :html_cache #:nodoc:
16
62
  end
17
63
 
64
+ # Nested-hash version of <code>config/assets.yml</code>.
18
65
  def self.config
19
66
  if !cache? || @config.blank?
20
67
  @config = YAML.load(File.open(CONFIG_FILEPATH, 'r'))
@@ -22,6 +69,9 @@ module AssetHat
22
69
  @config
23
70
  end
24
71
 
72
+ # Argument: <code>:css</code> or <code>:js</code>
73
+ #
74
+ # Returns the path to the directory where CSS or JS files are stored.
25
75
  def self.assets_dir(type)
26
76
  case type.to_sym
27
77
  when :css ; STYLESHEETS_DIR
@@ -30,6 +80,15 @@ module AssetHat
30
80
  end
31
81
  end
32
82
 
83
+ # Returns true if the specified asset exists in the file system:
84
+ #
85
+ # AssetHat.asset_exists?('application', :css)
86
+ # # => true if /public/stylesheets/application.css exists
87
+ # AssetHat.asset_exists?('some-plugin', :js)
88
+ # # => true if /public/javascripts/some-plugin.js exists
89
+ #
90
+ # See also <code>AssetHat::STYLESHEETS_DIR</code> and
91
+ # <code>AssetHat::JAVASCRIPTS_DIR</code>.
33
92
  def self.asset_exists?(filename, type)
34
93
  # Process arguments
35
94
  type = type.to_sym
@@ -48,20 +107,31 @@ module AssetHat
48
107
  @asset_exists[type][filename]
49
108
  end
50
109
 
110
+ # Returns <code>true</code> if bundles should be included as single minified
111
+ # files (e.g., in production), or <code>false</code> if bundles should be
112
+ # included as separate, unminified files (e.g., in development). To modify
113
+ # this value, set <code>config.action_controller.perform_caching = true</code>
114
+ # in your environment.
51
115
  def self.cache? ; ActionController::Base.perform_caching ; end
52
116
 
117
+ # Returns the expected path for the minified version of an asset:
118
+ #
119
+ # AssetHat.min_filepath('public/stylesheets/bundles/application.css', 'css')
120
+ # # => 'public/stylesheets/bundles/application.min.css'
121
+ #
122
+ # See also <code>AssetHat::CSS.min_filepath</code> and
123
+ # <code>AssetHat::JS.min_filepath</code>.
53
124
  def self.min_filepath(filepath, extension)
54
125
  filepath.sub(/([^\.]*).#{extension}$/, "\\1.min.#{extension}")
55
126
  end
56
127
 
128
+ # Returns the extension-less names of files in the given bundle:
129
+ #
130
+ # AssetHat.bundle_filenames('application', :css)
131
+ # # => ['reset', 'application', 'clearfix']
132
+ # AssetHat.bundle_filenames('non-existent-file', :css)
133
+ # # => nil
57
134
  def self.bundle_filenames(bundle, type)
58
- # Usage:
59
- #
60
- # AssetHat.bundle_filenames('application', :css)
61
- # # => ['reset', 'application', 'clearfix']
62
- # AssetHat.bundle_filenames('non-existent-file', :css)
63
- # # => nil
64
-
65
135
  # Process arguments
66
136
  unless TYPES.include?(type.to_sym)
67
137
  raise "Unknown type \"#{type}\"; should be one of: #{TYPES.join(', ')}."
@@ -71,14 +141,15 @@ module AssetHat
71
141
  self.config[type.to_s]['bundles'][bundle] rescue nil
72
142
  end
73
143
 
144
+ # Returns the full paths of files in the given bundle:
145
+ #
146
+ # AssetHat.bundle_filenames('application', :css)
147
+ # # => ['/path/to/app/public/stylesheets/reset.css',
148
+ # '/path/to/app/public/stylesheets/application.css',
149
+ # '/path/to/app/public/stylesheets/clearfix.css']
150
+ # AssetHat.bundle_filenames('non-existent-file', :css)
151
+ # # => nil
74
152
  def self.bundle_filepaths(bundle, type)
75
- # Usage:
76
- #
77
- # AssetHat.bundle_filenames('application', :css)
78
- # # => ['reset', 'application', 'clearfix']
79
- # AssetHat.bundle_filenames('non-existent-file', :css)
80
- # # => nil
81
-
82
153
  # Process arguments
83
154
  unless TYPES.include?(type.to_sym)
84
155
  raise "Unknown type \"#{type}\"; should be one of: #{TYPES.join(', ')}."
@@ -91,4 +162,8 @@ module AssetHat
91
162
  filenames.map { |fn| File.join(dir, "#{fn}.#{type}") } : nil
92
163
  end
93
164
 
165
+ def self.clear_html_cache
166
+ html_cache = {}
167
+ end
168
+
94
169
  end
data/tasks/asset_hat.rake CHANGED
@@ -1 +1 @@
1
- require File.join(File.dirname(__FILE__), %w[.. lib asset_hat tasks])
1
+ require 'asset_hat/tasks'
@@ -124,20 +124,74 @@ class AssetHatHelperTest < ActionView::TestCase
124
124
  assert_equal js_tag("jquery.some-plugin.min.js?#{@commit_id}"), output
125
125
  end
126
126
 
127
- should 'include jQuery' do
128
- version = AssetHat::JS::Vendors::JQUERY_DEFAULT_VERSION
129
- output = include_js(:jquery, :cache => true)
130
- assert_equal(
131
- js_tag("jquery-#{version}.min.js?#{@commit_id}"), output)
132
- end
133
-
134
- should 'include jQuery by version' do
135
- version = '1.3.2'
127
+ context 'with vendors' do
128
+ should 'know where to find each vendor file' do
129
+ AssetHat::JS::VENDORS.each do |vendor|
130
+ assert include_js(vendor, :cache => true).present?
131
+ end
132
+ end
133
+
134
+ should 'include jQuery and jQuery UI' do
135
+ flexmock(AssetHat).should_receive(:config => @original_config)
136
+ [:jquery, :jquery_ui].each do |vendor|
137
+ output = include_js(vendor, :cache => true)
138
+ assert_equal js_tag("#{vendor.to_s.dasherize}.min.js?#{@commit_id}"), output
139
+ end
140
+ end
141
+
142
+ should 'include Prototype and script.aculo.us' do
143
+ [:prototype, :scriptaculous].each do |vendor|
144
+ output = include_js(vendor, :cache => true)
145
+ assert_equal js_tag("#{vendor}.js?#{@commit_id}"), output
146
+ # N.B.: Including only the regular, not minified, version
147
+ end
148
+ end
149
+ end # context 'with vendor JS'
150
+
151
+ should 'include jQuery by version via helper option' do
152
+ version = '1.4.1'
136
153
  output = include_js(:jquery, :version => version, :cache => true)
137
154
  assert_equal(
138
155
  js_tag("jquery-#{version}.min.js?#{@commit_id}"), output)
139
156
  end
140
157
 
158
+ context 'with a mock config' do
159
+ setup do
160
+ version = '1.4.1'
161
+ config = AssetHat.config
162
+ config['js']['vendors'] = {
163
+ 'jquery' => {
164
+ 'version' => version,
165
+ 'remote_url' => 'http://example.com/cdn/jquery.min.js'
166
+ }
167
+ }
168
+ flexmock(AssetHat).should_receive(:config => config)
169
+ end
170
+
171
+ should 'include jQuery by version via config file' do
172
+ version = AssetHat.config['js']['vendors']['jquery']['version']
173
+ assert_equal(
174
+ js_tag("jquery-#{version}.min.js?#{@commit_id}"),
175
+ include_js(:jquery, :cache => true)
176
+ )
177
+ end
178
+
179
+ context 'with remote requests' do
180
+ setup do
181
+ flexmock(ActionController::Base).should_receive(
182
+ :consider_all_requests_local => false)
183
+ end
184
+
185
+ should 'use specified remote URL for jQuery' do
186
+ src = AssetHat.config['js']['vendors']['jquery']['remote_url']
187
+ assert_equal(
188
+ %Q{<script src="#{src}" type="text/javascript"></script>},
189
+ include_js(:jquery, :cache => true)
190
+ )
191
+ end
192
+ end # context 'with remote requests'
193
+ end # context 'with a mock config'
194
+
141
195
  should 'include multiple files by name' do
142
196
  flexmock(AssetHat).should_receive(:asset_exists?).and_return(true)
143
197
  expected = %w[foo jquery.bar].map do |source|
data/test/test_helper.rb CHANGED
@@ -22,10 +22,14 @@ unless defined?(Rails)
22
22
  end
23
23
  end
24
24
 
25
+ @original_config = AssetHat.config
26
+ # Use this when FlexMock refuses to teardown automatically. (Yes,
27
+ # this is ugly.)
28
+
25
29
  class ActionView::TestCase
26
30
  teardown :clear_html_cache
27
31
 
28
32
  def clear_html_cache
29
- AssetHat.html_cache = {}
33
+ AssetHat.clear_html_cache
30
34
  end
31
35
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asset_hat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Ron DeVera
@@ -10,49 +15,79 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2010-03-11 00:00:00 -05:00
18
+ date: 2010-06-10 00:00:00 -04:00
14
19
  default_executable:
15
20
  dependencies:
16
21
  - !ruby/object:Gem::Dependency
17
- name: shoulda
18
- type: :development
19
- version_requirement:
20
- version_requirements: !ruby/object:Gem::Requirement
22
+ name: flexmock
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
21
25
  requirements:
22
26
  - - ">="
23
27
  - !ruby/object:Gem::Version
24
- version: 2.10.2
25
- version:
28
+ segments:
29
+ - 0
30
+ - 8
31
+ - 6
32
+ version: 0.8.6
33
+ type: :development
34
+ version_requirements: *id001
26
35
  - !ruby/object:Gem::Dependency
27
- name: flexmock
36
+ name: hanna
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 0
44
+ - 1
45
+ - 12
46
+ version: 0.1.12
28
47
  type: :development
29
- version_requirement:
30
- version_requirements: !ruby/object:Gem::Requirement
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: shoulda
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
31
53
  requirements:
32
54
  - - ">="
33
55
  - !ruby/object:Gem::Version
34
- version: 0.8.6
35
- version:
56
+ segments:
57
+ - 2
58
+ - 10
59
+ - 2
60
+ version: 2.10.2
61
+ type: :development
62
+ version_requirements: *id003
36
63
  - !ruby/object:Gem::Dependency
37
64
  name: cssmin
38
- type: :runtime
39
- version_requirement:
40
- version_requirements: !ruby/object:Gem::Requirement
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
41
67
  requirements:
42
68
  - - ">="
43
69
  - !ruby/object:Gem::Version
70
+ segments:
71
+ - 1
72
+ - 0
73
+ - 2
44
74
  version: 1.0.2
45
- version:
75
+ type: :runtime
76
+ version_requirements: *id004
46
77
  - !ruby/object:Gem::Dependency
47
78
  name: jsmin
48
- type: :runtime
49
- version_requirement:
50
- version_requirements: !ruby/object:Gem::Requirement
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
51
81
  requirements:
52
82
  - - ">="
53
83
  - !ruby/object:Gem::Version
84
+ segments:
85
+ - 1
86
+ - 0
87
+ - 1
54
88
  version: 1.0.1
55
- version:
89
+ type: :runtime
90
+ version_requirements: *id005
56
91
  description: Minify, bundle, and optimize CSS/JS assets.
57
92
  email: ronald.devera@gmail.com
58
93
  executables: []
@@ -61,21 +96,52 @@ extensions: []
61
96
 
62
97
  extra_rdoc_files:
63
98
  - LICENSE
64
- - README.markdown
99
+ - README.rdoc
65
100
  files:
66
101
  - .gitignore
67
102
  - HISTORY
68
103
  - LICENSE
69
- - README.markdown
104
+ - README.rdoc
70
105
  - Rakefile
71
106
  - VERSION.yml
72
107
  - app/helpers/asset_hat_helper.rb
73
108
  - asset_hat.gemspec
74
109
  - config/assets.yml
110
+ - doc/classes/AssetHat.html
111
+ - doc/classes/AssetHat/CSS.html
112
+ - doc/classes/AssetHat/CSS/Engines.html
113
+ - doc/classes/AssetHat/JS.html
114
+ - doc/classes/AssetHat/JS/Engines.html
115
+ - doc/classes/AssetHat/JS/Vendors.html
116
+ - doc/classes/AssetHatHelper.html
117
+ - doc/created.rid
118
+ - doc/files/HISTORY.html
119
+ - doc/files/LICENSE.html
120
+ - doc/files/README_rdoc.html
121
+ - doc/files/app/helpers/asset_hat_helper_rb.html
122
+ - doc/files/lib/asset_hat/capistrano_rb.html
123
+ - doc/files/lib/asset_hat/css_rb.html
124
+ - doc/files/lib/asset_hat/js/vendors_rb.html
125
+ - doc/files/lib/asset_hat/js_rb.html
126
+ - doc/files/lib/asset_hat/tasks/css_rb.html
127
+ - doc/files/lib/asset_hat/tasks/js_rb.html
128
+ - doc/files/lib/asset_hat/tasks_rb.html
129
+ - doc/files/lib/asset_hat/vcs_rb.html
130
+ - doc/files/lib/asset_hat/version_rb.html
131
+ - doc/files/lib/asset_hat_rb.html
132
+ - doc/fr_class_index.html
133
+ - doc/fr_file_index.html
134
+ - doc/fr_method_index.html
135
+ - doc/index.html
136
+ - doc/rdoc-style.css
75
137
  - lib/asset_hat.rb
138
+ - lib/asset_hat/capistrano.rb
76
139
  - lib/asset_hat/css.rb
77
140
  - lib/asset_hat/js.rb
141
+ - lib/asset_hat/js/vendors.rb
78
142
  - lib/asset_hat/tasks.rb
143
+ - lib/asset_hat/tasks/css.rb
144
+ - lib/asset_hat/tasks/js.rb
79
145
  - lib/asset_hat/vcs.rb
80
146
  - lib/asset_hat/version.rb
81
147
  - public/javascripts/bundles/js-bundle-1.min.js
@@ -120,18 +186,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
120
186
  requirements:
121
187
  - - ">="
122
188
  - !ruby/object:Gem::Version
189
+ segments:
190
+ - 0
123
191
  version: "0"
124
- version:
125
192
  required_rubygems_version: !ruby/object:Gem::Requirement
126
193
  requirements:
127
194
  - - ">="
128
195
  - !ruby/object:Gem::Version
196
+ segments:
197
+ - 0
129
198
  version: "0"
130
- version:
131
199
  requirements: []
132
200
 
133
201
  rubyforge_project:
134
- rubygems_version: 1.3.5
202
+ rubygems_version: 1.3.6
135
203
  signing_key:
136
204
  specification_version: 3
137
205
  summary: Your assets are covered.
data/README.markdown DELETED
@@ -1,154 +0,0 @@
1
- AssetHat
2
- ========
3
- Your assets are covered.
4
-
5
- * Minify CSS and JS with one command. (Can be done on deploy instead of
6
- at runtime.)
7
- * Bundle CSS and JS to reduce HTTP requests.
8
- * Reuse CSS and JS bundles across layouts without repetition.
9
- * Bust image caches by changing CSS URLs whenever an image is modified.
10
- * Force image URLs in your CSS to use CDN subdomains, not just the current
11
- host.
12
-
13
- After setup, you can use these in your layouts and views:
14
-
15
- include_css :bundle => 'application'
16
- # => <link href="/stylesheets/bundles/application.min.css"
17
- # media="screen,projection" rel="stylesheet" type="text/css" />
18
-
19
- include_js :bundles => ['plugins', 'common']
20
- # => <script src="/javascripts/bundles/plugins.min.js"
21
- # type="text/javascript"></script>
22
- # <script src="/javascripts/bundles/common.min.js"
23
- # type="text/javascript"></script>
24
-
25
- And this in your deploy script:
26
-
27
- rake asset_hat:minify
28
-
29
- Works with Rails 2.3.4 and above.
30
-
31
-
32
-
33
- Installation
34
- ------------
35
-
36
- 1. Install the gem:
37
-
38
- gem install asset_hat
39
-
40
- 2. Configure the gem:
41
-
42
- * Using [Bundler](http://github.com/wycats/bundler):
43
-
44
- 1. Add to your app's Gemfile: `gem 'asset_hat', '0.x.x'`
45
-
46
- 2. Command-line: `gem bundle`
47
-
48
- * Using Rails' `config.gem`, add to your app's `config/environment.rb`:
49
-
50
- `config.gem 'asset_hat', :version => '0.x.x'`
51
-
52
- 3. In your app, create `lib/tasks/asset_hat.rake` with the following contents:
53
-
54
- begin
55
- require 'asset_hat/tasks'
56
- rescue LoadError
57
- puts "Could not load AssetHat tasks: 'asset_hat' not found."
58
- end
59
-
60
-
61
-
62
- Configuration
63
- -------------
64
-
65
- 1. Create the default config file:
66
-
67
- rake asset_hat:config
68
-
69
- 2. In your app, open the new config file at `config/assets.yml`, and set up
70
- your CSS/JS bundles according to that file's example.
71
-
72
- 3. Minify your bundles:
73
-
74
- rake asset_hat:minify
75
-
76
- This minifies all of the CSS/JS files listed in `config/assets.yml`,
77
- concatenates the minified code into bundle files, and adds CDN asset hosts
78
- and cache-busting commit IDs to image URLs in your CSS.
79
-
80
- Bundles are created as new files in `public/stylesheets/bundles/` and
81
- `public/javascripts/bundles/`. Your original CSS/JS files remain intact.
82
-
83
- 4. Set your deployment script to run `rake asset_hat:minify` after deploying
84
- your latest CSS/JS. This overwrites previously minified bundles, and
85
- leaves your original CSS/JS files intact.
86
-
87
- ### Advanced configuration ###
88
-
89
- Additional settings are supported in `config/assets.yml`:
90
-
91
- * `engine`: Indicates how CSS and JS are minified; omit this setting to use
92
- the defaults. If the default engines cause problems by minifying too
93
- strongly, try switching each to `weak`. The `weak` engines are much safer,
94
- but don't save as many bytes.
95
-
96
- * `vendors`: Currently only allows for setting the jQuery version number:
97
-
98
- js:
99
- vendors:
100
- jquery:
101
- version: 1.4
102
-
103
- In the future, this will be used for configuring the retrieval of other
104
- third-party code.
105
-
106
-
107
-
108
- Usage
109
- -----
110
-
111
- In your layouts and views, instead of these:
112
-
113
- <%= stylesheet_link_tag 'reset', 'application', 'clearfix',
114
- :media => 'screen,projection',
115
- :cache => 'bundles/application' %>
116
- <%= javascript_include_tag 'plugin-1', 'plugin-2', 'plugin-3',
117
- :cache => 'bundles/application' %>
118
-
119
- **Use these:**
120
-
121
- <%= include_css :bundle => 'application' %>
122
- <%= include_js :bundle => 'application' %>
123
-
124
- These turn into:
125
-
126
- <link href="/stylesheets/bundles/application.min.css"
127
- media="screen,projection" rel="stylesheet" type="text/css" />
128
- <script src="/javascripts/bundles/application.min.js"
129
- type="text/javascript"></script>
130
-
131
- If your environment has `config.action_controller.perform_caching` set to
132
- `true` (e.g., in production), the layout/view will include minified bundle
133
- files. Otherwise, the separate, unminified files will be included, based on
134
- the bundle contents you define in `config/assets.yml`.
135
-
136
- ### Advanced usage ###
137
-
138
- You can also include single files as expected:
139
-
140
- <%= include_css 'reset', 'application' %>
141
- <%= include_js 'plugin.min', 'application' %>
142
-
143
- Or include multiple bundles at once:
144
-
145
- <%= include_js :bundles => %w[plugins common] %>
146
-
147
- When including multiple bundles at once, this yields one `<link>` or
148
- `<script>` element per bundle.
149
-
150
- You may want to use multiple bundles to separate plugins (rarely changed) from
151
- application code (frequently changed). If all code is in one huge bundle, then
152
- whenever there's a change, browsers have to re-download the whole bundle. By
153
- using multiple bundles based on change frequency, browsers cache the rarely
154
- changed code, and only re-download the frequently changed code.