Class: Jammit::CommandLine

Inherits:
Object
  • Object
show all
Defined in:
lib/jammit/command_line.rb

Overview

The CommandLine is able to compress, pre-package, and pre-gzip all the assets specified in the configuration file, in order to avoid an initial round of slow requests after a fresh deployment.

Constant Summary

<<-EOS

Usage: jammit OPTIONS

Run jammit inside a Rails application to compresses all JS, CSS,
and JST according to config/assets.yml, saving the packaged
files and corresponding gzipped versions.

If you're using "embed_assets", and you wish to precompile the
MHTML stylesheet variants, you must specify the "base-url".

Options:
EOS

Instance Method Summary (collapse)

Constructor Details

- (CommandLine) initialize

The Jammit::CommandLine runs from the contents of ARGV.



26
27
28
29
30
# File 'lib/jammit/command_line.rb', line 26

def initialize
  parse_options
  ensure_configuration_file
  Jammit.package!(@options)
end

Instance Method Details

- (Object) ensure_configuration_file (private)

Make sure that we have a readable configuration file. The jammit command can’t run without one.



37
38
39
40
41
42
# File 'lib/jammit/command_line.rb', line 37

def ensure_configuration_file
  config = @options[:config_path]
  return true if File.exists?(config) && File.readable?(config)
  puts "Could not find the asset configuration file \"#{config}\""
  exit(1)
end

- (Object) parse_options (private)

Uses OptionParser to grab the options: —output, —config, and —base-url



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
80
# File 'lib/jammit/command_line.rb', line 46

def parse_options
  @options = {
    :config_path    => Jammit::DEFAULT_CONFIG_PATH,
    :output_folder  => nil,
    :base_url       => nil,
    :force          => false
  }
  @option_parser = OptionParser.new do |opts|
    opts.on('-o', '--output PATH', 'output folder for packages (default: "public/assets")') do |output_folder|
      @options[:output_folder] = output_folder
    end
    opts.on('-c', '--config PATH', 'path to assets.yml (default: "config/assets.yml")') do |config_path|
      @options[:config_path] = config_path
    end
    opts.on('-u', '--base-url URL', 'base URL for MHTML (ex: "http://example.com")') do |base_url|
      @options[:base_url] = base_url
    end
    opts.on('-f', '--force', 'force a rebuild of all assets') do |force|
      @options[:force] = force
    end
    opts.on('-p', '--packages LIST', 'list of packages to build (ex: "core,ui", default: all)') do |package_names|
      @options[:package_names] = package_names.split(/,\s*/).map {|n| n.to_sym }
    end
    opts.on('-P', '--public-root PATH', 'path to public assets (default: "public")') do |public_root|
      puts "Option for PUBLIC_ROOT"
      @options[:public_root] = public_root
    end
    opts.on_tail('-v', '--version', 'display Jammit version') do
      puts "Jammit version #{Jammit::VERSION}"
      exit
    end
  end
  @option_parser.banner = BANNER
  @option_parser.parse!(ARGV)
end