class Fiona::Settings

Public Class Methods

new() { |self| ... } click to toggle source
# File lib/fiona/settings.rb, line 4
def initialize(&block)
  @state = :initializing
  @defaults = {}

  yield(self)

  merge_settings
  @state = :initialized
end

Public Instance Methods

all_settings() click to toggle source
# File lib/fiona/settings.rb, line 29
def all_settings
  return @merged.clone
end
default(key, value, scope = nil) click to toggle source
# File lib/fiona/settings.rb, line 14
def default(key, value, scope = nil)
  raise 'You must set defaults when initializing' unless @state == :initializing
  raise 'You must provide a key' if key.nil?
  raise 'Key must be a symbol' unless key.is_a?(Symbol)
  raise 'You must provide a scope' if scope.nil? && @defaults[key]
  raise 'You can not change a scope' if @defaults[key] && scope
  raise 'Scope must be :public or :private' if scope && ![:public, :private].include?(scope)

  setting = @defaults[key] ||= {}
  setting[:value] = value
  setting[:scope] = scope if scope

  return true
end
method_missing(m, *args, &block) click to toggle source
# File lib/fiona/settings.rb, line 49
def method_missing(m, *args, &block)
  m = m.to_sym

  if @merged.include?(m)
    return @merged[m][:value]
  else
    raise 'Unknown key'
  end
end
private_settings() click to toggle source
# File lib/fiona/settings.rb, line 37
def private_settings
  return settings_for_scope(:private)
end
public_settings() click to toggle source
# File lib/fiona/settings.rb, line 33
def public_settings
  return settings_for_scope(:public)
end
reload() click to toggle source
# File lib/fiona/settings.rb, line 45
def reload
  return merge_settings
end
settings_for_scope(scope) click to toggle source
# File lib/fiona/settings.rb, line 41
def settings_for_scope(scope)
  return @merged.select { |k, v| v[:scope] == scope }
end

Private Instance Methods

merge_settings() click to toggle source
# File lib/fiona/settings.rb, line 61
def merge_settings
  @merged = {}

  @defaults.each do |k, v|
    @merged[k] = { :value => v[:value], :scope => v[:scope] }

    if (template = Fiona::SettingTemplate.find_by_key("setting_#{k}"))
      @merged[k][:value] = template.value
    end
  end

  return all_settings
end