class UserPreferences::API

Public Class Methods

new(category, scope) click to toggle source
# File lib/user_preferences/api.rb, line 3
def initialize(category, scope)
  @category = category
  @scope = scope.where(category: category)
end

Public Instance Methods

all() click to toggle source
# File lib/user_preferences/api.rb, line 8
def all
  serialized_preferences
end
get(name) click to toggle source
# File lib/user_preferences/api.rb, line 12
def get(name)
  serialized_preferences[name]
end
reload() click to toggle source
# File lib/user_preferences/api.rb, line 25
def reload
  @_saved_preferences = nil
  all
end
set(hash) click to toggle source
# File lib/user_preferences/api.rb, line 16
def set(hash)
  hash_setter do
    hash.each do |name, value|
      find_or_init_preference(name).update_value!(value)
    end
    reload
  end
end

Private Instance Methods

default_preferences() click to toggle source
# File lib/user_preferences/api.rb, line 36
def default_preferences
  @_category_defaults ||= UserPreferences.defaults(@category)
end
find_or_init_preference(name) click to toggle source
# File lib/user_preferences/api.rb, line 44
def find_or_init_preference(name)
  @scope.find_or_initialize_by(name: name, category: @category)
end
hash_setter() { || ... } click to toggle source
# File lib/user_preferences/api.rb, line 48
def hash_setter(&block)
  ActiveRecord::Base.transaction do
    result = true
    begin
      yield
    rescue ActiveRecord::RecordInvalid
      result = false
    end
    result
  end
end
saved_preferences() click to toggle source
# File lib/user_preferences/api.rb, line 40
def saved_preferences
  @_saved_preferences ||= @scope.select([:id, :category, :name, :value, :user_id])
end
serialized_preferences() click to toggle source
# File lib/user_preferences/api.rb, line 32
def serialized_preferences
  default_preferences.merge Hash[saved_preferences.map { |p| [p.name.to_sym, p.value] }]
end