glimmer-dsl-swt 4.18.2.0 → 4.18.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: beefdf4e3985d47de8a553ea073466812c89a738a1efa691bac62a9d375bb5b9
4
- data.tar.gz: ed6373191af3b73886ae171313d0fbcd279205c883f887e2c940cbc0318275a3
3
+ metadata.gz: dd5449ef80c4ae38994b5ceb0fcf32b1cc843b7387523267920449dc9d4f5dd6
4
+ data.tar.gz: d55dd2c0daeaf9cd3d388b4a53676d7e10f3c0adeca8591631ac857d2c69fd08
5
5
  SHA512:
6
- metadata.gz: 52eaa3d36b54333a9c457233a00de3975c3e932f99ef7b9b484fdff20c6f96ea2b7465a63f6e2cc46b91b86a3631edef913643b2303103fc2901920402459bea
7
- data.tar.gz: 84273ec05bc34a8a233d403edba5ad372a631560252cfec36d3d5bd200410a1a0f9184e07ebb77d0241ae3ea723d6c7575f7441575a61115f53d9c302fb54fb5
6
+ metadata.gz: 6dcd43c02e87bade7a8ab2fb81d6db5a47ac286c03a62e95b829f2c7aa65bb2b7e21fdcd88ead5cee4302cc743d4f09a15cc3b130dcd139c57bd3e5475d24d59
7
+ data.tar.gz: dfa9233d6e1f4d0c8bcb0e33090b86d25280e5ccd5fa205e474b356522964149d9140225d632137ca49b288a554009be2ed827817c9ba076018b9dafead4881c
@@ -1,5 +1,10 @@
1
1
  # Change Log
2
2
 
3
+ ### 4.18.2.1
4
+
5
+ - Ensure drawing image works in Shape DSL
6
+ - Support passing image as simply an image path or image proxy to Shape DSL image method
7
+
3
8
  ### 4.18.2.0
4
9
 
5
10
  - Canvas animation start method (useful if animation had a frame count limit or cycle count limit and needed to be started again after it stopped)
data/README.md CHANGED
@@ -1,6 +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 4.18.2.0
2
-
3
-
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 4.18.2.1
4
2
  ## JRuby Desktop Development GUI Framework
