module ErpApp::Extensions::ActiveRecord::HasUserPreferences::InstanceMethods

Public Instance Methods

get_user_preference(user, preference_type_iid) click to toggle source
# File lib/erp_app/extensions/active_record/has_user_preferences.rb, line 56
def get_user_preference(user, preference_type_iid)
  preference_type = PreferenceType.find_by_internal_identifier(preference_type_iid.to_s)
  preference = find_user_preference(user, preference_type)
  if preference.nil?
    preference_type.default_preference_option.value
  else
    preference.preference_option.value
  end
end
preferences(user) click to toggle source
# File lib/erp_app/extensions/active_record/has_user_preferences.rb, line 25
def preferences(user)
  self.user_preferences.includes([:preference]).where('user_id = ?', user.id).map(&:preference)
end
set_user_preference(user, preference_type_iid, preference_option_lookup) click to toggle source
# File lib/erp_app/extensions/active_record/has_user_preferences.rb, line 29
def set_user_preference(user, preference_type_iid, preference_option_lookup)
  preference_type = PreferenceType.find_by_internal_identifier(preference_type_iid.to_s)
  preference_option = nil
  #preference option can be set using
  #:default [symbol which will set to default for preference type]
  #:preference_option_iid [the internal identifier for the preference option]
  #:value [the value of the preference_option]

  preference_option = preference_type.default_option if preference_option_lookup == :default
  preference_option = preference_type.preference_options.where('internal_identifier = ?', preference_option_lookup.to_s).first if preference_option.nil?
  preference_option = preference_type.preference_options.where('value = ?', preference_option_lookup.to_s).first if preference_option.nil?

  if preference_option.nil?
    raise 'Invalid option for preference type'
  else
    preference = find_user_preference(user, preference_type)
    unless preference.nil?
      preference.preference_option = preference_option
      preference.save
    else
      preference = Preference.create(:preference_type => preference_type, :preference_option => preference_option)
      self.user_preferences << UserPreference.create(:preference => preference, :user => user)
      self.save
    end
  end
end

Private Instance Methods

find_user_preference(user, preference_type) click to toggle source
# File lib/erp_app/extensions/active_record/has_user_preferences.rb, line 68
def find_user_preference(user, preference_type)
  preference = nil
  results = self.user_preferences.includes([:preference]).where('user_id = ? and preferences.preference_type_id = ?', user.id, preference_type.id)
  if !results.nil? && !results.empty?
    preference = results.first.preference
  end
  preference
end