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.
- data/HISTORY +13 -14
 - data/README.rdoc +171 -0
 - data/Rakefile +24 -2
 - data/VERSION.yml +3 -3
 - data/app/helpers/asset_hat_helper.rb +67 -61
 - data/asset_hat.gemspec +42 -8
 - data/doc/classes/AssetHat/CSS/Engines.html +118 -0
 - data/doc/classes/AssetHat/CSS.html +194 -0
 - data/doc/classes/AssetHat/JS/Engines.html +122 -0
 - data/doc/classes/AssetHat/JS/Vendors.html +110 -0
 - data/doc/classes/AssetHat/JS.html +151 -0
 - data/doc/classes/AssetHat.html +446 -0
 - data/doc/classes/AssetHatHelper.html +161 -0
 - data/doc/created.rid +1 -0
 - data/doc/files/HISTORY.html +116 -0
 - data/doc/files/LICENSE.html +76 -0
 - data/doc/files/README_rdoc.html +234 -0
 - data/doc/files/app/helpers/asset_hat_helper_rb.html +55 -0
 - data/doc/files/lib/asset_hat/capistrano_rb.html +49 -0
 - data/doc/files/lib/asset_hat/css_rb.html +57 -0
 - data/doc/files/lib/asset_hat/js/vendors_rb.html +49 -0
 - data/doc/files/lib/asset_hat/js_rb.html +57 -0
 - data/doc/files/lib/asset_hat/tasks/css_rb.html +49 -0
 - data/doc/files/lib/asset_hat/tasks/js_rb.html +49 -0
 - data/doc/files/lib/asset_hat/tasks_rb.html +58 -0
 - data/doc/files/lib/asset_hat/vcs_rb.html +49 -0
 - data/doc/files/lib/asset_hat/version_rb.html +49 -0
 - data/doc/files/lib/asset_hat_rb.html +49 -0
 - data/doc/fr_class_index.html +23 -0
 - data/doc/fr_file_index.html +33 -0
 - data/doc/fr_method_index.html +4455 -0
 - data/doc/index.html +15 -0
 - data/doc/rdoc-style.css +328 -0
 - data/lib/asset_hat/capistrano.rb +14 -0
 - data/lib/asset_hat/css.rb +40 -10
 - data/lib/asset_hat/js/vendors.rb +85 -0
 - data/lib/asset_hat/js.rb +28 -29
 - data/lib/asset_hat/tasks/css.rb +151 -0
 - data/lib/asset_hat/tasks/js.rb +100 -0
 - data/lib/asset_hat/tasks.rb +4 -272
 - data/lib/asset_hat/vcs.rb +23 -20
 - data/lib/asset_hat/version.rb +2 -0
 - data/lib/asset_hat.rb +94 -19
 - data/tasks/asset_hat.rake +1 -1
 - data/test/asset_hat_helper_test.rb +63 -9
 - data/test/test_helper.rb +5 -1
 - metadata +94 -26
 - 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 
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
               
     | 
| 
       9 
     | 
    
         
            -
               
     | 
| 
      
 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  
     | 
| 
      
 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 
     | 
    
         
            -
                     
     | 
| 
       128 
     | 
    
         
            -
                       
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                         
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
      
 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. 
     | 
| 
      
 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 
     | 
    
         
            -
               
     | 
| 
      
 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- 
     | 
| 
      
 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:  
     | 
| 
       18 
     | 
    
         
            -
               
     | 
| 
       19 
     | 
    
         
            -
               
     | 
| 
       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 
     | 
    
         
            -
                     
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
      
 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:  
     | 
| 
      
 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 
     | 
    
         
            -
               
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
                     
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
               
     | 
| 
       39 
     | 
    
         
            -
               
     | 
| 
       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 
     | 
    
         
            -
             
     | 
| 
      
 75 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 76 
     | 
    
         
            +
              version_requirements: *id004
         
     | 
| 
       46 
77 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       47 
78 
     | 
    
         
             
              name: jsmin
         
     | 
| 
       48 
     | 
    
         
            -
               
     | 
| 
       49 
     | 
    
         
            -
               
     | 
| 
       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 
     | 
    
         
            -
             
     | 
| 
      
 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. 
     | 
| 
      
 99 
     | 
    
         
            +
            - README.rdoc
         
     | 
| 
       65 
100 
     | 
    
         
             
            files: 
         
     | 
| 
       66 
101 
     | 
    
         
             
            - .gitignore
         
     | 
| 
       67 
102 
     | 
    
         
             
            - HISTORY
         
     | 
| 
       68 
103 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       69 
     | 
    
         
            -
            - README. 
     | 
| 
      
 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. 
     | 
| 
      
 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.
         
     |