glimmer 0.9.4 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +169 -17
- data/VERSION +1 -1
- data/lib/glimmer/dsl/engine.rb +33 -41
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c22f962213e82b271d67b69d910604e73ab8a257e8a797fa58feb2d97d6c199e
|
4
|
+
data.tar.gz: eee60acdf118d572196ef4a2c1eca7705093ea9d3db2fcea1a05bb612710f05b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 360edce8ae04be32396a272ad947897d256c171759f3304ed4f3b521a208540a2834e05a3140fe61de166337858bbd85c13655d02b92b1cd13e60b44b78cb0d6
|
7
|
+
data.tar.gz: 482df9f676948f24f68e665899c15e7e14b78f40f100580771a4af943fd524b676ae140f19cf1d7b370d2ef1fb5e3c4bff9f0e2eb4a8cb1cb95884c74be6ef37
|
data/README.md
CHANGED
@@ -118,6 +118,7 @@ NOTE: Glimmer is in beta mode. Please help make better by [contributing](#contri
|
|
118
118
|
- [SWT Proxies](#swt-proxies)
|
119
119
|
- [Dialog](#dialog)
|
120
120
|
- [Menus](#menus)
|
121
|
+
- [ScrolledComposite](#scrolledcomposite)
|
121
122
|
- [Widget Styles](#widget-styles)
|
122
123
|
- [Explicit SWT Style Bit](#explicit-swt-style-bit)
|
123
124
|
- [Negative SWT Style Bits](#negative-swt-style-bits)
|
@@ -143,6 +144,7 @@ NOTE: Glimmer is in beta mode. Please help make better by [contributing](#contri
|
|
143
144
|
- [Content/Options Example](#contentoptions-example)
|
144
145
|
- [Custom Widget Lifecycle Hooks](#custom-widget-lifecycle-hooks)
|
145
146
|
- [Gotcha](#gotcha)
|
147
|
+
- [Final Notes](#final-notes)
|
146
148
|
- [Custom Shells](#custom-shells)
|
147
149
|
- [Drag and Drop](#drag-and-drop)
|
148
150
|
- [Miscellaneous](#miscellaneous)
|
@@ -153,13 +155,13 @@ NOTE: Glimmer is in beta mode. Please help make better by [contributing](#contri
|
|
153
155
|
- [Browser Widget](#browser-widget)
|
154
156
|
- [Glimmer Configuration](#glimmer-configuration)
|
155
157
|
- [logger](#logger)
|
156
|
-
- [import_swt_packages](#
|
157
|
-
- [loop_max_count](#
|
158
|
+
- [import_swt_packages](#importswtpackages)
|
159
|
+
- [loop_max_count](#loopmaxcount)
|
158
160
|
- [Glimmer Style Guide](#glimmer-style-guide)
|
159
161
|
- [SWT Reference](#swt-reference)
|
160
162
|
- [Samples](#samples)
|
161
163
|
- [Hello Samples](#hello-samples)
|
162
|
-
- [Hello, World!](#hello-world-sample)
|
164
|
+
- [Hello, World! Sample](#hello-world-sample)
|
163
165
|
- [Hello, Tab!](#hello-tab)
|
164
166
|
- [Hello, Combo!](#hello-combo)
|
165
167
|
- [Hello, List Single Selection!](#hello-list-single-selection)
|
@@ -168,14 +170,18 @@ NOTE: Glimmer is in beta mode. Please help make better by [contributing](#contri
|
|
168
170
|
- [Hello, Message Box!](#hello-message-box)
|
169
171
|
- [Hello, Browser!](#hello-browser)
|
170
172
|
- [Hello, Drag and Drop!](#hello-drag-and-drop)
|
173
|
+
- [Hello, Menu Bar!](#hello-menu-bar)
|
174
|
+
- [Hello, Pop Up Context Menu!](#hello-pop-up-context-menu)
|
171
175
|
- [Elaborate Samples](#elaborate-samples)
|
172
176
|
- [Login](#login)
|
173
|
-
- [Tic Tac Toe](#tic-tac-toe-sample)
|
177
|
+
- [Tic Tac Toe Sample](#tic-tac-toe-sample)
|
174
178
|
- [Contact Manager](#contact-manager)
|
175
179
|
- [External Samples](#external-samples)
|
176
180
|
- [Glimmer Calculator](#glimmer-calculator)
|
177
181
|
- [Gladiator](#gladiator)
|
178
182
|
- [In Production](#in-production)
|
183
|
+
- [Math Bowling](#math-bowling)
|
184
|
+
- [Are We There Yet?](#are-we-there-yet)
|
179
185
|
- [Packaging & Distribution](#packaging--distribution)
|
180
186
|
- [Packaging Defaults](#packaging-defaults)
|
181
187
|
- [Packaging Configuration](#packaging-configuration)
|
@@ -191,6 +197,7 @@ NOTE: Glimmer is in beta mode. Please help make better by [contributing](#contri
|
|
191
197
|
- [Change Log](#change-log)
|
192
198
|
- [Contributing](#contributing)
|
193
199
|
- [Contributors](#contributors)
|
200
|
+
- [Hire Me](#hire-me)
|
194
201
|
- [License](#license)
|
195
202
|
|
196
203
|
## Background
|
@@ -244,7 +251,7 @@ Otherwise, Option 2 ([Bundler](#option-2-bundler)) is recommended for building G
|
|
244
251
|
|
245
252
|
Run this command to install directly:
|
246
253
|
```
|
247
|
-
jgem install glimmer-dsl-swt -v 0.
|
254
|
+
jgem install glimmer-dsl-swt -v 0.3.0
|
248
255
|
```
|
249
256
|
|
250
257
|
`jgem` is JRuby's version of `gem` command.
|
@@ -262,7 +269,7 @@ Note: if you're using activerecord or activesupport, keep in mind that Glimmer u
|
|
262
269
|
|
263
270
|
Add the following to `Gemfile`:
|
264
271
|
```
|
265
|
-
gem 'glimmer-dsl-swt', '~> 0.
|
272
|
+
gem 'glimmer-dsl-swt', '~> 0.3.0'
|
266
273
|
```
|
267
274
|
|
268
275
|
And, then run:
|
@@ -320,6 +327,7 @@ glimmer list:custom_shell_gems[query] # List Glimmer
|
|
320
327
|
glimmer list:custom_widget_gems[query] # List Glimmer custom widget gems available at rubygems.org (query is optional)
|
321
328
|
glimmer list:dsl_gems[query] # List Glimmer DSL gems available at rubygems.org (query is optional)
|
322
329
|
glimmer package # Package app for distribution (generating config, jar, and native files)
|
330
|
+
glimmer package:clean # Clean by removing "dist" and "packages" directories
|
323
331
|
glimmer package:config # Generate JAR config file
|
324
332
|
glimmer package:jar # Generate JAR file
|
325
333
|
glimmer package:native # Generate Native files (DMG/PKG/APP on the Mac)
|
@@ -561,7 +569,7 @@ Output:
|
|
561
569
|
|
562
570
|
Css glimmer-dsl-css 0.1.0 AndyMaleh Glimmer DSL for CSS
|
563
571
|
Opal glimmer-dsl-opal 0.0.9 AndyMaleh Glimmer DSL for Opal
|
564
|
-
Swt glimmer-dsl-swt 0.
|
572
|
+
Swt glimmer-dsl-swt 0.3.0 AndyMaleh Glimmer DSL for SWT
|
565
573
|
Xml glimmer-dsl-xml 0.1.0 AndyMaleh Glimmer DSL for XML
|
566
574
|
|
567
575
|
```
|
@@ -935,7 +943,7 @@ shell { |shell_proxy|
|
|
935
943
|
Example of a Pop Up Context Menu (you may copy/paste in [`girb`](#girb-glimmer-irb-command)):
|
936
944
|
|
937
945
|
```ruby
|
938
|
-
|
946
|
+
shell { |shell_proxy|
|
939
947
|
text 'Hello, Pop Up Context Menu!'
|
940
948
|
grid_layout
|
941
949
|
label {
|
@@ -971,6 +979,13 @@ Example of a Pop Up Context Menu (you may copy/paste in [`girb`](#girb-glimmer-i
|
|
971
979
|
}.open
|
972
980
|
```
|
973
981
|
|
982
|
+
#### ScrolledComposite
|
983
|
+
|
984
|
+
Glimmer provides smart defaults for the `scrolled_composite` widget by:
|
985
|
+
- Automatically setting the nested widget as its content (meaning use can just like a plain old `composite` to add scrolling)
|
986
|
+
- Automatically setting the :h_scroll and :v_scroll SWT styles (can be set manually if only one of either :h_scroll or :v_scroll is desired )
|
987
|
+
- Automatically setting the expand horizontal and expand vertical SWT properties to `true`
|
988
|
+
|
974
989
|
### Widget Styles
|
975
990
|
|
976
991
|
SWT widgets receive `SWT` styles in their constructor as per this guide:
|
@@ -1568,6 +1583,9 @@ shell {
|
|
1568
1583
|
}
|
1569
1584
|
items bind(group, :people), column_properties(:name, :age, :adult)
|
1570
1585
|
selection bind(group, :selected_person)
|
1586
|
+
on_mouse_up { |event|
|
1587
|
+
@table.edit_table_item(event.table_item, event.column_index)
|
1588
|
+
}
|
1571
1589
|
}
|
1572
1590
|
}
|
1573
1591
|
```
|
@@ -1575,6 +1593,7 @@ shell {
|
|
1575
1593
|
The code above includes two data-bindings:
|
1576
1594
|
- Table `items`, which first bind to the model collection property (group.people), and then maps each column property (name, age, adult) for displaying each table item column.
|
1577
1595
|
- Table `selection`, which binds the single table item selected by the user to the attribute denoted by the `bind` keyword (or binds multiple table items selected for a table with `:multi` SWT style)
|
1596
|
+
- The `on_mouse_up` event handler invokes `@table.edit_table_item(event.table_item, event.column_index)` to start edit mode on the clicked table item cell, and then saves or cancel depending on whether the user hits ENTER or ESC once done editing (or focus-out after either making a change or not making any changes.)
|
1578
1597
|
|
1579
1598
|
Additionally, Table `items` data-binding automatically stores each node model unto the SWT TableItem object via `setData` method. This enables things like searchability.
|
1580
1599
|
|
@@ -1594,6 +1613,67 @@ This automatically leverages the SWT TableEditor custom class behind the scenes,
|
|
1594
1613
|
passed table item text into something else.
|
1595
1614
|
It automatically persists the change to `items` data-bound model on ENTER/FOCUS-OUT or cancels on ESC/NO-CHANGE.
|
1596
1615
|
|
1616
|
+
##### Table Sorting
|
1617
|
+
|
1618
|
+
Glimmer automatically adds sorting support to the SWT `Table` widget.
|
1619
|
+
|
1620
|
+
Check out the [Contact Manager](#contact-manager) sample for an example.
|
1621
|
+
You may click on any column and it will sort by ascending order first and descending if you click again.
|
1622
|
+
|
1623
|
+
Glimmer automatic table sorting supports `String`, `Integer`, and `Float` columns out of the box as well as any column data that is comparable.
|
1624
|
+
|
1625
|
+
In cases where data is nil, depending on the data-type, it is automatically converted to `Float` with `to_f`, `Integer` with `to_i`, or `String` with `to_s`.
|
1626
|
+
|
1627
|
+
Should you have a special data type that could not be compared automatically, Glimmer offers the following 3 alternatives for custom sorting:
|
1628
|
+
- `sort_property`: this may be set to an alternative property to the one data-bound to the table column. For example, a table column called 'adult', which returns `true` or `false` may be sorted with `sort_property :dob` instead. This also support multi-property (aka multi-column) sorting (e.g. `sort_property :dob, :name`).
|
1629
|
+
- `sort_by(&block)`: this works just like Ruby `Enumerable` `sort_by`. The block receives the table column data as argument.
|
1630
|
+
- `sort(&comparator)`: this works just like Ruby `Enumerable` `sort`. The comparator block receives two objects from the table column data.
|
1631
|
+
|
1632
|
+
You may also set `additional_sort_properties` on the parent `table` widget to have secondary sorting applied. For example, if you set `additional_sort_properties :name, :project_name`, then whenever you sort by `:name`, it additionally sorts by `:project_name` afterwards, and vice versa. This only works for columns that either have no custom sort set or have a `sort_property` with one property only (but no sort or sort_by block)
|
1633
|
+
|
1634
|
+
Example:
|
1635
|
+
|
1636
|
+
```ruby
|
1637
|
+
# ...
|
1638
|
+
table {
|
1639
|
+
table_column {
|
1640
|
+
text 'Task'
|
1641
|
+
width 120
|
1642
|
+
}
|
1643
|
+
table_column {
|
1644
|
+
text 'Project'
|
1645
|
+
width 120
|
1646
|
+
}
|
1647
|
+
table_column {
|
1648
|
+
text 'Duration (hours)'
|
1649
|
+
width 120
|
1650
|
+
sort_property :duration_in_hours
|
1651
|
+
}
|
1652
|
+
table_column {
|
1653
|
+
text 'Priority'
|
1654
|
+
width 120
|
1655
|
+
sort_by { |value| ['High', 'Medium', 'Low'].index(value) }
|
1656
|
+
}
|
1657
|
+
table_column {
|
1658
|
+
text 'Start Date'
|
1659
|
+
width 120
|
1660
|
+
sort { |d1, d2| d1.to_date <=> d2.to_date }
|
1661
|
+
}
|
1662
|
+
additional_sort_properties :project_name, :duration_in_hours, :name
|
1663
|
+
items bind(Task, :list), column_properties(:name, :project_name, :duration, :priority, :start_date)
|
1664
|
+
# ...
|
1665
|
+
}
|
1666
|
+
# ...
|
1667
|
+
```
|
1668
|
+
|
1669
|
+
Here is an explanation of the example above:
|
1670
|
+
- Task and Project table columns are data-bound to the `:name` and `:project_name` properties and sorted through them automatically
|
1671
|
+
- Task Duration table column is data-bound to the `:duration` property, but sorted via the `:duration_in_hours` property instead
|
1672
|
+
- Task Priority table column has a custom sort_by block
|
1673
|
+
- Task Start Date table column has a custom sort comparator block
|
1674
|
+
- Additional (secondary) sort properties are applied when sorting by Task, Project, or Duration in the order specified
|
1675
|
+
|
1676
|
+
|
1597
1677
|
#### Tree
|
1598
1678
|
|
1599
1679
|
The SWT Tree widget visualizes a tree data-structure, such as an employment or composition hierarchy.
|
@@ -2521,6 +2601,10 @@ For hello-type simple samples, check the following.
|
|
2521
2601
|
|
2522
2602
|
#### Hello, World! Sample
|
2523
2603
|
|
2604
|
+
Code:
|
2605
|
+
|
2606
|
+
[samples/hello/hello_world.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_world.rb)
|
2607
|
+
|
2524
2608
|
Run:
|
2525
2609
|
|
2526
2610
|
```
|
@@ -2531,6 +2615,10 @@ glimmer samples/hello/hello_world.rb
|
|
2531
2615
|
|
2532
2616
|
#### Hello, Tab!
|
2533
2617
|
|
2618
|
+
Code:
|
2619
|
+
|
2620
|
+
[samples/hello/hello_tab.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_tab.rb)
|
2621
|
+
|
2534
2622
|
Run:
|
2535
2623
|
|
2536
2624
|
```
|
@@ -2544,6 +2632,10 @@ glimmer samples/hello/hello_tab.rb
|
|
2544
2632
|
|
2545
2633
|
This sample demonstrates combo data-binding.
|
2546
2634
|
|
2635
|
+
Code:
|
2636
|
+
|
2637
|
+
[samples/hello/hello_combo.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_combo.rb)
|
2638
|
+
|
2547
2639
|
Run:
|
2548
2640
|
|
2549
2641
|
```
|
@@ -2557,6 +2649,10 @@ glimmer samples/hello/hello_combo.rb
|
|
2557
2649
|
|
2558
2650
|
This sample demonstrates list single-selection data-binding.
|
2559
2651
|
|
2652
|
+
Code:
|
2653
|
+
|
2654
|
+
[samples/hello/hello_list_single_selection.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_list_single_selection.rb)
|
2655
|
+
|
2560
2656
|
Run:
|
2561
2657
|
|
2562
2658
|
```
|
@@ -2569,6 +2665,10 @@ glimmer samples/hello/hello_list_single_selection.rb
|
|
2569
2665
|
|
2570
2666
|
This sample demonstrates list multi-selection data-binding.
|
2571
2667
|
|
2668
|
+
Code:
|
2669
|
+
|
2670
|
+
[samples/hello/hello_list_multi_selection.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_list_multi_selection.rb)
|
2671
|
+
|
2572
2672
|
Run:
|
2573
2673
|
|
2574
2674
|
```
|
@@ -2581,6 +2681,10 @@ glimmer samples/hello/hello_list_multi_selection.rb
|
|
2581
2681
|
|
2582
2682
|
This sample demonstrates computed data-binding.
|
2583
2683
|
|
2684
|
+
Code:
|
2685
|
+
|
2686
|
+
[samples/hello/hello_computed.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_computed.rb)
|
2687
|
+
|
2584
2688
|
Run:
|
2585
2689
|
|
2586
2690
|
```
|
@@ -2593,6 +2697,10 @@ glimmer samples/hello/hello_computed.rb
|
|
2593
2697
|
|
2594
2698
|
This sample demonstrates a `message_box` dialog.
|
2595
2699
|
|
2700
|
+
Code:
|
2701
|
+
|
2702
|
+
[samples/hello/hello_message_box.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_message_box.rb)
|
2703
|
+
|
2596
2704
|
Run:
|
2597
2705
|
|
2598
2706
|
```
|
@@ -2606,6 +2714,10 @@ glimmer samples/hello/hello_message_box.rb
|
|
2606
2714
|
|
2607
2715
|
This sample demonstrates the `browser` widget.
|
2608
2716
|
|
2717
|
+
Code:
|
2718
|
+
|
2719
|
+
[samples/hello/hello_browser.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_browser.rb)
|
2720
|
+
|
2609
2721
|
Run:
|
2610
2722
|
|
2611
2723
|
```
|
@@ -2618,6 +2730,10 @@ glimmer samples/hello/hello_browser.rb
|
|
2618
2730
|
|
2619
2731
|
This sample demonstrates drag and drop in Glimmer.
|
2620
2732
|
|
2733
|
+
Code:
|
2734
|
+
|
2735
|
+
[samples/hello/hello_drag_and_drop.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_drag_and_drop.rb)
|
2736
|
+
|
2621
2737
|
Run:
|
2622
2738
|
|
2623
2739
|
```
|
@@ -2630,6 +2746,10 @@ glimmer samples/hello/hello_drag_and_drop.rb
|
|
2630
2746
|
|
2631
2747
|
This sample demonstrates menus in Glimmer.
|
2632
2748
|
|
2749
|
+
Code:
|
2750
|
+
|
2751
|
+
[samples/hello/hello_menu_bar.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_menu_bar.rb)
|
2752
|
+
|
2633
2753
|
Run:
|
2634
2754
|
|
2635
2755
|
```
|
@@ -2644,6 +2764,10 @@ glimmer samples/hello/hello_menu_bar.rb
|
|
2644
2764
|
|
2645
2765
|
This sample demonstrates pop up context menus in Glimmer.
|
2646
2766
|
|
2767
|
+
Code:
|
2768
|
+
|
2769
|
+
[samples/hello/hello_pop_up_context_menu.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_pop_up_context_menu.rb)
|
2770
|
+
|
2647
2771
|
Run:
|
2648
2772
|
|
2649
2773
|
```
|
@@ -2659,8 +2783,16 @@ For more elaborate samples, check the following:
|
|
2659
2783
|
|
2660
2784
|
#### Login
|
2661
2785
|
|
2786
|
+
This sample demonstrates basic data-binding, password and text fields, and field enablement data-binding.
|
2787
|
+
|
2788
|
+
Code:
|
2789
|
+
|
2790
|
+
[samples/elaborate/login.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/elaborate/login.rb)
|
2791
|
+
|
2792
|
+
Run:
|
2793
|
+
|
2662
2794
|
```
|
2663
|
-
glimmer samples/elaborate/login.rb
|
2795
|
+
glimmer samples/elaborate/login.rb
|
2664
2796
|
```
|
2665
2797
|
|
2666
2798
|

|
@@ -2669,8 +2801,16 @@ glimmer samples/elaborate/login.rb # demonstrates basic data-binding
|
|
2669
2801
|
|
2670
2802
|
#### Tic Tac Toe Sample
|
2671
2803
|
|
2804
|
+
This sample demonstrates a full MVC application, including GUI layout, text and enablement data-binding, and test-driven development (has [specs](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/spec/samples/elaborate/tic_tac_toe/board_spec.rb)).
|
2805
|
+
|
2806
|
+
Code:
|
2807
|
+
|
2808
|
+
[samples/elaborate/tic_tac_toe.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/elaborate/tic_tac_toe.rb)
|
2809
|
+
|
2810
|
+
Run:
|
2811
|
+
|
2672
2812
|
```
|
2673
|
-
glimmer samples/elaborate/tic_tac_toe.rb
|
2813
|
+
glimmer samples/elaborate/tic_tac_toe.rb
|
2674
2814
|
```
|
2675
2815
|
|
2676
2816
|

|
@@ -2679,8 +2819,16 @@ glimmer samples/elaborate/tic_tac_toe.rb # demonstrates a full MVC application
|
|
2679
2819
|
|
2680
2820
|
#### Contact Manager
|
2681
2821
|
|
2822
|
+
This sample demonstrates table data-binding, sorting, filtering, GUI layout, MVP pattern, and test-driven development (has [specs](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/spec/samples/elaborate/contact_manager/contact_manager_presenter_spec.rb)).
|
2823
|
+
|
2824
|
+
Code:
|
2825
|
+
|
2826
|
+
[samples/elaborate/contact_manager.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/elaborate/contact_manager.rb)
|
2827
|
+
|
2828
|
+
Run:
|
2829
|
+
|
2682
2830
|
```
|
2683
|
-
glimmer samples/elaborate/contact_manager.rb
|
2831
|
+
glimmer samples/elaborate/contact_manager.rb
|
2684
2832
|
```
|
2685
2833
|
|
2686
2834
|
Contact Manager
|
@@ -2707,17 +2855,17 @@ Contact Manager - Edit Done
|
|
2707
2855
|
|
2708
2856
|
#### Glimmer Calculator
|
2709
2857
|
|
2710
|
-
[<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-calculator/
|
2858
|
+
[<img alt="Glimmer Calculator Icon" src="https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-calculator/master/glimmer-cs-calculator-icon.png" height=40 /> Glimmer Calculator](https://github.com/AndyObtiva/glimmer-cs-calculator) is a basic calculator sample project demonstrating data-binding and TDD (test-driven-development) with Glimmer following the MVP pattern (Model-View-Presenter).
|
2711
2859
|
|
2712
|
-
[
|
2860
|
+
[<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-calculator/master/glimmer-cs-calculator-screenshot.png" />](https://github.com/AndyObtiva/glimmer-cs-calculator)
|
2713
2861
|
|
2714
2862
|
#### Gladiator
|
2715
2863
|
|
2716
|
-
[<img src=
|
2717
|
-
|
2718
|
-
[Gladiator](https://github.com/AndyObtiva/glimmer-cs-gladiator) (short for Glimmer Editor) is a Glimmer sample project under on-going development.
|
2864
|
+
[<img src='https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-gladiator/master/images/glimmer-cs-gladiator-logo.svg' height=40 /> Gladiator](https://github.com/AndyObtiva/glimmer-cs-gladiator) (short for Glimmer Editor) is a Glimmer sample project under on-going development.
|
2719
2865
|
You may check it out to learn how to build a Glimmer Custom Shell gem.
|
2720
2866
|
|
2867
|
+
[<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-gladiator/master/images/glimmer-gladiator.png" />](https://github.com/AndyObtiva/glimmer-cs-gladiator)
|
2868
|
+
|
2721
2869
|
Gladiator is a good demonstration of:
|
2722
2870
|
- MVP Pattern
|
2723
2871
|
- Tree data-binding
|
@@ -2730,10 +2878,14 @@ Gladiator is a good demonstration of:
|
|
2730
2878
|
|
2731
2879
|
## In Production
|
2732
2880
|
|
2733
|
-
The following production apps have been built with Glimmer
|
2881
|
+
The following production apps have been built with Glimmer.
|
2882
|
+
|
2883
|
+
### Math Bowling
|
2734
2884
|
|
2735
2885
|
[<img alt="Math Bowling Logo" src="https://raw.githubusercontent.com/AndyObtiva/MathBowling/master/images/math-bowling-logo.png" width="40" />Math Bowling](https://github.com/AndyObtiva/MathBowling): an educational math game for elementary level kids
|
2736
2886
|
|
2887
|
+
### Are We There Yet?
|
2888
|
+
|
2737
2889
|
[<img alt="Are We There Yet Logo" src="https://raw.githubusercontent.com/AndyObtiva/are-we-there-yet/master/are-we-there-yet-logo.svg" width="40" />Are We There Yet?](https://github.com/AndyObtiva/are-we-there-yet): A tool that helps you learn when your small projects will finish
|
2738
2890
|
|
2739
2891
|
If you have a Glimmer app you would like referenced here, please mention in a Pull Request.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.5
|
data/lib/glimmer/dsl/engine.rb
CHANGED
@@ -110,43 +110,36 @@ module Glimmer
|
|
110
110
|
static_expressions[keyword] ||= {}
|
111
111
|
static_expressions[keyword][static_expression_dsl] = static_expression
|
112
112
|
Glimmer.send(:define_method, keyword) do |*args, &block|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
Glimmer::DSL::Engine.reset
|
125
|
-
raise e if static_expression_dsl.nil? || !Glimmer::DSL::Engine.static_expressions[keyword][static_expression_dsl].is_a?(TopLevelExpression)
|
126
|
-
end
|
113
|
+
if Glimmer::DSL::Engine.no_dsls?
|
114
|
+
puts Glimmer::DSL::Engine::MESSAGE_NO_DSLS
|
115
|
+
else
|
116
|
+
retrieved_static_expression = Glimmer::DSL::Engine.static_expressions[keyword][Glimmer::DSL::Engine.dsl]
|
117
|
+
static_expression_dsl = (Glimmer::DSL::Engine.static_expressions[keyword].keys - Glimmer::DSL::Engine.disabled_dsls).first if retrieved_static_expression.nil?
|
118
|
+
interpretation = nil
|
119
|
+
if retrieved_static_expression.nil? && Glimmer::DSL::Engine.dsl && (static_expression_dsl.nil? || !Glimmer::DSL::Engine.static_expressions[keyword][static_expression_dsl].is_a?(TopLevelExpression))
|
120
|
+
begin
|
121
|
+
interpretation = Glimmer::DSL::Engine.interpret(keyword, *args, &block)
|
122
|
+
rescue => e
|
123
|
+
raise e if static_expression_dsl.nil? || !Glimmer::DSL::Engine.static_expressions[keyword][static_expression_dsl].is_a?(TopLevelExpression)
|
127
124
|
end
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
125
|
+
end
|
126
|
+
if interpretation
|
127
|
+
interpretation
|
128
|
+
else
|
129
|
+
raise Glimmer::Error, "Unsupported keyword: #{keyword}" unless static_expression_dsl || retrieved_static_expression
|
130
|
+
Glimmer::DSL::Engine.dsl_stack.push(static_expression_dsl || Glimmer::DSL::Engine.dsl)
|
131
|
+
static_expression = Glimmer::DSL::Engine.static_expressions[keyword][Glimmer::DSL::Engine.dsl]
|
132
|
+
if !static_expression.can_interpret?(Glimmer::DSL::Engine.parent, keyword, *args, &block)
|
133
|
+
raise Error, "Invalid use of Glimmer keyword #{keyword} with args #{args} under parent #{Glimmer::DSL::Engine.parent}"
|
134
|
+
else
|
135
|
+
Glimmer::Config.logger&.debug "#{static_expression.class.name} will handle expression keyword #{keyword}"
|
136
|
+
static_expression.interpret(Glimmer::DSL::Engine.parent, keyword, *args, &block).tap do |ui_object|
|
137
|
+
Glimmer::DSL::Engine.add_content(ui_object, static_expression, &block) unless block.nil?
|
138
|
+
Glimmer::DSL::Engine.dsl_stack.pop
|
142
139
|
end
|
143
140
|
end
|
144
|
-
end
|
145
|
-
|
146
|
-
# Glimmer::DSL::Engine.dsl_stack.pop
|
147
|
-
Glimmer::DSL::Engine.reset
|
148
|
-
raise e
|
149
|
-
end
|
141
|
+
end
|
142
|
+
end
|
150
143
|
end
|
151
144
|
end
|
152
145
|
|
@@ -172,10 +165,6 @@ module Glimmer
|
|
172
165
|
add_content(ui_object, expression, &block)
|
173
166
|
dsl_stack.pop
|
174
167
|
end
|
175
|
-
rescue StandardError => e
|
176
|
-
# dsl_stack.pop
|
177
|
-
reset
|
178
|
-
raise e
|
179
168
|
end
|
180
169
|
|
181
170
|
# Adds content block to parent UI object
|
@@ -187,9 +176,12 @@ module Glimmer
|
|
187
176
|
if block_given? && expression.is_a?(ParentExpression)
|
188
177
|
dsl_stack.push(expression.class.dsl)
|
189
178
|
parent_stack.push(parent)
|
190
|
-
|
191
|
-
|
192
|
-
|
179
|
+
begin
|
180
|
+
expression.add_content(parent, &block)
|
181
|
+
ensure
|
182
|
+
parent_stack.pop
|
183
|
+
dsl_stack.pop
|
184
|
+
end
|
193
185
|
end
|
194
186
|
end
|
195
187
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AndyMaleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|