dynamic_assets 0.3.0 → 0.3.1

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/README.rdoc CHANGED
@@ -82,6 +82,7 @@ dynamically is useful enough that multiple people have thought of implementing i
82
82
  - app:
83
83
  - reset
84
84
  - application
85
+ - sidebar
85
86
  - admin
86
87
  - reset
87
88
  - application
@@ -104,9 +105,20 @@ dynamically is useful enough that multiple people have thought of implementing i
104
105
  <%= javascript_asset_tag :base %>
105
106
 
106
107
  wherever you want your script tags to appear. The symbol argument to each
107
- helper is the name of the group you defined in assets.yml. The helper will
108
- produce one tag if the assets are combined, or multiple tags if they're not,
109
- like the cowboy in <i>Mulholland Dr.</i>
108
+ helper is the name of the group you defined in assets.yml. Each helper will
109
+ generate one tag if the assets are combined or multiple tags if they're
110
+ not, much like the cowboy in <i>Mulholland Dr.</i>. For example, if your
111
+ assets.yml says to combine asset groups, stylesheet_asset_tag(:base) will
112
+ insert this one tag into your page:
113
+
114
+ <link href="/assets/stylesheets/base_v2.css?1302901941" media="screen" rel="stylesheet" type="text/css" />
115
+
116
+ but if your assets.yml says not to combine them, stylesheet_asset_tag(:base)
117
+ will insert one tag per CSS file:
118
+
119
+ <link href="/assets/stylesheets/reset.css?1302901941" media="screen" rel="stylesheet" type="text/css" />
120
+ <link href="/assets/stylesheets/application.css?1302901941" media="screen" rel="stylesheet" type="text/css" />
121
+ <link href="/assets/stylesheets/sidebar.css?1302901900" media="screen" rel="stylesheet" type="text/css" />
110
122
 
111
123
 
112
124
  == Variables for ERB
@@ -132,18 +144,18 @@ Now in app/assets/stylesheets/application.css.erb you could do this:
132
144
  }
133
145
 
134
146
 
135
- == Static Images Embedded in CSS
147
+ == Static Image URLs Embedded in CSS
136
148
 
137
- Sometimes you'll install a JavaScript plugin that was created by someone
138
- else, and it will come with a stylesheet and images. The stylesheet may
139
- reference an image like this:
149
+ Suppose you install a JavaScript plugin that comes with a stylesheet and
150
+ some images. The stylesheet, thing.css, may reference one of its images
151
+ like this:
140
152
 
141
153
  div.thing {
142
154
  background: url(fancy_background.png);
143
155
  }
144
156
 
145
157
  Browsers will find the image by looking in the same URL path as the
146
- stylesheet, so in a typical Rails environment, you might add these two
158
+ stylesheet, so in a typical Rails environment, you might add these
147
159
  files to your app as public/stylesheets/thing.css and
148
160
  public/stylesheets/fancy_background.png.
149
161
 
@@ -156,6 +168,15 @@ and the processor will make sure the embedded URL is turned into a fully
156
168
  qualified one that will allow the browser to find
157
169
  /stylesheets/thing/fancy_background.png.
158
170
 
171
+ Or, if you prefer to keep your third-party images cleanly separated from
172
+ your own, you could put them in a subdirectory:
173
+
174
+ app/assets/stylesheets/third-party/thing.css
175
+ public/stylesheets/third-party/thing/fancy_background.png
176
+
177
+ DynamicAssets expects the images that belong to an asset to be in a
178
+ parallel directory structure under public/stylesheets.
179
+
159
180
  == CSS Media Types
160
181
 
161
182
  If you have different CSS files for printing than for the screen, create
@@ -164,37 +185,44 @@ separate groups in your assets.yml. Then include both groups in your layout:
164
185
  <%= stylesheet_asset_tag :app %>
165
186
  <%= stylesheet_asset_tag :app_printing, :media => "print" %>
166
187
 
188
+ If no :media attribute is supplied, stylesheet_asset_tag will use "screen".
189
+
190
+
167
191
  == Performance
168
192
 
169
193
  In production, assets can typically be cached aggressively. Like Rails,
170
194
  dynamic_assets adds a URL parameter to the asset path that will change
171
195
  if any of the underlying assets is modified, forcing clients to reload
172
- the asset. In production, I find dynamic assets to be quite speedy.
196
+ the asset. With action caching and/or an external cache like Varnish or
197
+ a CDN, dynamic assets are quite speedy because you generate them rarely.
173
198
 
174
- But dynamic assets can sometimes be annoying during development. The
175
- sweet spot for my dev environment is to combine assets but not to
176
- minify or cache them (see assets.yml above). Here's why:
199
+ But during development they can be annoying <em>if</em> you set your
200
+ environment to maximum slowness. The sweet spot for my dev configuration
201
+ is to combine assets but not to minify or cache them (as shown in the
202
+ assets.yml above). Here's why:
177
203
 
178
- === Usually set assets not to be minified in development
204
+ === Set assets not to be minified in development, usually
179
205
 