5
3
  [![Gem Version](https://badge.fury.io/rb/glimmer-dsl-swt.svg)](http://badge.fury.io/rb/glimmer-dsl-swt)
6
4
  [![Travis CI](https://travis-ci.com/AndyObtiva/glimmer-dsl-swt.svg?branch=master)](https://travis-ci.com/github/AndyObtiva/glimmer-dsl-swt)
@@ -10,9 +8,7 @@
10
8
 
11
9
  **[Contributors Wanted! (Submit a Glimmer App Sample to Get Started)](#contributing)**
12
10
 
13
- (The Original Glimmer Library Since 2007. Beware of Imitators!)
14
-
15
- [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer) is a native-GUI cross-platform desktop development library written in [JRuby](https://www.jruby.org/), an OS-threaded faster version of [Ruby](https://www.ruby-lang.org/en/). [Glimmer](https://github.com/AndyObtiva/glimmer)'s main innovation is a declarative [Ruby DSL](#glimmer-dsl-syntax) that enables productive and efficient authoring of desktop application user-interfaces by relying on the robust [Eclipse SWT library](https://www.eclipse.org/swt/). [Glimmer](https://rubygems.org/gems/glimmer) additionally innovates by having built-in [data-binding](#data-binding) support, which greatly facilitates synchronizing the GUI with domain models, thus achieving true decoupling of object oriented components and enabling developers to solve business problems (test-first) without worrying about GUI concerns, or alternatively drive development GUI-first, and then write clean business models (test-first) afterwards. Not only does Glimmer provide a large set of GUI [widgets](#widgets), but also supports drawing Canvas Graphics like [Shapes](#canvas-shape-dsl) and [Animations](#canvas-animation-dsl). To get started quickly, [Glimmer](https://rubygems.org/gems/glimmer) offers [scaffolding](#scaffolding) options for [Apps](#in-production), [Gems](#custom-shell-gem), and [Custom Widgets](#custom-widgets). [Glimmer](https://rubygems.org/gems/glimmer) also includes native-executable [packaging](#packaging--distribution) support, sorely lacking in other libraries, thus enabling the delivery of desktop apps written in [Ruby](https://www.ruby-lang.org/en/) as truly native DMG/PKG/APP files on the [Mac](https://www.apple.com/ca/macos) + [App Store](https://developer.apple.com/macos/distribution/), MSI/EXE files on [Windows](https://www.microsoft.com/en-ca/windows), and [Gem Packaged Shell Scripts](#custom-shell-gem) on [Linux](https://www.linux.org/).
11
+ [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer) is a native-GUI cross-platform desktop development library written in [JRuby](https://www.jruby.org/), an OS-threaded faster JVM version of [Ruby](https://www.ruby-lang.org/en/). [Glimmer](https://github.com/AndyObtiva/glimmer)'s main innovation is a declarative [Ruby DSL](#glimmer-dsl-syntax) that enables productive and efficient authoring of desktop application user-interfaces by relying on the robust [Eclipse SWT library](https://www.eclipse.org/swt/). [Glimmer](https://rubygems.org/gems/glimmer) additionally innovates by having built-in [data-binding](#data-binding) support, which greatly facilitates synchronizing the GUI with domain models, thus achieving true decoupling of object oriented components and enabling developers to solve business problems (test-first) without worrying about GUI concerns, or alternatively drive development GUI-first, and then write clean business models (test-first) afterwards. Not only does Glimmer provide a large set of GUI [widgets](#widgets), but it also supports drawing Canvas Graphics like [Shapes](#canvas-shape-dsl) and [Animations](#canvas-animation-dsl). To get started quickly, [Glimmer](https://rubygems.org/gems/glimmer) offers [scaffolding](#scaffolding) options for [Apps](#in-production), [Gems](#custom-shell-gem), and [Custom Widgets](#custom-widgets). [Glimmer](https://rubygems.org/gems/glimmer) also includes native-executable [packaging](#packaging--distribution) support, sorely lacking in other libraries, thus enabling the delivery of desktop apps written in [Ruby](https://www.ruby-lang.org/en/) as truly native DMG/PKG/APP files on the [Mac](https://www.apple.com/ca/macos) + [App Store](https://developer.apple.com/macos/distribution/), MSI/EXE files on [Windows](https://www.microsoft.com/en-ca/windows), and [Gem Packaged Shell Scripts](#custom-shell-gem) on [Linux](https://www.linux.org/).
16
12
 
17
13
  [Glimmer receives two updates per month](https://rubygems.org/gems/glimmer-dsl-swt/versions). You can trust [Glimmer](https://rubygems.org/gems/glimmer) with your Ruby desktop GUI development needs. Please make [Glimmer](https://rubygems.org/gems/glimmer) even better by providing feedback and [contributing](#contributing) when possible.
18
14
 
@@ -456,7 +452,7 @@ jgem install glimmer-dsl-swt
456
452
 
457
453
  Or this command if you want a specific version:
458
454
  ```
459
- jgem install glimmer-dsl-swt -v 4.18.2.0
455
+ jgem install glimmer-dsl-swt -v 4.18.2.1
460
456
 
461
457
 
462
458
  ```
@@ -476,7 +472,7 @@ Note: if you're using activerecord or activesupport, keep in mind that Glimmer u
476
472
 
477
473
  Add the following to `Gemfile`:
478
474
  ```
479
- gem 'glimmer-dsl-swt', '~> 4.18.2.0
475
+ gem 'glimmer-dsl-swt', '~> 4.18.2.1
480
476
  '
481
477
  ```
482
478
 
@@ -535,7 +531,7 @@ bin/glimmer samples
535
531
  Below are the full usage instructions that come up when running `glimmer` without args.
536
532
 
537
533
  ```
538
- Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.18.2.0
534
+ Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.18.2.1
539
535
 
540
536
 
541
537
 
@@ -1016,7 +1012,7 @@ Output:
1016
1012
 
1017
1013
  Css glimmer-dsl-css 1.1.0 AndyMaleh Glimmer DSL for CSS
1018
1014
  Opal glimmer-dsl-opal 0.10.2 AndyMaleh Glimmer DSL for Opal
1019
- Swt glimmer-dsl-swt 4.18.2.0
1015
+ Swt glimmer-dsl-swt 4.18.2.1
1020
1016
 
1021
1017
  AndyMaleh Glimmer DSL for SWT
1022
1018
  Tk glimmer-dsl-tk 0.0.6 AndyMaleh Glimmer DSL for Tk
@@ -1084,6 +1080,8 @@ With `glimmer-dsl-swt` installed, you may want to run `girb` instead of standard
1084
1080
  girb
1085
1081
  ```
1086
1082
 
1083
+ ![GIRB](images/glimmer-girb.png)
1084
+
1087
1085
  If you cloned [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt) project locally, you may run `bin/girb` instead.
1088
1086
 
1089
1087
  ```
@@ -1349,7 +1347,8 @@ This is not an exaustive list, but should give you a good start in learning Glim
1349
1347
  **Event loop:**
1350
1348
  - `display`: featured in [Tic Tac Toe](#tic-tac-toe)
1351
1349
  - `async_exec`: featured in [Hello, Custom Widget!](#hello-custom-widget) / [Hello, Custom Shell!](#hello-custom-shell)
1352
-
1350
+ - `sync_exec`: executes a block on the event loop synchronously (usually from another thread)
1351
+ - `timer_exec`: executes a block after a delay of time has passed
1353
1352
 
1354
1353
  #### SWT Proxies
1355
1354
 
@@ -2400,7 +2399,7 @@ shell {
2400
2399
  }.open
2401
2400
  ```
2402
2401
 
2403
- In any case, if there is anything you would like added to the Glimmer Shape DSL that you saw available in the SWT APIs, you may [report and issue](https://github.com/AndyObtiva/glimmer-dsl-swt/issues) or implement yourself and [contribute](#contributing) via a Pull Request.
2402
+ In any case, if there is anything missing you would like added to the Glimmer Shape DSL that you saw available in the SWT APIs, you may [report an issue](https://github.com/AndyObtiva/glimmer-dsl-swt/issues) or implement yourself and [contribute](#contributing) via a Pull Request.
2404
2403
 
2405
2404
  ### Canvas Animation DSL
2406
2405
 
@@ -2462,7 +2461,7 @@ API of Animation Object (returned from `animation` keyword):
2462
2461
 
2463
2462
  Learn more at the [Hello, Canvas Animation! Sample](#hello-canvas-animation).
2464
2463
 
2465
- If there is anything you would like added to the Glimmer Animation DSL that you saw available in the SWT APIs, you may [report and issue](https://github.com/AndyObtiva/glimmer-dsl-swt/issues) or implement yourself and [contribute](#contributing) via a Pull Request.
2464
+ If there is anything missing you would like added to the Glimmer Animation DSL that you saw available in the SWT APIs, you may [report an issue](https://github.com/AndyObtiva/glimmer-dsl-swt/issues) or implement yourself and [contribute](#contributing) via a Pull Request.
2466
2465
 
2467
2466
  ### Data-Binding
2468
2467
 
@@ -4661,7 +4660,7 @@ Gladiator is a good demonstration of:
4661
4660
 
4662
4661
  #### Timer
4663
4662
 
4664
- [<img alt="Glimmer Timer Icon" src="https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-timer/master/images/glimmer-timer-logo.png" height=40 /> Timer](https://github.com/AndyObtiva/glimmer-cs-timer) is a sample app demonstrating data-binding, multi-threading, and Java (Sound) library integration in a desktop application.
4663
+ [<img alt="Glimmer Timer Icon" src="https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-timer/master/images/glimmer-timer-logo.png" height=40 /> Timer](https://github.com/AndyObtiva/glimmer-cs-timer) is a sample app demonstrating data-binding, multi-threading, and JSound (Java Sound) library integration in a desktop application.
4665
4664
 
4666
4665
  [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-timer/master/glimmer-timer-screenshot.png" />](https://github.com/AndyObtiva/glimmer-cs-timer)
4667
4666
 
@@ -4754,6 +4753,8 @@ require_relative '../app/my_application.rb'
4754
4753
 
4755
4754
  ### javapackager Extra Arguments
4756
4755
 
4756
+ (note: currently `Glimmer::RakeTask::Package.javapackager_extra_args` is only honored when packaging from bash, not zsh)
4757
+
4757
4758
  In order to explicitly configure javapackager, Mac package attributes, or sign your Mac app to distribute on the App Store, you can follow more advanced instructions for `javapackager` here:
4758
4759
  - https://docs.oracle.com/javase/9/tools/javapackager.htm#JSWOR719
4759
4760
  - https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javapackager.html
@@ -4862,6 +4863,11 @@ By the way, keep in mind that during normal operation, it does also indicate a f
4862
4863
  Exec failed with code 2 command [[/usr/bin/SetFile, -c, icnC, /var/folders/4_/g1sw__tx6mjdgyh3mky7vydc0000gp/T/fxbundler4076750801763032201/images/MathBowling/.VolumeIcon.icns] in unspecified directory
4863
4864
  ```
4864
4865
 
4866
+ 3. Zsh (Z Shell)
4867
+
4868
+ Currently, `Glimmer::RakeTask::Package.javapackager_extra_args` is only honored when packaging from bash, not zsh.
4869
+
4870
+
4865
4871
  ## App Updates
4866
4872
 
4867
4873
  Glimmer already supports automatic (and manual) app updates via the Mac App Store for Mac apps. Simply run the `glimmer package` command with the Mac App Store keys configured as per [Mac Application Distribution](mac-application-distribution) instructions and you get automatic (and manual) app update support courtesy of the Mac App Store.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.18.2.0
1
+ 4.18.2.1
@@ -2,17 +2,17 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: glimmer-dsl-swt 4.18.2.0 ruby lib
5
+ # stub: glimmer-dsl-swt 4.18.2.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "glimmer-dsl-swt".freeze
9
- s.version = "4.18.2.0"
9
+ s.version = "4.18.2.1"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["AndyMaleh".freeze]
14
- s.date = "2021-01-20"
15
- s.description = "Glimmer DSL for SWT (JRuby Desktop Development GUI Framework) is a native-GUI cross-platform desktop development library written in JRuby, an OS-threaded faster version of Ruby. Glimmer's main innovation is a declarative Ruby DSL that enables productive and efficient authoring of desktop application user-interfaces by relying on the robust Eclipse SWT library. Glimmer additionally innovates by having built-in data-binding support, which greatly facilitates synchronizing the GUI with domain models, thus achieving true decoupling of object oriented components and enabling developers to solve business problems (test-first) without worrying about GUI concerns, or alternatively drive development GUI-first, and then write clean business models (test-first) afterwards. Not only does Glimmer provide a large set of GUI widgets, but also supports drawing Canvas Graphics like Shapes and Animations. To get started quickly, Glimmer offers scaffolding options for Apps, Gems, and Custom Widgets. Glimmer also includes native-executable packaging support, sorely lacking in other libraries, thus enabling the delivery of desktop apps written in Ruby as truly native DMG/PKG/APP files on the Mac + App Store, MSI/EXE files on Windows, and Gem Packaged Shell Scripts on Linux.".freeze
14
+ s.date = "2021-01-21"
15
+ s.description = "Glimmer DSL for SWT (JRuby Desktop Development GUI Framework) is a native-GUI cross-platform desktop development library written in JRuby, an OS-threaded faster JVM version of Ruby. Glimmer's main innovation is a declarative Ruby DSL that enables productive and efficient authoring of desktop application user-interfaces by relying on the robust Eclipse SWT library. Glimmer additionally innovates by having built-in data-binding support, which greatly facilitates synchronizing the GUI with domain models, thus achieving true decoupling of object oriented components and enabling developers to solve business problems (test-first) without worrying about GUI concerns, or alternatively drive development GUI-first, and then write clean business models (test-first) afterwards. Not only does Glimmer provide a large set of GUI widgets, but it also supports drawing Canvas Graphics like Shapes and Animations. To get started quickly, Glimmer offers scaffolding options for Apps, Gems, and Custom Widgets. Glimmer also includes native-executable packaging support, sorely lacking in other libraries, thus enabling the delivery of desktop apps written in Ruby as truly native DMG/PKG/APP files on the Mac + App Store, MSI/EXE files on Windows, and Gem Packaged Shell Scripts on Linux.".freeze
16
16
  s.email = "andy.am@gmail.com".freeze
17
17
  s.executables = ["glimmer".freeze, "girb".freeze]
18
18
  s.extra_rdoc_files = [
@@ -30,7 +30,8 @@ module Glimmer
30
30
  args.size > 0 and
31
31
  parent.respond_to?(:set_attribute) and
32
32
  parent.respond_to?(:has_attribute?) and
33
- parent.has_attribute?(keyword, *args)
33
+ parent.has_attribute?(keyword, *args) and
34
+ !(parent.respond_to?(:swt_widget) && parent.swt_widget.class == org.eclipse.swt.widgets.Canvas && keyword == 'image')
34
35
  end
35
36
 
36
37
  def interpret(parent, keyword, *args, &block)
@@ -1,5 +1,5 @@
1
1
  # Copyright (c) 2007-2021 Andy Maleh
2
- #
2
+ #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
5
5
  # "Software"), to deal in the Software without restriction, including
@@ -7,10 +7,10 @@
7
7
  # distribute, sublicense, and/or sell copies of the Software, and to
8
8
  # permit persons to whom the Software is furnished to do so, subject to
9
9
  # the following conditions:
10
- #
10
+ #
11
11
  # The above copyright notice and this permission notice shall be
12
12
  # included in all copies or substantial portions of the Software.
13
- #
13
+ #
14
14
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
15
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
16
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -27,7 +27,7 @@ module Glimmer
27
27
  module Package
28
28
  class << self
29
29
  attr_accessor :javapackager_extra_args
30
- alias jpackage_extra_args :javapackager_extra_args
30
+ alias jpackage_extra_args javapackager_extra_args
31
31
 
32
32
  def clean
33
33
  require 'fileutils'
@@ -48,7 +48,7 @@ module Glimmer
48
48
  FileUtils.mkdir_p('vendor/jars')
49
49
  command = "lock_jars --vendor-dir vendor/jars"
50
50
  puts command
51
- system command
51
+ system command
52
52
  end
53
53
 
54
54
  def config
@@ -78,18 +78,18 @@ module Glimmer
78
78
  else
79
79
  puts 'Warbler executable "warble" is missing!'
80
80
  end
81
- end
81
+ end
82
82
  end
83
83
 
84
84
  def jar
85
85
  FileUtils.mkdir_p('dist')
86
86
  puts "Generating JAR with Warbler..."
87
87
  system "jruby -S gem install warbler -v2.0.5 --no-document" unless warbler_exists?
88
- system('warble')
88
+ system('warble')
89
89
  end
90
90
 
91
91
  def native(native_type=nil, native_extra_args)
92
- puts "Generating native executable with javapackager/jpackage..."
92
+ puts "Generating native executable with javapackager/jpackage..."
93
93
  java_version = `java -version`
94
94
  puts "WARNING! Glimmer Packaging Pre-Requisite Java Version 1.8.0_241 Is Not Found!" unless java_version.include?('1.8.0_241')
95
95
  require 'facets/string/titlecase'
@@ -125,7 +125,7 @@ module Glimmer
125
125
  command += " #{ENV['JAVAPACKAGER_EXTRA_ARGS']} " if ENV['JAVAPACKAGER_EXTRA_ARGS']
126
126
  command += " #{native_extra_args} " if native_extra_args
127
127
  puts command
128
- system command
128
+ system command
129
129
  end
130
130
 
131
131
  private
@@ -159,6 +159,12 @@ module Glimmer
159
159
  elsif (method_name.include?('text') || method_name.include?('string')) && !@properties.keys.map(&:to_s).include?('background') && args.size == 3
160
160
  args << true
161
161
  end
162
+ if method_name.include?('image') && args.first.is_a?(String)
163
+ args[0] = ImageProxy.new(args[0])
164
+ end
165
+ if method_name.include?('image') && args.first.is_a?(ImageProxy)
166
+ args[0] = args[0].swt_image
167
+ end
162
168
  end
163
169
 
164
170
  # Tolerates shape extra args added by user by mistake
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-swt
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.18.2.0
4
+ version: 4.18.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-20 00:00:00.000000000 Z
11
+ date: 2021-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -330,7 +330,7 @@ dependencies:
330
330
  version: 0.7.0
331
331
  description: Glimmer DSL for SWT (JRuby Desktop Development GUI Framework) is a native-GUI
332
332
  cross-platform desktop development library written in JRuby, an OS-threaded faster
333
- version of Ruby. Glimmer's main innovation is a declarative Ruby DSL that enables
333
+ JVM version of Ruby. Glimmer's main innovation is a declarative Ruby DSL that enables
334
334
  productive and efficient authoring of desktop application user-interfaces by relying
335
335
  on the robust Eclipse SWT library. Glimmer additionally innovates by having built-in
336
336
  data-binding support, which greatly facilitates synchronizing the GUI with domain
@@ -338,8 +338,8 @@ description: Glimmer DSL for SWT (JRuby Desktop Development GUI Framework) is a
338
338
  developers to solve business problems (test-first) without worrying about GUI concerns,
339
339
  or alternatively drive development GUI-first, and then write clean business models
340
340
  (test-first) afterwards. Not only does Glimmer provide a large set of GUI widgets,
341
- but also supports drawing Canvas Graphics like Shapes and Animations. To get started
342
- quickly, Glimmer offers scaffolding options for Apps, Gems, and Custom Widgets.
341
+ but it also supports drawing Canvas Graphics like Shapes and Animations. To get
342
+ started quickly, Glimmer offers scaffolding options for Apps, Gems, and Custom Widgets.
343
343
  Glimmer also includes native-executable packaging support, sorely lacking in other
344
344
  libraries, thus enabling the delivery of desktop apps written in Ruby as truly native
345
345
  DMG/PKG/APP files on the Mac + App Store, MSI/EXE files on Windows, and Gem Packaged