glimmer-dsl-swt 0.5.6 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/RUBY_VERSION +1 -1
  4. data/VERSION +1 -1
  5. data/bin/girb +1 -1
  6. data/bin/glimmer +1 -1
  7. data/icons/scaffold_app.ico +0 -0
  8. data/icons/scaffold_app.png +0 -0
  9. data/lib/ext/glimmer/config.rb +5 -1
  10. data/lib/glimmer/Rakefile +5 -0
  11. data/lib/glimmer/dsl/swt/cursor_expression.rb +23 -0
  12. data/lib/glimmer/dsl/swt/dsl.rb +3 -0
  13. data/lib/glimmer/dsl/swt/font_expression.rb +26 -0
  14. data/lib/glimmer/dsl/swt/image_expression.rb +21 -0
  15. data/lib/glimmer/dsl/swt/message_box_expression.rb +9 -1
  16. data/lib/glimmer/dsl/swt/widget_expression.rb +7 -7
  17. data/lib/glimmer/launcher.rb +36 -8
  18. data/lib/glimmer/package.rb +31 -7
  19. data/lib/glimmer/rake_task.rb +111 -6
  20. data/lib/glimmer/scaffold.rb +98 -62
  21. data/lib/glimmer/swt/cursor_proxy.rb +45 -0
  22. data/lib/glimmer/swt/display_proxy.rb +13 -2
  23. data/lib/glimmer/swt/font_proxy.rb +7 -7
  24. data/lib/glimmer/swt/image_proxy.rb +16 -23
  25. data/lib/glimmer/swt/layout_proxy.rb +2 -0
  26. data/lib/glimmer/swt/message_box_proxy.rb +23 -5
  27. data/lib/glimmer/swt/scrolled_composite_proxy.rb +6 -11
  28. data/lib/glimmer/swt/style_constantizable.rb +11 -1
  29. data/lib/glimmer/swt/table_proxy.rb +50 -2
  30. data/lib/glimmer/swt/widget_proxy.rb +79 -18
  31. data/samples/elaborate/contact_manager.rb +121 -0
  32. data/samples/elaborate/contact_manager/contact.rb +11 -0
  33. data/samples/elaborate/contact_manager/contact_manager_presenter.rb +26 -0
  34. data/samples/elaborate/contact_manager/contact_repository.rb +244 -0
  35. data/samples/elaborate/login.rb +108 -0
  36. data/samples/elaborate/tic_tac_toe.rb +55 -0
  37. data/samples/elaborate/tic_tac_toe/board.rb +124 -0
  38. data/samples/elaborate/tic_tac_toe/cell.rb +27 -0
  39. data/samples/hello/hello_browser.rb +8 -0
  40. data/samples/hello/hello_combo.rb +38 -0
  41. data/samples/hello/hello_computed.rb +69 -0
  42. data/samples/hello/hello_computed/contact.rb +21 -0
  43. data/samples/hello/hello_drag_and_drop.rb +29 -0
  44. data/samples/hello/hello_list_multi_selection.rb +48 -0
  45. data/samples/hello/hello_list_single_selection.rb +37 -0
  46. data/samples/hello/hello_menu_bar.rb +64 -0
  47. data/samples/hello/hello_message_box.rb +15 -0
  48. data/samples/hello/hello_pop_up_context_menu.rb +36 -0
  49. data/samples/hello/hello_tab.rb +24 -0
  50. data/samples/hello/hello_world.rb +8 -0
  51. data/vendor/swt/linux/swt.jar +0 -0
  52. data/vendor/swt/mac/swt.jar +0 -0
  53. data/vendor/swt/windows/swt.jar +0 -0
  54. metadata +48 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3db01899522fb71b0c6248500a33dea99db22fb65290a05ad08ace90b8b0abf8
4
- data.tar.gz: 4cc5bc3f816a1b452e29e36d178ce9c77addfee660abd89bdf047f6d21660508
3
+ metadata.gz: 82c0437f480a9bfc7064ec9cf10bc196a3bbb644d8fe20832c02eda79565435a
4
+ data.tar.gz: 418e810fad2c7f12280b78848931c743d619a8cc28f04f7a438092de9fed12e7
5
5
  SHA512:
6
- metadata.gz: ecbb06bef3ba8d11c71107b1f68ce8be3a1beb8147cf845f346a7561d193252a7774cd9460b3b05b1f664e502c8ca6cdf1a7cd444561834783e1097d29b5890a
7
- data.tar.gz: 74c311becb1cc511005cc6c92804f81001757cb0a04f927f7b07811f1a3f5fcd6dd5d3a48e9504777d452781899b953432ee512abc72ba90858bd7aadbd7c3ea
6
+ metadata.gz: dadb4107a2480af548a5e1f79f60b44a798e0ae2aa130e14dae4e1878d7211418c53ab88be39cb8adcfe42a1fc3846b46e06f5e90dccb984299896eef90f15a9
7
+ data.tar.gz: f902727a93b33a3aa0f013484b44f648fc2f991766f612ebb4e093c932389032417f8fe038de17609f7a28e3324d158419a1e502d07cd822b104658a7b4fb33c
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 0.5.6 (Desktop GUI)
1
+ # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 0.6.4 (Desktop GUI)
2
2
  [![Gem Version](https://badge.fury.io/rb/glimmer-dsl-swt.svg)](http://badge.fury.io/rb/glimmer-dsl-swt)
3
3
  [![Travis CI](https://travis-ci.com/AndyObtiva/glimmer-dsl-swt.svg?branch=master)](https://travis-ci.com/github/AndyObtiva/glimmer-dsl-swt)
4
4
  [![Coverage Status](https://coveralls.io/repos/github/AndyObtiva/glimmer-dsl-swt/badge.svg?branch=master)](https://coveralls.io/github/AndyObtiva/glimmer-dsl-swt?branch=master)
@@ -1 +1 @@
1
- jruby-9.2.12.0
1
+ jruby-9.2.13.0
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.6
1
+ 0.6.4
data/bin/girb CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env jruby
2
2
 
3
3
  trap "SIGINT" do
4
4
  # No Op for irb
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env jruby
2
2
 
3
3
  require_relative '../lib/glimmer/launcher'
4
4
 
Binary file
Binary file
@@ -100,7 +100,11 @@ if ENV['GLIMMER_LOGGER_LEVEL']
100
100
  # if glimmer log level is being overridden for debugging purposes, then disable async logging making logging immediate
101
101
  Glimmer::Config.logging_appender_options = Glimmer::Config.logging_appender_options.merge(async: false, auto_flushing: 1)
102
102
  Glimmer::Config.logging_devices = [:stdout]
103
- Glimmer::Config.logger.level = ENV['GLIMMER_LOGGER_LEVEL']
103
+ begin
104
+ Glimmer::Config.logger.level = ENV['GLIMMER_LOGGER_LEVEL'].strip
105
+ rescue => e
106
+ puts e.message
107
+ end
104
108
  end
105
109
  Glimmer::Config.excluded_keyword_checkers << lambda do |method_symbol, *args|
106
110
  method = method_symbol.to_s
@@ -0,0 +1,5 @@
1
+ # This Rakefile gets used from Glimmer::Launcher when the current directory for running the `glimmer` command
2
+ # does not have a Rakefile (e.g. during scaffolding).
3
+ # It is not needed when running from inside a scaffolded app or gem, or an app with a Rakefile that has
4
+ # `require 'glimmer/rake_task'`
5
+ require 'glimmer/rake_task'
@@ -0,0 +1,23 @@
1
+ require 'glimmer/dsl/expression'
2
+ require 'glimmer/swt/cursor_proxy'
3
+
4
+ module Glimmer
5
+ module DSL
6
+ module SWT
7
+ # cursor expression
8
+ # Note: Cannot be a static expression because it clashes with cursor property expression
9
+ class CursorExpression < Expression
10
+ def can_interpret?(parent, keyword, *args, &block)
11
+ keyword.to_s == 'cursor' and
12
+ (parent.nil? or !parent.respond_to?('cursor')) and
13
+ args.size == 1 and
14
+ (args.first.is_a?(Integer) or textual?(args.first))
15
+ end
16
+
17
+ def interpret(parent, keyword, *args, &block)
18
+ Glimmer::SWT::CursorProxy.new(*args)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -24,6 +24,9 @@ module Glimmer
24
24
  tree_items_data_binding
25
25
  table_items_data_binding
26
26
  data_binding
27
+ cursor
28
+ font
29
+ image
27
30
  property
28
31
  block_property
29
32
  widget
@@ -0,0 +1,26 @@
1
+ require 'glimmer/dsl/expression'
2
+ require 'glimmer/dsl/top_level_expression'
3
+ require 'glimmer/swt/font_proxy'
4
+
5
+ module Glimmer
6
+ module DSL
7
+ module SWT
8
+ # font expression
9
+ # Note: Cannot be a static expression because it clashes with font property expression
10
+ class FontExpression < Expression
11
+ include TopLevelExpression
12
+
13
+ def can_interpret?(parent, keyword, *args, &block)
14
+ keyword.to_s == 'font' and
15
+ (parent.nil? || !parent.respond_to?('font')) and
16
+ args.size == 1 and
17
+ args.first.is_a?(Hash)
18
+ end
19
+
20
+ def interpret(parent, keyword, *args, &block)
21
+ Glimmer::SWT::FontProxy.new(*args)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,21 @@
1
+ require 'glimmer/dsl/expression'
2
+ require 'glimmer/swt/image_proxy'
3
+
4
+ module Glimmer
5
+ module DSL
6
+ module SWT
7
+ # image expression
8
+ # Note: Cannot be a static expression because it clashes with image property expression
9
+ class ImageExpression < Expression
10
+ def can_interpret?(parent, keyword, *args, &block)
11
+ keyword.to_s == 'image' and
12
+ (parent.nil? or !parent.respond_to?('image'))
13
+ end
14
+
15
+ def interpret(parent, keyword, *args, &block)
16
+ Glimmer::SWT::ImageProxy.new(*args)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -16,7 +16,15 @@ module Glimmer
16
16
 
17
17
  def interpret(parent, keyword, *args, &block)
18
18
  potential_parent = args.first
19
- parent = args.shift if potential_parent.is_a?(Shell) || (potential_parent.respond_to?(:swt_widget) && potential_parent.swt_widget.is_a?(Shell))
19
+ potential_parent = potential_parent.swt_widget if potential_parent.respond_to?(:swt_widget)
20
+ parent = nil
21
+ if potential_parent.is_a?(Shell)
22
+ args.shift
23
+ parent = potential_parent
24
+ elsif potential_parent.is_a?(Widget)
25
+ args.shift
26
+ parent = potential_parent.shell
27
+ end
20
28
  Glimmer::SWT::MessageBoxProxy.new(parent, Glimmer::SWT::SWTProxy[args])
21
29
  end
22
30
  end
@@ -17,14 +17,14 @@ module Glimmer
17
17
  end
18
18
 
19
19
  def interpret(parent, keyword, *args, &block)
20
- begin
21
- class_name = "#{keyword.camelcase(:upper)}Proxy".to_sym
22
- widget_class = Glimmer::SWT.const_get(class_name)
23
- rescue
24
- widget_class = Glimmer::SWT::WidgetProxy
25
- end
26
- widget_class.new(keyword, parent, args)
20
+ Glimmer::SWT::WidgetProxy.create(keyword, parent, args)
27
21
  end
22
+
23
+ def add_content(parent, &block)
24
+ super
25
+ parent.post_add_content
26
+ end
27
+
28
28
  end
29
29
  end
30
30
  end
@@ -1,3 +1,5 @@
1
+ require 'fileutils'
2
+
1
3
  require_relative 'rake_task'
2
4
 
3
5
  module Glimmer
@@ -5,6 +7,7 @@ module Glimmer
5
7
  OPERATING_SYSTEMS_SUPPORTED = ["mac", "windows", "linux"]
6
8
 
7
9
  TEXT_USAGE_PREFIX = <<~MULTI_LINE_STRING
10
+ Glimmer (Ruby Desktop Development GUI Library) - JRuby Gem: glimmer-dsl-swt v#{File.read(File.expand_path('../../../VERSION', __FILE__))}
8
11
  Usage: glimmer [--quiet] [--debug] [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] (application.rb or task[task_args]) [[application2.rb]...]
9
12
 
10
13
  Runs Glimmer applications/tasks.
@@ -13,7 +16,7 @@ module Glimmer
13
16
 
14
17
  When a task is specified, it runs via rake. Some tasks take arguments in square brackets.
15
18
 
16
- Available tasks are below (you may also lookup by adding `require 'glimmer/rake_task'` in Rakefile and running rake -T):
19
+ Available tasks are below (if you do not see any, please add `require 'glimmer/rake_task'` to Rakefile and rerun or run rake -T):
17
20
  MULTI_LINE_STRING
18
21
 
19
22
  TEXT_USAGE_SUFFIX = <<~MULTI_LINE_STRING
@@ -73,6 +76,10 @@ module Glimmer
73
76
  end
74
77
  @glimmer_lib
75
78
  end
79
+
80
+ def dev_mode?
81
+ glimmer_lib == GLIMMER_LIB_LOCAL
82
+ end
76
83
 
77
84
  def glimmer_option_env_vars(glimmer_options)
78
85
  GLIMMER_OPTION_ENV_VAR_MAPPING.reduce({}) do |hash, pair|
@@ -89,13 +96,23 @@ module Glimmer
89
96
  def launch(application, jruby_options: [], env_vars: {}, glimmer_options: {})
90
97
  jruby_options_string = jruby_options.join(' ') + ' ' if jruby_options.any?
91
98
  env_vars = env_vars.merge(glimmer_option_env_vars(glimmer_options))
92
- env_vars_string = env_vars.map {|k,v| "#{k}=#{v}"}.join(' ')
99
+ env_vars_string = env_vars.map do |k,v|
100
+ if OS.windows? && ENV['PROMPT'] # detect command prompt (or powershell)
101
+ "set #{k}=#{v} && "
102
+ else
103
+ "export #{k}=#{v} && "
104
+ end
105
+ end.join
93
106
  the_glimmer_lib = glimmer_lib
94
107
  devmode_require = nil
95
108
  if the_glimmer_lib == GLIMMER_LIB_LOCAL
96
109
  devmode_require = '-r puts_debuggerer '
97
110
  end
98
111
  rake_tasks = Rake.application.tasks.map(&:to_s).map {|t| t.sub('glimmer:', '')}
112
+
113
+ # handle a bash quirk with calling package[msi] while there is a "packages" directory locally (it passes package[msi] as packages)
114
+ application = 'package[msi]' if application == 'packages'
115
+
99
116
  potential_rake_task_parts = application.match(REGEX_RAKE_TASK_WITH_ARGS)
100
117
  application = potential_rake_task_parts[1]
101
118
  rake_task_args = potential_rake_task_parts[2].split(',')
@@ -109,8 +126,16 @@ module Glimmer
109
126
  puts "Launching Glimmer Application: #{application}" if jruby_options_string.to_s.include?('--debug') || glimmer_options['--quiet'].to_s.downcase != 'true'
110
127
  end
111
128
  command = "#{env_vars_string} jruby #{jruby_options_string}#{jruby_os_specific_options} #{devmode_require}-r #{the_glimmer_lib} -S #{application}"
129
+ if !env_vars_string.empty? && OS.windows?
130
+ command = "bash -c \"#{command}\"" if ENV['SHELL'] # do in Windows Git Bash only
131
+ command = "cmd /C \"#{command}\"" if ENV['PROMPT'] # do in Windows Command Prompt only (or Powershell)
132
+ end
112
133
  puts command if jruby_options_string.to_s.include?('--debug')
113
- system command
134
+ if command.include?(' irb ')
135
+ exec command
136
+ else
137
+ system command
138
+ end
114
139
  end
115
140
  end
116
141
  end
@@ -155,11 +180,14 @@ module Glimmer
155
180
  end
156
181
 
157
182
  def display_usage
158
- rake_tasks = `rake -T`.gsub('rake glimmer:', 'glimmer ').split("\n").select {|l| l.start_with?('glimmer ')}
159
- puts TEXT_USAGE_PREFIX
160
- puts rake_tasks.join("\n")
161
- puts TEXT_USAGE_SUFFIX
162
- end
183
+ rakefile_dir = File.exist?('Rakefile') ? '.' : File.dirname(__FILE__)
184
+ FileUtils.cd(rakefile_dir) do
185
+ rake_tasks = `rake -T`.gsub('rake glimmer:', 'glimmer ').split("\n").select {|l| l.start_with?('glimmer ')}
186
+ puts TEXT_USAGE_PREFIX
187
+ puts rake_tasks.join("\n")
188
+ puts TEXT_USAGE_SUFFIX
189
+ end
190
+ end
163
191
 
164
192
  def extract_application_paths(options)
165
193
  options.select do |option|
@@ -6,6 +6,7 @@ module Glimmer
6
6
  module Package
7
7
  class << self
8
8
  attr_accessor :javapackager_extra_args
9
+ alias jpackage_extra_args :javapackager_extra_args
9
10
 
10
11
  def clean
11
12
  require 'fileutils'
@@ -41,7 +42,16 @@ module Glimmer
41
42
  system('warble')
42
43
  end
43
44
 
44
- def native
45
+ def lock_jars
46
+ puts 'Locking gem jar-dependencies by downloading & storing in vendor/jars...'
47
+ FileUtils.mkdir_p('vendor/jars')
48
+ command = "lock_jars --vendor-dir vendor/jars"
49
+ puts command
50
+ system command
51
+ end
52
+
53
+ def native(native_type=nil, native_extra_args)
54
+ puts "Generating native executable with javapackager/jpackage..."
45
55
  require 'facets/string/titlecase'
46
56
  require 'facets/string/underscore'
47
57
  project_name = File.basename(File.expand_path('.'))
@@ -51,14 +61,28 @@ module Glimmer
51
61
  license = (File.read(license_file).strip if File.exists?(license_file) && File.file?(license_file)) rescue nil
52
62
  copyright = license.split("\n").first
53
63
  human_name = project_name.underscore.titlecase
54
- command = "javapackager -deploy -native -outdir packages -outfile \"#{project_name}\" -srcfiles \"dist/#{project_name}.jar\" -appclass JarMain -name \"#{human_name}\" -title \"#{human_name}\" -Bmac.CFBundleName=\"#{human_name}\" -Bmac.CFBundleIdentifier=\"org.#{project_name}.application.#{project_name}\" -Bmac.category=\"public.app-category.business\" -BinstalldirChooser=true -Bvendor=\"#{human_name}\" -Bwin.menuGroup=\"#{human_name}\" -BsystemWide=#{OS.mac?} "
55
- command += " -BjvmOptions=-XstartOnFirstThread " if OS.mac?
56
- command += " -BappVersion=#{version} -Bmac.CFBundleVersion=#{version} " if version
57
- command += " -srcfiles LICENSE.txt -BlicenseFile=LICENSE.txt " if license
58
- command += " -Bcopyright=\"#{copyright}\" " if copyright
64
+ icon = "package/#{OS.mac? ? 'macosx' : 'windows'}/#{human_name}.#{OS.mac? ? 'icns' : 'ico'}"
65
+ if (`javapackager`.to_s.include?('Usage: javapackager') rescue nil)
66
+ command = "javapackager -deploy -native #{native_type} -outdir packages -outfile \"#{project_name}\" -srcfiles \"dist/#{project_name}.jar\" -appclass JarMain -name \"#{human_name}\" -title \"#{human_name}\" -Bmac.CFBundleName=\"#{human_name}\" -Bmac.CFBundleIdentifier=\"org.#{project_name}.application.#{project_name}\" -Bmac.category=\"public.app-category.business\" -BinstalldirChooser=true -Bvendor=\"#{human_name}\" -Bwin.menuGroup=\"#{human_name}\" "
67
+ command += " -BsystemWide=false " if OS.windows?
68
+ command += " -BjvmOptions=-XstartOnFirstThread " if OS.mac?
69
+ command += " -BappVersion=#{version} -Bmac.CFBundleVersion=#{version} " if version
70
+ command += " -srcfiles LICENSE.txt -BlicenseFile=LICENSE.txt " if license
71
+ command += " -Bcopyright=\"#{copyright}\" " if copyright
72
+ elsif (`jpackage`.to_s.include?('Usage: jpackage') rescue nil)
73
+ command = "jpackage --type #{native_type} --dest 'packages/bundles' --input 'dist' --main-class JarMain --main-jar '#{project_name}.jar' --name '#{human_name}' --vendor '#{human_name}' --icon '#{icon}' "
74
+ command += " --win-per-user-install --win-dir-chooser --win-menu --win-menu-group '#{human_name}' " if OS.windows?
75
+ command += " --java-options '-XstartOnFirstThread' --mac-package-name '#{human_name}' --mac-package-identifier 'org.#{project_name}.application.#{project_name}' " if OS.mac?
76
+ command += " --app-version \"#{version}\" " if version
77
+ command += " --license-file LICENSE.txt " if license
78
+ command += " --copyright \"#{copyright}\" " if copyright
79
+ else
80
+ puts "Neither javapackager nor jpackage exist in your Java installation. Please ensure javapackager or jpackage is available in PATH environment variable."
81
+ return
82
+ end
59
83
  command += " #{javapackager_extra_args} " if javapackager_extra_args
60
84
  command += " #{ENV['JAVAPACKAGER_EXTRA_ARGS']} " if ENV['JAVAPACKAGER_EXTRA_ARGS']
61
- puts "Generating DMG/PKG/APP/JNLP with javapackager..."
85
+ command += " #{native_extra_args} " if native_extra_args
62
86
  puts command
63
87
  system command
64
88
  end
@@ -3,6 +3,103 @@ require 'rake'
3
3
  require_relative 'package'
4
4
 
5
5
  namespace :glimmer do
6
+ namespace :sample do
7
+ desc 'Runs a Glimmer internal sample [included in gem]. If no name is supplied, it runs all samples.'
8
+ task :run, [:name] => :requires do |t, args|
9
+ name = args[:name]
10
+ name = name.underscore.downcase unless name.nil?
11
+ samples = (Dir.glob(File.expand_path('../../../samples/hello/*.rb', __FILE__)) + Dir.glob(File.expand_path('../../../samples/elaborate/*.rb', __FILE__))).sort
12
+ samples = samples.select {|path| path.include?("#{name}.rb")} unless name.nil?
13
+ Rake::Task['glimmer:sample:code'].invoke(name) if samples.size == 1
14
+ Glimmer::Launcher.new(samples << '--quiet=false').launch
15
+ end
16
+
17
+ namespace :run do
18
+ task :hello do
19
+ samples = Dir.glob(File.expand_path('../../../samples/hello/*.rb', __FILE__)).sort
20
+ Glimmer::Launcher.new(samples << '--quiet=false').launch
21
+ end
22
+
23
+ task :elaborate do
24
+ samples = Dir.glob(File.expand_path('../../../samples/elaborate/*.rb', __FILE__)).sort
25
+ Glimmer::Launcher.new(samples << '--quiet=false').launch
26
+ end
27
+ end
28
+
29
+ desc 'Lists Glimmer internal samples [included in gem]. Filters by query if specified (query is optional)'
30
+ task :list, [:query] do |t, args|
31
+ Rake::Task['glimmer:sample:list:hello'].invoke(args[:query])
32
+ Rake::Task['glimmer:sample:list:elaborate'].invoke(args[:query])
33
+ end
34
+
35
+ namespace :list do
36
+ task :hello, [:query] => :requires do |t, args|
37
+ array_of_arrays = Dir.glob(File.expand_path('../../../samples/hello/*.rb', __FILE__)).map do |path|
38
+ File.basename(path, '.rb')
39
+ end.select do |path|
40
+ args[:query].nil? || path.include?(args[:query])
41
+ end.map do |path|
42
+ [path, path.underscore.titlecase, "#{'bin/' if Glimmer::Launcher.dev_mode?}glimmer sample:run[#{path}]"]
43
+ end.sort
44
+ puts
45
+ puts " Glimmer Hello Samples (run all via: #{'bin/' if Glimmer::Launcher.dev_mode?}glimmer sample:run:hello):"
46
+ puts Text::Table.new(
47
+ :head => %w[Name Description Run],
48
+ :rows => array_of_arrays,
49
+ :horizontal_padding => 1,
50
+ :vertical_boundary => ' ',
51
+ :horizontal_boundary => ' ',
52
+ :boundary_intersection => ' '
53
+ )
54
+ end
55
+
56
+ task :elaborate, [:query] => :requires do |t, args|
57
+ array_of_arrays = Dir.glob(File.expand_path('../../../samples/elaborate/*.rb', __FILE__)).map do |path|
58
+ File.basename(path, '.rb')
59
+ end.select do |path|
60
+ args[:query].nil? || path.include?(args[:query])
61
+ end.map do |path|
62
+ [path, path.underscore.titlecase, "#{'bin/' if Glimmer::Launcher.dev_mode?}glimmer sample:run[#{path}]"]
63
+ end.sort
64
+ puts
65
+ puts " Glimmer Elaborate Samples (run all via: #{'bin/' if Glimmer::Launcher.dev_mode?}glimmer sample:run:elaborate):"
66
+ puts Text::Table.new(
67
+ :head => %w[Name Description Run],
68
+ :rows => array_of_arrays,
69
+ :horizontal_padding => 1,
70
+ :vertical_boundary => ' ',
71
+ :horizontal_boundary => ' ',
72
+ :boundary_intersection => ' '
73
+ )
74
+ end
75
+ end
76
+
77
+ desc 'Outputs code for a Glimmer internal sample [included in gem] (name is required)'
78
+ task :code, [:name] => :requires do |t, args|
79
+ samples = (Dir.glob(File.expand_path('../../../samples/hello/*.rb', __FILE__)) + Dir.glob(File.expand_path('../../../samples/elaborate/*.rb', __FILE__))).sort
80
+ sample = samples.detect {|path| path.include?("#{args[:name].to_s.underscore.downcase}.rb")}
81
+ sample_additional_files = Dir.glob(File.join(sample.sub('.rb', ''), '**', '*.rb'))
82
+ ([sample] + sample_additional_files).each do |file|
83
+ puts
84
+ puts "# #{file}"
85
+ puts
86
+ puts File.read(file)
87
+ puts
88
+ puts '# # #'
89
+ puts
90
+ end
91
+ end
92
+
93
+ task :requires do
94
+ require 'text-table'
95
+ require 'facets/string/titlecase'
96
+ require 'facets/string/underscore'
97
+
98
+ require_relative 'launcher'
99
+ end
100
+
101
+ end
102
+
6
103
  namespace :package do
7
104
  desc 'Clean by removing "dist" and "packages" directories'
8
105
  task :clean do
@@ -19,17 +116,25 @@ namespace :glimmer do
19
116
  Glimmer::Package.jar
20
117
  end
21
118
 
22
- desc 'Generate Native files (DMG/PKG/APP on the Mac, EXE on Windows, RPM/DEB on Linux)'
23
- task :native do
24
- Glimmer::Package.native
119
+ desc 'Lock JARs'
120
+ task :lock_jars do
121
+ Glimmer::Package.lock_jars
122
+ end
123
+
124
+ desc 'Generate Native files. type can be dmg/pkg on the Mac, msi/exe on Windows, and rpm/deb on Linux (type is optional)'
125
+ task :native, [:type] do |t, args|
126
+ extra_args = ARGV.partition {|arg| arg.include?('package:native')}.last.to_a.join(' ')
127
+ Glimmer::Package.native(args[:type], extra_args)
25
128
  end
26
129
  end
27
130
 
28
- desc 'Package app for distribution (generating config, jar, and native files)'
29
- task :package do
131
+ desc 'Package app for distribution (generating config, jar, and native files) (type is optional)'
132
+ task :package, [:type] do |t, args|
133
+ Rake::Task['gemspec:generate'].execute
134
+ Rake::Task['glimmer:package:lock_jars'].execute
30
135
  Rake::Task['glimmer:package:config'].execute
31
136
  Rake::Task['glimmer:package:jar'].execute
32
- Rake::Task['glimmer:package:native'].execute
137
+ Rake::Task['glimmer:package:native'].execute(args)
33
138
  end
34
139
 
35
140