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