class ZendeskAppsTools::Settings

Public Instance Methods

find_settings_file(path) click to toggle source
# File lib/zendesk_apps_tools/settings.rb, line 29
def find_settings_file(path)
  ['./settings.yml', './settings.json'].reduce([]) do | memo, try_file |
    memo << File.join(path, try_file)
    memo << File.join(path, try_file)
  end.find do |settings_file|
    File.exist?(settings_file)
  end
end
get_settings_from_file(filepath, parameters, domain = nil) click to toggle source
# File lib/zendesk_apps_tools/settings.rb, line 38
def get_settings_from_file(filepath, parameters, domain = nil)
  return {} if parameters.nil?
  return nil unless File.exist? filepath

  begin
    settings_file = File.read(filepath)

    if filepath =~ /\.json$/ || settings_file =~ /\A\s*{/
      settings_data = JSON.load(settings_file)
    else
      settings_data = YAML.load(settings_file)
    end

    settings_data = settings_data[domain] if settings_data[domain]

    settings_data.each do |index, setting|
      if setting.is_a?(Hash) || setting.is_a?(Array)
        settings_data[index] = JSON.dump(setting)
      end
    end
  rescue => err
    puts "\e[0;31mFailed to load #{filepath}\e[0m\n"
    puts "\e[0;31m#{err.message}\e[0m\n"
    return nil
  end

  parameters.inject({}) do |settings, param|
    input = settings_data[param['name']]

    if !input && param['default']
      input = param['default']
    end

    if !input && param['required']
      puts "\e[0;31m'#{param['name']}' is required but not specified in the config file.\e[0m\n"
      input = nil
    end

    if param['type'] == 'checkbox'
      input = convert_to_boolean_for_checkbox(input)
    end

    settings[param['name']] = input if input != ''
    settings
  end
end
get_settings_from_user_input(user_input, parameters) click to toggle source
# File lib/zendesk_apps_tools/settings.rb, line 6
def get_settings_from_user_input(user_input, parameters)
  return {} if parameters.nil?

  parameters.inject({}) do |settings, param|
    if param['default']
      input = user_input.get_value_from_stdin("Enter a value for parameter '#{param['name']}' or press 'Return' to use the default value '#{param['default']}':\n", allow_empty: true)
      input = param['default'] if input.empty?
    elsif param['required']
      input = user_input.get_value_from_stdin("Enter a value for required parameter '#{param['name']}':\n")
    else
      input = user_input.get_value_from_stdin("Enter a value for optional parameter '#{param['name']}' or press 'Return' to skip:\n", allow_empty: true)
      input = nil if input.empty?
    end

    if param['type'] == 'checkbox'
      input = convert_to_boolean_for_checkbox(input)
    end

    settings[param['name']] = input if input != ''
    settings
  end
end

Private Instance Methods

convert_to_boolean_for_checkbox(input) click to toggle source
# File lib/zendesk_apps_tools/settings.rb, line 87
def convert_to_boolean_for_checkbox(input)
  unless [TrueClass, FalseClass].include?(input.class)
    return (input =~ /^(true|t|yes|y|1)$/i) ? true : false
  end
  input
end