natty-ui 0.5.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a4e46711be1871e4ad647f6fec2312d81473cd52d660c3a157120a6884144936
4
+ data.tar.gz: a58d2ffef5ff47034d3c1582e18a6e469ac39784d10a30292ac85c4134444ea6
5
+ SHA512:
6
+ metadata.gz: 9b1640b52328b2d55ba8568dfe99bca63fba659300bcd11fcc0f05e46dadfa5096cd2d01d97d8f2cd33330e67eca311722587441d60da38ac75db97ddfd32d8d
7
+ data.tar.gz: 2ba0659ba2823d47c2d8b33f09ec5d0be967c0bcef7354cea2e79d9c7bd68795d0995c8faeb9c762079739332b5835c89703f360290a712120aac67afd05a097
data/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2017-2021, Mike Blumtritt. All rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,122 @@
1
+ # NattyUI
2
+
3
+ This is the beautiful, nice, nifty, fancy, neat, pretty, cool, lovely, natty user interface you like to have for your command line interfaces (CLI).
4
+
5
+ <!-- TODO: ![version](https://img.shields.io/gem/v/natty-ui?label=) -->
6
+
7
+ <!-- TODO:
8
+ - Gem: [rubygems.org](https://rubygems.org/gems/natty-ui)
9
+ - Source: [github.com](https://github.com/mblumtritt/natty-ui)
10
+ - Help: [rubydoc.info](https://rubydoc.info/gems/natty-ui/NattyUI)
11
+ -->
12
+
13
+ ## Description
14
+
15
+ Here you find elegant, simple and beautiful tools that enhance your command line application functionally and look.
16
+
17
+ You can simply decorate your text with named ANSI attributes and colors
18
+
19
+ ```ruby
20
+ UI = NattyUI::StdOut
21
+
22
+ UI.puts "[[bold]]Hello [[ff7bfd]]World[[/]]!"
23
+ ```
24
+
25
+ or use different types of messages
26
+
27
+ ```ruby
28
+ UI.info 'NattyUI installed'
29
+ UI.warning 'Nice gem found!'
30
+ ```
31
+
32
+ and headings
33
+
34
+ ```ruby
35
+ UI.h1 'The Main Title (TMT)'
36
+ UI.h2 'A Subtitle'
37
+ ```
38
+
39
+ and framed sections
40
+
41
+ ```ruby
42
+ UI.framed 'Text Below In Frame' do |framed|
43
+ framed.puts 'This is the text'
44
+ end
45
+ ```
46
+
47
+ or use progression displays like progress bars and much much more!
48
+
49
+ ![illustration](https://raw.githubusercontent.com/mblumtritt/natty-ui/main/examples/illustration.svg)
50
+
51
+ ### But there is more!
52
+
53
+ Have a look at the [examples](./examples/) directory to get an impression of the current feature set.
54
+
55
+ ```sh
56
+ ruby ./examples/basic.rb
57
+ ```
58
+
59
+ or see the non-ANSI version
60
+
61
+ ```sh
62
+ NO_COLOR=1 ruby ./examples/basic.rb
63
+ ```
64
+
65
+ <!-- TODO:
66
+ link to NattyUI Features for more features!
67
+ -->
68
+
69
+ ### NO_COLOR Convention
70
+
71
+ NattyUI follows the [NO_COLOR convention](https://no-color.org).
72
+
73
+ ## Installation
74
+
75
+ You can install the gem in your system with
76
+
77
+ ```shell
78
+ gem install natty-ui
79
+ ```
80
+
81
+ or you can use [Bundler](http://gembundler.com/) to add NattyUI to your own project:
82
+
83
+ ```shell
84
+ bundle add 'natty-ui'
85
+ ```
86
+
87
+ After that you only need one line of code to have everything together
88
+
89
+ ```ruby
90
+ require 'natty-ui'
91
+ ```
92
+
93
+ ## Unicode Support
94
+
95
+ Unicode is generally supported. This means that for the calculation of screen outputs the different width of characters is considered. For this the wonderful Gem [unicode/display_width](https://github.com/janlelis/unicode-display_width) is used.
96
+
97
+ To be able to use Unicode characters that consist of multiple combinations (like some emoji), you have to explicitly load the Gem unicode/emoji _before_ NattyUI. It is not included automatically, because in most cases it is not needed (and we can save the overhead most of the time).
98
+
99
+ If you need the full beauty of Unicode just load it in that order:
100
+
101
+ ```ruby
102
+ require 'unicode/emoji'
103
+ require 'natty-ui'
104
+ ```
105
+
106
+ **Hint**: The compromise of not automatically supporting emojis results from the fact that not all terminals can output all emojis correctly. You can easily check this yourself by
107
+
108
+ ```sh
109
+ echo "👨‍👩‍👦 👩‍❤️‍👨"
110
+ ```
111
+
112
+ in your terminal window.
113
+
114
+ ## TODO
115
+
116
+ Since I did not complete the tests and not all my ideas are already implemented I have this Todo list:
117
+
118
+ - add samples to README
119
+ - add more samples to help
120
+ - add more tests
121
+ - simple prompt
122
+ - password prompt
data/examples/basic.rb ADDED
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ # require 'natty-ui'
4
+ require_relative '../lib/natty-ui'
5
+
6
+ UI = NattyUI::StdOut
7
+
8
+ UI.h1 'NattyUI Basic Feature Demo', <<~TEXT
9
+
10
+ This is a short demo of the basic features of [[i117 bold]]NattyUI[[/]].
11
+
12
+ TEXT
13
+
14
+ UI.h2 'Feature: ANSI Colors and Attributes', <<~TEXT
15
+
16
+ Like you might noticed you can [[i87]]color [[i215]]text[[/]] for terminals supporting this
17
+ feature. You can enforece the non-ANSI version by setting the environment
18
+ variable [[i117 italic]]NO_COLOR[[/]] to '[[i117]]1[[/]]'. (see also [[underline]]https://no-color.org[[/]])
19
+
20
+ You can not only color your text but also [[italic]]modify[[/]], [[underline]]decorate[[/]] and [[strike]]manipulate[[/]]
21
+ it. The attributes are direct embedded into the text like '[[/bold red]]'
22
+ and can be resetted with '[[//]]' or at the line end.
23
+
24
+ TEXT
25
+
26
+ UI.h2 'Feature: Sections' do |sec|
27
+ sec.puts <<~TEXT
28
+
29
+ Sections group text lines together and/or define their style. There are
30
+ several section types which all can be stacked.
31
+
32
+ Have a look at the different types of sections:
33
+
34
+ TEXT
35
+ sec.message 'Generic Message'
36
+ sec.information 'Informational Message'
37
+ sec.warning 'Warning Message'
38
+ sec.error 'Error Message'
39
+ sec.completed 'Completion Message'
40
+ sec.failed 'Failure Message'
41
+ sec.msg '[[i213]]Customized Message', symbol: '◉'
42
+ sec.space
43
+
44
+ sec.puts 'You can stack all kinds of sections together:'
45
+ sec.space
46
+ sec.framed('Simple Framed Section', type: :simple) do |f1|
47
+ f1.framed('Heavy Framed Section', type: :heavy) do |f2|
48
+ f2.framed('Semi Framed Section', type: :semi) do |f3|
49
+ f3.framed('Double Framed Section', type: :double) do |f4|
50
+ f4.message(
51
+ '[[fff400]]Frames are nice',
52
+ "Just to show you that all sections\ncan be stacked...",
53
+ symbol: '💛'
54
+ )
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ UI.space
@@ -0,0 +1,5 @@
1
+ # require 'natty-ui'
2
+ require_relative '../lib/natty-ui'
3
+
4
+ 256.times { |i| print NattyUI::Ansi.embellish("color #{i} ", i) }
5
+ puts
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 688"><style>text{dominant-baseline:text-before-edge;white-space:pre;font:13px Courier,monospace;fill:#bbb}.u{text-decoration:underline}.c1{fill:#0080d5}.f{fill:#fff}.c2{fill:#a5faff}.c3{fill:#ff50a5}.c4{fill:#50d0ff}.c5{fill:#2ad5d5}.c6{fill:#fffa50}.c7{fill:#ff5050}.c8{fill:#50ff50}.c9{fill:#ffa5ff}.ca{fill:#ffff50}.cb{fill:#55aad5}.cc{fill:#d5802a}</style><rect width="100%" height="100%" style="fill:#000;shape-rendering:crispEdges"/><text class="c1">═</text><text x="8" class="c1">═</text><text x="16" class="c1">═</text><text x="24" class="c1">═</text><text x="32" class="c1">═</text><text x="40" class="c1">═</text><text x="48" class="c1">═</text><text x="64" class="f">N</text><text x="72" class="f">a</text><text x="80" class="f">t</text><text x="88" class="f">t</text><text x="96" class="f">y</text><text x="104" class="f">U</text><text x="112" class="f">I</text><text x="128" class="f">B</text><text x="136" class="f">a</text><text x="144" class="f">s</text><text x="152" class="f">i</text><text x="160" class="f">c</text><text x="176" class="f">F</text><text x="184" class="f">e</text><text x="192" class="f">a</text><text x="200" class="f">t</text><text x="208" class="f">u</text><text x="216" class="f">r</text><text x="224" class="f">e</text><text x="240" class="f">D</text><text x="248" class="f">e</text><text x="256" class="f">m</text><text x="264" class="f">o</text><text x="280" class="c4">═</text><text x="288" class="c4">═</text><text x="296" class="c4">═</text><text x="304" class="c4">═</text><text x="312" class="c4">═</text><text x="320" class="c4">═</text><text x="328" class="c4">═</text><text y="32">T</text><text x="8" y="32">h</text><text x="16" y="32">i</text><text x="24" y="32">s</text><text x="40" y="32">i</text><text x="48" y="32">s</text><text x="64" y="32">a</text><text x="80" y="32">s</text><text x="88" y="32">h</text><text x="96" y="32">o</text><text x="104" y="32">r</text><text x="112" y="32">t</text><text x="128" y="32">d</text><text x="136" y="32">e</text><text x="144" y="32">m</text><text x="152" y="32">o</text><text x="168" y="32">o</text><text x="176" y="32">f</text><text x="192" y="32">t</text><text x="200" y="32">h</text><text x="208" y="32">e</text><text x="224" y="32">b</text><text x="232" y="32">a</text><text x="240" y="32">s</text><text x="248" y="32">i</text><text x="256" y="32">c</text><text x="272" y="32">f</text><text x="280" y="32">e</text><text x="288" y="32">a</text><text x="296" y="32">t</text><text x="304" y="32">u</text><text x="312" y="32">r</text><text x="320" y="32">e</text><text x="328" y="32">s</text><text x="344" y="32">o</text><text x="352" y="32">f</text><text x="368" y="32" class="c2">N</text><text x="376" y="32" class="c2">a</text><text x="384" y="32" class="c2">t</text><text x="392" y="32" class="c2">t</text><text x="400" y="32" class="c2">y</text><text x="408" y="32" class="c2">U</text><text x="416" y="32" class="c2">I</text><text x="424" y="32">.</text><text y="64" class="c1">━</text><text x="8" y="64" class="c1">━</text><text x="16" y="64" class="c1">━</text><text x="24" y="64" class="c1">━</text><text x="32" y="64" class="c1">━</text><text x="48" y="64" class="f">F</text><text x="56" y="64" class="f">e</text><text x="64" y="64" class="f">a</text><text x="72" y="64" class="f">t</text><text x="80" y="64" class="f">u</text><text x="88" y="64" class="f">r</text><text x="96" y="64" class="f">e</text><text x="104" y="64" class="f">:</text><text x="120" y="64" class="f">A</text><text x="128" y="64" class="f">N</text><text x="136" y="64" class="f">S</text><text x="144" y="64" class="f">I</text><text x="160" y="64" class="f">C</text><text x="168" y="64" class="f">o</text><text x="176" y="64" class="f">l</text><text x="184" y="64" class="f">o</text><text x="192" y="64" class="f">r</text><text x="200" y="64" class="f">s</text><text x="216" y="64" class="f">a</text><text x="224" y="64" class="f">n</text><text x="232" y="64" class="f">d</text><text x="248" y="64" class="f">A</text><text x="256" y="64" class="f">t</text><text x="264" y="64" class="f">t</text><text x="272" y="64" class="f">r</text><text x="280" y="64" class="f">i</text><text x="288" y="64" class="f">b</text><text x="296" y="64" class="f">u</text><text x="304" y="64" class="f">t</text><text x="312" y="64" class="f">e</text><text x="320" y="64" class="f">s</text><text x="336" y="64" class="c4">━</text><text x="344" y="64" class="c4">━</text><text x="352" y="64" class="c4">━</text><text x="360" y="64" class="c4">━</text><text x="368" y="64" class="c4">━</text><text y="96">L</text><text x="8" y="96">i</text><text x="16" y="96">k</text><text x="24" y="96">e</text><text x="40" y="96">y</text><text x="48" y="96">o</text><text x="56" y="96">u</text><text x="72" y="96">m</text><text x="80" y="96">i</text><text x="88" y="96">g</text><text x="96" y="96">h</text><text x="104" y="96">t</text><text x="120" y="96">n</text><text x="128" y="96">o</text><text x="136" y="96">t</text><text x="144" y="96">i</text><text x="152" y="96">c</text><text x="160" y="96">e</text><text x="168" y="96">d</text><text x="184" y="96">y</text><text x="192" y="96">o</text><text x="200" y="96">u</text><text x="216" y="96">c</text><text x="224" y="96">a</text><text x="232" y="96">n</text><text x="248" y="96" class="c5">c</text><text x="256" y="96" class="c5">o</text><text x="264" y="96" class="c5">l</text><text x="272" y="96" class="c5">o</text><text x="280" y="96" class="c5">r</text><text x="296" y="96" class="cc">t</text><text x="304" y="96" class="cc">e</text><text x="312" y="96" class="cc">x</text><text x="320" y="96" class="cc">t</text><text x="336" y="96">f</text><text x="344" y="96">o</text><text x="352" y="96">r</text><text x="368" y="96">t</text><text x="376" y="96">e</text><text x="384" y="96">r</text><text x="392" y="96">m</text><text x="400" y="96">i</text><text x="408" y="96">n</text><text x="416" y="96">a</text><text x="424" y="96">l</text><text x="432" y="96">s</text><text x="448" y="96">s</text><text x="456" y="96">u</text><text x="464" y="96">p</text><text x="472" y="96">p</text><text x="480" y="96">o</text><text x="488" y="96">r</text><text x="496" y="96">t</text><text x="504" y="96">i</text><text x="512" y="96">n</text><text x="520" y="96">g</text><text x="536" y="96">t</text><text x="544" y="96">h</text><text x="552" y="96">i</text><text x="560" y="96">s</text><text y="112">f</text><text x="8" y="112">e</text><text x="16" y="112">a</text><text x="24" y="112">t</text><text x="32" y="112">u</text><text x="40" y="112">r</text><text x="48" y="112">e</text><text x="56" y="112">.</text><text x="72" y="112">Y</text><text x="80" y="112">o</text><text x="88" y="112">u</text><text x="104" y="112">c</text><text x="112" y="112">a</text><text x="120" y="112">n</text><text x="136" y="112">e</text><text x="144" y="112">n</text><text x="152" y="112">f</text><text x="160" y="112">o</text><text x="168" y="112">r</text><text x="176" y="112">e</text><text x="184" y="112">c</text><text x="192" y="112">e</text><text x="208" y="112">t</text><text x="216" y="112">h</text><text x="224" y="112">e</text><text x="240" y="112">n</text><text x="248" y="112">o</text><text x="256" y="112">n</text><text x="264" y="112">-</text><text x="272" y="112">A</text><text x="280" y="112">N</text><text x="288" y="112">S</text><text x="296" y="112">I</text><text x="312" y="112">v</text><text x="320" y="112">e</text><text x="328" y="112">r</text><text x="336" y="112">s</text><text x="344" y="112">i</text><text x="352" y="112">o</text><text x="360" y="112">n</text><text x="376" y="112">b</text><text x="384" y="112">y</text><text x="400" y="112">s</text><text x="408" y="112">e</text><text x="416" y="112">t</text><text x="424" y="112">t</text><text x="432" y="112">i</text><text x="440" y="112">n</text><text x="448" y="112">g</text><text x="464" y="112">t</text><text x="472" y="112">h</text><text x="480" y="112">e</text><text x="496" y="112">e</text><text x="504" y="112">n</text><text x="512" y="112">v</text><text x="520" y="112">i</text><text x="528" y="112">r</text><text x="536" y="112">o</text><text x="544" y="112">n</text><text x="552" y="112">m</text><text x="560" y="112">e</text><text x="568" y="112">n</text><text x="576" y="112">t</text><text y="128">v</text><text x="8" y="128">a</text><text x="16" y="128">r</text><text x="24" y="128">i</text><text x="32" y="128">a</text><text x="40" y="128">b</text><text x="48" y="128">l</text><text x="56" y="128">e</text><text x="72" y="128" class="cb">N</text><text x="80" y="128" class="cb">O</text><text x="88" y="128" class="cb">_</text><text x="96" y="128" class="cb">C</text><text x="104" y="128" class="cb">O</text><text x="112" y="128" class="cb">L</text><text x="120" y="128" class="cb">O</text><text x="128" y="128" class="cb">R</text><text x="144" y="128">t</text><text x="152" y="128">o</text><text x="168" y="128">&apos;</text><text x="176" y="128" class="cb">1</text><text x="184" y="128">&apos;</text><text x="192" y="128">.</text><text x="208" y="128">(</text><text x="216" y="128">s</text><text x="224" y="128">e</text><text x="232" y="128">e</text><text x="248" y="128">a</text><text x="256" y="128">l</text><text x="264" y="128">s</text><text x="272" y="128">o</text><text x="288" y="128" class="u">h</text><text x="296" y="128" class="u">t</text><text x="304" y="128" class="u">t</text><text x="312" y="128" class="u">p</text><text x="320" y="128" class="u">s</text><text x="328" y="128" class="u">:</text><text x="336" y="128" class="u">/</text><text x="344" y="128" class="u">/</text><text x="352" y="128" class="u">n</text><text x="360" y="128" class="u">o</text><text x="368" y="128" class="u">-</text><text x="376" y="128" class="u">c</text><text x="384" y="128" class="u">o</text><text x="392" y="128" class="u">l</text><text x="400" y="128" class="u">o</text><text x="408" y="128" class="u">r</text><text x="416" y="128" class="u">.</text><text x="424" y="128" class="u">o</text><text x="432" y="128" class="u">r</text><text x="440" y="128" class="u">g</text><text x="448" y="128">)</text><text y="160">Y</text><text x="8" y="160">o</text><text x="16" y="160">u</text><text x="32" y="160">c</text><text x="40" y="160">a</text><text x="48" y="160">n</text><text x="64" y="160">n</text><text x="72" y="160">o</text><text x="80" y="160">t</text><text x="96" y="160">o</text><text x="104" y="160">n</text><text x="112" y="160">l</text><text x="120" y="160">y</text><text x="136" y="160">c</text><text x="144" y="160">o</text><text x="152" y="160">l</text><text x="160" y="160">o</text><text x="168" y="160">r</text><text x="184" y="160">y</text><text x="192" y="160">o</text><text x="200" y="160">u</text><text x="208" y="160">r</text><text x="224" y="160">t</text><text x="232" y="160">e</text><text x="240" y="160">x</text><text x="248" y="160">t</text><text x="264" y="160">b</text><text x="272" y="160">u</text><text x="280" y="160">t</text><text x="296" y="160">a</text><text x="304" y="160">l</text><text x="312" y="160">s</text><text x="320" y="160">o</text><text x="336" y="160">m</text><text x="344" y="160">o</text><text x="352" y="160">d</text><text x="360" y="160">i</text><text x="368" y="160">f</text><text x="376" y="160">y</text><text x="384" y="160">,</text><text x="400" y="160" class="u">d</text><text x="408" y="160" class="u">e</text><text x="416" y="160" class="u">c</text><text x="424" y="160" class="u">o</text><text x="432" y="160" class="u">r</text><text x="440" y="160" class="u">a</text><text x="448" y="160" class="u">t</text><text x="456" y="160" class="u">e</text><text x="472" y="160">a</text><text x="480" y="160">n</text><text x="488" y="160">d</text><text x="504" y="160">m</text><text x="512" y="160">a</text><text x="520" y="160">n</text><text x="528" y="160">i</text><text x="536" y="160">p</text><text x="544" y="160">u</text><text x="552" y="160">l</text><text x="560" y="160">a</text><text x="568" y="160">t</text><text x="576" y="160">e</text><text y="176">i</text><text x="8" y="176">t</text><text x="16" y="176">.</text><text x="32" y="176">T</text><text x="40" y="176">h</text><text x="48" y="176">e</text><text x="64" y="176">a</text><text x="72" y="176">t</text><text x="80" y="176">t</text><text x="88" y="176">r</text><text x="96" y="176">i</text><text x="104" y="176">b</text><text x="112" y="176">u</text><text x="120" y="176">t</text><text x="128" y="176">e</text><text x="136" y="176">s</text><text x="152" y="176">a</text><text x="160" y="176">r</text><text x="168" y="176">e</text><text x="184" y="176">d</text><text x="192" y="176">i</text><text x="200" y="176">r</text><text x="208" y="176">e</text><text x="216" y="176">c</text><text x="224" y="176">t</text><text x="240" y="176">e</text><text x="248" y="176">m</text><text x="256" y="176">b</text><text x="264" y="176">e</text><text x="272" y="176">d</text><text x="280" y="176">d</text><text x="288" y="176">e</text><text x="296" y="176">d</text><text x="312" y="176">i</text><text x="320" y="176">n</text><text x="328" y="176">t</text><text x="336" y="176">o</text><text x="352" y="176">t</text><text x="360" y="176">h</text><text x="368" y="176">e</text><text x="384" y="176">t</text><text x="392" y="176">e</text><text x="400" y="176">x</text><text x="408" y="176">t</text><text x="424" y="176">l</text><text x="432" y="176">i</text><text x="440" y="176">k</text><text x="448" y="176">e</text><text x="464" y="176">&apos;</text><text x="472" y="176">[</text><text x="480" y="176">[</text><text x="488" y="176">b</text><text x="496" y="176">o</text><text x="504" y="176">l</text><text x="512" y="176">d</text><text x="528" y="176">r</text><text x="536" y="176">e</text><text x="544" y="176">d</text><text x="552" y="176">]</text><text x="560" y="176">]</text><text x="568" y="176">&apos;</text><text y="192">a</text><text x="8" y="192">n</text><text x="16" y="192">d</text><text x="32" y="192">c</text><text x="40" y="192">a</text><text x="48" y="192">n</text><text x="64" y="192">b</text><text x="72" y="192">e</text><text x="88" y="192">r</text><text x="96" y="192">e</text><text x="104" y="192">s</text><text x="112" y="192">e</text><text x="120" y="192">t</text><text x="128" y="192">t</text><text x="136" y="192">e</text><text x="144" y="192">d</text><text x="160" y="192">w</text><text x="168" y="192">i</text><text x="176" y="192">t</text><text x="184" y="192">h</text><text x="200" y="192">&apos;</text><text x="208" y="192">[</text><text x="216" y="192">[</text><text x="224" y="192">/</text><text x="232" y="192">]</text><text x="240" y="192">]</text><text x="248" y="192">&apos;</text><text x="264" y="192">o</text><text x="272" y="192">r</text><text x="288" y="192">a</text><text x="296" y="192">t</text><text x="312" y="192">t</text><text x="320" y="192">h</text><text x="328" y="192">e</text><text x="344" y="192">l</text><text x="352" y="192">i</text><text x="360" y="192">n</text><text x="368" y="192">e</text><text x="384" y="192">e</text><text x="392" y="192">n</text><text x="400" y="192">d</text><text x="408" y="192">.</text><text y="224" class="c1">━</text><text x="8" y="224" class="c1">━</text><text x="16" y="224" class="c1">━</text><text x="24" y="224" class="c1">━</text><text x="32" y="224" class="c1">━</text><text x="48" y="224" class="f">F</text><text x="56" y="224" class="f">e</text><text x="64" y="224" class="f">a</text><text x="72" y="224" class="f">t</text><text x="80" y="224" class="f">u</text><text x="88" y="224" class="f">r</text><text x="96" y="224" class="f">e</text><text x="104" y="224" class="f">:</text><text x="120" y="224" class="f">S</text><text x="128" y="224" class="f">e</text><text x="136" y="224" class="f">c</text><text x="144" y="224" class="f">t</text><text x="152" y="224" class="f">i</text><text x="160" y="224" class="f">o</text><text x="168" y="224" class="f">n</text><text x="176" y="224" class="f">s</text><text x="192" y="224" class="c4">━</text><text x="200" y="224" class="c4">━</text><text x="208" y="224" class="c4">━</text><text x="216" y="224" class="c4">━</text><text x="224" y="224" class="c4">━</text><text y="256">S</text><text x="8" y="256">e</text><text x="16" y="256">c</text><text x="24" y="256">t</text><text x="32" y="256">i</text><text x="40" y="256">o</text><text x="48" y="256">n</text><text x="56" y="256">s</text><text x="72" y="256">g</text><text x="80" y="256">r</text><text x="88" y="256">o</text><text x="96" y="256">u</text><text x="104" y="256">p</text><text x="120" y="256">t</text><text x="128" y="256">e</text><text x="136" y="256">x</text><text x="144" y="256">t</text><text x="160" y="256">l</text><text x="168" y="256">i</text><text x="176" y="256">n</text><text x="184" y="256">e</text><text x="192" y="256">s</text><text x="208" y="256">t</text><text x="216" y="256">o</text><text x="224" y="256">g</text><text x="232" y="256">e</text><text x="240" y="256">t</text><text x="248" y="256">h</text><text x="256" y="256">e</text><text x="264" y="256">r</text><text x="280" y="256">a</text><text x="288" y="256">n</text><text x="296" y="256">d</text><text x="304" y="256">/</text><text x="312" y="256">o</text><text x="320" y="256">r</text><text x="336" y="256">d</text><text x="344" y="256">e</text><text x="352" y="256">f</text><text x="360" y="256">i</text><text x="368" y="256">n</text><text x="376" y="256">e</text><text x="392" y="256">t</text><text x="400" y="256">h</text><text x="408" y="256">e</text><text x="416" y="256">i</text><text x="424" y="256">r</text><text x="440" y="256">s</text><text x="448" y="256">t</text><text x="456" y="256">y</text><text x="464" y="256">l</text><text x="472" y="256">e</text><text x="480" y="256">.</text><text x="496" y="256">T</text><text x="504" y="256">h</text><text x="512" y="256">e</text><text x="520" y="256">r</text><text x="528" y="256">e</text><text x="544" y="256">a</text><text x="552" y="256">r</text><text x="560" y="256">e</text><text y="272">s</text><text x="8" y="272">e</text><text x="16" y="272">v</text><text x="24" y="272">e</text><text x="32" y="272">r</text><text x="40" y="272">a</text><text x="48" y="272">l</text><text x="64" y="272">s</text><text x="72" y="272">e</text><text x="80" y="272">c</text><text x="88" y="272">t</text><text x="96" y="272">i</text><text x="104" y="272">o</text><text x="112" y="272">n</text><text x="128" y="272">t</text><text x="136" y="272">y</text><text x="144" y="272">p</text><text x="152" y="272">e</text><text x="160" y="272">s</text><text x="176" y="272">w</text><text x="184" y="272">h</text><text x="192" y="272">i</text><text x="200" y="272">c</text><text x="208" y="272">h</text><text x="224" y="272">a</text><text x="232" y="272">l</text><text x="240" y="272">l</text><text x="256" y="272">c</text><text x="264" y="272">a</text><text x="272" y="272">n</text><text x="288" y="272">b</text><text x="296" y="272">e</text><text x="312" y="272">s</text><text x="320" y="272">t</text><text x="328" y="272">a</text><text x="336" y="272">c</text><text x="344" y="272">k</text><text x="352" y="272">e</text><text x="360" y="272">d</text><text x="368" y="272">.</text><text y="304">H</text><text x="8" y="304">a</text><text x="16" y="304">v</text><text x="24" y="304">e</text><text x="40" y="304">a</text><text x="56" y="304">l</text><text x="64" y="304">o</text><text x="72" y="304">o</text><text x="80" y="304">k</text><text x="96" y="304">a</text><text x="104" y="304">t</text><text x="120" y="304">t</text><text x="128" y="304">h</text><text x="136" y="304">e</text><text x="152" y="304">d</text><text x="160" y="304">i</text><text x="168" y="304">f</text><text x="176" y="304">f</text><text x="184" y="304">e</text><text x="192" y="304">r</text><text x="200" y="304">e</text><text x="208" y="304">n</text><text x="216" y="304">t</text><text x="232" y="304">t</text><text x="240" y="304">y</text><text x="248" y="304">p</text><text x="256" y="304">e</text><text x="264" y="304">s</text><text x="280" y="304">o</text><text x="288" y="304">f</text><text x="304" y="304">s</text><text x="312" y="304">e</text><text x="320" y="304">c</text><text x="328" y="304">t</text><text x="336" y="304">i</text><text x="344" y="304">o</text><text x="352" y="304">n</text><text x="360" y="304">s</text><text x="368" y="304">:</text><text y="336" class="f">•</text><text x="16" y="336" class="f">G</text><text x="24" y="336" class="f">e</text><text x="32" y="336" class="f">n</text><text x="40" y="336" class="f">e</text><text x="48" y="336" class="f">r</text><text x="56" y="336" class="f">i</text><text x="64" y="336" class="f">c</text><text x="80" y="336" class="f">M</text><text x="88" y="336" class="f">e</text><text x="96" y="336" class="f">s</text><text x="104" y="336" class="f">s</text><text x="112" y="336" class="f">a</text><text x="120" y="336" class="f">g</text><text x="128" y="336" class="f">e</text><text y="352" class="c2">i</text><text x="16" y="352" class="c2">I</text><text x="24" y="352" class="c2">n</text><text x="32" y="352" class="c2">f</text><text x="40" y="352" class="c2">o</text><text x="48" y="352" class="c2">r</text><text x="56" y="352" class="c2">m</text><text x="64" y="352" class="c2">a</text><text x="72" y="352" class="c2">t</text><text x="80" y="352" class="c2">i</text><text x="88" y="352" class="c2">o</text><text x="96" y="352" class="c2">n</text><text x="104" y="352" class="c2">a</text><text x="112" y="352" class="c2">l</text><text x="128" y="352" class="c2">M</text><text x="136" y="352" class="c2">e</text><text x="144" y="352" class="c2">s</text><text x="152" y="352" class="c2">s</text><text x="160" y="352" class="c2">a</text><text x="168" y="352" class="c2">g</text><text x="176" y="352" class="c2">e</text><text y="368" class="c6">!</text><text x="16" y="368" class="c6">W</text><text x="24" y="368" class="c6">a</text><text x="32" y="368" class="c6">r</text><text x="40" y="368" class="c6">n</text><text x="48" y="368" class="c6">i</text><text x="56" y="368" class="c6">n</text><text x="64" y="368" class="c6">g</text><text x="80" y="368" class="c6">M</text><text x="88" y="368" class="c6">e</text><text x="96" y="368" class="c6">s</text><text x="104" y="368" class="c6">s</text><text x="112" y="368" class="c6">a</text><text x="120" y="368" class="c6">g</text><text x="128" y="368" class="c6">e</text><text y="384" class="c7">X</text><text x="16" y="384" class="c7">E</text><text x="24" y="384" class="c7">r</text><text x="32" y="384" class="c7">r</text><text x="40" y="384" class="c7">o</text><text x="48" y="384" class="c7">r</text><text x="64" y="384" class="c7">M</text><text x="72" y="384" class="c7">e</text><text x="80" y="384" class="c7">s</text><text x="88" y="384" class="c7">s</text><text x="96" y="384" class="c7">a</text><text x="104" y="384" class="c7">g</text><text x="112" y="384" class="c7">e</text><text y="400" class="c8">✓</text><text x="16" y="400" class="c8">C</text><text x="24" y="400" class="c8">o</text><text x="32" y="400" class="c8">m</text><text x="40" y="400" class="c8">p</text><text x="48" y="400" class="c8">l</text><text x="56" y="400" class="c8">e</text><text x="64" y="400" class="c8">t</text><text x="72" y="400" class="c8">i</text><text x="80" y="400" class="c8">o</text><text x="88" y="400" class="c8">n</text><text x="104" y="400" class="c8">M</text><text x="112" y="400" class="c8">e</text><text x="120" y="400" class="c8">s</text><text x="128" y="400" class="c8">s</text><text x="136" y="400" class="c8">a</text><text x="144" y="400" class="c8">g</text><text x="152" y="400" class="c8">e</text><text y="416" class="c3">F</text><text x="16" y="416" class="c3">F</text><text x="24" y="416" class="c3">a</text><text x="32" y="416" class="c3">i</text><text x="40" y="416" class="c3">l</text><text x="48" y="416" class="c3">u</text><text x="56" y="416" class="c3">r</text><text x="64" y="416" class="c3">e</text><text x="80" y="416" class="c3">M</text><text x="88" y="416" class="c3">e</text><text x="96" y="416" class="c3">s</text><text x="104" y="416" class="c3">s</text><text x="112" y="416" class="c3">a</text><text x="120" y="416" class="c3">g</text><text x="128" y="416" class="c3">e</text><text y="432" class="f">◉</text><text x="16" y="432" class="c9">C</text><text x="24" y="432" class="c9">u</text><text x="32" y="432" class="c9">s</text><text x="40" y="432" class="c9">t</text><text x="48" y="432" class="c9">o</text><text x="56" y="432" class="c9">m</text><text x="64" y="432" class="c9">i</text><text x="72" y="432" class="c9">z</text><text x="80" y="432" class="c9">e</text><text x="88" y="432" class="c9">d</text><text x="104" y="432" class="c9">M</text><text x="112" y="432" class="c9">e</text><text x="120" y="432" class="c9">s</text><text x="128" y="432" class="c9">s</text><text x="136" y="432" class="c9">a</text><text x="144" y="432" class="c9">g</text><text x="152" y="432" class="c9">e</text><text y="464">Y</text><text x="8" y="464">o</text><text x="16" y="464">u</text><text x="32" y="464">c</text><text x="40" y="464">a</text><text x="48" y="464">n</text><text x="64" y="464">s</text><text x="72" y="464">t</text><text x="80" y="464">a</text><text x="88" y="464">c</text><text x="96" y="464">k</text><text x="112" y="464">a</text><text x="120" y="464">l</text><text x="128" y="464">l</text><text x="144" y="464">k</text><text x="152" y="464">i</text><text x="160" y="464">n</text><text x="168" y="464">d</text><text x="176" y="464">s</text><text x="192" y="464">o</text><text x="200" y="464">f</text><text x="216" y="464">s</text><text x="224" y="464">e</text><text x="232" y="464">c</text><text x="240" y="464">t</text><text x="248" y="464">i</text><text x="256" y="464">o</text><text x="264" y="464">n</text><text x="272" y="464">s</text><text x="288" y="464">t</text><text x="296" y="464">o</text><text x="304" y="464">g</text><text x="312" y="464">e</text><text x="320" y="464">t</text><text x="328" y="464">h</text><text x="336" y="464">e</text><text x="344" y="464">r</text><text x="352" y="464">:</text><text y="496" class="c1">┌</text><text x="8" y="496" class="c1">─</text><text x="16" y="496" class="c1">─</text><text x="32" y="496" class="f">S</text><text x="40" y="496" class="f">i</text><text x="48" y="496" class="f">m</text><text x="56" y="496" class="f">p</text><text x="64" y="496" class="f">l</text><text x="72" y="496" class="f">e</text><text x="88" y="496" class="f">F</text><text x="96" y="496" class="f">r</text><text x="104" y="496" class="f">a</text><text x="112" y="496" class="f">m</text><text x="120" y="496" class="f">e</text><text x="128" y="496" class="f">d</text><text x="144" y="496" class="f">S</text><text x="152" y="496" class="f">e</text><text x="160" y="496" class="f">c</text><text x="168" y="496" class="f">t</text><text x="176" y="496" class="f">i</text><text x="184" y="496" class="f">o</text><text x="192" y="496" class="f">n</text><text x="208" y="496" class="c1">─</text><text x="216" y="496" class="c1">─</text><text x="224" y="496" class="c1">─</text><text x="232" y="496" class="c1">─</text><text x="240" y="496" class="c1">─</text><text y="512" class="c1">│</text><text x="16" y="512" class="c1">┏</text><text x="24" y="512" class="c1">━</text><text x="32" y="512" class="c1">━</text><text x="48" y="512" class="f">H</text><text x="56" y="512" class="f">e</text><text x="64" y="512" class="f">a</text><text x="72" y="512" class="f">v</text><text x="80" y="512" class="f">y</text><text x="96" y="512" class="f">F</text><text x="104" y="512" class="f">r</text><text x="112" y="512" class="f">a</text><text x="120" y="512" class="f">m</text><text x="128" y="512" class="f">e</text><text x="136" y="512" class="f">d</text><text x="152" y="512" class="f">S</text><text x="160" y="512" class="f">e</text><text x="168" y="512" class="f">c</text><text x="176" y="512" class="f">t</text><text x="184" y="512" class="f">i</text><text x="192" y="512" class="f">o</text><text x="200" y="512" class="f">n</text><text x="216" y="512" class="c1">━</text><text x="224" y="512" class="c1">━</text><text x="232" y="512" class="c1">━</text><text x="240" y="512" class="c1">━</text><text x="248" y="512" class="c1">━</text><text y="528" class="c1">│</text><text x="16" y="528" class="c1">┃</text><text x="32" y="528" class="c1">┍</text><text x="40" y="528" class="c1">━</text><text x="48" y="528" class="c1">━</text><text x="64" y="528" class="f">S</text><text x="72" y="528" class="f">e</text><text x="80" y="528" class="f">m</text><text x="88" y="528" class="f">i</text><text x="104" y="528" class="f">F</text><text x="112" y="528" class="f">r</text><text x="120" y="528" class="f">a</text><text x="128" y="528" class="f">m</text><text x="136" y="528" class="f">e</text><text x="144" y="528" class="f">d</text><text x="160" y="528" class="f">S</text><text x="168" y="528" class="f">e</text><text x="176" y="528" class="f">c</text><text x="184" y="528" class="f">t</text><text x="192" y="528" class="f">i</text><text x="200" y="528" class="f">o</text><text x="208" y="528" class="f">n</text><text x="224" y="528" class="c1">━</text><text x="232" y="528" class="c1">━</text><text x="240" y="528" class="c1">━</text><text x="248" y="528" class="c1">━</text><text x="256" y="528" class="c1">━</text><text y="544" class="c1">│</text><text x="16" y="544" class="c1">┃</text><text x="32" y="544" class="c1">│</text><text x="48" y="544" class="c1">╔</text><text x="56" y="544" class="c1">═</text><text x="64" y="544" class="c1">═</text><text x="80" y="544" class="f">D</text><text x="88" y="544" class="f">o</text><text x="96" y="544" class="f">u</text><text x="104" y="544" class="f">b</text><text x="112" y="544" class="f">l</text><text x="120" y="544" class="f">e</text><text x="136" y="544" class="f">F</text><text x="144" y="544" class="f">r</text><text x="152" y="544" class="f">a</text><text x="160" y="544" class="f">m</text><text x="168" y="544" class="f">e</text><text x="176" y="544" class="f">d</text><text x="192" y="544" class="f">S</text><text x="200" y="544" class="f">e</text><text x="208" y="544" class="f">c</text><text x="216" y="544" class="f">t</text><text x="224" y="544" class="f">i</text><text x="232" y="544" class="f">o</text><text x="240" y="544" class="f">n</text><text x="256" y="544" class="c1">═</text><text x="264" y="544" class="c1">═</text><text x="272" y="544" class="c1">═</text><text x="280" y="544" class="c1">═</text><text x="288" y="544" class="c1">═</text><text y="560" class="c1">│</text><text x="16" y="560" class="c1">┃</text><text x="32" y="560" class="c1">│</text><text x="48" y="560" class="c1">║</text><text x="64" y="560" class="f">💛</text><text x="80" y="560" class="ca">F</text><text x="88" y="560" class="ca">r</text><text x="96" y="560" class="ca">a</text><text x="104" y="560" class="ca">m</text><text x="112" y="560" class="ca">e</text><text x="120" y="560" class="ca">s</text><text x="136" y="560" class="ca">a</text><text x="144" y="560" class="ca">r</text><text x="152" y="560" class="ca">e</text><text x="168" y="560" class="ca">n</text><text x="176" y="560" class="ca">i</text><text x="184" y="560" class="ca">c</text><text x="192" y="560" class="ca">e</text><text y="576" class="c1">│</text><text x="16" y="576" class="c1">┃</text><text x="32" y="576" class="c1">│</text><text x="48" y="576" class="c1">║</text><text x="88" y="576">J</text><text x="96" y="576">u</text><text x="104" y="576">s</text><text x="112" y="576">t</text><text x="128" y="576">t</text><text x="136" y="576">o</text><text x="152" y="576">s</text><text x="160" y="576">h</text><text x="168" y="576">o</text><text x="176" y="576">w</text><text x="192" y="576">y</text><text x="200" y="576">o</text><text x="208" y="576">u</text><text x="224" y="576">t</text><text x="232" y="576">h</text><text x="240" y="576">a</text><text x="248" y="576">t</text><text x="264" y="576">a</text><text x="272" y="576">l</text><text x="280" y="576">l</text><text x="296" y="576">s</text><text x="304" y="576">e</text><text x="312" y="576">c</text><text x="320" y="576">t</text><text x="328" y="576">i</text><text x="336" y="576">o</text><text x="344" y="576">n</text><text x="352" y="576">s</text><text y="592" class="c1">│</text><text x="16" y="592" class="c1">┃</text><text x="32" y="592" class="c1">│</text><text x="48" y="592" class="c1">║</text><text x="88" y="592">c</text><text x="96" y="592">a</text><text x="104" y="592">n</text><text x="120" y="592">b</text><text x="128" y="592">e</text><text x="144" y="592">s</text><text x="152" y="592">t</text><text x="160" y="592">a</text><text x="168" y="592">c</text><text x="176" y="592">k</text><text x="184" y="592">e</text><text x="192" y="592">d</text><text x="200" y="592">.</text><text x="208" y="592">.</text><text x="216" y="592">.</text><text y="608" class="c1">│</text><text x="16" y="608" class="c1">┃</text><text x="32" y="608" class="c1">│</text><text x="48" y="608" class="c1">╚</text><text x="56" y="608" class="c1">═</text><text x="64" y="608" class="c1">═</text><text x="72" y="608" class="c1">═</text><text x="80" y="608" class="c1">═</text><text x="88" y="608" class="c1">═</text><text x="96" y="608" class="c1">═</text><text x="104" y="608" class="c1">═</text><text x="112" y="608" class="c1">═</text><text x="120" y="608" class="c1">═</text><text x="128" y="608" class="c1">═</text><text y="624" class="c1">│</text><text x="16" y="624" class="c1">┃</text><text x="32" y="624" class="c1">┕</text><text x="40" y="624" class="c1">━</text><text x="48" y="624" class="c1">━</text><text x="56" y="624" class="c1">━</text><text x="64" y="624" class="c1">━</text><text x="72" y="624" class="c1">━</text><text x="80" y="624" class="c1">━</text><text x="88" y="624" class="c1">━</text><text x="96" y="624" class="c1">━</text><text x="104" y="624" class="c1">━</text><text x="112" y="624" class="c1">━</text><text y="640" class="c1">│</text><text x="16" y="640" class="c1">┗</text><text x="24" y="640" class="c1">━</text><text x="32" y="640" class="c1">━</text><text x="40" y="640" class="c1">━</text><text x="48" y="640" class="c1">━</text><text x="56" y="640" class="c1">━</text><text x="64" y="640" class="c1">━</text><text x="72" y="640" class="c1">━</text><text x="80" y="640" class="c1">━</text><text x="88" y="640" class="c1">━</text><text x="96" y="640" class="c1">━</text><text y="656" class="c1">└</text><text x="8" y="656" class="c1">─</text><text x="16" y="656" class="c1">─</text><text x="24" y="656" class="c1">─</text><text x="32" y="656" class="c1">─</text><text x="40" y="656" class="c1">─</text><text x="48" y="656" class="c1">─</text><text x="56" y="656" class="c1">─</text><text x="64" y="656" class="c1">─</text><text x="72" y="656" class="c1">─</text><text x="80" y="656" class="c1">─</text></svg>
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ # require 'natty-ui'
4
+ require_relative '../lib/natty-ui'
5
+
6
+ UI = NattyUI::StdOut
7
+
8
+ UI.space
9
+ UI.h1 'NattyUI Progress Indication Demo'
10
+ UI.space
11
+
12
+ # just simulate some work
13
+ def something = sleep(0.4)
14
+ def some = sleep(0.15)
15
+
16
+ UI.framed('Pogress Indicators') do |sec|
17
+ progress = sec.progress('Progress with max_value', max_value: 11)
18
+ 11.times do
19
+ progress.step
20
+ something
21
+ end
22
+ progress.done 'Progress ok'
23
+
24
+ progress = sec.progress('Simple progress')
25
+ 20.times do
26
+ progress.step
27
+ some
28
+ end
29
+ progress.done 'All fine'
30
+ end
31
+
32
+ # simulate assembling task steps
33
+ def assemble(task)
34
+ task.msg 'Collect files...'
35
+ something
36
+ task.task 'Compile files...' do |subtask|
37
+ %w[readme.txt main.css main.html sub.html].each do |name|
38
+ subtask.msg "Compile file [[bright_yellow]]./source/#{name}[[/]]..."
39
+ something
40
+ end
41
+ subtask.done 'Files compiled.'
42
+ end
43
+ something
44
+ task.msg 'Compressing...'
45
+ something
46
+ task.msg 'Signing...'
47
+ something
48
+ task.msg 'Store assembled results...'
49
+ something
50
+ end
51
+
52
+ UI.framed('Tasks') do |sec|
53
+ sec.puts 'Tasks are sections to visualize step by step processing.'
54
+ sec.task('Assemble assets') { |task| assemble(task) }
55
+ sec.space
56
+
57
+ sec.puts 'If such a task failed the logged messages are kept:'
58
+ assembling = sec.task('Assemble assets')
59
+ assemble(assembling)
60
+ assembling.failed
61
+ sec.space
62
+
63
+ sec.puts 'You can add some more description when failed:'
64
+ sec.task('Assemble assets') do |task|
65
+ assemble(task)
66
+ task.failed('Unable to store results', <<~ERROR)
67
+ Server reported Invalid credentials
68
+ Check your credentials and try again...
69
+ ERROR
70
+
71
+ This code here is never reached!
72
+ end
73
+ sec.space
74
+
75
+ sec.puts 'You can also add a description when all was fine:'
76
+ sec.task('Assemble assets') do |task|
77
+ assemble(task)
78
+ task.done('Assets assembled', <<~INFO)
79
+ Your assets are ready on server now.
80
+ INFO
81
+
82
+ This code here is never reached!
83
+ end
84
+ end
data/examples/query.rb ADDED
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ # require 'natty-ui'
4
+ require_relative '../lib/natty-ui'
5
+
6
+ UI = NattyUI::StdOut
7
+
8
+ UI.space
9
+
10
+ UI.framed('NattyUI Query Demo') do |sec|
11
+ unless sec.ask('Do you like to continute? (Y|n)')
12
+ sec.failed('aborted')
13
+ sec.close
14
+ exit
15
+ end
16
+
17
+ choice =
18
+ sec.query(
19
+ 'Which fruits do you prefer?',
20
+ 'Apples',
21
+ 'Bananas',
22
+ 'Cherries',
23
+ x: 'No fruits',
24
+ result: :choice
25
+ )
26
+ unless choice
27
+ sec.failed('aborted')
28
+ sec.close
29
+ exit(false)
30
+ end
31
+ sec.info("Your choice: #{choice}")
32
+ end