asset_hat 0.3.1 → 0.4.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 (52) hide show
  1. data/Gemfile +2 -0
  2. data/Gemfile.lock +37 -0
  3. data/HISTORY +10 -0
  4. data/README.rdoc +117 -75
  5. data/Rakefile +4 -4
  6. data/VERSION.yml +2 -2
  7. data/asset_hat.gemspec +69 -7
  8. data/config/assets.yml +46 -24
  9. data/doc/classes/AssetHat.html +183 -118
  10. data/doc/classes/AssetHat/CSS.html +21 -21
  11. data/doc/classes/AssetHat/CSS/Engines.html +10 -10
  12. data/doc/classes/AssetHat/JS.html +13 -13
  13. data/doc/classes/AssetHat/JS/Engines.html +10 -10
  14. data/doc/classes/AssetHat/JS/Vendors.html +85 -22
  15. data/doc/classes/AssetHatHelper.html +94 -19
  16. data/doc/created.rid +1 -1
  17. data/doc/files/HISTORY.html +20 -2
  18. data/doc/files/LICENSE.html +1 -1
  19. data/doc/files/README_rdoc.html +87 -31
  20. data/doc/files/lib/asset_hat/capistrano_rb.html +1 -1
  21. data/doc/files/lib/asset_hat/css_rb.html +1 -1
  22. data/doc/files/lib/asset_hat/initializers/action_view_rb.html +49 -0
  23. data/doc/files/lib/asset_hat/initializers/cache_last_commit_ids_rb.html +49 -0
  24. data/doc/files/lib/asset_hat/js/vendors_rb.html +1 -1
  25. data/doc/files/lib/asset_hat/js_rb.html +1 -1
  26. data/doc/files/lib/asset_hat/railtie_rb.html +61 -0
  27. data/doc/files/lib/asset_hat/tasks/css_rb.html +1 -1
  28. data/doc/files/lib/asset_hat/tasks/js_rb.html +1 -1
  29. data/doc/files/lib/asset_hat/tasks_rb.html +2 -1
  30. data/doc/files/lib/asset_hat/unicorn_rb.html +58 -0
  31. data/doc/files/lib/asset_hat/vcs_rb.html +1 -1
  32. data/doc/files/lib/asset_hat/version_rb.html +1 -1
  33. data/doc/files/{app/helpers → lib}/asset_hat_helper_rb.html +3 -3
  34. data/doc/files/lib/asset_hat_rb.html +9 -1
  35. data/doc/files/lib/tasks/asset_hat_rake.html +54 -0
  36. data/doc/fr_file_index.html +6 -1
  37. data/doc/fr_method_index.html +60 -52
  38. data/lib/asset_hat.rb +104 -59
  39. data/lib/asset_hat/initializers/action_view.rb +1 -0
  40. data/lib/asset_hat/initializers/cache_last_commit_ids.rb +1 -0
  41. data/lib/asset_hat/js/vendors.rb +198 -72
  42. data/lib/asset_hat/railtie.rb +19 -0
  43. data/lib/asset_hat/tasks.rb +5 -2
  44. data/lib/asset_hat/unicorn.rb +9 -0
  45. data/lib/asset_hat/vcs.rb +3 -2
  46. data/{app/helpers → lib}/asset_hat_helper.rb +184 -29
  47. data/{tasks → lib/tasks}/asset_hat.rake +0 -0
  48. data/rails/init.rb +2 -2
  49. data/test/asset_hat_helper_test.rb +731 -148
  50. data/test/asset_hat_test.rb +23 -2
  51. data/test/test_helper.rb +4 -8
  52. metadata +311 -30
@@ -46,10 +46,10 @@
46
46
  <h2>Methods</h2>
47
47
  <h3>public class</h3>
48
48
  <ol>
49
- <li><a href="#M000018">add_asset_commit_ids</a></li>
50
- <li><a href="#M000019">add_asset_hosts</a></li>
51
- <li><a href="#M000016">min_filepath</a></li>
52
- <li><a href="#M000017">minify</a></li>
49
+ <li><a href="#M000021">add_asset_commit_ids</a></li>
50
+ <li><a href="#M000022">add_asset_hosts</a></li>
51
+ <li><a href="#M000019">min_filepath</a></li>
52
+ <li><a href="#M000020">minify</a></li>
53
53
  </ol>
54
54
  </div>
55
55
  <div id='section'>
@@ -76,8 +76,8 @@
76
76
  </div>
77
77
  <div id='methods'>
78
78
  <h2>Public class methods</h2>
79
- <div class='method public-class' id='method-M000018'>
80
- <a name='M000018'></a>
79
+ <div class='method public-class' id='method-M000021'>
80
+ <a name='M000021'></a>
81
81
  <div class='synopsis'>
82
82
  <span class='name'>add_asset_commit_ids</span>
83
83
  <span class='arguments'>(css)</span>
@@ -93,14 +93,14 @@
93
93
  </p>
94
94
  </div>
95
95
  <div class='source'>
96
- <a class='source-toggle' href='#' onclick="toggleCode('M000018-source'); return false">
96
+ <a class='source-toggle' href='#' onclick="toggleCode('M000021-source'); return false">
97
97
  [show source]
98
98
  </a>
99
- <pre id='M000018-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 43</span>&#x000A;43: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">add_asset_commit_ids</span>(<span class="ruby-identifier">css</span>)&#x000A;44: <span class="ruby-identifier">update_css_urls</span>(<span class="ruby-identifier">css</span>, <span class="ruby-node">%w[images htc]</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">src</span>, <span class="ruby-identifier">quote</span><span class="ruby-operator">|</span>&#x000A;45: <span class="ruby-comment cmt"># Get absolute path</span>&#x000A;46: <span class="ruby-identifier">filepath</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">ASSETS_DIR</span>, <span class="ruby-identifier">src</span>)&#x000A;47: &#x000A;48: <span class="ruby-comment cmt"># Convert to relative path</span>&#x000A;49: <span class="ruby-identifier">filepath</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-node">/^#{FileUtils.pwd}#{File::SEPARATOR}/</span>, <span class="ruby-value str">''</span>)&#x000A;50: &#x000A;51: <span class="ruby-identifier">commit_id</span> = <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">last_commit_id</span>(<span class="ruby-identifier">filepath</span>)&#x000A;52: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">commit_id</span>.<span class="ruby-identifier">present?</span>&#x000A;53: <span class="ruby-node">&quot;url(#{quote}#{src}#{src =~ /\?/ ? '&amp;' : '?'}#{commit_id}#{quote})&quot;</span>&#x000A;54: <span class="ruby-keyword kw">else</span>&#x000A;55: <span class="ruby-node">&quot;url(#{quote}#{src}#{quote})&quot;</span>&#x000A;56: <span class="ruby-keyword kw">end</span>&#x000A;57: <span class="ruby-keyword kw">end</span>&#x000A;58: <span class="ruby-keyword kw">end</span></pre>
99
+ <pre id='M000021-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 43</span>&#x000A;43: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">add_asset_commit_ids</span>(<span class="ruby-identifier">css</span>)&#x000A;44: <span class="ruby-identifier">update_css_urls</span>(<span class="ruby-identifier">css</span>, <span class="ruby-node">%w[images htc]</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">src</span>, <span class="ruby-identifier">quote</span><span class="ruby-operator">|</span>&#x000A;45: <span class="ruby-comment cmt"># Get absolute path</span>&#x000A;46: <span class="ruby-identifier">filepath</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">ASSETS_DIR</span>, <span class="ruby-identifier">src</span>)&#x000A;47: &#x000A;48: <span class="ruby-comment cmt"># Convert to relative path</span>&#x000A;49: <span class="ruby-identifier">filepath</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-node">/^#{FileUtils.pwd}#{File::SEPARATOR}/</span>, <span class="ruby-value str">''</span>)&#x000A;50: &#x000A;51: <span class="ruby-identifier">commit_id</span> = <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">last_commit_id</span>(<span class="ruby-identifier">filepath</span>)&#x000A;52: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">commit_id</span>.<span class="ruby-identifier">present?</span>&#x000A;53: <span class="ruby-node">&quot;url(#{quote}#{src}#{src =~ /\?/ ? '&amp;' : '?'}#{commit_id}#{quote})&quot;</span>&#x000A;54: <span class="ruby-keyword kw">else</span>&#x000A;55: <span class="ruby-node">&quot;url(#{quote}#{src}#{quote})&quot;</span>&#x000A;56: <span class="ruby-keyword kw">end</span>&#x000A;57: <span class="ruby-keyword kw">end</span>&#x000A;58: <span class="ruby-keyword kw">end</span></pre>
100
100
  </div>
