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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c28ded8e47d7c6efaf2f84003d55f829e0c6d3c0cfdf869b2715d7391c78dad
4
- data.tar.gz: 6fa3d05c94ed8f9f4de3b867477abf4df9970fe01b8e7edd76f6df65bd3dc2e1
3
+ metadata.gz: b2d84b31eeff4e7646254d1ad56a798eba7bbdc7022273cac49166c1a9fd25f4
4
+ data.tar.gz: c11ee1cc88e3ef8ee9b51fb2d0e1c3b7b2ef6da7f9194e00ee9ec4a3abf5a55c
5
5
  SHA512:
6
- metadata.gz: 1aa18122b85d3ee30b910b0db5f92ea126b69cb962885020ab63bc915e37ac5702ecc078010c78157e9407dee587d6dadcc1461a00dd3d50e65f63d7c95ab5a4
7
- data.tar.gz: 5610e7ed9c56ee84b6d54a0a618ea96a16b73c2ba63bd8b63bd2c1bb3112f887def6a90d8c434272d705cad7b898b3913c17e9e9cd7a1d78898dec16f6efb9f0
6
+ metadata.gz: f0d3393504b31d23d6c788a300d646488e5d99ce8943d0afb69cf57a9a8b9ae594f6e7f199d869cd6d65399ca2d31c6ebffc94e2c568259fd9cc725cbe0f388c
7
+ data.tar.gz: 0d3d990803202ba5523bfc311ff6acf000eeb7df582670752e311a70e9b3920e88e28f0d47ed6c50d366494a203eec8f67a502315cecea4f6923acef9b988725
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- make_menu (1.0.0)
4
+ make_menu (2.0.0)
5
5
  tty-screen (~> 0.8.2)
6
6
 
7
7
  GEM
@@ -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
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MakeMenu
4
- VERSION = '1.0.0'
4
+ VERSION = '2.0.0'
5
5
  end
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: 1.0.0
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-07 00:00:00.000000000 Z
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