class Confoog::Settings

Provide an encapsulated class to access a YAML configuration file. @!attribute [r] status

@return [Hash] A hash containing status variables.

@example

require 'confoog'
settings = Confoog::Settings.new
settings[:var] = value
settings[:array] = [1, 2, 3, 4]
settings[42] = "Meaning of life"
settings[:urls] = ["https://www.mywebsite.com", "https://www.anothersite.com/a/page.html"]

settings[:urls].each do |url|
  puts url
end
# https://www.mywebsite.com
# https://www.anothersite.com/a/page.html
# => ["https://www.mywebsite.com", "https://www.anothersite.com/a/page.html"]

settings[:dont_exist]
# => nil

a_variable = 50
settings[a_variable] = {:one => "for the money", :two => "for the show", :three => "to get ready"}
settings[50]
# => {:one => "for the money", :two => "for the show", :three => "to get ready"}
settings[50][:two]
# => "for the show"

Attributes

status[R]

Public Class Methods

new(options = {}) click to toggle source

Setup the class with specified parameters or default values if any or all are absent. All parameters are optional. @param options [Hash] Hash value containing any passed parameters.

# File lib/confoog.rb, line 60
def initialize(options = {})
  # merge default options to avoid ambiguity
  @options = DEFAULT_OPTIONS.merge(options)
  # set all other unset options to return false instead of Nul.
  @options.default = false

  # Hash containing any error or return from methods
  @status = Status.new(@options[:quiet], @options[:prefix])
  # clear the error condition as default.
  @status.clear_error

  # Initialize the Configuration to and empty hash.
  @config = {}

  # make sure the file exists or can be created...
  check_exists(options)

  # if auto_load is true, automatically load from file
  load unless @options[:autoload] == false
end

Public Instance Methods

[](key) click to toggle source

Read the configuration key (key) @example

key = settings[:key]

@return [<various>] Return value depends on the type of variable stored

# File lib/confoog.rb, line 151
def [](key)
  @config[key]
end
[]=(key, value) click to toggle source

Set a configuration key. If autosave: true then will also update the config file (default is true) @example

settings[:key] = "Value"
settings[:array] = ["first", "second", "third"]

@return [<various>] Returns the variable that was assigned.

# File lib/confoog.rb, line 161
def []=(key, value)
  @config[key] = value
  # automatically save to file if this has been requested.
  save unless @options[:autosave] == false
end
autosave() click to toggle source

Return the value of the ‘autosave’ option. @example

autosave_status = settings.autosave
=> true

@param [None] @return [Boolen] true if we are autosaving on change or addition.

# File lib/confoog.rb, line 87
def autosave
  @options[:autosave]
end
autosave=(autosave) click to toggle source

Change the ‘autosave’ option. @example

settings.autosave = false
=> false

@return [Boolean] The new value [true | false] @param autosave [Boolean] True to send messages to console for errors.

# File lib/confoog.rb, line 97
def autosave=(autosave)
  @options[:autosave] = autosave
end
config_path() click to toggle source

Returns the fully qualified path to the configuration file in use. @example

path = config_path

@return [String] Full path and filename of the configuration file.

# File lib/confoog.rb, line 171
def config_path
  File.expand_path(File.join(@options[:location], @options[:filename]))
end
load() click to toggle source

Populate the configuration (@config) from the YAML file. @param [None] @example

settings.load

@return Unspecified

# File lib/confoog.rb, line 137
def load
  @config = YAML.load_file(config_path)
  @status.set(errors: Status::INFO_FILE_LOADED)
  if @config == false
    @status.set(errors: Status::ERR_NOT_LOADING_EMPTY_FILE)
  end
rescue
  @status.set(errors: Status::ERR_CANT_LOAD)
end
quiet() click to toggle source

Return the value of the ‘quiet’ option. @example

is_quiet = settings.quiet

@param [None] @return [Boolean] True if we are not writing to the console on error

# File lib/confoog.rb, line 106
def quiet
  @status.quiet
end
quiet=(quiet) click to toggle source

Change the ‘quiet’ option. @example

settings.quiet = true

@return [Boolean] The new value [true | false] @param quiet [Boolean] True to send messages to console for errors.

# File lib/confoog.rb, line 115
def quiet=(quiet)
  @status.quiet = quiet
end
save() click to toggle source

Save the entire configuration (@config) to the YAML file. @example

settings.save

@param [None] @return Unspecified

# File lib/confoog.rb, line 124
def save
  if @config.count > 0
    save_to_yaml
  else
    @status.set(errors: Status::ERR_NOT_WRITING_EMPTY_FILE)
  end
end

Private Instance Methods

check_exists(options) click to toggle source
# File lib/confoog.rb, line 194
def check_exists(options)
  @status[:config_exists] = true
  return if File.exist?(config_path)

  # file does not exist so we create if requested otherwise error out
  if options[:create_file] == true
    create_new_file
  else
    @status.set(config_exists: false, errors: Status::ERR_FILE_NOT_EXIST)
  end
end
create_new_file() click to toggle source
# File lib/confoog.rb, line 187
def create_new_file
  File.new(config_path, 'w').close
  @status.set(config_exists: true, errors: Status::INFO_FILE_CREATED)
rescue
  @status.set(config_exists: false, errors: Status::ERR_CANT_CREATE_FILE)
end
save_to_yaml() click to toggle source
# File lib/confoog.rb, line 177
def save_to_yaml
  unless File.exist?(config_path)
    @status.set(config_exists: false, errors: Status::ERR_FILE_NOT_EXIST)
    return
  end
  File.open(config_path, 'w') { |file| file.write(@config.to_yaml) }
rescue
  @status.set(errors: Status::ERR_CANT_SAVE_CONFIGURATION)
end