101
101
  </div>
102
- <div class='method public-class' id='method-M000019'>
103
- <a name='M000019'></a>
102
+ <div class='method public-class' id='method-M000022'>
103
+ <a name='M000022'></a>
104
104
  <div class='synopsis'>
105
105
  <span class='name'>add_asset_hosts</span>
106
106
  <span class='arguments'>(css, asset_host, options={})</span>
@@ -137,14 +137,14 @@
137
137
  </dl>
138
138
  </div>
139
139
  <div class='source'>
140
- <a class='source-toggle' href='#' onclick="toggleCode('M000019-source'); return false">
140
+ <a class='source-toggle' href='#' onclick="toggleCode('M000022-source'); return false">
141
141
  [show source]
142
142
  </a>
143
- <pre id='M000019-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 77</span>&#x000A;77: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">add_asset_hosts</span>(<span class="ruby-identifier">css</span>, <span class="ruby-identifier">asset_host</span>, <span class="ruby-identifier">options</span>={})&#x000A;78: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">css</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">asset_host</span>.<span class="ruby-identifier">blank?</span>&#x000A;79: &#x000A;80: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">reverse_merge!</span>(<span class="ruby-identifier">:ssl</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">false</span>)&#x000A;81: &#x000A;82: <span class="ruby-identifier">update_css_urls</span>(<span class="ruby-identifier">css</span>, <span class="ruby-node">%w[images]</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">src</span>, <span class="ruby-identifier">quote</span><span class="ruby-operator">|</span>&#x000A;83: <span class="ruby-identifier">computed_asset_host</span> = <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">compute_asset_host</span>(&#x000A;84: <span class="ruby-identifier">asset_host</span>, <span class="ruby-identifier">src</span>, <span class="ruby-identifier">options</span>.<span class="ruby-identifier">slice</span>(<span class="ruby-identifier">:ssl</span>))&#x000A;85: <span class="ruby-node">&quot;url(#{quote}#{computed_asset_host}#{src}#{quote})&quot;</span>&#x000A;86: <span class="ruby-keyword kw">end</span>&#x000A;87: <span class="ruby-keyword kw">end</span></pre>
143
+ <pre id='M000022-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 77</span>&#x000A;77: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">add_asset_hosts</span>(<span class="ruby-identifier">css</span>, <span class="ruby-identifier">asset_host</span>, <span class="ruby-identifier">options</span>={})&#x000A;78: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">css</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">asset_host</span>.<span class="ruby-identifier">blank?</span>&#x000A;79: &#x000A;80: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">reverse_merge!</span>(<span class="ruby-identifier">:ssl</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">false</span>)&#x000A;81: &#x000A;82: <span class="ruby-identifier">update_css_urls</span>(<span class="ruby-identifier">css</span>, <span class="ruby-node">%w[images]</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">src</span>, <span class="ruby-identifier">quote</span><span class="ruby-operator">|</span>&#x000A;83: <span class="ruby-identifier">computed_asset_host</span> = <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">compute_asset_host</span>(&#x000A;84: <span class="ruby-identifier">asset_host</span>, <span class="ruby-identifier">src</span>, <span class="ruby-identifier">options</span>.<span class="ruby-identifier">slice</span>(<span class="ruby-identifier">:ssl</span>))&#x000A;85: <span class="ruby-node">&quot;url(#{quote}#{computed_asset_host}#{src}#{quote})&quot;</span>&#x000A;86: <span class="ruby-keyword kw">end</span>&#x000A;87: <span class="ruby-keyword kw">end</span></pre>
144
144
  </div>
145
145
  </div>
146
- <div class='method public-class' id='method-M000016'>
147
- <a name='M000016'></a>
146
+ <div class='method public-class' id='method-M000019'>
147
+ <a name='M000019'></a>
148
148
  <div class='synopsis'>
149
149
  <span class='name'>min_filepath</span>
150
150
  <span class='arguments'>(filepath)</span>
@@ -157,14 +157,14 @@
157
157
  <pre>AssetHat::CSS.min_filepath('public/stylesheets/bundles/application.css')&#x000A; # =&gt; 'public/stylesheets/bundles/application.min.css'</pre>
158
158
  </div>
159
159
  <div class='source'>
160
- <a class='source-toggle' href='#' onclick="toggleCode('M000016-source'); return false">
160
+ <a class='source-toggle' href='#' onclick="toggleCode('M000019-source'); return false">
161
161
  [show source]
162
162
  </a>
163
- <pre id='M000016-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 14</span>&#x000A;14: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">min_filepath</span>(<span class="ruby-identifier">filepath</span>)&#x000A;15: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">min_filepath</span>(<span class="ruby-identifier">filepath</span>, <span class="ruby-value str">'css'</span>)&#x000A;16: <span class="ruby-keyword kw">end</span></pre>
163
+ <pre id='M000019-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 14</span>&#x000A;14: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">min_filepath</span>(<span class="ruby-identifier">filepath</span>)&#x000A;15: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">min_filepath</span>(<span class="ruby-identifier">filepath</span>, <span class="ruby-value str">'css'</span>)&#x000A;16: <span class="ruby-keyword kw">end</span></pre>
164
164
  </div>
165
165
  </div>
166
- <div class='method public-class' id='method-M000017'>
167
- <a name='M000017'></a>
166
+ <div class='method public-class' id='method-M000020'>
167
+ <a name='M000020'></a>
168
168
  <div class='synopsis'>
169
169
  <span class='name'>minify</span>
170
170
  <span class='arguments'>(input_string, options={})</span>
@@ -177,17 +177,17 @@
177
177
  <dl>
