The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Rex::Apache::Build - Build your WebApp Package

DESCRIPTION

With this module you can prepare your WebApp for deployment.

SYNOPSIS

 yui_path "./yuicompressor-2.4.6.jar";
     
 get_version_from "webapp/lib/MyApp.pm", qr{\$VERSION=([^;]+);};
     
 get_version_from "webapp/index.php", qr{\$VERSION=([^;]+);};
     
 task "build", sub {
    sprocketize;
    sprocketize "app/assets/javascript/*.js",
      out => "public/js/sprockets.js";
        
    coffee;
    coffee "app/assets/coffee",
      out => "public/js";
      
    sass;
    sass "app/assets/stylesheets",
      out => "public/stylesheets";
          
    yui;
    yui compress => "file1.js", "file2.js", "file3.css"; 
    yui compress => glob("public/javascript/*.js"), glob("public/css/*.css");
         
    build;
        
    build "webapp",
      path => "webapp/",
      version => "1.0";
 };

EXPORTED FUNCTIONS

yui_path($path_to_yui_compressor)

This function sets the path to the yui_compressor. If a relative path is given it will search from the path where the Rexfile is in.

coffee_path($path_to_coffee)

This function sets the path to the coffee compiler. If a relative path is given it will search from the path where the Rexfile is in.

sprocketize_path($path_to_sprocketize)

This function sets the path to the sprocketize compiler. If a relative path is given it will search from the path where the Rexfile is in.

sass_path($path_to_sass)

This function sets the path to the sass compiler. If a relative path is given it will search from the path where the Rexfile is in.

yui($action, @files)

Run a yui command.

 task "build", sub {
    # this will compress the given files
    yui compress => "file1.js", "file2.js", ...;
     
    # yui without any parameters will compress all files in public/javascripts
    yui;
 };
build([$name, %options])

This function builds your package. Currently only tar.gz packages are supported.

 # this will a package of the current directory named after the 
 # directory of the Rexfile and append the version provided by 
 # get_version_from() function
 # This function builds a tar.gz archive.
 task "build", sub {
    build;
 };
    
 # this will build a package of the current directory named "my-web-app" and 
 # append the version provided by get_version_from() function.
 task "build", sub {
    build "my-web-app";
 };
     
 # this function will build a package of the directory "html", name it 
 # "my-web-app" and append the version "1.0" to it.
 task "build", sub {
    build "my-web-app",
       path => "html",
       version => "1.0",
       exclude => ["yuicompressor.jar", "foobar.html"];
 };
get_version_from($file, $regexp)

Get the version out of a file.

sprocketize($path_to_js_files, %option)

This function calls the sprocketize command with the given options.

 task "build", sub {
    sprocketize "app/javascript/*.js",
                  include    => [qw|app/javascripts vendor/sprockets/prototype/src|],
                  asset_root => "public/js",
                  out        => "public/js/sprockets.js";
     
    # to include more use an arrayRef
    sprocketize ["app/javascript/*.js", "app/javascript/po/*.js"],
                  include    => [qw|app/javascripts vendor/sprockets/prototype/src|],
                  asset_root => "public/js",
                  out        => "public/js/sprockets.js";
         
    # if called without parameters
     
    sprocketize;
     
    # it will use the following defaults:
    # - javascript (sprockets) in assets/javascripts/*.js
    # - include  assets/javascripts
    # - asset_root public
    # - out public/${name_of_directory_where_Rexfile_lives}.js
 };
coffee($path, %options)

Compile coffee files to javascript.

 task "build", sub {
    # this command will build all files in "coffeesrc" and
    # write the output to "javascripts"
    coffee "coffeesrc",
         out  => "javascripts";
     
    # without parameters it will build all files in assets/coffee 
    # and write the output to public/javascripts.
    coffee;
 };
sass($input_dir, %option)

This command will compile all sass files in $input_dir.

 task "build", sub {
    # this command will compile all sass files from app/assets/stylesheets
    # and put the output into public/stylesheets.
    sass "app/assets/stylesheets",
      out => "public/stylesheets";
    
    # The default is to build all files in assets/sass and put the output
    # into public/css.
    sass;
 };