0
def self.included(receiver)
0
- #return if receiver.included_modules.include?(PreferenceFu::InstanceMethods)
0
- receiver.extend ClassMethods
0
- receiver.send :include, InstanceMethods
0
+ receiver.extend ClassMethods
0
- def preference_to_bitmask(preference)
0
- self.preference_options.each_key { |k| return k if self.preference_options[k][:key] == preference}
0
- def has_preferences(*options)
0
- alias_method_chain :initialize, :preferences
0
+ def has_preferences(*args)
0
+ options = args.last.is_a?(Hash) ? args.pop : {}
0
+ preference_accessor = options.delete(:accessor) || 'preferences'
0
+ column_name = options.delete(:column) || preference_accessor
0
+ defaults = options.delete(:default) || {}
0
- alias_method_chain :instantiate, :preferences
0
- attr_accessor :preference_options
0
+ metaclass.instance_exec(preference_accessor) { |preference_accessor|
0
+ attr_accessor "#{preference_accessor}_options"
0
-
config = { :column => 'preferences' }0
+
self.send("#{preference_accessor}_options=", preference_options = {})0
- idx = 0; self.preference_options = {}
0
- options.each do |pref|
0
- self.preference_options[2**idx] = { :key => pref.to_sym, :default => false }
0
+ args.each_with_index do |pref,idx|
0
+ preference_options[2**idx] = { :key => pref.to_sym, :default => defaults[pref.to_sym] || false }
0
+ instance_code = <<-end_src
0
+ def initialize_with_#{preference_accessor}
0
+ initialize_without_#{preference_accessor}
0
+ #{preference_accessor}
0
+ yield self if block_given?
0
+ def #{preference_accessor}
0
+ @#{preference_accessor}_object ||= Preferences.new(read_attribute('#{column_name}'.to_sym),
0
+ self.class.#{preference_accessor}_options, '#{column_name}', self)
0
- def preferences_column
0
+ def #{preference_accessor}=(hsh)
0
+ #{preference_accessor}.store(hsh)
0
- def set_default_preference(key, default)
0
- raise ArgumentError.new("Default value must be boolean") unless [true, false].include?(default)
0
- idx = preference_options.find { |idx, hsh| hsh[:key] == key.to_sym }.first rescue nil
0
- preference_options[idx][:default] = default
0
- def instantiate_with_preferences(*args)
0
- record = instantiate_without_preferences(*args)
0
- module InstanceMethods
0
- def initialize_with_preferences(attributes = nil)
0
- initialize_without_preferences(attributes)
0
- prefs # use this to trigger update_permissions in Preferences
0
- yield self if block_given?
0
- @preferences_object ||= Preferences.new(read_attribute(preferences_column.to_sym), self)
0
+ class_eval(instance_code)
0
+ alias_method_chain :initialize, preference_accessor
0
- attr_accessor :
instance, :options
0
+ attr_accessor :
options
0
- def initialize(prefs, instance)
0
+ def initialize(prefs, options,column,instance)
0
- @options = instance.class.preference_options
0
# setup defaults if prefs is nil
0
@@ -100,7 +69,7 @@ module PreferenceFu
0
raise(ArgumentError, "Input must be numeric")
0
+ update_p
reference_attribute0
@@ -131,7 +100,7 @@ module PreferenceFu
0
instance_variable_set("@#{key}", is_true(value))
0
+ update_p
reference_attribute0
@@ -154,8 +123,8 @@ module PreferenceFu
0
- def update_permissions
0
- instance.write_attribute(instance.preferences_column, self.to_i)
0
+ def update_preference_attribute
0
+ @instance.write_attribute(@column, self.to_i)
Comments
No one has commented yet.