178
178
  <dt>engine</dt><dd>Default is <tt>:cssmin</tt>; see <a
179
179
  href=CSS/Engines.html#method-c-cssmin><a
180
- href="CSS/Engines.html#M000021">Engines.cssmin</a></a>. Allowed values are
180
+ href="CSS/Engines.html#M000024">Engines.cssmin</a></a>. Allowed values are
181
181
  in ENGINES.
182
182
 
183
183
  </dd>
184
184
  </dl>
185
185
  </div>
186
186
  <div class='source'>
187
- <a class='source-toggle' href='#' onclick="toggleCode('M000017-source'); return false">
187
+ <a class='source-toggle' href='#' onclick="toggleCode('M000020-source'); return false">
188
188
  [show source]
189
189
  </a>
190
- <pre id='M000017-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 23</span>&#x000A;23: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">minify</span>(<span class="ruby-identifier">input_string</span>, <span class="ruby-identifier">options</span>={})&#x000A;24: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">reverse_merge!</span>(<span class="ruby-identifier">:engine</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:cssmin</span>)&#x000A;25: &#x000A;26: <span class="ruby-identifier">engine</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:engine</span>].<span class="ruby-identifier">to_sym</span>&#x000A;27: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">ENGINES</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">engine</span>)&#x000A;28: <span class="ruby-identifier">raise</span> <span class="ruby-node">%{&#x000A;29: Unknown CSS minification engine '#{engine}'.&#x000A;30: Allowed: #{ENGINES.map{ |e| &quot;'#{e}'&quot; }.join(', ')}&#x000A;31: }</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\s+/</span>, <span class="ruby-value str">' '</span>) <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">return</span>&#x000A;32: <span class="ruby-keyword kw">end</span>&#x000A;33: &#x000A;34: <span class="ruby-constant">AssetHat</span><span class="ruby-operator">::</span><span class="ruby-constant">CSS</span><span class="ruby-operator">::</span><span class="ruby-constant">Engines</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">engine</span>, <span class="ruby-identifier">input_string</span>).<span class="ruby-identifier">strip</span>&#x000A;35: <span class="ruby-keyword kw">end</span></pre>
190
+ <pre id='M000020-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 23</span>&#x000A;23: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">minify</span>(<span class="ruby-identifier">input_string</span>, <span class="ruby-identifier">options</span>={})&#x000A;24: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">reverse_merge!</span>(<span class="ruby-identifier">:engine</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:cssmin</span>)&#x000A;25: &#x000A;26: <span class="ruby-identifier">engine</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:engine</span>].<span class="ruby-identifier">to_sym</span>&#x000A;27: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">ENGINES</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">engine</span>)&#x000A;28: <span class="ruby-identifier">raise</span> <span class="ruby-node">%{&#x000A;29: Unknown CSS minification engine '#{engine}'.&#x000A;30: Allowed: #{ENGINES.map{ |e| &quot;'#{e}'&quot; }.join(', ')}&#x000A;31: }</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\s+/</span>, <span class="ruby-value str">' '</span>) <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">return</span>&#x000A;32: <span class="ruby-keyword kw">end</span>&#x000A;33: &#x000A;34: <span class="ruby-constant">AssetHat</span><span class="ruby-operator">::</span><span class="ruby-constant">CSS</span><span class="ruby-operator">::</span><span class="ruby-constant">Engines</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">engine</span>, <span class="ruby-identifier">input_string</span>).<span class="ruby-identifier">strip</span>&#x000A;35: <span class="ruby-keyword kw">end</span></pre>
191
191
  </div>
192
192
  </div>
193
193
  </div>
@@ -47,15 +47,15 @@
47
47
  <h2>Methods</h2>
48
48
  <h3>public class</h3>
49
49
  <ol>
50
- <li><a href="#M000021">cssmin</a></li>
51
- <li><a href="#M000020">weak</a></li>
50
+ <li><a href="#M000024">cssmin</a></li>
51
+ <li><a href="#M000023">weak</a></li>
52
52
  </ol>
53
53
  </div>
54
54
  <div id='section'>
55
55
  <div id='methods'>
56
56
  <h2>Public class methods</h2>
57
- <div class='method public-class' id='method-M000021'>
58
- <a name='M000021'></a>
57
+ <div class='method public-class' id='method-M000024'>
58
+ <a name='M000024'></a>
59
59
  <div class='synopsis'>
60
60
  <span class='name'>cssmin</span>
61
61
  <span class='arguments'>(input_string)</span>
@@ -79,14 +79,14 @@
79
79
  </ul>
80
80
  </div>
81
81
  <div class='source'>
82
- <a class='source-toggle' href='#' onclick="toggleCode('M000021-source'); return false">
82
+ <a class='source-toggle' href='#' onclick="toggleCode('M000024-source'); return false">
83
83
  [show source]
84
84
  </a>
85
- <pre id='M000021-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 116</span>&#x000A;116: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">cssmin</span>(<span class="ruby-identifier">input_string</span>)&#x000A;117: <span class="ruby-identifier">output</span> = <span class="ruby-constant">CSSMin</span>.<span class="ruby-identifier">minify</span>(<span class="ruby-identifier">input_string</span>)&#x000A;118: &#x000A;119: <span class="ruby-comment cmt"># Remove rules that have empty declaration blocks</span>&#x000A;120: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/\}([^\}]+\{;\}){1,}/</span>, <span class="ruby-value str">'}'</span>)&#x000A;121: &#x000A;122: <span class="ruby-identifier">output</span>&#x000A;123: <span class="ruby-keyword kw">end</span></pre>
85
+ <pre id='M000024-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 116</span>&#x000A;116: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">cssmin</span>(<span class="ruby-identifier">input_string</span>)&#x000A;117: <span class="ruby-identifier">output</span> = <span class="ruby-constant">CSSMin</span>.<span class="ruby-identifier">minify</span>(<span class="ruby-identifier">input_string</span>)&#x000A;118: &#x000A;119: <span class="ruby-comment cmt"># Remove rules that have empty declaration blocks</span>&#x000A;120: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/\}([^\}]+\{;\}){1,}/</span>, <span class="ruby-value str">'}'</span>)&#x000A;121: &#x000A;122: <span class="ruby-identifier">output</span>&#x000A;123: <span class="ruby-keyword kw">end</span></pre>
86
86
  </div>
87
87
  </div>
88
- <div class='method public-class' id='method-M000020'>
89
- <a name='M000020'></a>
88
+ <div class='method public-class' id='method-M000023'>
89
+ <a name='M000023'></a>
90
90
  <div class='synopsis'>
91
91
  <span class='name'>weak</span>
92
92
  <span class='arguments'>(input_string)</span>
@@ -100,10 +100,10 @@
100
100
  </p>
101
101
  </div>
102
102
  <div class='source'>
103
- <a class='source-toggle' href='#' onclick="toggleCode('M000020-source'); return false">
103
+ <a class='source-toggle' href='#' onclick="toggleCode('M000023-source'); return false">
104
104
  [show source]
105
105
  </a>
