class FastlaneCore::ConfigItem

Attributes

conflict_block[RW]
conflicting_options[RW]
default_value[RW]
deprecated[RW]
description[RW]
env_name[RW]
key[RW]
optional[RW]
sensitive[RW]
short_option[RW]
verify_block[RW]

Public Class Methods

new(key: nil, env_name: nil, description: nil, short_option: nil, default_value: nil, verify_block: nil, is_string: true, type: nil, optional: nil, conflicting_options: nil, conflict_block: nil, deprecated: nil, sensitive: nil) click to toggle source

Creates a new option @param key (Symbol) the key which is used as command paramters or key in the fastlane tools @param env_name (String) the name of the environment variable, which is only used if no other values were found @param description (String) A description shown to the user @param short_option (String) A string of length 1 which is used for the command parameters (e.g. -f) @param default_value the value which is used if there was no given values and no environment values @param verify_block an optional block which is called when a new value is set.

Check value is valid. This could be type checks or if a folder/file exists
You have to raise a specific exception if something goes wrong. Append .red after the string

@param is_string *DEPRECATED: Use `type` instead* (Boolean) is that parameter a string? Defaults to true. If it's true, the type string will be verified. @param type (Class) the data type of this config item. Takes precedence over `is_string` @param optional (Boolean) is false by default. If set to true, also string values will not be asked to the user @param conflicting_options ([]) array of conflicting option keys(@param key). This allows to resolve conflicts intelligently @param conflict_block an optional block which is called when options conflict happens @param deprecated (String) Set if the option is deprecated. A deprecated option should be optional and is made optional if the parameter isn't set, and fails otherwise @param sensitive (Boolean) Set if the variable is sensitive, such as a password or API token, to prevent echoing when prompted for the parameter

# File lib/fastlane_core/configuration/config_item.rb, line 21
def initialize(key: nil, env_name: nil, description: nil, short_option: nil, default_value: nil, verify_block: nil, is_string: true, type: nil, optional: nil, conflicting_options: nil, conflict_block: nil, deprecated: nil, sensitive: nil)
  UI.user_error!("key must be a symbol") unless key.kind_of? Symbol
  UI.user_error!("env_name must be a String") unless (env_name || '').kind_of? String

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

  if conflicting_options
    conflicting_options.each do |conflicting_option_key|
      UI.user_error!("Conflicting option key must be a symbol") unless conflicting_option_key.kind_of? Symbol
    end
  end
  if deprecated
    # deprecated options are automatically optional
    optional = true if optional.nil?
    UI.crash!("Deprecated option must be optional") unless optional
    # deprecated options are marked deprecated in their description
    description = "[DEPRECATED!] #{deprecated} - #{description}"
  end
  optional = false if optional.nil?

  sensitive = false if sensitive.nil?

  @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
  @conflicting_options = conflicting_options
  @conflict_block = conflict_block
  @deprecated = deprecated
  @sensitive = sensitive
end

Public Instance Methods

auto_convert_value(value) click to toggle source

Returns an updated value type (if necessary)

# File lib/fastlane_core/configuration/config_item.rb, line 93
def auto_convert_value(value)
  return nil if value.nil?

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

  return value # fallback to not doing anything
end
data_type() click to toggle source

Determines the defined data type of this ConfigItem

# File lib/fastlane_core/configuration/config_item.rb, line 116
def data_type
  if @data_type
    @data_type
  else
    (@is_string ? String : nil)
  end
end
string?() click to toggle source

Replaces the attr_accessor, but maintains the same interface

# File lib/fastlane_core/configuration/config_item.rb, line 125
def string?
  data_type == String
end
to_s() click to toggle source
# File lib/fastlane_core/configuration/config_item.rb, line 129
def to_s
  [@key, @description].join(": ")
end
valid?(value) click to toggle source

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

# File lib/fastlane_core/configuration/config_item.rb, line 71
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)
      UI.user_error!("'#{self.key}' value must be a #{data_type}! Found #{value.class} instead.")
    end

    if @verify_block
      begin
        @verify_block.call(value)
      rescue => ex
        UI.error "Error setting value '#{value}' for option '#{@key}'"
        raise Interface::FastlaneError.new, ex.to_s
      end
    end
  end

  true
end
verify!(value) click to toggle source

This will raise an exception if the value is not valid

# File lib/fastlane_core/configuration/config_item.rb, line 64
def verify!(value)
  UI.user_error!("Invalid value '#{value}' for option '#{self}'") unless valid?(value)
  true
end