Class: Glimmer::Launcher
- Inherits:
-
Object
- Object
- Glimmer::Launcher
- Defined in:
- lib/glimmer/launcher.rb
Overview
Launcher of glimmer applications and main entry point for the ‘glimmer` command.
Constant Summary collapse
- OPERATING_SYSTEMS_SUPPORTED =
["mac", "windows", "linux"]
- TEXT_USAGE =
TODO convert to a bash script to achieve faster startup time
<<~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]) 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 =
/^([^\[]+)\[?([^\]]*)\]?$/
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
- .is_arm64? ⇒ Boolean
- .jruby_os_specific_options ⇒ Object
- .launch(application, jruby_options: [], env_vars: {}, glimmer_options: {}) ⇒ Object
- .load_env_vars(env_vars) ⇒ Object
- .platform_os ⇒ Object
- .special_cpu_architecture_suffix ⇒ 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.
159 160 161 162 163 164 165 166 |
# File 'lib/glimmer/launcher.rb', line 159 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_path = extract_application_path() @env_vars = extract_env_vars() @glimmer_options = () @jruby_options = end |
Instance Attribute Details
#application_paths ⇒ Object (readonly)
Returns the value of attribute application_paths.
154 155 156 |
# File 'lib/glimmer/launcher.rb', line 154 def application_paths @application_paths end |
#env_vars ⇒ Object (readonly)
Returns the value of attribute env_vars.
155 156 157 |
# File 'lib/glimmer/launcher.rb', line 155 def env_vars @env_vars end |
#glimmer_options ⇒ Object (readonly)
Returns the value of attribute glimmer_options.
156 157 158 |
# File 'lib/glimmer/launcher.rb', line 156 def @glimmer_options end |
#jruby_options ⇒ Object (readonly)
Returns the value of attribute jruby_options.
157 158 159 |
# File 'lib/glimmer/launcher.rb', line 157 def @jruby_options end |
Class Method Details
.dev_mode? ⇒ Boolean
103 104 105 |
# File 'lib/glimmer/launcher.rb', line 103 def dev_mode? glimmer_lib == GLIMMER_LIB_LOCAL end |
.glimmer_lib ⇒ Object
92 93 94 95 96 97 98 99 100 101 |
# File 'lib/glimmer/launcher.rb', line 92 def glimmer_lib unless @glimmer_lib @glimmer_lib = GLIMMER_LIB_GEM if File.exists?(GLIMMER_LIB_LOCAL) @glimmer_lib = GLIMMER_LIB_LOCAL puts "[DEVELOPMENT MODE] (detected #{@glimmer_lib})" end end @glimmer_lib end |
.glimmer_option_env_vars(glimmer_options) ⇒ Object
107 108 109 110 111 |
# File 'lib/glimmer/launcher.rb', line 107 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 |
.is_arm64? ⇒ Boolean
75 76 77 78 |
# File 'lib/glimmer/launcher.rb', line 75 def is_arm64? host_cpu = OS.host_cpu.downcase host_cpu.include?('aarch64') || host_cpu.include?('arm') end |
.jruby_os_specific_options ⇒ Object
88 89 90 |
# File 'lib/glimmer/launcher.rb', line 88 def OS.mac? ? "-J-XstartOnFirstThread" : "" end |
.launch(application, jruby_options: [], env_vars: {}, glimmer_options: {}) ⇒ Object
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 |
# File 'lib/glimmer/launcher.rb', line 119 def launch(application, jruby_options: [], env_vars: {}, glimmer_options: {}) = .join(' ') + ' ' if .any? env_vars = env_vars.merge(glimmer_option_env_vars()) env_vars.each do |k,v| ENV[k] = v end the_glimmer_lib = glimmer_lib require 'puts_debuggerer' if the_glimmer_lib == GLIMMER_LIB_LOCAL is_rake_task = !application.end_with?('.rb') rake_tasks = [] if is_rake_task load File.('./Rakefile') if File.exist?(File.('./Rakefile')) && caller.join("\n").include?('/bin/glimmer:') 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(',') end 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 puts "Launching Glimmer Application: #{application}" if .to_s.include?('--debug') || ['--quiet'].to_s.downcase != 'true' require the_glimmer_lib load File.(application) end end |
.load_env_vars(env_vars) ⇒ Object
113 114 115 116 117 |
# File 'lib/glimmer/launcher.rb', line 113 def load_env_vars(env_vars) env_vars.each do |key, value| ENV[key] = value end end |
.platform_os ⇒ Object
71 72 73 |
# File 'lib/glimmer/launcher.rb', line 71 def platform_os OPERATING_SYSTEMS_SUPPORTED.detect {|os| OS.send("#{os}?")} end |
.special_cpu_architecture_suffix ⇒ Object
80 81 82 |
# File 'lib/glimmer/launcher.rb', line 80 def special_cpu_architecture_suffix is_arm64? ? "_aarch64" : '' end |
.swt_jar_file ⇒ Object
84 85 86 |
# File 'lib/glimmer/launcher.rb', line 84 def swt_jar_file @swt_jar_file ||= File.(File.join(__FILE__, '..', '..', '..', 'vendor', 'swt', platform_os + special_cpu_architecture_suffix, 'swt.jar')) end |
Instance Method Details
#launch ⇒ Object
168 169 170 171 172 173 174 |
# File 'lib/glimmer/launcher.rb', line 168 def launch if @application_path.nil? display_usage else launch_application end end |