Sunday, October 22, 2023

Glimmer DSL for LibUI Scaffolding + Snake Game

Glimmer DSL for LibUI (Prerequisite-Free Ruby Desktop Development Cross-Platform Native GUI Library) versions 0.9.x include support for a new Glimmer CommandApplication Scaffolding, Custom Component Scaffolding, Custom Component Gem Scaffolding, and more. These features greatly improve Software Engineering Productivity when building desktop applications with Glimmer DSL for LibUI. Glimmer Scaffolding could be thought of as the "Desktop Application" equivalent of Rails Scaffolding and the Rails Application Generator.

Application Scaffolding enables automatically generating the directories/files of a new desktop GUI application that follows a cleanly decoupled MVC architecture and can be packaged as a Ruby gem that includes a script for running the app conveniently.

In fact, I ate my own dog food and used the new Application Scaffolding feature to effortlessly scaffold a Glimmer Snake game (code is included near the bottom of this post):

https://github.com/AndyObtiva/glimmer_snake

This is the gemified app edition of the Snake game example that is included in Glimmer DSL for LibUI.

Here is the Glimmer DSL for LibUI Glimmer Command guide (straight out of the project README), which covers all Scaffolding features:

Here are the Glimmer Snake implementation classes that were added on top of the Glimmer DSL for LibUI Application Scaffolding following a cleanly decoupled MVC architecture:

app/glimmer_snake/view/glimmer_snake.rb

app/glimmer_snake/presenter/grid.rb

app/glimmer_snake/presenter/cell.rb

app/glimmer_snake/model/game.rb

app/glimmer_snake/model/snake.rb

app/glimmer_snake/model/vertebra.rb

app/glimmer_snake/model/apple.rb

Here is the Change Log of the 0.9.x version releases of Glimmer DSL for LibUI ordered from newest to oldest:

0.9.7

- Scaffold Custom Control Gem via `glimmer scaffold:gem:customcontrol[name,namespace]` (or alias: `glimmer scaffold:gem:cc[name,namespace]`)

- List Custom Control Gems (expected name format: `glimmer-libui-cc-gemname-namespace`) via `glimmer list:gems:customcontrol[query]` (or alias: `glimmer list:gems:cc[query]`)

0.9.6

- Scaffold Custom Window Gem via `glimmer scaffold:gem:customwindow[name,namespace]` (or alias: `glimmer scaffold:gem:cw[name,namespace]`)

- List Custom Window Gems (expected name format: `glimmer-libui-cw-gemname-namespace`) via `glimmer list:gems:customwindow[query]` (or alias: `glimmer list:gems:cw[query]`)

- List Glimmer DSLs via `glimmer list:gems:dsl[query]`

0.9.5

- Scaffold Custom Control via `glimmer scaffold:customcontrol[name,namespace]` (or alias: `glimmer scaffold:cc[name,namespace]`)

0.9.4

- Scaffold Custom Window via `glimmer scaffold:customwindow[name,namespace]` (or alias: `glimmer scaffold:cw[name,namespace]`)

0.9.3

- Application Scaffolding via `glimmer scaffold[app_name]` includes a Model layer

0.9.2

- Add `glimmer` commands `glimmer package:gem`, `glimmer package:gemspec`, and `glimmer package:clean`

0.9.1

- Scaffold an application via Glimmer Command: `glimmer scaffold[app_name]`

- Hide unsupported Scaffolding tasks in Glimmer Command

- Add missing Glimmer Command gem dependencies: `rake`, `rake-tui`, `text-table`, `puts_debuggerer`

0.9.0

- Support `glimmer` command to more conveniently run applications (`glimmer app_path`) and examples (`glimmer examples`)

Happy Glimmering!

No comments: