class Condenser::PurgeCSSProcessor
Attributes
options[RW]
Public Class Methods
call(environment, input)
click to toggle source
Public: initialize with custom options.
dir - String (path to node_modules directory) options - Hash
content - Array - html files to process ex. [File.expand_path('./docs-src/**/*.erb'), File.expand_path('./docs-src/assets/javascripts/**/*.js')]
Options are passed to PurgeCSS checkout [PurgeCSS Configurations](purgecss.com/configuration.html)
# File lib/condenser/processors/purgecss_processor.rb, line 17 def self.call(environment, input) @instances ||= {} @instances[environment] ||= new(environment.npm_path, { content: [File.join(environment.base, '**/*.html'), File.join(environment.base, '**/*.js')] }) @instances[environment].call(environment, input) end
new(dir = nil, options = {})
click to toggle source
Calls superclass method
Condenser::NodeProcessor::new
# File lib/condenser/processors/purgecss_processor.rb, line 26 def initialize(dir = nil, options = {}) super(dir) @options = options npm_install('purgecss') end
Public Instance Methods
call(environment, input)
click to toggle source
# File lib/condenser/processors/purgecss_processor.rb, line 32 def call(environment, input) result = exec_runtime(<<-JS) const { PurgeCSS } = require("#{File.join(npm_module_path('purgecss'))}") const options = #{@options.to_json} options.css = [{ raw: #{input[:source].inspect} }] if(options.safelist) { options.safelist = options.safelist.map(s => { if(s[0] == "/" && s[s.length - 1] == "/") { return new RegExp(s.slice(1, -1)) } return s }) } const result = new PurgeCSS().purge(options) try { result.then( r => console.log(JSON.stringify({ success: r[0] })), function() {console.log(JSON.stringify({'error': arguments}))} ) } catch(e) { console.log(JSON.stringify({'error': [e.name, e.message, e.stack]})); } JS if result['error'] if result['error'][0] == 'SyntaxError' raise exec_syntax_error(result['error'][1], "/assets/#{input[:filename]}") else raise exec_runtime_error(result['error'][0] + ': ' + result['error'][1]) end else input[:source] = result["success"]["css"] end end