Class: Pineapples::Setting

Inherits:
Object
  • Object
show all
Defined in:
lib/pineapples/setting.rb

Constant Summary collapse

VALID_TYPES =
[:boolean, :numeric, :string, :symbol]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, options = {}) ⇒ Setting

Returns a new instance of Setting.

Raises:

  • (ArgumentError)


8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 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

Instance Attribute Details

#defaultObject (readonly)

Returns the value of attribute default.



3
4
5
# File 'lib/pineapples/setting.rb', line 3

def default
  @default
end

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/pineapples/setting.rb', line 3

def name
  @name
end

#optionsObject (readonly)

Returns the value of attribute options.



3
4
5
# File 'lib/pineapples/setting.rb', line 3

def options
  @options
end

#questionObject (readonly)

Returns the value of attribute question.



3
4
5
# File 'lib/pineapples/setting.rb', line 3

def question
  @question
end

#typeObject (readonly)

Returns the value of attribute type.



3
4
5
# File 'lib/pineapples/setting.rb', line 3

def type
  @type
end

#valueObject

Returns the value of attribute value.



4
5
6
# File 'lib/pineapples/setting.rb', line 4

def value
  @value
end

Instance Method Details

#ask_settingObject



52
53
54
55
56
57
58
59
60
61
62
# 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?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/pineapples/setting.rb', line 38

def has_default?
  @default || (@default == false)
end

#has_options?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/pineapples/setting.rb', line 42

def has_options?
  @options.present?
end

#valid_type?(type) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/pineapples/setting.rb', line 34

def valid_type?(type)
  VALID_TYPES.include?(type)
end