106
- <pre id='M000020-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 94</span>&#x000A; 94: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">weak</span>(<span class="ruby-identifier">input_string</span>)&#x000A; 95: <span class="ruby-identifier">input</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">input_string</span>)&#x000A; 96: <span class="ruby-identifier">output</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>&#x000A; 97: &#x000A; 98: <span class="ruby-identifier">input</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>&#x000A; 99: <span class="ruby-comment cmt"># Remove indentation and trailing whitespace (including line breaks)</span>&#x000A;100: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">strip!</span>&#x000A;101: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">blank?</span>&#x000A;102: &#x000A;103: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">line</span>&#x000A;104: <span class="ruby-keyword kw">end</span>&#x000A;105: &#x000A;106: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">rewind</span>&#x000A;107: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">read</span>&#x000A;108: <span class="ruby-keyword kw">end</span></pre>
106
+ <pre id='M000023-source'> <span class="ruby-comment cmt"># File lib/asset_hat/css.rb, line 94</span>&#x000A; 94: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">weak</span>(<span class="ruby-identifier">input_string</span>)&#x000A; 95: <span class="ruby-identifier">input</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">input_string</span>)&#x000A; 96: <span class="ruby-identifier">output</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>&#x000A; 97: &#x000A; 98: <span class="ruby-identifier">input</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>&#x000A; 99: <span class="ruby-comment cmt"># Remove indentation and trailing whitespace (including line breaks)</span>&#x000A;100: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">strip!</span>&#x000A;101: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">blank?</span>&#x000A;102: &#x000A;103: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">line</span>&#x000A;104: <span class="ruby-keyword kw">end</span>&#x000A;105: &#x000A;106: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">rewind</span>&#x000A;107: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">read</span>&#x000A;108: <span class="ruby-keyword kw">end</span></pre>
107
107
  </div>
108
108
  </div>
109
109
  </div>
@@ -31,10 +31,10 @@
31
31
  </h1>
32
32
  <ol class='paths'>
33
33
  <li>
34
- <a href="../../files/lib/asset_hat/js/vendors_rb.html">lib/asset_hat/js/vendors.rb</a>
34
+ <a href="../../files/lib/asset_hat/js_rb.html">lib/asset_hat/js.rb</a>
35
35
  </li>
36
36
  <li class='other'>
37
- <a href="../../files/lib/asset_hat/js_rb.html">lib/asset_hat/js.rb</a>
37
+ <a href="../../files/lib/asset_hat/js/vendors_rb.html">lib/asset_hat/js/vendors.rb</a>
38
38
  </li>
39
39
  <li>
40
40
  <a class='show' href='#' onclick='this.parentNode.parentNode.className += " expanded"; this.parentNode.removeChild(this); return false'>show all</a>
@@ -52,8 +52,8 @@
52
52
  <h2>Methods</h2>
53
53
  <h3>public class</h3>
54
54
  <ol>
55
- <li><a href="#M000022">min_filepath</a></li>
56
- <li><a href="#M000023">minify</a></li>
55
+ <li><a href="#M000025">min_filepath</a></li>
56
+ <li><a href="#M000026">minify</a></li>
57
57
  </ol>
58
58
  </div>
59
59
  <div id='section'>
@@ -92,8 +92,8 @@
92
92
  </div>
93
93
  <div id='methods'>
94
94
  <h2>Public class methods</h2>
95
- <div class='method public-class' id='method-M000022'>
96
- <a name='M000022'></a>
95
+ <div class='method public-class' id='method-M000025'>
96
+ <a name='M000025'></a>
97
97
  <div class='synopsis'>
98
98
  <span class='name'>min_filepath</span>
99
99
  <span class='arguments'>(filepath)</span>
@@ -106,14 +106,14 @@
106
106
  <pre>AssetHat::JS.min_filepath('public/javascripts/bundles/application.js')&#x000A; # =&gt; 'public/javascripts/bundles/application.min.js'</pre>
107
107
  </div>
108
108
  <div class='source'>
109
- <a class='source-toggle' href='#' onclick="toggleCode('M000022-source'); return false">
109
+ <a class='source-toggle' href='#' onclick="toggleCode('M000025-source'); return false">
110
110
  [show source]
111
111
  </a>
112
- <pre id='M000022-source'> <span class="ruby-comment cmt"># File lib/asset_hat/js.rb, line 19</span>&#x000A;19: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">min_filepath</span>(<span class="ruby-identifier">filepath</span>)&#x000A;20: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">min_filepath</span>(<span class="ruby-identifier">filepath</span>, <span class="ruby-value str">'js'</span>)&#x000A;21: <span class="ruby-keyword kw">end</span></pre>
112
+ <pre id='M000025-source'> <span class="ruby-comment cmt"># File lib/asset_hat/js.rb, line 19</span>&#x000A;19: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">min_filepath</span>(<span class="ruby-identifier">filepath</span>)&#x000A;20: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">min_filepath</span>(<span class="ruby-identifier">filepath</span>, <span class="ruby-value str">'js'</span>)&#x000A;21: <span class="ruby-keyword kw">end</span></pre>
113
113
  </div>
114
114
  </div>
115
- <div class='method public-class' id='method-M000023'>
116
- <a name='M000023'></a>
115
+ <div class='method public-class' id='method-M000026'>
116
+ <a name='M000026'></a>
117
117
  <div class='synopsis'>
118
118
  <span class='name'>minify</span>
119
119
  <span class='arguments'>(input_string, options={})</span>
@@ -125,17 +125,17 @@
125
125
  </p>
126
126
  <dl>
127
127
  <dt>engine</dt><dd>Default is <tt>:jsmin</tt>; see <a href=JS/Engines.html#method-c-jsmin><a
128
- href="JS/Engines.html#M000026">Engines.jsmin</a></a>. Allowed values are in
128
+ href="JS/Engines.html#M000029">Engines.jsmin</a></a>. Allowed values are in
129
129
  ENGINES.
130
130
 
131
131
  </dd>
132
132
  </dl>
133
133
  </div>
134
134
  <div class='source'>
135
- <a class='source-toggle' href='#' onclick="toggleCode('M000023-source'); return false">
135
+ <a class='source-toggle' href='#' onclick="toggleCode('M000026-source'); return false">
136
136
  [show source]
137
137
  </a>
