Project

cjoiner

0.0
No commit activity in last 3 years
No release in over 3 years
Join css and js assets and create a versioned file.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 3.2.5
= 1.0.2
 Project Readme

cjoiner is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

cjoiner is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with cjoiner. If not, see http://www.gnu.org/licenses/.

cjoiner

Join css, js or other text files and create a versioned file. It also supports compression.

For now cjoiner is designed to work with javascript using sprockets v.1.0.2 and css using sass, also you can join files using a yaml to define sources.

Author

Alejandro El Informático

Installation

$ [sudo] gem install cjoiner

Usage

As CLI tool

cjoiner will use pwd as a primary path and will look for config.yaml file if no config_file is passed as argument.

$ cjoiner [config_file]

As a library

require 'cjoiner'

Using an object:

cjoiner = Cjoiner::Joiner.new data
cjoiner.proccess!

Using the yaml file:

cjoiner = Cjoiner::Joiner.new
cjoiner.load_config! 'config.yaml'
cjoiner.proccess!

Configuration file

This is the skeleton for the configuration file or the data object:

config.yaml

  • config: configuration wrapper
    • compress: {boolean} set compression for all files
    • yui: {string} the yui-compressor java file to use if wanted
    • munge: {boolean} short the variable names for js files
    • charset: {string} set the charset
    • debug: {boolean} save a file without compression, just all the concatenation
    • debug_suffix: {string} suffix for the debug file, usually name.debug.extension
    • common_dependencies: {array} general dependencies array
    • common_path: {string} common path for all items
    • common_output: {string} common output path for all files
    • undebugjs : {boolean} remove console statements
    • undebugjs_prefix : {string} set the console prefix
    • files: define files
      • file: {string} path and name for file (assuming common_path as root) to process, ex: javascripts/all.js
        • name: {string} output name
        • extension: {string} output extension
        • type: {string} file type, sass, js or yaml, this is optional as cjoiner can guess by the extension
        • undebugjs : {boolean} remove console statements per file configuration
        • major: {int} major release
        • minor: {int} minor release
        • bugfix: {int} bugfix number
        • compilation: {int} compilation number
        • compress: {boolean} set compresion for this file, overrides general compression flag
        • debug: {boolean} set debug for this file, overrides general debug flag
        • dependencies: {array} custom dependencies array for this file
        • output: {string} file output assuming common_output as root
Remove console statements

This option must be activated globally or per-file configuration and only works for uncompressed files. This engine is basically a simple regex that remove all those lines matching console statements.

Also, you can set your own console prefix. for example:

undebugjs_prefix : APP

will remove APP.log([...]), APP.warn([...])...

Join text files

Set file type to yaml and define sources in another yaml file:

files:
  - file-1.extension
  - file-2.extension
  - file-3.extension

Example

$ cjoiner project.yaml

### project.yaml
config :
  common_path         : /work/project/
  common_output       : /work/project/output/
  undebugjs           : true
  debug               : true
  common_dependencies : [
    javascripts/src/,
    javascripts/src/core/,
    javascripts/src/lib/,
    sass/
  ]
  files:
    javascripts/all.js :
      name         : all
      extension    : js
      major        : 1
      minor        : 0
      bugfix       : 0
      compilation  : 0
      output       : /javascripts/
    sass/css.sass  :
      type         : sass
      name         : css
      extension    : css
      major        : 0
      minor        : 0
      bugfix       : 0
      compilation  : 1
      output       : /stylesheets/
    other.yaml :
      name         : files
      extension    : output
      major        : 1
      minor        : 1
      bugfix       : 1
      compilation  : 1

### all.js (sprockets file)
//= require "lib.js"
//= require "debug.js"
//= require "vendor/plugin.js"

### css.sass (sass file)
@import defines
@import mixins
@import general

### other.yaml (other files)
files:
  - file-1.extension
  - file-2.extension
  - file-3.extension

Will generate two compressed files and two debug files for javascript and sass files, and other file for the other files:

  1. /work/project/output/javascripts/all.1.0.0.0.js
  2. /work/project/output/javascripts/all.debug.js
  3. /work/project/output/stylesheets/css.1.0.0.0.js
  4. /work/project/output/stylesheets/css.debug.js
  5. /work/project/output/files.1.1.1.1.output

Requirements

  • ruby 1.8.7, 1.9.3
    • rubygems > 1.3.7
    • gems
      • sprockets 1.0.2
      • yui-compressor > 0.9.6
      • sass > 3.1.4

TODO

  • Create tests