Class: Rack::Pack

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/pack.rb,
lib/rack/pack/package.rb,
lib/rack/pack/version.rb,
lib/rack/pack/javascript.rb,
lib/rack/pack/stylesheet.rb

Defined Under Namespace

Classes: Javascript, Package, Stylesheet

Constant Summary collapse

DEFAULT_OPTIONS =
{
  :public_dir      => 'public',
  :always_update   => false,
  :always_compress => false,
  :js_compression  => {},
  :css_compression => {}
}.freeze
VERSION =
'0.2.1'

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ Pack

Returns a new instance of Pack.



36
37
38
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
# File 'lib/rack/pack.rb', line 36

def initialize(app, options = {})
  @app = app
  
  Pack.packages    = {}
  Pack.options     = DEFAULT_OPTIONS.dup
  Pack.environment = if defined?(RAILS_ENV)
    RAILS_ENV # Rails 2
  elsif defined?(Rails) && defined?(Rails.env)
    Rails.env # Rails 3
  elsif defined?(app.settings) && defined?(app.settings.environment)
    app.settings.environment # Sinatra
  elsif ENV.key?('RACK_ENV')
    ENV['RACK_ENV']
  else
    :development
  end
  
  Pack.options.each_key do |key|
    Pack.options[key] = options.delete(key) if options.key?(key)
  end
  
  Pack.add_package 'javascripts/application.js',  '{vendor,app,.}/javascripts/*.js'
  Pack.add_package 'stylesheets/application.css', '{vendor,app,.}/stylesheets/*.css'
  
  options.each do |to_file, from_files|
    Pack.add_package(to_file, from_files)
  end
end

Class Attribute Details

.environmentObject

Returns the value of attribute environment.



19
20
21
# File 'lib/rack/pack.rb', line 19

def environment
  @environment
end

.optionsObject

Returns the value of attribute options.



19
20
21
# File 'lib/rack/pack.rb', line 19

def options
  @options
end

.packagesObject

Returns the value of attribute packages.



19
20
21
# File 'lib/rack/pack.rb', line 19

def packages
  @packages
end

Class Method Details

.add_package(output_file, source_files) ⇒ Object



25
26
27
28
29
30
31
32
33
# File 'lib/rack/pack.rb', line 25

def add_package(output_file, source_files)
  if source_files.nil?
    packages.delete(output_file)
  else
    public_output_file    = ::File.join(self.options[:public_dir], output_file.to_s)
    package_class         = Package[output_file]
    packages[output_file] = package_class.new(public_output_file, source_files)
  end
end

.production?Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/rack/pack.rb', line 21

def production?
  self.environment.to_s == 'production'
end

Instance Method Details

#call(env) ⇒ Object



65
66
67
68
# File 'lib/rack/pack.rb', line 65

def call(env)
  update_packages unless skip_update?
  @app.call(env)
end