make_menu 1.0.0 → 2.0.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: 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