Sha256: e61576bdd6584c9c6fba3a9cfd0c9fbda90c4d827bacd79fccf61ef1df3dd640

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

module MakeMenu
  class FieldSet
    def initialize
      @fields = []
      @max_widths = {}
    end

    def display
      build
      @fields.each do |field|
        label_cell = field[:label]
                       .align(
                         :right,
                         width: @max_widths[:label]
                       ).color(field[:label_color])

        value_cel = field[:value]
                      .align(
                        :left,
                        width: @max_widths[:value],
                        pad_right: true
                      ).color(field[:value_color])

        puts "#{label_cell}#{value_cel}".align(:center)
      end
      puts
    end

    def build
      @max_widths[:label] = 0
      @max_widths[:value] = 0

      @fields.each do |field|
        label = field[:label]
        value = field[:value] = field[:handler].call
        label_width = label.decolor.size
        value_width = value.decolor.size
        @max_widths[:label] = label_width if label_width > @max_widths[:label]
        @max_widths[:value] = value_width if value_width > @max_widths[:value]
      end
    end

    def add(label = nil, label_color: :normal, value_color: :normal, &block)
      @fields << {
        label: label || '',
        label_color: label_color,
        value_color: value_color,
        handler: block
      }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
make_menu-1.1.0 lib/make_menu/field_set.rb