Class: H8::Coffee

Inherits:
Object show all
Defined in:
lib/h8/coffee.rb

Overview

Coffeescript compiler and evaluator (language version 1.8.0)

Note that using global eval/compile is more efficient than create several compiler instance as compiler itself will then be compiled only once.

Constant Summary collapse

@@compiler =
nil
@@mutex =
Mutex.new

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCoffee

Create compiler instance.



37
38
39
40
41
# File 'lib/h8/coffee.rb', line 37

def initialize
  @context = H8::Context.new noglobals: true
  @context.eval read_script 'coffee-script.js'
  eval read_script('globals.coffee')
end

Class Method Details

.compile(src, **kwargs) ⇒ Object

Compile coffeescript and return javascript. Keyword parameters are passed to H8::Context#eval - like time limits and so on.

This method IS THREAD SAFE, though it shares single compiler instance across all threads with a mutex.



30
31
32
33
34
# File 'lib/h8/coffee.rb', line 30

def self.compile src, ** kwargs
  @@mutex.synchronize {
    (@@compiler ||= Coffee.new).compile src, **kwargs
  }
end

.eval(src, **kwargs) ⇒ Object

Compile and evaluate script.

This method IS THREAD SAFE, it shares single compiler instance across all threads with a mutex.



19
20
21
22
23
# File 'lib/h8/coffee.rb', line 19

def self.eval src, ** kwargs
  @@mutex.synchronize {
    (@@compiler ||= Coffee.new).eval src, **kwargs
  }
end

Instance Method Details

#compile(src, file_name: nil, **kwargs) ⇒ Object

compile coffeescript source and return compiled javascript



44
45
46
47
48
49
50
# File 'lib/h8/coffee.rb', line 44

def compile src, file_name: nil, **kwargs
  @context[:cs] = src
  @context[:filename] = file_name
  res = @context.eval('CoffeeScript.compile(cs,{filename: filename})')
  @context[:cs] = nil # Sources can be big...
  res
end

#contextObject

Provide context with CoffeeScrip compiler loaded



59
60
61
# File 'lib/h8/coffee.rb', line 59

def context
  @context
end

#eval(src, **kwargs) ⇒ Object

Compile and evaulate coffee script. Optional parameters are passed to H8::Context#eval



54
55
56
# File 'lib/h8/coffee.rb', line 54

def eval src, **kwargs
  @context.eval compile(src), **kwargs
end