Class: Glimmer::Launcher

Inherits:
Object
  • Object
show all
Defined in:
lib/glimmer/launcher.rb

Constant Summary collapse

OPERATING_SYSTEMS_SUPPORTED =
["mac", "windows", "linux"]
TEXT_USAGE =
"  Usage: glimmer [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] application.rb [[application2.rb]...]\n\n  Runs Glimmer applications using JRuby, automatically preloading\n  the glimmer ruby gem and SWT jar dependency.\n\n  Optionally, JRuby options may be passed in.\n\n  Example: glimmer samples/hello_world.rb\n  This runs the Glimmer application samples/hello_world.rb\n"
GLIMMER_LIB_LOCAL =
File.expand_path(File.join(__FILE__, '..', '..', 'glimmer.rb'))
GLIMMER_LIB_GEM =
'glimmer'
GLIMMER_OPTIONS =
%w[--log-level]
GLIMMER_OPTION_ENV_VAR_MAPPING =
{
  '--log-level' => 'GLIMMER_LOGGER_LEVEL'
}
@@mutex =
Mutex.new

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw_options) ⇒ Launcher

Returns a new instance of Launcher.



71
72
73
74
75
76
# File 'lib/glimmer/launcher.rb', line 71

def initialize(raw_options)
  @application_paths = extract_application_paths(raw_options)
  @env_vars = extract_env_vars(raw_options)
  @glimmer_options = extract_glimmer_options(raw_options)
  @jruby_options = raw_options
end

Class Method Details

.glimmer_libObject



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/glimmer/launcher.rb', line 43

def glimmer_lib
  @@mutex.synchronize do
    unless @glimmer_lib
      @glimmer_lib = GLIMMER_LIB_GEM
      glimmer_gem_listing = `jgem list #{GLIMMER_LIB_GEM}`
      if !glimmer_gem_listing.include?(GLIMMER_LIB_GEM) && File.exists?(GLIMMER_LIB_LOCAL)
        @glimmer_lib = GLIMMER_LIB_LOCAL
        puts "[DEVELOPMENT MODE] (detected #{@glimmer_lib})"
      end
    end
  end
  @glimmer_lib
end

.glimmer_option_env_vars(glimmer_options) ⇒ Object



57
58
59
60
61
# File 'lib/glimmer/launcher.rb', line 57

def glimmer_option_env_vars(glimmer_options)
  glimmer_options.map do |k, v|
    "#{GLIMMER_OPTION_ENV_VAR_MAPPING[k]}=#{v}"
  end.join(' ')
end

.jruby_os_specific_optionsObject



35
36
37
# File 'lib/glimmer/launcher.rb', line 35

def jruby_os_specific_options
  OS.mac? ? "-J-XstartOnFirstThread" : ""
end

.jruby_swt_optionsObject



39
40
41
# File 'lib/glimmer/launcher.rb', line 39

def jruby_swt_options
  "#{jruby_os_specific_options} -J-classpath \"#{swt_jar_file}\""
end

.launch(application, jruby_options: [], env_vars: {}, glimmer_options: {}) ⇒ Object



63
64
65
66
67
68
# File 'lib/glimmer/launcher.rb', line 63

def launch(application, jruby_options: [], env_vars: {}, glimmer_options: {})
  jruby_options_string = jruby_options.join(' ') + ' ' if jruby_options.any?
  env_vars_string = env_vars.map {|k,v| "#{k}=#{v}"}.join(' ')
  env_vars_string = [env_vars_string, glimmer_option_env_vars(glimmer_options)].join(' ')
  system "#{env_vars_string} jruby #{jruby_options_string}#{jruby_os_specific_options} -r #{glimmer_lib} -S #{application}"
end

.platform_osObject



27
28
29
# File 'lib/glimmer/launcher.rb', line 27

def platform_os
  OPERATING_SYSTEMS_SUPPORTED.detect {|os| OS.send("#{os}?")}
end

.swt_jar_fileObject



31
32
33
# File 'lib/glimmer/launcher.rb', line 31

def swt_jar_file
  @swt_jar_file ||= File.expand_path(File.join(__FILE__, '..', '..', '..', 'vendor', 'swt', platform_os, 'swt.jar'))
end

Instance Method Details

#launchObject



78
79
80
81
82
83
84
# File 'lib/glimmer/launcher.rb', line 78

def launch
  if @application_paths.empty?
    display_usage
  else
    launch_application
  end
end