Class: Glimmer::Launcher
- Inherits:
-
Object
- Object
- Glimmer::Launcher
- Defined in:
- lib/glimmer/launcher.rb
Constant Summary collapse
- OPERATING_SYSTEMS_SUPPORTED =
["mac", "windows", "linux"]
- TEXT_USAGE_PREFIX =
<<~MULTI_LINE_STRING Usage: glimmer [--debug] [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] (application.rb or task[task_args]) [[application2.rb]...] Runs Glimmer applications/tasks. Either a single task or one or more applications may be specified. When a task is specified, it runs via rake. Some tasks take arguments in square brackets. Available tasks are below (you may also lookup by adding `require 'glimmer/rake_task'` in Rakefile and running rake -T): MULTI_LINE_STRING
- TEXT_USAGE_SUFFIX =
<<~MULTI_LINE_STRING When applications are specified, they are run using JRuby, automatically preloading the glimmer Ruby gem and SWT jar dependency. Optionally, extra Glimmer options, JRuby options and environment variables may be passed in. Glimmer options: - "--debug" : Displays extra debugging information and passes "--debug" to JRuby - "--log-level=VALUE" : Sets Glimmer's Ruby logger level ("ERROR" / "WARN" / "INFO" / "DEBUG"; default is "WARN") Example: glimmer samples/hello_world.rb This runs the Glimmer application samples/hello_world.rb MULTI_LINE_STRING
- GLIMMER_LIB_LOCAL =
File.(File.join(__FILE__, '..', '..', 'glimmer.rb'))
- GLIMMER_LIB_GEM =
'glimmer'
- GLIMMER_OPTIONS =
%w[--log-level]
- GLIMMER_OPTION_ENV_VAR_MAPPING =
{ '--log-level' => 'GLIMMER_LOGGER_LEVEL' }
- REGEX_RAKE_TASK_WITH_ARGS =
/^([^\[]+)\[?([^\]]*)\]?$/
- @@mutex =
Mutex.new
Instance Attribute Summary collapse
-
#application_paths ⇒ Object
readonly
Returns the value of attribute application_paths.
-
#env_vars ⇒ Object
readonly
Returns the value of attribute env_vars.
-
#glimmer_options ⇒ Object
readonly
Returns the value of attribute glimmer_options.
-
#jruby_options ⇒ Object
readonly
Returns the value of attribute jruby_options.
Class Method Summary collapse
- .glimmer_lib ⇒ Object
- .glimmer_option_env_vars(glimmer_options) ⇒ Object
- .jruby_os_specific_options ⇒ Object
- .jruby_swt_options ⇒ Object
- .launch(application, jruby_options: [], env_vars: {}, glimmer_options: {}) ⇒ Object
- .load_env_vars(env_vars) ⇒ Object
- .platform_os ⇒ Object
- .swt_jar_file ⇒ Object
Instance Method Summary collapse
-
#initialize(raw_options) ⇒ Launcher
constructor
A new instance of Launcher.
- #launch ⇒ Object
Constructor Details
#initialize(raw_options) ⇒ Launcher
Returns a new instance of Launcher.
125 126 127 128 129 130 |
# File 'lib/glimmer/launcher.rb', line 125 def initialize() @application_paths = extract_application_paths() @env_vars = extract_env_vars() @glimmer_options = () @jruby_options = end |
Instance Attribute Details
#application_paths ⇒ Object (readonly)
Returns the value of attribute application_paths.
120 121 122 |
# File 'lib/glimmer/launcher.rb', line 120 def application_paths @application_paths end |
#env_vars ⇒ Object (readonly)
Returns the value of attribute env_vars.
121 122 123 |
# File 'lib/glimmer/launcher.rb', line 121 def env_vars @env_vars end |
#glimmer_options ⇒ Object (readonly)
Returns the value of attribute glimmer_options.
122 123 124 |
# File 'lib/glimmer/launcher.rb', line 122 def @glimmer_options end |
#jruby_options ⇒ Object (readonly)
Returns the value of attribute jruby_options.
123 124 125 |
# File 'lib/glimmer/launcher.rb', line 123 def @jruby_options end |
Class Method Details
.glimmer_lib ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/glimmer/launcher.rb', line 65 def glimmer_lib @@mutex.synchronize do unless @glimmer_lib @glimmer_lib = GLIMMER_LIB_GEM glimmer_gem_listing = `jgem list #{GLIMMER_LIB_GEM}`.split("\n").map {|l| l.split.first} 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
79 80 81 82 83 |
# File 'lib/glimmer/launcher.rb', line 79 def glimmer_option_env_vars() .reduce({}) do |hash, pair| hash.merge(GLIMMER_OPTION_ENV_VAR_MAPPING[pair.first] => pair.last) end end |
.jruby_os_specific_options ⇒ Object
57 58 59 |
# File 'lib/glimmer/launcher.rb', line 57 def OS.mac? ? "-J-XstartOnFirstThread" : "" end |
.jruby_swt_options ⇒ Object
61 62 63 |
# File 'lib/glimmer/launcher.rb', line 61 def "#{} -J-classpath \"#{swt_jar_file}\"" end |
.launch(application, jruby_options: [], env_vars: {}, glimmer_options: {}) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/glimmer/launcher.rb', line 91 def launch(application, jruby_options: [], env_vars: {}, glimmer_options: {}) = .join(' ') + ' ' if .any? env_vars = env_vars.merge(glimmer_option_env_vars()) env_vars_string = env_vars.map {|k,v| "#{k}=#{v}"}.join(' ') the_glimmer_lib = glimmer_lib devmode_require = nil if the_glimmer_lib == GLIMMER_LIB_LOCAL devmode_require = '-r puts_debuggerer ' end rake_tasks = Rake.application.tasks.map(&:to_s).map {|t| t.sub('glimmer:', '')} potential_rake_task_parts = application.match(REGEX_RAKE_TASK_WITH_ARGS) application = potential_rake_task_parts[1] rake_task_args = potential_rake_task_parts[2].split(',') if rake_tasks.include?(application) load_env_vars(glimmer_option_env_vars()) rake_task = "glimmer:#{application}" puts "Running Glimmer rake task: #{rake_task}" if .to_s.include?('--debug') Rake::Task[rake_task].invoke(*rake_task_args) else @@mutex.synchronize do puts "Launching Glimmer Application: #{application}" unless application.to_s.match(/(irb)|(gladiator)/) end command = "#{env_vars_string} jruby #{}#{} #{devmode_require}-r #{the_glimmer_lib} -S #{application}" puts command if .to_s.include?('--debug') system command end end |
.load_env_vars(env_vars) ⇒ Object
85 86 87 88 89 |
# File 'lib/glimmer/launcher.rb', line 85 def load_env_vars(env_vars) env_vars.each do |key, value| ENV[key] = value end end |
.platform_os ⇒ Object
49 50 51 |
# File 'lib/glimmer/launcher.rb', line 49 def platform_os OPERATING_SYSTEMS_SUPPORTED.detect {|os| OS.send("#{os}?")} end |
.swt_jar_file ⇒ Object
53 54 55 |
# File 'lib/glimmer/launcher.rb', line 53 def swt_jar_file @swt_jar_file ||= File.(File.join(__FILE__, '..', '..', '..', 'vendor', 'swt', platform_os, 'swt.jar')) end |
Instance Method Details
#launch ⇒ Object
132 133 134 135 136 137 138 |
# File 'lib/glimmer/launcher.rb', line 132 def launch if @application_paths.empty? display_usage else launch_application end end |