File Manager
Viewing File: border.rb
# frozen_string_literal: true
module TTY
module Box
# A class reponsible for retrieving border options
#
# @api private
class Border
BORDER_VALUES = [
:corner_bottom_right,
:corner_top_right,
:corner_top_left,
:corner_bottom_left,
:divider_left,
:divider_up,
:divider_down,
:divider_right,
:line,
:pipe,
:cross
].freeze
def self.parse(border)
case border
when Hash
new(border)
when *TTY::Box::BOX_CHARS.keys
new(type: border)
else
raise ArgumentError,
"Wrong value `#{border}` for :border configuration option"
end
end
attr_reader :type, :top, :top_left, :top_right, :left, :right,
:bottom, :bottom_left, :bottom_right
alias top? top
alias left? left
alias right? right
alias bottom? bottom
alias top_left? top_left
alias top_right? top_right
alias bottom_left? bottom_left
alias bottom_right? bottom_right
def initialize(type: :light,
top: :line,
top_left: :corner_top_left,
top_right: :corner_top_right,
left: :pipe,
right: :pipe,
bottom: :line,
bottom_left: :corner_bottom_left,
bottom_right: :corner_bottom_right)
@type = type
@top = check_name(:top, top)
@top_left = check_name(:top_left, top_left)
@top_right = check_name(:top_right, top_right)
@left = check_name(:left, left)
@right = check_name(:right, right)
@bottom = check_name(:bottom, bottom)
@bottom_left = check_name(:bottom_left, bottom_left)
@bottom_right = check_name(:bottom_right, bottom_right)
end
private
# Check if border values name is allowed
# @api private
def check_name(key, value)
unless (BORDER_VALUES.include?(:"#{value}") || [true, false].include?(value))
raise ArgumentError, "Invalid border value: '#{value}' for #{key.inspect}"
end
value
end
end # Border
end # Box
end # TTY