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 =
<<~MULTI_LINE_STRING Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v#{File.read(File.('../../../VERSION', __FILE__))} Usage: glimmer [--bundler] [--pd] [--quiet] [--debug] [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] (application.rb or task[task_args]) [[application2.rb]...] Runs Glimmer applications and tasks. 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/or environment variables may be passed in. Glimmer options: - "--bundler=GROUP" : Activates gems in Bundler default group in Gemfile - "--pd=BOOLEAN" : Requires puts_debuggerer to enable pd method - "--quiet=BOOLEAN" : Does not announce file path of Glimmer application being launched - "--debug" : Displays extra debugging information, passes "--debug" to JRuby, and enables debug logging - "--log-level=VALUE" : Sets Glimmer's Ruby logger level ("ERROR" / "WARN" / "INFO" / "DEBUG"; default is none) Tasks are run via rake. Some tasks take arguments in square brackets. Available tasks are below (if you do not see any, please add `require 'glimmer/rake_task'` to Rakefile and rerun or run rake -T): MULTI_LINE_STRING
- GLIMMER_LIB_LOCAL =
File.(File.join('lib', 'glimmer-dsl-swt.rb'))
- GLIMMER_LIB_GEM =
'glimmer-dsl-swt'
- GLIMMER_OPTIONS =
%w[--log-level --quiet --bundler --pd]
- GLIMMER_OPTION_ENV_VAR_MAPPING =
{ '--log-level' => 'GLIMMER_LOGGER_LEVEL' , '--bundler' => 'GLIMMER_BUNDLER_SETUP' , '--pd' => 'PD' , }
- 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
- .dev_mode? ⇒ Boolean
- .glimmer_lib ⇒ Object
- .glimmer_option_env_vars(glimmer_options) ⇒ Object
- .jruby_os_specific_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.
165 166 167 168 169 170 171 172 |
# File 'lib/glimmer/launcher.rb', line 165 def initialize() << '--quiet' if !caller.join("\n").include?('/bin/glimmer:') && !.join.include?('--quiet=') << '--log-level=DEBUG' if .join.include?('--debug') && !.join.include?('--log-level=') @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.
160 161 162 |
# File 'lib/glimmer/launcher.rb', line 160 def application_paths @application_paths end |
#env_vars ⇒ Object (readonly)
Returns the value of attribute env_vars.
161 162 163 |
# File 'lib/glimmer/launcher.rb', line 161 def env_vars @env_vars end |
#glimmer_options ⇒ Object (readonly)
Returns the value of attribute glimmer_options.
162 163 164 |
# File 'lib/glimmer/launcher.rb', line 162 def @glimmer_options end |
#jruby_options ⇒ Object (readonly)
Returns the value of attribute jruby_options.
163 164 165 |
# File 'lib/glimmer/launcher.rb', line 163 def @jruby_options end |
Class Method Details
.dev_mode? ⇒ Boolean
96 97 98 |
# File 'lib/glimmer/launcher.rb', line 96 def dev_mode? glimmer_lib == GLIMMER_LIB_LOCAL end |
.glimmer_lib ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/glimmer/launcher.rb', line 82 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
100 101 102 103 104 |
# File 'lib/glimmer/launcher.rb', line 100 def glimmer_option_env_vars() GLIMMER_OPTION_ENV_VAR_MAPPING.reduce({}) do |hash, pair| [pair.first] ? hash.merge(GLIMMER_OPTION_ENV_VAR_MAPPING[pair.first] => [pair.first]) : hash end end |
.jruby_os_specific_options ⇒ Object
78 79 80 |
# File 'lib/glimmer/launcher.rb', line 78 def OS.mac? ? "-J-XstartOnFirstThread" : "" end |
.launch(application, jruby_options: [], env_vars: {}, glimmer_options: {}) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/glimmer/launcher.rb', line 112 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 do |k,v| if OS.windows? && ENV['PROMPT'] # detect command prompt (or powershell) "set #{k}=#{v} && " else "export #{k}=#{v} && " end end.join the_glimmer_lib = glimmer_lib devmode_require = nil if the_glimmer_lib == GLIMMER_LIB_LOCAL devmode_require = '-r puts_debuggerer ' end require_relative 'rake_task' rake_tasks = Rake.application.tasks.map(&:to_s).map {|t| t.sub('glimmer:', '')} # handle a bash quirk with calling package[msi] while there is a "packages" directory locally (it passes package[msi] as packages) application = 'package[msi]' if application == 'packages' 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}" if .to_s.include?('--debug') || ['--quiet'].to_s.downcase != 'true' end command = "#{env_vars_string} jruby #{}#{} #{devmode_require}-r #{the_glimmer_lib} -S #{application}" if !env_vars_string.empty? && OS.windows? command = "bash -c \"#{command}\"" if ENV['SHELL'] # do in Windows Git Bash only command = "cmd /C \"#{command}\"" if ENV['PROMPT'] # do in Windows Command Prompt only (or Powershell) end puts command if .to_s.include?('--debug') if command.include?(' irb ') exec command else system command end end end |
.load_env_vars(env_vars) ⇒ Object
106 107 108 109 110 |
# File 'lib/glimmer/launcher.rb', line 106 def load_env_vars(env_vars) env_vars.each do |key, value| ENV[key] = value end end |
.platform_os ⇒ Object
70 71 72 |
# File 'lib/glimmer/launcher.rb', line 70 def platform_os OPERATING_SYSTEMS_SUPPORTED.detect {|os| OS.send("#{os}?")} end |
.swt_jar_file ⇒ Object
74 75 76 |
# File 'lib/glimmer/launcher.rb', line 74 def swt_jar_file @swt_jar_file ||= File.(File.join(__FILE__, '..', '..', '..', 'vendor', 'swt', platform_os, 'swt.jar')) end |
Instance Method Details
#launch ⇒ Object
174 175 176 177 178 179 180 |
# File 'lib/glimmer/launcher.rb', line 174 def launch if @application_paths.empty? display_usage else launch_application end end |