class Tlapse::Config

Constants

CONFIG_KEYS
CONFIG_OPTIONS
CONFIG_PATH
CONFIG_UNDEFINED
Validation

Public Class Methods

get(*options) click to toggle source
# File lib/tlapse/config.rb, line 50
def self.get(*options)
  values = Array(options).map do |option|
    verify_option_exists! option

    value = value_for option
    value == CONFIG_UNDEFINED ? default_for(option) : value
  end

  values.length == 1 ? values.first : values
end
list() click to toggle source
# File lib/tlapse/config.rb, line 46
def self.list
  CONFIG_OPTIONS
end
set(option, value) click to toggle source
# File lib/tlapse/config.rb, line 61
def self.set(option, value)
  verify_option_exists! option
  validate! option, value

  values = user_values

  if value == default_for(option)
    values.delete option
  else
    values[option] = value
  end

  save values
end
unset(option) click to toggle source
# File lib/tlapse/config.rb, line 76
def self.unset(option)
  set option, default_for(option)
end

Private Class Methods

cast(option, value) click to toggle source
# File lib/tlapse/config.rb, line 88
def self.cast(option, value)
  case type_for(option)
  when :integer then value.to_i
  when :float   then value.to_f
  when :string  then value.to_s
  else value
  end
end
current_tz() click to toggle source
# File lib/tlapse/config.rb, line 82
def self.current_tz
  utc_offset = Time.now.utc_offset
  tz = ActiveSupport::TimeZone.all.find { |tz| tz.utc_offset == utc_offset }
  tz&.tzinfo&.name || "America/New_York"
end
default_for(option) click to toggle source
# File lib/tlapse/config.rb, line 106
def self.default_for(option)
  default = CONFIG_OPTIONS.dig option, :default
  default = default.call if default.respond_to? :call
  cast option, default
end
save(user_values) click to toggle source
# File lib/tlapse/config.rb, line 120
def self.save(user_values)
  FileUtils.mkdir_p File.dirname CONFIG_PATH
  File.write CONFIG_PATH, user_values.to_yaml
end
type_for(option) click to toggle source
# File lib/tlapse/config.rb, line 112
def self.type_for(option)
  CONFIG_OPTIONS.dig option, :type
end
user_values() click to toggle source
# File lib/tlapse/config.rb, line 116
def self.user_values
  File.exists?(CONFIG_PATH) ? YAML.load_file(CONFIG_PATH) : {}
end
validate!(option, value) click to toggle source
# File lib/tlapse/config.rb, line 125
def self.validate!(option, value)
  Array(CONFIG_OPTIONS.dig(option, :validations)).each do |validation|
    begin
      validation.method.call value
    rescue
      message = validation.error.call value
      raise ConfigOptionInvalid, message
    end
  end
end
value_for(option) click to toggle source
# File lib/tlapse/config.rb, line 101
def self.value_for(option)
  value = user_values[option]
  value ? cast(option, value) : CONFIG_UNDEFINED
end
verify_option_exists!(option) click to toggle source
# File lib/tlapse/config.rb, line 97
def self.verify_option_exists!(option)
  raise Tlapse::NoSuchConfigOption unless CONFIG_KEYS.include? option
end