138
- <pre id='M000023-source'> <span class="ruby-comment cmt"># File lib/asset_hat/js.rb, line 28</span>&#x000A;28: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">minify</span>(<span class="ruby-identifier">input_string</span>, <span class="ruby-identifier">options</span>={})&#x000A;29: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">reverse_merge!</span>(<span class="ruby-identifier">:engine</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:jsmin</span>)&#x000A;30: &#x000A;31: <span class="ruby-identifier">engine</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:engine</span>].<span class="ruby-identifier">to_sym</span>&#x000A;32: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">ENGINES</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">engine</span>)&#x000A;33: <span class="ruby-identifier">raise</span> <span class="ruby-node">%{&#x000A;34: Unknown JS minification engine '#{engine}'.&#x000A;35: Allowed: #{ENGINES.map{ |e| &quot;'#{e}'&quot; }.join(', ')}&#x000A;36: }</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\s+/</span>, <span class="ruby-value str">' '</span>) <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">return</span>&#x000A;37: <span class="ruby-keyword kw">end</span>&#x000A;38: &#x000A;39: <span class="ruby-constant">AssetHat</span><span class="ruby-operator">::</span><span class="ruby-constant">JS</span><span class="ruby-operator">::</span><span class="ruby-constant">Engines</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">engine</span>, <span class="ruby-identifier">input_string</span>).<span class="ruby-identifier">strip</span>&#x000A;40: <span class="ruby-keyword kw">end</span></pre>
138
+ <pre id='M000026-source'> <span class="ruby-comment cmt"># File lib/asset_hat/js.rb, line 28</span>&#x000A;28: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">minify</span>(<span class="ruby-identifier">input_string</span>, <span class="ruby-identifier">options</span>={})&#x000A;29: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">reverse_merge!</span>(<span class="ruby-identifier">:engine</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:jsmin</span>)&#x000A;30: &#x000A;31: <span class="ruby-identifier">engine</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:engine</span>].<span class="ruby-identifier">to_sym</span>&#x000A;32: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">ENGINES</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">engine</span>)&#x000A;33: <span class="ruby-identifier">raise</span> <span class="ruby-node">%{&#x000A;34: Unknown JS minification engine '#{engine}'.&#x000A;35: Allowed: #{ENGINES.map{ |e| &quot;'#{e}'&quot; }.join(', ')}&#x000A;36: }</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\s+/</span>, <span class="ruby-value str">' '</span>) <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">return</span>&#x000A;37: <span class="ruby-keyword kw">end</span>&#x000A;38: &#x000A;39: <span class="ruby-constant">AssetHat</span><span class="ruby-operator">::</span><span class="ruby-constant">JS</span><span class="ruby-operator">::</span><span class="ruby-constant">Engines</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">engine</span>, <span class="ruby-identifier">input_string</span>).<span class="ruby-identifier">strip</span>&#x000A;40: <span class="ruby-keyword kw">end</span></pre>
139
139
  </div>
140
140
  </div>
141
141
  </div>
@@ -46,15 +46,15 @@
46
46
  <h2>Methods</h2>
47
47
  <h3>public class</h3>
48
48
  <ol>
49
- <li><a href="#M000026">jsmin</a></li>
50
- <li><a href="#M000025">weak</a></li>
49
+ <li><a href="#M000029">jsmin</a></li>
50
+ <li><a href="#M000028">weak</a></li>
51
51
  </ol>
52
52
  </div>
53
53
  <div id='section'>
54
54
  <div id='methods'>
55
55
  <h2>Public class methods</h2>
56
- <div class='method public-class' id='method-M000026'>
57
- <a name='M000026'></a>
56
+ <div class='method public-class' id='method-M000029'>
57
+ <a name='M000029'></a>
58
58
  <div class='synopsis'>
59
59
  <span class='name'>jsmin</span>
60
60
  <span class='arguments'>(input_string)</span>
@@ -77,14 +77,14 @@
77
77
  </ul>
78
78
  </div>
79
79
  <div class='source'>
80
- <a class='source-toggle' href='#' onclick="toggleCode('M000026-source'); return false">
80
+ <a class='source-toggle' href='#' onclick="toggleCode('M000029-source'); return false">
81
81
  [show source]
82
82
  </a>
83
- <pre id='M000026-source'> <span class="ruby-comment cmt"># File lib/asset_hat/js.rb, line 79</span>&#x000A;79: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">jsmin</span>(<span class="ruby-identifier">input_string</span>)&#x000A;80: <span class="ruby-constant">JSMin</span>.<span class="ruby-identifier">minify</span>(<span class="ruby-identifier">input_string</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span>)&#x000A;81: <span class="ruby-keyword kw">end</span></pre>
83
+ <pre id='M000029-source'> <span class="ruby-comment cmt"># File lib/asset_hat/js.rb, line 79</span>&#x000A;79: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">jsmin</span>(<span class="ruby-identifier">input_string</span>)&#x000A;80: <span class="ruby-constant">JSMin</span>.<span class="ruby-identifier">minify</span>(<span class="ruby-identifier">input_string</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span>)&#x000A;81: <span class="ruby-keyword kw">end</span></pre>
84
84
  </div>
85
85
  </div>
86
- <div class='method public-class' id='method-M000025'>
87
- <a name='M000025'></a>
86
+ <div class='method public-class' id='method-M000028'>
87
+ <a name='M000028'></a>
88
88
  <div class='synopsis'>
89
89
  <span class='name'>weak</span>
90
90
  <span class='arguments'>(input_string)</span>
@@ -103,10 +103,10 @@
103
103
  </ul>
104
104
  </div>
105
105
  <div class='source'>
106
- <a class='source-toggle' href='#' onclick="toggleCode('M000025-source'); return false">
106
+ <a class='source-toggle' href='#' onclick="toggleCode('M000028-source'); return false">
107
107
  [show source]
108
108
  </a>
109
- <pre id='M000025-source'> <span class="ruby-comment cmt"># File lib/asset_hat/js.rb, line 48</span>&#x000A;48: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">weak</span>(<span class="ruby-identifier">input_string</span>)&#x000A;49: <span class="ruby-identifier">input</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">input_string</span>)&#x000A;50: <span class="ruby-identifier">output</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>&#x000A;51: &#x000A;52: <span class="ruby-identifier">input</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>&#x000A;53: <span class="ruby-comment cmt"># Remove indentation and trailing whitespace</span>&#x000A;54: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">strip!</span>&#x000A;55: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">blank?</span>&#x000A;56: &#x000A;57: <span class="ruby-comment cmt"># Skip single-line comments</span>&#x000A;58: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">line</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^\/\//</span>).<span class="ruby-identifier">nil?</span>&#x000A;59: <span class="ruby-comment cmt"># TODO: Also skip single-line comments that began mid-line, but not</span>&#x000A;60: <span class="ruby-comment cmt"># inside a string or regex</span>&#x000A;61: &#x000A;62: <span class="ruby-comment cmt"># TODO: Skip multi-line comments</span>&#x000A;63: <span class="ruby-comment cmt"># - Should not strip from within a string or regex</span>&#x000A;64: <span class="ruby-comment cmt"># - Should not strip comments that begin with `/*!` (e.g., licenses)</span>&#x000A;65: &#x000A;66: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">line</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span>)&#x000A;67: <span class="ruby-keyword kw">end</span>&#x000A;68: &#x000A;69: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">rewind</span>&#x000A;70: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">read</span>&#x000A;71: <span class="ruby-keyword kw">end</span></pre>
109
+ <pre id='M000028-source'> <span class="ruby-comment cmt"># File lib/asset_hat/js.rb, line 48</span>&#x000A;48: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">weak</span>(<span class="ruby-identifier">input_string</span>)&#x000A;49: <span class="ruby-identifier">input</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">input_string</span>)&#x000A;50: <span class="ruby-identifier">output</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>&#x000A;51: &#x000A;52: <span class="ruby-identifier">input</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>&#x000A;53: <span class="ruby-comment cmt"># Remove indentation and trailing whitespace</span>&#x000A;54: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">strip!</span>&#x000A;55: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">blank?</span>&#x000A;56: &#x000A;57: <span class="ruby-comment cmt"># Skip single-line comments</span>&#x000A;58: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">line</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^\/\//</span>).<span class="ruby-identifier">nil?</span>&#x000A;59: <span class="ruby-comment cmt"># TODO: Also skip single-line comments that began mid-line, but not</span>&#x000A;60: <span class="ruby-comment cmt"># inside a string or regex</span>&#x000A;61: &#x000A;62: <span class="ruby-comment cmt"># TODO: Skip multi-line comments</span>&#x000A;63: <span class="ruby-comment cmt"># - Should not strip from within a string or regex</span>&#x000A;64: <span class="ruby-comment cmt"># - Should not strip comments that begin with `/*!` (e.g., licenses)</span>&#x000A;65: &#x000A;66: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">line</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span>)&#x000A;67: <span class="ruby-keyword kw">end</span>&#x000A;68: &#x000A;69: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">rewind</span>&#x000A;70: <span class="ruby-identifier">output</span>.<span class="ruby-identifier">read</span>&#x000A;71: <span class="ruby-keyword kw">end</span></pre>
110
110
  </div>
