hawktui 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +39 -0
- data/lib/hawktui/streaming_table/cell.rb +2 -2
- data/lib/hawktui/streaming_table/column.rb +4 -4
- data/lib/hawktui/streaming_table/layout.rb +5 -5
- data/lib/hawktui/streaming_table.rb +19 -4
- data/lib/hawktui/version.rb +1 -1
- 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: 56702f773b1ff7da828d1a7e9dfc838b83e1167036ed707ad72525b34c8f0738
|
4
|
+
data.tar.gz: 7d056d53a33107647ffaa5164c9d6d7b1d6013a3d3c4263ef338e7ef014108e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0df227c1bfb4eb2c31baf4ce2e60c486c657b4d567c16a1384b878f94bef021d5c827fde1c20d9300cae91400e9a13eb204490be2c2875f387479564620fdcf5
|
7
|
+
data.tar.gz: 7f6086a30a2df0cb42da9ab8097ac662994593492f30dbaae42f2d8ccc1bea0f7fac41ade120a10a3ee65897a38accfd0149084b7a88a83f5f154aafe17d2671
|
data/README.md
CHANGED
@@ -3,3 +3,42 @@
|
|
3
3
|
Hawktui is a simple and easy to use TUI (Terminal User Interface) library for Ruby. It is built on the [curses](https://github.com/ruby/curses) library.
|
4
4
|
|
5
5
|
![hawktui](https://github.com/jonmagic/hawktui/blob/main/hawktui.jpeg)
|
6
|
+
|
7
|
+
So far it includes a `StreamingTable` API and more APIs are planned.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem "hawktui"
|
15
|
+
```
|
16
|
+
|
17
|
+
Run the following command to install it:
|
18
|
+
|
19
|
+
```bash
|
20
|
+
bundle install
|
21
|
+
```
|
22
|
+
|
23
|
+
## StreamingTable
|
24
|
+
|
25
|
+
The `Hawktui::StreamingTable` API can be used to create a full screen table in your terminal that can be updated in real time. This is useful for displaying data that is constantly changing.
|
26
|
+
|
27
|
+
```bash
|
28
|
+
git clone https://github.com/jonmagic/hawktui
|
29
|
+
cd hawktui
|
30
|
+
bin/setup
|
31
|
+
bin/demo
|
32
|
+
```
|
33
|
+
|
34
|
+
https://github.com/user-attachments/assets/9085352f-9f6a-47ae-90c7-cc23946f2d30
|
35
|
+
|
36
|
+
See [bin/demo](https://github.com/jonmagic/hawktui/blob/main/bin/demo) for an example of how to use `Hawktui::StreamingTable` and the implementation in [lib/hawktui/streaming_table.rb](https://github.com/jonmagic/hawktui/blob/main/lib/hawktui/streaming_table.rb) for documentation.
|
37
|
+
|
38
|
+
## Roadmap
|
39
|
+
|
40
|
+
- Add functionality to StreamingTable for selecting and acting on rows.
|
41
|
+
|
42
|
+
## Contributors
|
43
|
+
|
44
|
+
- [@jonmagic](https://github.com/jonmagic)
|
@@ -7,11 +7,11 @@ module Hawktui
|
|
7
7
|
#
|
8
8
|
# Examples
|
9
9
|
#
|
10
|
-
# cell =
|
10
|
+
# cell = Hawktui::StreamingTable::Cell.new("Hello")
|
11
11
|
# cell.value # => "Hello"
|
12
12
|
# cell.color # => nil
|
13
13
|
#
|
14
|
-
# colored_cell =
|
14
|
+
# colored_cell = Hawktui::StreamingTable::Cell.new(value: "Error", color: :red)
|
15
15
|
# colored_cell.value # => "Error"
|
16
16
|
# colored_cell.color # => :red
|
17
17
|
#
|
@@ -7,7 +7,7 @@ module Hawktui
|
|
7
7
|
#
|
8
8
|
# Examples
|
9
9
|
#
|
10
|
-
# column =
|
10
|
+
# column = Hawktui::StreamingTable::Column.new(name: :message, width: 50)
|
11
11
|
#
|
12
12
|
class Column
|
13
13
|
attr_reader :name, :width
|
@@ -19,7 +19,7 @@ module Hawktui
|
|
19
19
|
#
|
20
20
|
# Examples
|
21
21
|
#
|
22
|
-
# column =
|
22
|
+
# column = Hawktui::StreamingTable::Column.new(name: :message, width: 50)
|
23
23
|
#
|
24
24
|
# Returns a new Column instance.
|
25
25
|
def initialize(name:, width:)
|
@@ -31,11 +31,11 @@ module Hawktui
|
|
31
31
|
# If the text is longer than `width`, it will be truncated with an ellipsis ("…").
|
32
32
|
# Otherwise, it’s left-padded with spaces to fill the width.
|
33
33
|
#
|
34
|
-
# cell - A
|
34
|
+
# cell - A Hawktui::StreamingTable::Cell containing the raw value and color.
|
35
35
|
#
|
36
36
|
# Examples
|
37
37
|
#
|
38
|
-
# cell =
|
38
|
+
# cell = Hawktui::StreamingTable::Cell.new("Some message")
|
39
39
|
# column.format_cell(cell)
|
40
40
|
# # => ["Some message ", nil] # => example if width is bigger
|
41
41
|
#
|
@@ -12,7 +12,7 @@ module Hawktui
|
|
12
12
|
# { name: :timestamp, width: 20 },
|
13
13
|
# { name: :message, width: 50 },
|
14
14
|
# ]
|
15
|
-
# layout =
|
15
|
+
# layout = Hawktui::StreamingTable::Layout.new(columns: columns, header_color: :white)
|
16
16
|
#
|
17
17
|
# header_cells = layout.build_header_row # => [Cell(...), Cell(...)]
|
18
18
|
#
|
@@ -21,13 +21,13 @@ module Hawktui
|
|
21
21
|
|
22
22
|
# Public: Create a new TableLayout.
|
23
23
|
#
|
24
|
-
# columns - An Array of Hashes or
|
24
|
+
# columns - An Array of Hashes or Hawktui::StreamingTable::Column objects. Each element must
|
25
25
|
# have a `:name` and `:width`.
|
26
26
|
# header_color - A Symbol representing the color used in the header (defaults to :white).
|
27
27
|
#
|
28
28
|
# Examples
|
29
29
|
#
|
30
|
-
# layout =
|
30
|
+
# layout = Hawktui::StreamingTable::Layout.new(
|
31
31
|
# columns: [
|
32
32
|
# { name: :time, width: 10 },
|
33
33
|
# { name: :level, width: 5 },
|
@@ -52,7 +52,7 @@ module Hawktui
|
|
52
52
|
# layout.build_header_row
|
53
53
|
# # => [Cell(value="time", color=:white), Cell(value="level", color=:white)]
|
54
54
|
#
|
55
|
-
# Returns an Array of
|
55
|
+
# Returns an Array of Hawktui::StreamingTable::Cell objects.
|
56
56
|
def build_header_row
|
57
57
|
columns.map do |col|
|
58
58
|
# Use the stored @header_color for all headers
|
@@ -71,7 +71,7 @@ module Hawktui
|
|
71
71
|
# layout.build_cells_for_row(row_hash)
|
72
72
|
# # => [Cell(value="12:00", color=nil), Cell(value="INFO", color=:green)]
|
73
73
|
#
|
74
|
-
# Returns an Array of
|
74
|
+
# Returns an Array of Hawktui::StreamingTable::Cell objects.
|
75
75
|
def build_cells_for_row(row_hash)
|
76
76
|
columns.map do |col|
|
77
77
|
value_or_hash = row_hash[col.name] || ""
|
@@ -17,7 +17,7 @@ module Hawktui
|
|
17
17
|
# { name: :timestamp, width: 20 },
|
18
18
|
# { name: :message, width: 50 },
|
19
19
|
# ]
|
20
|
-
# table =
|
20
|
+
# table = Hawktui::StreamingTable.new(columns: columns, max_rows: 1000)
|
21
21
|
# table.start
|
22
22
|
#
|
23
23
|
# # In a separate thread or async process:
|
@@ -31,16 +31,16 @@ module Hawktui
|
|
31
31
|
class StreamingTable
|
32
32
|
# Public: Create a new StreamingTable.
|
33
33
|
#
|
34
|
-
# columns - An Array of Hashes or
|
34
|
+
# columns - An Array of Hashes or Hawktui::StreamingTable::Column objects that define the table’s
|
35
35
|
# columns. Each element should at least contain `:name` and `:width`.
|
36
36
|
# max_rows - The maximum number of rows to keep in the table. Defaults to 100000.
|
37
37
|
#
|
38
38
|
# Examples
|
39
39
|
#
|
40
|
-
# table =
|
40
|
+
# table = Hawktui::StreamingTable.new(columns: [{ name: :time, width: 10 }], max_rows: 500)
|
41
41
|
#
|
42
42
|
# Returns a new StreamingTable instance.
|
43
|
-
def initialize(columns
|
43
|
+
def initialize(columns: {}, max_rows: 100_000)
|
44
44
|
@layout = Layout.new(columns: columns)
|
45
45
|
@max_rows = max_rows
|
46
46
|
@rows = [] # Store rows newest-first
|
@@ -53,6 +53,21 @@ module Hawktui
|
|
53
53
|
attr_reader :layout, :max_rows, :rows, :paused, :should_exit
|
54
54
|
attr_accessor :win
|
55
55
|
|
56
|
+
# Public: Set the layout for the table. This will redraw the table with the new layout.
|
57
|
+
#
|
58
|
+
# new_layout - A Hawktui::StreamingTable::Layout object.
|
59
|
+
#
|
60
|
+
# Examples
|
61
|
+
#
|
62
|
+
# new_layout = Hawktui::StreamingTable::Layout.new(columns: [{ name: :id, width: 10 }])
|
63
|
+
# table.layout = new_layout
|
64
|
+
#
|
65
|
+
# Returns nothing.
|
66
|
+
def layout=(new_layout)
|
67
|
+
@layout = new_layout
|
68
|
+
draw if win # Ensure the window is initialized before attempting to draw
|
69
|
+
end
|
70
|
+
|
56
71
|
# Public: Start the table UI. Initializes curses, sets up input handling,
|
57
72
|
# and draws the initial screen.
|
58
73
|
#
|
data/lib/hawktui/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hawktui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Hoyt
|
@@ -69,6 +69,6 @@ requirements: []
|
|
69
69
|
rubygems_version: 3.5.16
|
70
70
|
signing_key:
|
71
71
|
specification_version: 4
|
72
|
-
summary:
|
72
|
+
summary: Hawktui is a simple and easy to use TUI (Terminal User Interface) library
|
73
73
|
for Ruby.
|
74
74
|
test_files: []
|