module UserPrefs::ClassMethods

Public Instance Methods

preference(name = nil, opts = {}) click to toggle source
# File lib/user_prefs/class_methods.rb, line 3
def preference(name = nil, opts = {})
  validate_name(name)

  defined_prefs << name
  default_prefs[name.to_s] ||= opts[:default]

  define_method("#{name}_pref") do
    prefs_attr[name] || opts[:default]
  end

  define_method("#{name}_pref=") do |new_value|
    self.prefs_attr = prefs_attr.merge(Hash[name, new_value])
  end

  define_method("#{name}_pref?") do
    prefs_attr.key?(name)
  end
end

Private Instance Methods

validate_name(name) click to toggle source
# File lib/user_prefs/class_methods.rb, line 24
def validate_name(name)
  raise PreferenceError, 'Preference name must be specified.' unless name
  raise PreferenceError, "#{name} has already been specified." if defined_prefs.include?(name)
end