111
111
  </div>
112
112
  </div>
@@ -47,7 +47,7 @@
47
47
  <h2>Methods</h2>
48
48
  <h3>public class</h3>
49
49
  <ol>
50
- <li><a href="#M000024">source_for</a></li>
50
+ <li><a href="#M000027">source_for</a></li>
51
51
  </ol>
52
52
  </div>
53
53
  <div id='section'>
@@ -56,74 +56,137 @@
56
56
  <div class='name-list'>
57
57
  <table summary='Constants'>
58
58
  <tr class='top-aligned-row context-row'>
59
- <td class='context-item-name'>VENDORS</td>
59
+ <td class='context-item-name'>VENDORS_ON_GOOGLE_CDN</td>
60
60
  <td>=</td>
61
- <td class='context-item-value'>[ :jquery, :jquery_ui, :prototype, :scriptaculous, :mootools, :dojo, :swfobject, :yui, :ext_core, :webfont ]</td>
61
+ <td class='context-item-value'>[ :dojo, :ext_core, :jquery, :jquery_ui, :mootools, :prototype, :scriptaculous, :swfobject, :webfont, :yui ]</td>
62
62
  <td>&nbsp;</td>
63
63
  <td class='context-item-desc'>
64
64
 
65
65
  A list of supported 3rd-party JavaScript plugin/vendor names. Homepages:
66
66
 
67
67
  <ul>
68
- <li><a href="http://jquery.com/">jQuery</a>
68
+ <li>Frameworks/libraries:
69
69
 
70
- </li>
71
- <li><a href="http://jqueryui.com/">jQuery UI</a>
70
+ <ul>
71
+ <li><a href="http://dojotoolkit.org/">Dojo</a>
72
72
 
73
73
  </li>
74
- <li><a href="http://www.prototypejs.org/">Prototype</a>
74
+ <li><a href="http://extjs.com/products/extcore/">Ext Core</a>
75
75
 
76
76
  </li>
77
- <li><a href="http://script.aculo.us/">script.aculo.us</a>
77
+ <li><a href="http://jqueryui.com/">jQuery UI</a>
78
78
 
79
79
  </li>
80
- <li><a href="http://mootools.net/">MooTools</a>
80
+ <li><a href="http://jquery.com/">jQuery</a>
81
81
 
82
82
  </li>
83
- <li><a href="http://dojotoolkit.org/">Dojo</a>
83
+ <li><a href="http://mootools.net/">MooTools</a>
84
84
 
85
85
  </li>
86
- <li><a href="http://code.google.com/p/swfobject/">SWFObject</a>
86
+ <li><a href="http://www.prototypejs.org/">Prototype</a>
87
87
 
88
88
  </li>
89
- <li><a href="http://developer.yahoo.com/yui/">YUI</a>
89
+ <li><a href="http://script.aculo.us/">script.aculo.us</a>
90
90
 
91
91
  </li>
92
- <li><a href="http://extjs.com/products/extcore/">Ext Core</a>
92
+ <li><a href="http://code.google.com/p/swfobject/">SWFObject</a>
93
93
 
94
94
  </li>
95
95
  <li><a
96
96
  href="http://code.google.com/apis/webfonts/docs/webfont_loader.html">WebFont
97
97
  Loader</a>
98
98
 
99
+ </li>
100
+ <li><a href="http://developer.yahoo.com/yui/">YUI</a>
101
+
102
+ </li>
103
+ </ul>
104
+ </li>
105
+ <li>Loaders:
106
+
107
+ <ul>
108
+ <li><a href="http://labjs.com">LABjs</a>
109
+
110
+ </li>
111
+ </ul>
99
112
  </li>
100
113
  </ul>
101
114
  </td>
102
115
  </tr>
116
+ <tr class='top-aligned-row context-row'>
117
+ <td class='context-item-name'>VENDORS_ON_CDNJS</td>
118
+ <td>=</td>
119
+ <td class='context-item-value'>[ :lab_js ]</td>
120
+ </tr>
121
+ <tr class='top-aligned-row context-row'>
122
+ <td class='context-item-name'>VENDORS</td>
123
+ <td>=</td>
124
+ <td class='context-item-value'>VENDORS_ON_GOOGLE_CDN + VENDORS_ON_CDNJS</td>
125
+ </tr>
103
126
  </table>
104
127
  </div>
105
128
  </div>
106
129
  <div id='methods'>
107
130
  <h2>Public class methods</h2>
108
- <div class='method public-class' id='method-M000024'>
109
- <a name='M000024'></a>
131
+ <div class='method public-class' id='method-M000027'>
132
+ <a name='M000027'></a>
110
133
  <div class='synopsis'>
111
134
  <span class='name'>source_for</span>
112
135
  <span class='arguments'>(vendor, options={})</span>
113
136
  </div>
114
137
  <div class='description'>
115
138
  <p>
