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