class Focus::Config

Public Class Methods

method_missing(m, *args, &block) click to toggle source
# File lib/focus/config.rb, line 8
def method_missing(m, *args, &block) # rubocop:disable MethodMissing
  config = new
  config.send(m, *args, &block) || env(m) || raise_undefined_config(m)
end
new() click to toggle source
Calls superclass method
# File lib/focus/config.rb, line 25
def initialize
  source_env
  super(configurations)
  ingest _hardcoded
end

Private Class Methods

env(m) click to toggle source
# File lib/focus/config.rb, line 15
def env(m)
  ENV[m.to_s.upcase]
end
raise_undefined_config(m) click to toggle source
# File lib/focus/config.rb, line 19
def raise_undefined_config(m)
  error = "(#{m}) neither `.focus.yml#config.#{m}` or `ENV['#{m.to_s.upcase}']` are defined"
  raise MissingConfiguration, error
end

Private Instance Methods

_hardcoded() click to toggle source
# File lib/focus/config.rb, line 56
def _hardcoded
  raise "`blink_port` was not defined" unless blink_port

  {
    "blink_server"    => "http://localhost:#{blink_port}/blink1",
    "slack_available" => "auto",
    "slack_away"      => "away"
  }
end
configurations() click to toggle source
# File lib/focus/config.rb, line 33
def configurations
  defaults.merge(custom_config)
end
custom_config() click to toggle source
# File lib/focus/config.rb, line 43
def custom_config
  @custom_config ||= Focus::ConfigLoader.load("config")
end
defaults() click to toggle source
# File lib/focus/config.rb, line 47
def defaults
  {
    "blink_port"         => 8754,
    "focus_history_file" => "#{ENV['HOME']}/.focus_history",
    "focus_minutes"      => 25,
    "slack_api_url"      => "https://slack.com/api"
  }
end
ingest(hsh) click to toggle source
# File lib/focus/config.rb, line 37
def ingest(hsh)
  hsh.each do |key, value|
    send("#{key}=", value)
  end
end
source_env() click to toggle source
# File lib/focus/config.rb, line 66
def source_env
  return unless custom_config.respond_to? :keys
  relative_path = custom_config["env_file"] || ".env"
  path = File.expand_path relative_path

  return unless File.exist?(path)
  Dotenv.load path
end