hawktui 0.1.0 → 1.0.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 +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
|

|
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: []
|