Sha256: d0cfeb05e6d349ec66941baf4499ca9fd812b220861ae596bcd2e8bfdbba82fc

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

module Pleeease

  class NodeRunner< Struct.new(:script, :environment)
    def run
      IO.popen(env, cmd, "r+") do |f|
        # pump stdout
        lines = []
        f.each do |line|
          lines << line
        end

        lines.join
      end
    end

    def env
      environment || ENV
    end

    def cmd
      [ 'node', '-e', script ]
    end

  end

  class Runner < Struct.new(:css)
    NodePath = File.expand_path('../../../node_modules', __FILE__)

    def process
      node_runner.run
    rescue
      raise Error.new("could not process the input file: #{$!.message}")
    end

    private

    def node_runner
      NodeRunner.new(script, env)
    end

    def script
      <<-EOS
      var pleeease = require('pleeease'),
          fs       = require('fs');

        var css = "#{escape_js(css)}"

        var options = {};
        var fixed = pleeease.process(css, options);

        console.log(fixed);
      EOS
    end

    def env
      { 'NODE_PATH' => NodePath }
    end

    JS_ESCAPE_MAP = { '\\' => '\\\\', '</' => '<\/', "\r\n" => '\n', "\n" => '\n', "\r" => '\n', '"' => '\\"', "'" => "\\'" }
    def escape_js(javascript)
      javascript.gsub(/(\|<\/|\r\n|\342\200\250|\342\200\251|[\n\r"'])/u) {|match| JS_ESCAPE_MAP[match] }
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pleeease-0.0.3 lib/pleeease/runner.rb