class Pineapples::Setting
Constants
- VALID_TYPES
Attributes
default[R]
name[R]
options[R]
question[R]
type[R]
value[RW]
Public Class Methods
new(name, options = {})
click to toggle source
# File lib/pineapples/setting.rb, line 8 def initialize(name, options = {}) raise ArgumentError, "option name can't be nil" if name.nil? raise ArgumentError, "type can't be nil" if options[:type].nil? type = options[:type].to_sym raise ArgumentError, "Type :#{type} is not valid for options." if type && !valid_type?(type) @name = name @type = type || :string @default = options[:default] @value = @default if @default @question = options[:prompt] @options = Array(options[:options]) validate_options_type! validate_type!(default) validate_value_in_options!(default) end
Public Instance Methods
ask_setting()
click to toggle source
# File lib/pineapples/setting.rb, line 52 def ask_setting if has_options? ask_with_options else if boolean? ask_boolean else ask end end end
has_default?()
click to toggle source
# File lib/pineapples/setting.rb, line 38 def has_default? @default || (@default == false) end
has_options?()
click to toggle source
# File lib/pineapples/setting.rb, line 42 def has_options? @options.present? end
valid_type?(type)
click to toggle source
# File lib/pineapples/setting.rb, line 34 def valid_type?(type) VALID_TYPES.include?(type) end
value=(setting)
click to toggle source
# File lib/pineapples/setting.rb, line 28 def value=(setting) validate_type!(setting) validate_value_in_options!(setting) @value = setting end
Private Instance Methods
ask()
click to toggle source
# File lib/pineapples/setting.rb, line 81 def ask puts answer = Ask.input(question_string, inquirer_options) puts self.value = cast_to_type(answer) end
ask_boolean()
click to toggle source
# File lib/pineapples/setting.rb, line 74 def ask_boolean puts answer = Ask.confirm(question_string, inquirer_options) puts self.value = cast_to_type(answer) end
ask_with_options()
click to toggle source
# File lib/pineapples/setting.rb, line 66 def ask_with_options puts index = Ask.list(question_string, options_with_color, inquirer_options) puts answer = options[index] self.value = cast_to_type(answer) end
cast_to_type(setting)
click to toggle source
# File lib/pineapples/setting.rb, line 103 def cast_to_type(setting) case type when :numeric setting.to_f when :string setting.to_s when :symbol setting.to_sym else setting end end
default_string()
click to toggle source
# File lib/pineapples/setting.rb, line 99 def default_string " (default: #{default})".light_green end
get_type_class()
click to toggle source
# File lib/pineapples/setting.rb, line 146 def get_type_class Object.const_get(type.to_s.capitalize) end
inquirer_options()
click to toggle source
# File lib/pineapples/setting.rb, line 150 def inquirer_options {clear: false, response: false} end
options_with_color()
click to toggle source
# File lib/pineapples/setting.rb, line 95 def options_with_color options.map{ |option| option.to_s.light_blue } end
question_string()
click to toggle source
# File lib/pineapples/setting.rb, line 89 def question_string result = ' ' * $terminal.indent_size result << question.light_yellow result << default_string if has_default? end
validate_options_type!()
click to toggle source
# File lib/pineapples/setting.rb, line 140 def validate_options_type! if options.any?{ |option| !validate_type(option) } raise ArgumentError, "Option #{option} value doesn't match setting type" end end
validate_type(setting)
click to toggle source
# File lib/pineapples/setting.rb, line 116 def validate_type(setting) value_type = case setting when nil return true when TrueClass, FalseClass :boolean when Numeric, Hash, Array, String, Symbol setting.class.name.downcase.to_sym end type == value_type end
validate_type!(setting)
click to toggle source
# File lib/pineapples/setting.rb, line 128 def validate_type!(setting) if !validate_type(setting) raise ArgumentError, "Setting's value must match its type." end end
validate_value_in_options!(setting)
click to toggle source
# File lib/pineapples/setting.rb, line 134 def validate_value_in_options!(setting) if has_options? && !options.include?(setting) raise ArgumentError, "New setting value must be one of the options" end end