make_menu 1.0.0 → 1.1.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: 220d243f1715ae665a12f8ed497f109209ba10fc5282298b7d9fec956ff99856
4
+ data.tar.gz: dd1adb0c2bed5934598a72e2b3d5ffc4c48477b438b2a1c6206351d742868e9e
5
5
  SHA512:
6
- metadata.gz: 1aa18122b85d3ee30b910b0db5f92ea126b69cb962885020ab63bc915e37ac5702ecc078010c78157e9407dee587d6dadcc1461a00dd3d50e65f63d7c95ab5a4
7
- data.tar.gz: 5610e7ed9c56ee84b6d54a0a618ea96a16b73c2ba63bd8b63bd2c1bb3112f887def6a90d8c434272d705cad7b898b3913c17e9e9cd7a1d78898dec16f6efb9f0
6
+ metadata.gz: e0f933ee0f3af0635c97dfc166e1c416784e0a5b24fac03cadab830179ed36fdce07711fc32e03ba353615de72128534b52d2cbf7b2e6009765043cb8bfb5d7e
7
+ data.tar.gz: 87c98103a07b39f4d54e4278042b5f110754ccad21b299b073928945b142c507636e1685ef811f2f93f9f52309b710876d052f0c23c1e7b6ceddbd918f1b9df5
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 (1.1.0)
5
5
  tty-screen (~> 0.8.2)
6
6
 
7
7
  GEM
@@ -0,0 +1,34 @@
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 ? badge[:on] : badge[:off]
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 = '', on: ' ON '.green_bg.bold, off: ' OFF '.red_bg.dark, &block)
26
+ @badges << {
27
+ label: label,
28
+ on: on,
29
+ off: off,
30
+ handler: block
31
+ }
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,52 @@
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
+ ).color(field[:label_color])
16
+
17
+ value_cel = field[:value]
18
+ .align(
19
+ :left,
20
+ width: @max_widths[:value],
21
+ pad_right: true
22
+ ).color(field[:value_color])
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 = nil, label_color: :normal, value_color: :normal, &block)
44
+ @fields << {
45
+ label: label || '',
46
+ label_color: label_color,
47
+ value_color: value_color,
48
+ handler: block
49
+ }
50
+ end
51
+ end
52
+ 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'
@@ -21,7 +23,10 @@ module MakeMenu
21
23
  pause_on_success: false
22
24
  }
23
25
  @highlights = {}
26
+
24
27
  @header = nil
28
+ @field_set = nil
29
+ @badge_set = nil
25
30
  end
26
31
 
27
32
  attr_reader :makefile, :groups, :items, :options, :highlights
@@ -35,6 +40,8 @@ module MakeMenu
35
40
  system 'clear' if clear_screen?
36
41
 
37
42
  display_header
43
+ display_badges
44
+ display_fields
38
45
 
39
46
  puts colorize(MakeMenu::Text::Table.new(groups).to_s)
40
47
  puts
@@ -73,6 +80,10 @@ module MakeMenu
73
80
  end
74
81
  end
75
82
 
83
+ def header(&block)
84
+ @header = block
85
+ end
86
+
76
87
  def display_header
77
88
  if @header
78
89
  @header.call
@@ -82,6 +93,30 @@ module MakeMenu
82
93
  end
83
94
  end
84
95
 
96
+ def add_field(field, &block)
97
+ fields.add field, &block
98
+ end
99
+
100
+ def fields
101
+ @field_set ||= FieldSet.new
102
+ end
103
+
104
+ def display_fields
105
+ @field_set.display if @field_set
106
+ end
107
+
108
+ def add_badge(label = '', on: ' ON '.green_bg.bold, off: ' OFF '.red_bg.dark, &block)
109
+ badges.add label, on: on, off: off, &block
110
+ end
111
+
112
+ def badges
113
+ @badge_set ||= BadgeSet.new
114
+ end
115
+
116
+ def display_badges
117
+ @badge_set.display if @badge_set
118
+ end
119
+
85
120
  def options
86
121
  @options.merge!(yield) if block_given?
87
122
  @options
@@ -92,10 +127,6 @@ module MakeMenu
92
127
  @highlights
93
128
  end
94
129
 
95
- def header(&block)
96
- @header = block
97
- end
98
-
99
130
  def add_group(group)
100
131
  groups << group
101
132
  group
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MakeMenu
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.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: 1.1.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-09 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