Module: Sinatra::AssetPack::ClassMethods

Included in:
Sinatra::AssetPack
Defined in:
lib/sinatra/assetpack/class_methods.rb

Overview

Class methods that will be given to the Sinatra application.

Instance Method Summary collapse

Instance Method Details

#add_compressed_routes!Object

Add routes for the compressed versions



24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/sinatra/assetpack/class_methods.rb', line 24

def add_compressed_routes!
  assets.packages.each do |name, package|
    get package.route_regex do
      mtime, contents = @template_cache.fetch(package.path) {
        [ package.mtime, package.minify ]
      }

      content_type package.type
      last_modified mtime
      contents
    end
  end
end

#add_individual_routes!Object

Add the routes for the individual files.



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/sinatra/assetpack/class_methods.rb', line 39

def add_individual_routes!
  assets.served.each do |path, from|
    get %r{#{"^/#{path}/".squeeze('/')}(.*)$} do |file|
      fmt = File.extname(file)[1..-1]

      # Sanity checks
      pass unless AssetPack.supported_formats.include?(fmt)
      fn = asset_path_for(file, from)  or pass

      pass  if settings.assets.ignored?("#{path}/#{file}")

      # Send headers
      content_type fmt.to_sym
      last_modified File.mtime(fn).to_i
      expires 86400*30, :public

      format = File.extname(fn)[1..-1]

      if AssetPack.supported_formats.include?(format)
        # It's a raw file, just send it
        not_found  unless format == fmt

        if fmt == 'css'
          @template_cache.fetch(fn) { asset_filter_css File.read(fn) }
        else
          send_file fn
        end
      else
        # Dynamic file
        not_found unless AssetPack.tilt_formats[format] == fmt

        @template_cache.fetch(fn) {
          out = render format.to_sym, File.read(fn)
          out = asset_filter_css(out)  if fmt == 'css'
          out
        }
      end
    end
  end

end

#assets(&blk) ⇒ Object

Sets asset options, or gets them



6
7
8
9
10
11
# File 'lib/sinatra/assetpack/class_methods.rb', line 6

def assets(&blk)
  @options ||= Options.new(self, &blk)
  self.assets_initialize!  if block_given?

  @options
end

#assets_initialize!Object



13
14
15
16
17
18
19
20
21
# File 'lib/sinatra/assetpack/class_methods.rb', line 13

def assets_initialize!
  add_compressed_routes!
  add_individual_routes!

  # Cache the built files.
  if assets.prebuild && !reload_templates
    assets.cache! { |file| $stderr.write "** Building #{file}...\n" }
  end
end