class ZendeskAppsTools::Settings

Public Class Methods

new(cli) click to toggle source
# File lib/zendesk_apps_tools/settings.rb, line 5
def initialize(cli)
  @cli = cli
end

Public Instance Methods

get_settings_from_file(filepath, parameters) click to toggle source
# File lib/zendesk_apps_tools/settings.rb, line 39
def get_settings_from_file(filepath, parameters)
  @filepath ||= filepath
  @parameters ||= parameters

  return {} if parameters.nil?
  return nil unless File.exist? filepath

  begin
    settings_file = read_settings(filepath)
    settings_data = parse_settings(filepath, settings_file)
  rescue => err
    @cli.say_error "Failed to load #{filepath}\n#{err.message}"
    return nil
  end

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

    if !input && param['required']
      @cli.say_error "'#{param['name']}' is required but not specified in the config file.\n"
      return 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(parameters) click to toggle source
# File lib/zendesk_apps_tools/settings.rb, line 9
def get_settings_from_user_input(parameters)
  return {} if parameters.nil?

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

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

    settings[param['name']] = input if input != ''
    settings
  end
end
refresh!() click to toggle source
# File lib/zendesk_apps_tools/settings.rb, line 30
def refresh!
  return unless File.file? @filepath
  curr_mtime = File.stat(@filepath).mtime
  if @last_mtime.nil? || curr_mtime > @last_mtime
    @last_mtime = curr_mtime
    get_settings_from_file(@filepath, @parameters)
  end
end

Private Instance Methods

convert_to_boolean_for_checkbox(input) click to toggle source
# File lib/zendesk_apps_tools/settings.rb, line 94
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
parse_settings(filepath, contents) click to toggle source
# File lib/zendesk_apps_tools/settings.rb, line 78
def parse_settings(filepath, contents)
  settings_data =
    if filepath =~ /\.json$/ || contents =~ /\A\s*{/
      JSON.load(contents)
    else
      require 'yaml'
      YAML.load(contents)
    end
  settings_data.each do |index, setting|
    if setting.is_a?(Hash) || setting.is_a?(Array)
      settings_data[index] = JSON.dump(setting)
    end
  end
  settings_data
end
read_settings(filepath) click to toggle source
# File lib/zendesk_apps_tools/settings.rb, line 73
def read_settings(filepath)
  @last_mtime = File.stat(filepath).mtime
  File.read(filepath)
end