make_menu 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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