Class: Clementine::ClojureScriptEngine

Inherits:
Object
  • Object
show all
Defined in:
lib/clementine/clojurescript_engine.rb,
lib/clementine/clojurescript_engine_mri.rb

Instance Method Summary collapse

Constructor Details

#initialize(file, options) ⇒ ClojureScriptEngine

Returns a new instance of ClojureScriptEngine.



8
9
10
11
# File 'lib/clementine/clojurescript_engine.rb', line 8

def initialize(file, options)
  @file = file
  @options = options
end

Instance Method Details

#commandObject



40
41
42
43
44
45
46
47
# File 'lib/clementine/clojurescript_engine_mri.rb', line 40

def command
  if defined? Nailgun
    setup_classpath_for_ng
    [nailgun_prefix, 'clojure.main', "#{CLOJURESCRIPT_HOME}/bin/cljsc.clj"].flatten.join(' ')
  else
    ["java", '-cp', "\"#{@classpath.join ":"}\"", 'clojure.main', "#{CLOJURESCRIPT_HOME}/bin/cljsc.clj"].flatten.join(' ')
  end
end

#compileObject



13
14
15
16
17
18
19
# File 'lib/clementine/clojurescript_engine.rb', line 13

def compile
  @options = Clementine.options if @options.empty?
  cl_opts = PersistentHashMap.create(convert_options(@options))
  RT.loadResourceScript("cljs/closure.clj")
  builder = RT.var("cljs.closure", "build")
  builder.invoke(@file, cl_opts)
end

#default_optsObject



38
39
40
41
42
43
44
45
46
47
# File 'lib/clementine/clojurescript_engine.rb', line 38

def default_opts
  key = "output_dir"
  value = ""
  if defined?(Rails)
    value = File.join(Rails.root, "app", "assets", "javascripts", "clementine")
  else
    value = Dir.pwd
  end
  {key => value}
end

#nailgun_prefixObject



26
27
28
29
30
# File 'lib/clementine/clojurescript_engine_mri.rb', line 26

def nailgun_prefix
  server_address = Nailgun::NailgunConfig.options[:server_address]
  port_no  = Nailgun::NailgunConfig.options[:port_no]
  "#{Nailgun::NgCommand::NGPATH} --nailgun-port #{port_no} --nailgun-server #{server_address}"
end

#setup_classpath_for_ngObject



32
33
34
35
36
37
38
# File 'lib/clementine/clojurescript_engine_mri.rb', line 32

def setup_classpath_for_ng
  current_cp = `#{nailgun_prefix} ng-cp`
  unless current_cp.include? "clojure.jar"
    puts "Initializing nailgun classpath, required clementine dependencies missing"
    `#{nailgun_prefix} ng-cp #{@classpath.join " "}`
  end
end