Module: PreferenceFu::ClassMethods

Defined in:
lib/preference_fu.rb

Instance Method Summary collapse

Instance Method Details

#has_preferences(*prefs) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/preference_fu.rb', line 10

def has_preferences(*prefs)
  alias_method_chain :initialize, :preferences
  
  class_eval do
    class << self
      alias_method_chain :instantiate, :preferences
      attr_accessor :preference_options
    end
  end
  
  options = prefs.extract_options!
  @config = { :column => 'preferences' }.merge(options)
  
  self.preference_options = {}
  prefs.each_with_index do |pref, idx|
    self.preference_options[2**idx] = { :key => pref.to_sym, :default => false }
  end
  
  class << self
    define_method(:preferences_column) { @config[:column] }
  end
        
end

#instantiate_with_preferences(*args) ⇒ Object



42
43
44
45
46
# File 'lib/preference_fu.rb', line 42

def instantiate_with_preferences(*args)
  record = instantiate_without_preferences(*args)
  record.prefs
  record
end

#set_default_preference(key, default) ⇒ Object

Raises:

  • (ArgumentError)


34
35
36
37
38
39
40
# File 'lib/preference_fu.rb', line 34

def set_default_preference(key, default)
  raise ArgumentError.new("Default value must be boolean") unless [true, false].include?(default)
  idx = preference_options.find { |idx, hsh| hsh[:key] == key.to_sym }.first rescue nil
  if idx
    preference_options[idx][:default] = default
  end
end