class Bashly::Settings

def commands_dir

def commands_dir
  @commands_dir ||= get :commands_dir
end

def compact_short_flags

def compact_short_flags
  @compact_short_flags ||= get :compact_short_flags
end

def config

def config
  @config ||= defsult_settings.merge user_settings
end

def config_path

def config_path
  @config_path ||= get(:config_path) % { source_dir: source_dir }
end

def conjoined_flag_args

def conjoined_flag_args
  @conjoined_flag_args ||= get :conjoined_flag_args
end

def default_settings_path

def default_settings_path
  asset 'libraries/settings/settings.yml'
end

def defsult_settings

def defsult_settings
  @defsult_settings ||= Config.new default_settings_path
end

def enable_bash3_bouncer

def enable_bash3_bouncer
  @enable_bash3_bouncer ||= get :enable_bash3_bouncer
end

def enable_deps_array

def enable_deps_array
  @enable_deps_array ||= get :enable_deps_array
end

def enable_env_var_names_array

def enable_env_var_names_array
  @enable_env_var_names_array ||= get :enable_env_var_names_array
end

def enable_header_comment

def enable_header_comment
  @enable_header_comment ||= get :enable_header_comment
end

def enable_inspect_args

def enable_inspect_args
  @enable_inspect_args ||= get :enable_inspect_args
end

def enable_sourcing

def enable_sourcing
  @enable_sourcing ||= get :enable_sourcing
end

def enable_view_markers

def enable_view_markers
  @enable_view_markers ||= get :enable_view_markers
end

def enabled?(feature)

def enabled?(feature)
  send(:"enable_#{feature}") == 'always' ||
    (send(:"enable_#{feature}") == 'production' && production?) ||
    (send(:"enable_#{feature}") == 'development' && !production?)
end

def env

def env
  @env ||= get(:env)&.to_sym
end

def env=(value)

def env=(value)
  @env = value&.to_sym
end

def env_value(key)

def env_value(key)
  ENV["BASHLY_#{key.upcase}"]
end

def formatter

def formatter
  @formatter ||= get :formatter
end

def full_lib_dir

def full_lib_dir
  "#{source_dir}/#{lib_dir}"
end

def function_name(key)

def function_name(key)
  function_names[key.to_s] || key.to_s
end

def function_names

def function_names
  @function_names ||= get :function_names
end

def get(key)

def get(key)
  case env_value key
  when nil                 then config[key.to_s]
  when '0', 'false', 'no'  then false
  when '1', 'true', 'yes'  then true
  else                     env_value key
  end
end

def lib_dir

def lib_dir
  @lib_dir ||= get :lib_dir
end

def partials_extension

def partials_extension
  @partials_extension ||= get :partials_extension
end

def private_reveal_key

def private_reveal_key
  @private_reveal_key ||= get :private_reveal_key
end

def production?

def production?
  env == :production
end

def show_examples_on_error

def show_examples_on_error
  @show_examples_on_error ||= get :show_examples_on_error
end

def source_dir

def source_dir
  @source_dir ||= get :source_dir
end

def strict

def strict
  @strict ||= get :strict
end

def strict_string

def strict_string
  if strict.is_a? String
    strict
  elsif strict
    'set -euo pipefail'
  else
    'set -e'
  end
end

def tab_indent

def tab_indent
  @tab_indent ||= get :tab_indent
end

def target_dir

def target_dir
  @target_dir ||= get :target_dir
end

def usage_colors

def usage_colors
  @usage_colors ||= get :usage_colors
end

def user_settings

def user_settings
  @user_settings ||= File.exist?(user_settings_path) ? Config.new(user_settings_path) : {}
end

def user_settings_path

def user_settings_path
  @user_settings_path ||= if ENV['BASHLY_SETTINGS_PATH']
    ENV['BASHLY_SETTINGS_PATH']
  elsif File.exist? 'bashly-settings.yml'
    'bashly-settings.yml'
  else
    'settings.yml'
  end
end

def var_aliases

def var_aliases
  @var_aliases ||= get :var_aliases
end