glimmer 0.9.4 → 0.9.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
![Login](images/glimmer-login.png)
|
@@ -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
|
![Tic Tac Toe](images/glimmer-tic-tac-toe.png)
|
@@ -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
|