Sha256: fb96b07dde82618a6ca875a8f3921116c256e3b6db03d43d7d2e07103723a2b8

Contents?: true

Size: 1.52 KB

Versions: 3

Compression:

Stored size: 1.52 KB

Contents

module Less
  class Loader
    include CallJS

    def initialize
      lock do
        @cxt = V8::Context.new
        @path = Pathname(__FILE__).dirname.join('js','lib')
        @exports = {
          "path" => Path.new,
          "sys" => Sys.new,
          "fs" => Fs.new
        }
        @process = Process.new
        @cxt['console'] = Console.new
      end
    end
    
    def require(path)
      unless exports = @exports[path]
        filename = path =~ /\.js$/ ? path : "#{path}.js"
        filepath = @path.join(filename)
        fail LoadError, "no such file: #{filename}" unless filepath.exist?
        lock do
          load = @cxt.eval("(function(process, require, exports, __dirname) {require.paths = [];#{File.read(filepath)}})", filepath.expand_path)
          @exports[path] = exports = @cxt['Object'].new
          load.call(@process, method(:require), exports, Dir.pwd)
        end
      end
      return exports
    end
    
    class Path
      def join(*components)
        File.join(*components)
      end
      
      def dirname(path)
        File.dirname(path)
      end
    end
    
    class Sys
      def error(*errors)
        raise errors.join(' ')
      end
    end

    class Fs
      def statSync(path)
        File.stat(path)
      end
      
      def readFile(path, encoding, callback)
        callback.call(nil, File.read(path))
      end
      
    end

    class Process
      def exit(*args)
      end
    end
    
    class Console
      def log(*msgs)
        puts msgs.join(',')
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
less-2.0.7 lib/less/loader.rb
less-2.0.6 lib/less/loader.rb
less-2.0.5 lib/less/loader.rb