Class: Preference

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/users/preference.rb

Overview

Copyright © 2008-2013 Michael Dvorkin and contributors.

Fat Free CRM is freely distributable under the terms of MIT license. See MIT-LICENSE file or www.opensource.org/licenses/mit-license.php


Schema Information

Table name: preferences

id         :integer         not null, primary key
user_id    :integer
name       :string(32)      default(""), not null
value      :text
created_at :datetime
updated_at :datetime

Instance Method Summary collapse

Instance Method Details

#[](name) ⇒ Object




24
25
26
27
28
29
30
31
32
# File 'app/models/users/preference.rb', line 24

def [](name)
  # Following line is to preserve AR relationships
  return super(name) if name.to_s == "user_id" # get the value of belongs_to

  return cached_prefs[name.to_s] if cached_prefs.key?(name.to_s)
  cached_prefs[name.to_s] = if user.present? && pref = Preference.find_by_name_and_user_id(name.to_s, user.id)
                              Marshal.load(Base64.decode64(pref.value))
  end
end

#[]=(name, value) ⇒ Object




35
36
37
38
39
40
41
42
43
44
45
# File 'app/models/users/preference.rb', line 35

def []=(name, value)
  return super(name, value) if name.to_s == "user_id" # set the value of belongs_to

  encoded = Base64.encode64(Marshal.dump(value))
  if pref = Preference.find_by(name: name.to_s, user_id: user.id)
    pref.update_attribute(:value, encoded)
  else
    Preference.create(user: user, name: name.to_s, value: encoded)
  end
  cached_prefs[name.to_s] = value
end

#cached_prefsObject



47
48
49
# File 'app/models/users/preference.rb', line 47

def cached_prefs
  @cached_prefs ||= {}
end