Sha256: 8055c0631c2ed25f61fd42b843e098f55dd43ce8f27f9b8b56968961129f74a0

Contents?: true

Size: 1.67 KB

Versions: 29

Compression:

Stored size: 1.67 KB

Contents

# Represents a preferred value for a particular preference on a model.
# 
# == Targeted preferences
# 
# In addition to simple named preferences, preferences can also be targeted for
# a particular record.  For example, a User may have a preferred color for a
# particular Car.  In this case, the +owner+ is the User, the +preference+ is
# the color, and the +target+ is the Car.  This allows preferences to have a sort
# of context around them.
class Preference < ActiveRecord::Base
  belongs_to  :owner, :polymorphic => true
  belongs_to  :group, :polymorphic => true
  
  validates_presence_of :attribute, :owner_id, :owner_type
  validates_presence_of :group_type, :if => :group_id?
  
  class << self
    # Splits the given group into its corresponding id and type
    def split_group(group = nil)
      if group.is_a?(ActiveRecord::Base)
        group_id, group_type = group.id, group.class.base_class.name.to_s
      else
        group_id, group_type = nil, group
      end
      return group_id, group_type
    end
  end
  
  # The definition for the attribute
  def definition
    owner.preference_definitions[attribute] unless owner_type.blank?
  end
  
  # Typecasts the value depending on the preference definition's declared type
  def value
    value = read_attribute(:value)
    value = definition.type_cast(value) if definition
    value
  end
  
  # Only searches for the group record if the group id is specified
  def group_with_optional_lookup
    group_id ? group_without_optional_lookup : group_type
  end
  alias_method_chain :group, :optional_lookup
end


# Most of this code is taken from the preferences plugin available
# at http://github.com/pluginaweek/preferences/tree/master

Version data entries

29 entries across 29 versions & 3 rubygems

Version Path
kdmny-spree-0.0.1 app/models/preference.rb
spree-0.11.4 app/models/preference.rb
spree-0.11.3 app/models/preference.rb
spree-0.11.2 app/models/preference.rb
spree-0.11.1 app/models/preference.rb
spree-0.11.0 app/models/preference.rb
spree-0.10.2 app/models/preference.rb
spree-0.10.1 app/models/preference.rb
spree-0.10.0 app/models/preference.rb
spree-0.10.0.beta app/models/preference.rb
spree-enriquez-0.9.4 app/models/preference.rb
spree-0.9.4 app/models/preference.rb
spree-0.9.3 app/models/preference.rb
spree-0.9.2 app/models/preference.rb
spree-0.9.1 app/models/preference.rb
spree-0.9.0 app/models/preference.rb
spree-0.8.4 app/models/preference.rb
spree-0.8.5 app/models/preference.rb
spree-0.4.0 app/models/preference.rb
spree-0.4.1 app/models/preference.rb