class Sqreen::Js::JsService

Public Class Methods

new() click to toggle source
# File lib/sqreen/js/js_service.rb, line 15
def initialize
  detect_adapter
end

Public Instance Methods

online?() click to toggle source
# File lib/sqreen/js/js_service.rb, line 25
def online?
  @online
end
prepare(rule_name, code) click to toggle source

@return [Sqreen::Js::ExecutableJs]

# File lib/sqreen/js/js_service.rb, line 20
def prepare(rule_name, code)
  raise 'Not online' unless online?
  @adapter.preprocess(rule_name, code)
end
variant() click to toggle source
# File lib/sqreen/js/js_service.rb, line 29
def variant
  @adapter.variant_name
end

Private Instance Methods

detect_adapter() click to toggle source
# File lib/sqreen/js/js_service.rb, line 35
def detect_adapter
  @online = try_sq_mini_racer || try_rhino

  Sqreen.log.info "JS engine online: #{variant}" if @online
end
try_rhino() click to toggle source
# File lib/sqreen/js/js_service.rb, line 56
def try_rhino
  gem = Gem.loaded_specs['therubyrhino']
  unless gem
    Sqreen.log.info "therubyrhino gem not detected"
    return false
  end

  require 'rhino'
  require 'sqreen/js/execjs_adapter'
  @adapter = ExecjsAdapter.new
rescue LoadError => e
  Sqreen.log.warn "Failed loading rhino: #{e}"
  false
end
try_sq_mini_racer() click to toggle source
# File lib/sqreen/js/js_service.rb, line 41
def try_sq_mini_racer
  gem = Gem.loaded_specs['sq_mini_racer']
  unless gem
    Sqreen.log.info "sq_mini_racer gem not detected"
    return false
  end

  require 'sqreen/mini_racer'
  require 'sqreen/js/mini_racer_adapter'
  @adapter = MiniRacerAdapter.new(true)
rescue LoadError => e
  Sqreen.log.warn "Failed loading sq_mini_racer: #{e}"
  false
end