module UserPrefs
Constants
- VERSION
Public Class Methods
included(base)
click to toggle source
# File lib/user_prefs.rb, line 10 def included(base) validate_column_and_type(base) unless RUBY_ENGINE == :opal base.class_eval do class_attribute :defined_prefs, :default_prefs self.defined_prefs ||= [] self.default_prefs ||= {} serialize(prefs_column.to_sym, RUBY_ENGINE == 'opal' ? Hash : HashWithIndifferentAccess) end base.extend(ClassMethods) end
Private Class Methods
name_conflict?(base)
click to toggle source
# File lib/user_prefs.rb, line 31 def name_conflict?(base) base.prefs_column == 'prefs' end
no_column?(base)
click to toggle source
# File lib/user_prefs.rb, line 27 def no_column?(base) !base.columns_hash[base.prefs_column] end
validate_column_and_type(base)
click to toggle source
# File lib/user_prefs.rb, line 40 def validate_column_and_type(base) raise ColumnError, "Preference column name cannot be named 'prefs'." if name_conflict?(base) raise ColumnError, "#{base.name} must have column '#{base.prefs_column}'." if no_column?(base) raise ColumnError, "#{base.prefs_column} must be of type 'text'." if wrong_type?(base) end
wrong_type?(base)
click to toggle source
# File lib/user_prefs.rb, line 35 def wrong_type?(base) base.columns_hash[base.prefs_column] && base.columns_hash[base.prefs_column].type.to_s != 'text' end
Public Instance Methods
add_pref(key, value)
click to toggle source
# File lib/user_prefs.rb, line 51 def add_pref(key, value) self.prefs_attr = prefs_attr.merge(Hash[key, value]) end
delete_pref(key)
click to toggle source
# File lib/user_prefs.rb, line 55 def delete_pref(key) self.prefs_attr = prefs_attr.reject { |k, _v| k.to_s == key.to_s } end
method_missing(method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/user_prefs.rb, line 59 def method_missing(method_name, *args, &block) if (match_data = method_name.to_s.match(/(\w+)_pref(=|\?)?/)) preference_method(match_data[1], match_data[2], args.first) else super end end
prefs()
click to toggle source
# File lib/user_prefs.rb, line 47 def prefs prefs_attr.merge(Hash[self.class.defined_prefs.map { |k| [k, send("#{k}_pref")] }]) end
respond_to_missing?(method_name, include_private = false)
click to toggle source
Calls superclass method
# File lib/user_prefs.rb, line 67 def respond_to_missing?(method_name, include_private = false) method_name =~ /(\w+)_pref(=|\?)?/ || super end
Private Instance Methods
preference_method(key, method = nil, new_value = nil)
click to toggle source
# File lib/user_prefs.rb, line 81 def preference_method(key, method = nil, new_value = nil) case method when '?' then prefs_attr.key?(key) when '=' then prefs_attr[key] = new_value else prefs_attr[key] end end
prefs_attr()
click to toggle source
# File lib/user_prefs.rb, line 73 def prefs_attr send(self.class.prefs_column) end
prefs_attr=(value)
click to toggle source
# File lib/user_prefs.rb, line 77 def prefs_attr=(value) send("#{self.class.prefs_column}=", value) end