make_menu 1.0.0 → 2.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/Gemfile.lock +1 -1
- data/lib/make_menu/badge_set.rb +32 -0
- data/lib/make_menu/field_set.rb +60 -0
- data/lib/make_menu/menu.rb +47 -5
- data/lib/make_menu/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2d84b31eeff4e7646254d1ad56a798eba7bbdc7022273cac49166c1a9fd25f4
|
4
|
+
data.tar.gz: c11ee1cc88e3ef8ee9b51fb2d0e1c3b7b2ef6da7f9194e00ee9ec4a3abf5a55c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0d3393504b31d23d6c788a300d646488e5d99ce8943d0afb69cf57a9a8b9ae594f6e7f199d869cd6d65399ca2d31c6ebffc94e2c568259fd9cc725cbe0f388c
|
7
|
+
data.tar.gz: 0d3d990803202ba5523bfc311ff6acf000eeb7df582670752e311a70e9b3920e88e28f0d47ed6c50d366494a203eec8f67a502315cecea4f6923acef9b988725
|
data/Gemfile.lock
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
module MakeMenu
|
2
|
+
class BadgeSet
|
3
|
+
def initialize
|
4
|
+
@badges = []
|
5
|
+
end
|
6
|
+
|
7
|
+
def display
|
8
|
+
rows = []
|
9
|
+
row = ''
|
10
|
+
@badges.each do |badge|
|
11
|
+
label = badge[:label]
|
12
|
+
value = badge[:handler].call
|
13
|
+
if row.decolor.size + label.decolor.size + value.decolor.size >= (0.7 * ::TTY::Screen.cols)
|
14
|
+
rows << row
|
15
|
+
row = ''
|
16
|
+
end
|
17
|
+
row += " #{label}#{value} "
|
18
|
+
end
|
19
|
+
rows << row
|
20
|
+
|
21
|
+
puts rows.join("\n\n").align_block(:center)
|
22
|
+
puts
|
23
|
+
end
|
24
|
+
|
25
|
+
def add(label = '', &block)
|
26
|
+
@badges << {
|
27
|
+
label: label,
|
28
|
+
handler: block
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module MakeMenu
|
2
|
+
class FieldSet
|
3
|
+
def initialize
|
4
|
+
@fields = []
|
5
|
+
@max_widths = {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def display
|
9
|
+
build
|
10
|
+
@fields.each do |field|
|
11
|
+
label_cell = field[:label]
|
12
|
+
.align(
|
13
|
+
:right,
|
14
|
+
width: @max_widths[:label]
|
15
|
+
)
|
16
|
+
|
17
|
+
value_cel = field[:value]
|
18
|
+
.align(
|
19
|
+
:left,
|
20
|
+
width: @max_widths[:value],
|
21
|
+
pad_right: true
|
22
|
+
)
|
23
|
+
|
24
|
+
puts "#{label_cell}#{value_cel}".align(:center)
|
25
|
+
end
|
26
|
+
puts
|
27
|
+
end
|
28
|
+
|
29
|
+
def build
|
30
|
+
@max_widths[:label] = 0
|
31
|
+
@max_widths[:value] = 0
|
32
|
+
|
33
|
+
@fields.each do |field|
|
34
|
+
label = field[:label]
|
35
|
+
value = field[:value] = field[:handler].call
|
36
|
+
label_width = label.decolor.size
|
37
|
+
value_width = value.decolor.size
|
38
|
+
@max_widths[:label] = label_width if label_width > @max_widths[:label]
|
39
|
+
@max_widths[:value] = value_width if value_width > @max_widths[:value]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def add(label = '', value_from_file: nil, color: :normal, none: '[none]'.dark, &block)
|
44
|
+
if value_from_file
|
45
|
+
block = lambda do
|
46
|
+
if File.exists? value_from_file
|
47
|
+
return File.read(value_from_file).strip.color(color)
|
48
|
+
else
|
49
|
+
return none
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
@fields << {
|
55
|
+
label: label,
|
56
|
+
handler: block
|
57
|
+
}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/make_menu/menu.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'builder'
|
4
|
+
require_relative 'badge_set'
|
5
|
+
require_relative 'field_set'
|
4
6
|
require_relative 'menu_item_group'
|
5
7
|
require_relative 'text/table'
|
6
8
|
require_relative 'console/prompter'
|
@@ -18,10 +20,14 @@ module MakeMenu
|
|
18
20
|
@options = {
|
19
21
|
group_title_color: :underline,
|
20
22
|
clear_screen: true,
|
21
|
-
pause_on_success: false
|
23
|
+
pause_on_success: false,
|
24
|
+
badges_first: true
|
22
25
|
}
|
23
26
|
@highlights = {}
|
27
|
+
|
24
28
|
@header = nil
|
29
|
+
@field_set = nil
|
30
|
+
@badge_set = nil
|
25
31
|
end
|
26
32
|
|
27
33
|
attr_reader :makefile, :groups, :items, :options, :highlights
|
@@ -36,6 +42,14 @@ module MakeMenu
|
|
36
42
|
|
37
43
|
display_header
|
38
44
|
|
45
|
+
if badges_first?
|
46
|
+
display_badges
|
47
|
+
display_fields
|
48
|
+
else
|
49
|
+
display_fields
|
50
|
+
display_badges
|
51
|
+
end
|
52
|
+
|
39
53
|
puts colorize(MakeMenu::Text::Table.new(groups).to_s)
|
40
54
|
puts
|
41
55
|
puts 'Press ESC to quit'.align(:center).bold
|
@@ -73,6 +87,10 @@ module MakeMenu
|
|
73
87
|
end
|
74
88
|
end
|
75
89
|
|
90
|
+
def header(&block)
|
91
|
+
@header = block
|
92
|
+
end
|
93
|
+
|
76
94
|
def display_header
|
77
95
|
if @header
|
78
96
|
@header.call
|
@@ -82,6 +100,30 @@ module MakeMenu
|
|
82
100
|
end
|
83
101
|
end
|
84
102
|
|
103
|
+
def add_field(label = '', value_from_file: nil, color: :normal, none: '[none]'.dark, &block)
|
104
|
+
fields.add label, value_from_file: value_from_file, color: color, none: none, &block
|
105
|
+
end
|
106
|
+
|
107
|
+
def fields
|
108
|
+
@field_set ||= FieldSet.new
|
109
|
+
end
|
110
|
+
|
111
|
+
def display_fields
|
112
|
+
@field_set.display if @field_set
|
113
|
+
end
|
114
|
+
|
115
|
+
def add_badge(label = '', &block)
|
116
|
+
badges.add label, &block
|
117
|
+
end
|
118
|
+
|
119
|
+
def badges
|
120
|
+
@badge_set ||= BadgeSet.new
|
121
|
+
end
|
122
|
+
|
123
|
+
def display_badges
|
124
|
+
@badge_set.display if @badge_set
|
125
|
+
end
|
126
|
+
|
85
127
|
def options
|
86
128
|
@options.merge!(yield) if block_given?
|
87
129
|
@options
|
@@ -92,10 +134,6 @@ module MakeMenu
|
|
92
134
|
@highlights
|
93
135
|
end
|
94
136
|
|
95
|
-
def header(&block)
|
96
|
-
@header = block
|
97
|
-
end
|
98
|
-
|
99
137
|
def add_group(group)
|
100
138
|
groups << group
|
101
139
|
group
|
@@ -118,6 +156,10 @@ module MakeMenu
|
|
118
156
|
options[:pause_on_success]
|
119
157
|
end
|
120
158
|
|
159
|
+
def badges_first?
|
160
|
+
options[:badges_first]
|
161
|
+
end
|
162
|
+
|
121
163
|
def colorize(text)
|
122
164
|
highlights.each do |word, color|
|
123
165
|
case color
|
data/lib/make_menu/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: make_menu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Barri Mason
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-01-
|
11
|
+
date: 2024-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tty-screen
|
@@ -33,9 +33,11 @@ files:
|
|
33
33
|
- Gemfile
|
34
34
|
- Gemfile.lock
|
35
35
|
- lib/make_menu.rb
|
36
|
+
- lib/make_menu/badge_set.rb
|
36
37
|
- lib/make_menu/builder.rb
|
37
38
|
- lib/make_menu/console/color_string.rb
|
38
39
|
- lib/make_menu/console/prompter.rb
|
40
|
+
- lib/make_menu/field_set.rb
|
39
41
|
- lib/make_menu/menu.rb
|
40
42
|
- lib/make_menu/menu_item.rb
|
41
43
|
- lib/make_menu/menu_item_group.rb
|