116
- Accepts an item from VENDORS, and returns the URL at which that vendor
117
- asset can be found. The URL is either local (relative) or external
118
- depending on the environment configuration. If external, the URL points to
119
- <a href="http://code.google.com/apis/ajaxlibs/">Google's CDN</a>. Options:
139
+ Accepts an item from `VENDORS`, and returns the URL at which that vendor
140
+ asset can be found. The URL is either local (relative) or remote, depending
141
+ on the environment configuration:
142
+ </p>
143
+ <ul>
144
+ <li>If `<a
145
+ href="../../AssetHat.html#M000012">AssetHat.consider_all_requests_local?</a>`
146
+ is true:
147
+
148
+ <ul>
149
+ <li>The local file takes precedence.
150
+
151
+ </li>
152
+ <li>If the local file is missing, the remote URL in assets.yml is used as a
153
+ fallback.
154
+
155
+ </li>
156
+ <li>If there is no remote URL in assets.yml, the Google CDN URL is used as a
157
+ fallback. (This makes setup easier: If the app doesn&#8217;t already have a
158
+ local copy of the vendor file, then it&#8217;s instead loaded remotely.)
159
+
160
+ </li>
161
+ </ul>
162
+ </li>
163
+ <li>If `<a
164
+ href="../../AssetHat.html#M000012">AssetHat.consider_all_requests_local?</a>`
165
+ is false:
166
+
167
+ <ul>
168
+ <li>The remote URL in assets.yml takes precedence.
169
+
170
+ </li>
171
+ <li>The <a href="http://code.google.com/apis/ajaxlibs/">Google CDN</a> URL is
172
+ used as a fallback, but only if a version number can be found (either in
173
+ assets.yml or via the helper&#8217;s `:version` option). If no version
174
+ number is found, the remote URL cannot be built, so the local file (if any)
175
+ is used as a fallback.
176
+
177
+ </li>
178
+ </ul>
179
+ </li>
180
+ </ul>
181
+ <p>
182
+ Options:
120
183
  </p>
121
184
  <dl>
122
185
  <dt>ssl</dt><dd>Boolean for whether to include vendor <a href="../JS.html">JS</a> via
123
186
  HTTPS. Defaults to false.
124
187
 
125
188
  </dd>
126
- <dt>version</dt><dd>The vendor version, e.g., &#8216;1.4.0&#8217; for jQuery 1.4. By default,
189
+ <dt>version</dt><dd>The vendor version, e.g., &#8216;1.5.0&#8217; for jQuery 1.5. By default,
127
190
  each vendor version is taken from <tt>config/assets.yml</tt>; use this
128
191
  option to override the configuration.
129
192
 
@@ -131,10 +194,10 @@
131
194
  </dl>
132
195
  </div>
133
196
  <div class='source'>
134
- <a class='source-toggle' href='#' onclick="toggleCode('M000024-source'); return false">
197
+ <a class='source-toggle' href='#' onclick="toggleCode('M000027-source'); return false">
135
198
  [show source]
136
199
  </a>
137
- <pre id='M000024-source'> <span class="ruby-comment cmt"># File lib/asset_hat/js/vendors.rb, line 42</span>&#x000A; 42: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">source_for</span>(<span class="ruby-identifier">vendor</span>, <span class="ruby-identifier">options</span>={})&#x000A; 43: <span class="ruby-identifier">vendor_config</span> =&#x000A; 44: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">config</span>[<span class="ruby-value str">'js'</span>][<span class="ruby-value str">'vendors'</span>][<span class="ruby-identifier">vendor</span>.<span class="ruby-identifier">to_s</span>] <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>&#x000A; 45: <span class="ruby-identifier">use_local</span> = <span class="ruby-constant">ActionController</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>.<span class="ruby-identifier">consider_all_requests_local</span>&#x000A; 46: <span class="ruby-identifier">use_ssl</span> = <span class="ruby-operator">!</span><span class="ruby-operator">!</span><span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ssl</span>]&#x000A; 47: <span class="ruby-identifier">version</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:version</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">vendor_config</span>[<span class="ruby-value str">'version'</span>] <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>&#x000A; 48: &#x000A; 49: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">use_local</span>&#x000A; 50: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">vendor_config</span>[<span class="ruby-value str">'remote_url'</span>] <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>&#x000A; 51: <span class="ruby-identifier">src</span> = (<span class="ruby-identifier">vendor_config</span>[<span class="ruby-value str">'remote_ssl_url'</span>] <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">use_ssl</span>&#x000A; 52: <span class="ruby-keyword kw">end</span>&#x000A; 53: &#x000A; 54: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">src</span>.<span class="ruby-identifier">blank?</span>&#x000A; 55: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">vendor</span>&#x000A; 56: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:jquery</span>&#x000A; 57: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">use_local</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-value">?&#x000A; 58: </span> <span class="ruby-node">&quot;#{['jquery', version].compact.join('-')}.min.js&quot;</span> <span class="ruby-operator">:</span>&#x000A; 59: <span class="ruby-node">&quot;http#{'s' if use_ssl}://ajax.googleapis.com/ajax/libs/jquery/#{version}/jquery.min.js&quot;</span>&#x000A; 60: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:jquery_ui</span>&#x000A; 61: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">use_local</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-value">?&#x000A; 62: </span> <span class="ruby-node">&quot;#{['jquery-ui', version].compact.join('-')}.min.js&quot;</span> <span class="ruby-operator">:</span>&#x000A; 63: <span class="ruby-node">&quot;http#{'s' if use_ssl}://ajax.googleapis.com/ajax/libs/jqueryui/#{version}/jquery-ui.min.js&quot;</span>&#x000A; 64: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:prototype</span>&#x000A; 65: <span class="ruby-comment cmt"># Prototype currently doesn't provide an official minified version.</span>&#x000A; 66: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">use_local</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-value">?&#x000A; 67: </span> <span class="ruby-node">&quot;#{['prototype', version].compact.join('-')}.js&quot;</span> <span class="ruby-operator">:</span>&#x000A; 68: <span class="ruby-node">&quot;http#{'s' if use_ssl}://ajax.googleapis.com/ajax/libs/prototype/#{version}/prototype.js&quot;</span>&#x000A; 69: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:scriptaculous</span>&#x000A; 70: <span class="ruby-comment cmt"># script.aculo.us currently doesn't provide an official minified version.</span>&#x000A; 71: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">use_local</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-value">?&#x000A; 72: </span> <span class="ruby-node">&quot;#{['scriptaculous', version].compact.join('-')}.js&quot;</span> <span class="ruby-operator">:</span>&#x000A; 73: <span class="ruby-node">&quot;http#{'s' if use_ssl}://ajax.googleapis.com/ajax/libs/scriptaculous/#{version}/scriptaculous.js&quot;</span>&#x000A; 74: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:mootools</span>&#x000A; 75: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">use_local</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-value">?&#x000A; 76: </span> <span class="ruby-node">&quot;#{['mootools', version].compact.join('-')}.min.js&quot;</span> <span class="ruby-operator">:</span>&#x000A; 77: <span class="ruby-node">&quot;http#{'s' if use_ssl}://ajax.googleapis.com/ajax/libs/mootools/#{version}/mootools-yui-compressed.js&quot;</span>&#x000A; 78: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:dojo</span>&#x000A; 79: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">use_local</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-value">?&#x000A; 80: </span> <span class="ruby-node">&quot;#{['dojo', version].compact.join('-')}.min.js&quot;</span> <span class="ruby-operator">:</span>&#x000A; 81: <span class="ruby-node">&quot;http#{'s' if use_ssl}://ajax.googleapis.com/ajax/libs/dojo/#{version}/dojo/dojo.xd.js&quot;</span>&#x000A; 82: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:swfobject</span>&#x000A; 83: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">use_local</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-value">?&#x000A; 84: </span> <span class="ruby-node">&quot;#{['swfobject', version].compact.join('-')}.min.js&quot;</span> <span class="ruby-operator">:</span>&#x000A; 85: <span class="ruby-node">&quot;http#{'s' if use_ssl}://ajax.googleapis.com/ajax/libs/swfobject/#{version}/swfobject.js&quot;</span>&#x000A; 86: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:yui</span>&#x000A; 87: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">use_local</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-value">?&#x000A; 88: </span> <span class="ruby-node">&quot;#{['yui', version].compact.join('-')}.min.js&quot;</span> <span class="ruby-operator">:</span>&#x000A; 89: <span class="ruby-node">&quot;http#{'s' if use_ssl}://ajax.googleapis.com/ajax/libs/yui/#{version}/build/yuiloader/yuiloader-min.js&quot;</span>&#x000A; 90: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:ext_core</span>&#x000A; 91: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">use_local</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-value">?&#x000A; 92: </span> <span class="ruby-node">&quot;#{['ext_core', version].compact.join('-')}.min.js&quot;</span> <span class="ruby-operator">:</span>&#x000A; 93: <span class="ruby-node">&quot;http#{'s' if use_ssl}://ajax.googleapis.com/ajax/libs/ext-core/#{version}/ext-core.js&quot;</span>&#x000A; 94: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:webfont</span>&#x000A; 95: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">use_local</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-value">?&#x000A; 96: </span> <span class="ruby-node">&quot;#{['webfont', version].compact.join('-')}.min.js&quot;</span> <span class="ruby-operator">:</span>&#x000A; 97: <span class="ruby-node">&quot;http#{'s' if use_ssl}://ajax.googleapis.com/ajax/libs/webfont/#{version}/webfont.js&quot;</span>&#x000A; 98: <span class="ruby-keyword kw">else</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-comment cmt"># TODO: Write to log</span>&#x000A; 99: <span class="ruby-keyword kw">end</span>&#x000A;100: <span class="ruby-keyword kw">end</span>&#x000A;101: &#x000A;102: <span class="ruby-identifier">src</span>&#x000A;103: <span class="ruby-keyword kw">end</span></pre>
200
+ <pre id='M000027-source'> <span class="ruby-comment cmt"># File lib/asset_hat/js/vendors.rb, line 67</span>&#x000A; 67: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">source_for</span>(<span class="ruby-identifier">vendor</span>, <span class="ruby-identifier">options</span>={})&#x000A; 68: <span class="ruby-identifier">vendor_config</span> =&#x000A; 69: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">config</span>[<span class="ruby-value str">'js'</span>][<span class="ruby-value str">'vendors'</span>][<span class="ruby-identifier">vendor</span>.<span class="ruby-identifier">to_s</span>] <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>&#x000A; 70: <span class="ruby-identifier">use_local</span> = <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">consider_all_requests_local?</span>&#x000A; 71: <span class="ruby-identifier">use_ssl</span> = <span class="ruby-operator">!</span><span class="ruby-operator">!</span><span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ssl</span>]&#x000A; 72: <span class="ruby-identifier">version</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:version</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">vendor_config</span>[<span class="ruby-value str">'version'</span>] <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>&#x000A; 73: &#x000A; 74: <span class="ruby-comment cmt"># Prepare local path and default remote URL</span>&#x000A; 75: <span class="ruby-identifier">srcs</span> = <span class="ruby-constant">Vendors</span>.<span class="ruby-identifier">vendor_uris</span>(<span class="ruby-identifier">vendor</span>,&#x000A; 76: <span class="ruby-identifier">:use_ssl</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">use_ssl</span>, <span class="ruby-identifier">:version</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">version</span>)&#x000A; 77: <span class="ruby-identifier">local_src</span>, <span class="ruby-identifier">remote_src</span> = <span class="ruby-identifier">srcs</span>[<span class="ruby-identifier">:local</span>], <span class="ruby-identifier">srcs</span>[<span class="ruby-identifier">:remote</span>]&#x000A; 78: &#x000A; 79: <span class="ruby-comment cmt"># Using the local URL requires that the vendor file exists locally. If</span>&#x000A; 80: <span class="ruby-comment cmt"># the vendor file doesn't exist, use the remote URL as fallback.</span>&#x000A; 81: <span class="ruby-identifier">use_local</span> <span class="ruby-operator">&amp;&amp;=</span> <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">asset_exists?</span>(<span class="ruby-identifier">local_src</span>, <span class="ruby-identifier">:js</span>)&#x000A; 82: &#x000A; 83: <span class="ruby-comment cmt"># If no version given, can't determine the remote URL; use the local</span>&#x000A; 84: <span class="ruby-comment cmt"># URL as fallback.</span>&#x000A; 85: <span class="ruby-identifier">use_local</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">blank?</span>&#x000A; 86: &#x000A; 87: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">use_local</span>&#x000A; 88: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">local_src</span>&#x000A; 89: <span class="ruby-keyword kw">else</span>&#x000A; 90: <span class="ruby-comment cmt"># To ease setup, if no local copy of the vendor code is found,</span>&#x000A; 91: <span class="ruby-comment cmt"># use a remote URL as a fallback.</span>&#x000A; 92: &#x000A; 93: <span class="ruby-comment cmt"># Give precedence to configured remote URLs</span>&#x000A; 94: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">vendor_config</span>.<span class="ruby-identifier">try</span>(<span class="ruby-identifier">:[]</span>, <span class="ruby-value str">'remote_ssl_url'</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">use_ssl</span>&#x000A; 95: <span class="ruby-identifier">src</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">vendor_config</span>.<span class="ruby-identifier">try</span>(<span class="ruby-identifier">:[]</span>, <span class="ruby-value str">'remote_url'</span>)&#x000A; 96: &#x000A; 97: <span class="ruby-comment cmt"># Use default remote URL as fallback</span>&#x000A; 98: <span class="ruby-identifier">src</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">remote_src</span>&#x000A; 99: &#x000A;100: <span class="ruby-comment cmt"># Use local URL as final resort, even though the file doesn't</span>&#x000A;101: <span class="ruby-comment cmt"># exist, in hopes that the app maintainer finds the 404 (or the</span>&#x000A;102: <span class="ruby-comment cmt"># warning below) in the logs. This needs to be fixed in the app,</span>&#x000A;103: <span class="ruby-comment cmt"># rather than relying on a CDN to dynamically provide the latest</span>&#x000A;104: <span class="ruby-comment cmt"># stable vendor version.</span>&#x000A;105: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">src</span>.<span class="ruby-identifier">blank?</span>&#x000A;106: <span class="ruby-identifier">src</span> = <span class="ruby-identifier">local_src</span>&#x000A;107: <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;\n\nAssetHat WARNING (#{Time.now}):\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-node">%{&#x000A;108: Tried to reference the vendor JS `:#{vendor}`, but&#x000A;109: #{AssetHat.assets_dir(:js)}/#{local_src} couldn't be found, and&#x000A;110: couldn't use a remote fallback because no vendor version was&#x000A;111: given in #{AssetHat::RELATIVE_CONFIG_FILEPATH}.&#x000A;112: }</span>.<span class="ruby-identifier">squish!</span>&#x000A;113: <span class="ruby-comment cmt"># TODO: Create `AssetHat::Logger.warn`, etc. methods</span>&#x000A;114: <span class="ruby-keyword kw">end</span>&#x000A;115: <span class="ruby-keyword kw">end</span>&#x000A;116: &#x000A;117: <span class="ruby-identifier">src</span>&#x000A;118: <span class="ruby-keyword kw">end</span></pre>
138
201
  </div>
139
202
  </div>
140
203
  </div>