Class: FastlaneCore::ConfigItem

Inherits:
Object
  • Object
show all
Defined in:
lib/fastlane_core/configuration/config_item.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key: nil, env_name: nil, description: nil, short_option: nil, default_value: nil, verify_block: nil, is_string: true, type: nil, optional: false) ⇒ ConfigItem

Creates a new option



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/fastlane_core/configuration/config_item.rb', line 17

def initialize(key: nil, env_name: nil, description: nil, short_option: nil, default_value: nil, verify_block: nil, is_string: true, type: nil, optional: false)
  raise "key must be a symbol" unless key.kind_of? Symbol
  raise "env_name must be a String" unless (env_name || '').kind_of? String

  if short_option
    raise "short_option must be a String of length 1" unless short_option.kind_of? String and short_option.delete('-').length == 1
  end
  if description
    raise "Do not let descriptions end with a '.', since it's used for user inputs as well".red if description[-1] == '.'
  end

  if type.to_s.length > 0 and short_option.to_s.length == 0
    raise "Type '#{type}' for key '#{key}' requires a short option"
  end

  @key = key
  @env_name = env_name
  @description = description
  @short_option = short_option
  @default_value = default_value
  @verify_block = verify_block
  @is_string = is_string
  @data_type = type
  @optional = optional
end

Instance Attribute Details

#default_valueObject

Returns the value of attribute default_value.



3
4
5
# File 'lib/fastlane_core/configuration/config_item.rb', line 3

def default_value
  @default_value
end

#descriptionObject

Returns the value of attribute description.



3
4
5
# File 'lib/fastlane_core/configuration/config_item.rb', line 3

def description
  @description
end

#env_nameObject

Returns the value of attribute env_name.



3
4
5
# File 'lib/fastlane_core/configuration/config_item.rb', line 3

def env_name
  @env_name
end

#keyObject

Returns the value of attribute key.



3
4
5
# File 'lib/fastlane_core/configuration/config_item.rb', line 3

def key
  @key
end

#optionalObject

Returns the value of attribute optional.



3
4
5
# File 'lib/fastlane_core/configuration/config_item.rb', line 3

def optional
  @optional
end

#short_optionObject

Returns the value of attribute short_option.



3
4
5
# File 'lib/fastlane_core/configuration/config_item.rb', line 3

def short_option
  @short_option
end

#verify_blockObject

Returns the value of attribute verify_block.



3
4
5
# File 'lib/fastlane_core/configuration/config_item.rb', line 3

def verify_block
  @verify_block
end

Instance Method Details

#auto_convert_value(value) ⇒ Object

Returns an updated value type (if necessary)



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/fastlane_core/configuration/config_item.rb', line 73

def auto_convert_value(value)
  # Weird because of https://stackoverflow.com/questions/9537895/using-a-class-object-in-case-statement

  case
  when data_type == Array
    return value.split(',') if value.kind_of?(String)
  when data_type == Integer
    return value.to_i
  when data_type == Float
    return value.to_f
  else
    # Special treatment if the user specififed true, false or YES, NO
    # There is no boolean typoe, so we just do it here
    if %w(YES yes true).include?(value)
      return true
    elsif %w(NO no false).include?(value)
      return false
    end
  end

  return value # fallback to not doing anything
end

#data_typeObject

Determines the defined data type of this ConfigItem



97
98
99
100
101
102
103
# File 'lib/fastlane_core/configuration/config_item.rb', line 97

def data_type
  if @data_type
    @data_type
  else
    (@is_string ? String : nil)
  end
end

#string?Boolean

Replaces the attr_accessor, but maintains the same interface



106
107
108
# File 'lib/fastlane_core/configuration/config_item.rb', line 106

def string?
  data_type == String
end

#to_sObject



110
111
112
# File 'lib/fastlane_core/configuration/config_item.rb', line 110

def to_s
  [@key, @description].join(": ")
end

#valid?(value) ⇒ Boolean

Make sure, the value is valid (based on the verify block) Returns false if that’s not the case



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/fastlane_core/configuration/config_item.rb', line 51

def valid?(value)
  # we also allow nil values, which do not have to be verified.
  if value
    # Verify that value is the type that we're expecting, if we are expecting a type
    if data_type && !value.kind_of?(data_type)
      raise "'#{self.key}' value must be a #{data_type}! Found #{value.class} instead.".red
    end

    if @verify_block
      begin
        @verify_block.call(value)
      rescue => ex
        Helper.log.fatal "Error setting value '#{value}' for option '#{@key}'".red
        raise ex
      end
    end
  end

  true
end

#verify!(value) ⇒ Object

This will raise an exception if the value is not valid



44
45
46
47
# File 'lib/fastlane_core/configuration/config_item.rb', line 44

def verify!(value)
  raise "Invalid value '#{value}' for option '#{self}'".red unless valid? value
  true
end