180
- I usually leave minification off in development, because it does add some
181
- overhead to each asset request, and it makes them difficult to read if you
182
- need to debug them (like with Firebug). In production, caching minimizes
183
- the overhead, but you typically won't cache your assets in development,
184
- unless you're some sort of nut.
206
+ I usually leave minification off in development, because it can add some
207
+ overhead to each asset request, and it makes the assets difficult to read
208
+ if you need to debug them (like with Firebug). In production, caching
209
+ virtually eliminates the overhead on all requests after the first one, but
210
+ you typically won't cache your assets in development, unless you're some
211
+ sort of nut.
185
212
 
186
213
  === Set assets to be combined, even in development and especially in test
187
214
 
188
- By default Rails reloads all classes with each new request in development
189
- mode. If you're not combining all of your assets, a single page load
190
- will result in an additional request to your app for each asset, which
191
- may result in a dozen requests to your dev server for one page, and each
192
- one will reload all of your classes. Combining assets in dev reduces the
193
- number of requests, shrinking your page load time. And unlike minification,
194
- using combined assets in dev is usually not a problem because the concatenated
195
- files are still quite readable. The one exception is that it makes it more
196
- difficult to find out which asset file includes the problem you're hunting
197
- down.
215
+ By default, in development, Rails reloads all classes with each new request.
216
+ (This is controlled by the cache_classes config parameter.) So if you're not
217
+ combining all of your assets, a single page load will result in an additional
218
+ request to your app <em>for each asset</em>, which may result in a dozen
219
+ requests to your dev server for each page, and each of those dozen requests
220
+ will reload all of your classes. Combining assets in dev reduces the number
221
+ of requests, shrinking your page load time. And unlike minification, using
222
+ combined assets in dev is usually not a problem, even when you're debugging
223
+ them, because the concatenated files are still quite readable. The one
224
+ exception is that combined files can make it difficult to find out which
225
+ asset file includes the problem you're hunting down.
198
226
 
199
227
  <em>Note that one advantage of using DynamicAssets</em> instead of a
200
228
  deploy-time task is that you can get more exposure to your processed JavaScript.
@@ -205,18 +233,19 @@ more code, tacked on from another file.)
205
233
 
206
234
  Call me silly, but I prefer to find out about that kind of error before I
207
235
  deploy my app, and with DynamicAssets I can easily set my test environment to
208
- combine and minify, so any full-stack testing will expose the problem.
236
+ combine and minify, so full-stack testing will expose the problem.
209
237
 
210
- === Or, to eliminate the biggest bottleneck, turn off class caching in development
238
+ === To eliminate the biggest bottleneck, turn off class caching in development (but...)
211
239
 
212
- If you don't mind to restart your server every time you change a
213
- bit of Ruby code, you could edit your config/environments/development.rb
240
+ If (big if) you don't mind restarting your server every time you change a
241
+ bit of Ruby code, you <em>could</em> edit your config/environments/development.rb
214
242
  to do this
215
243
 
216
244
  config.cache_classes = true
217
245
 
218
246
  which would eliminate the biggest chunk of overhead in dev, class-reloading
219
- on every request.
247
+ on every request. And if you're doing that, you might as well set your asset
248
+ files to be cached, too, in your assets.yml.
220
249
 
221
250
 
222
251
  == Copyright
@@ -27,3 +27,15 @@ class Object
27
27
  end
28
28
 
29
29
  end
30
+
31
+ class File
32
+
33
+ def self.find_existing(paths)
34
+ paths.each do |path|
35
+ return path if File.exists? path
36
+ end
37
+
38
+ nil
39
+ end
40
+
41
+ end
@@ -43,7 +43,10 @@ module DynamicAssets
43
43
  end
44
44
 
45
45
  def member_root
46
- "#{Rails.root}/app/assets/#{type.to_s}"
46
+ return @member_root if @member_root
47
+
48
+ possible_roots = ["#{Rails.root}/app/assets/#{type.to_s}", "#{Rails.root}/app/views/#{type.to_s}"]
49
+ @member_root = File.find_existing(possible_roots) || possible_roots.first
47
50
  end
48
51
 
49
52
  # Optionally pass context from which ERB can pull instance variables.
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamic_assets
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 0
10
- version: 0.3.0
9
+ - 1
10
+ version: 0.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Robert Davis
@@ -112,7 +112,7 @@ dependencies:
112
112
  - 0
113
113
  version: "0"
114
114
  requirement: *id006
115
- description: Make your Rails 3 app package and process CSS and JS assets on the fly
115
+ description: Allow your Rails 3 app to package and process your CSS and JS assets on the fly.
116
116
  email: davis@coaster.com
117
117
  executables: []
118
118
 
@@ -192,7 +192,7 @@ rubyforge_project:
192
192
  rubygems_version: 1.3.7
193
193
  signing_key:
194
194
  specification_version: 3
195
- summary: Make your Rails 3 app package and process CSS and JS assets on the fly
195
+ summary: Allow your Rails 3 app to package and process your CSS and JS assets on the fly.
196
196
  test_files:
197
197
  - spec/dummy_rails_app/app/controllers/application_controller.rb
198
198
  - spec/dummy_rails_app/app/helpers/application_helper.rb