Module: Spree::Preferences::PreferableClassMethods

Defined in:
app/models/spree/preferences/preferable_class_methods.rb

Instance Method Summary collapse

Instance Method Details

#preference(name, type, *args) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'app/models/spree/preferences/preferable_class_methods.rb', line 4

def preference(name, type, *args)
  options = args.extract_options!
  options.assert_valid_keys(:default, :description)
  default = options[:default]
  description = options[:description] || name

  # cache_key will be nil for new objects, then if we check if there
  # is a pending preference before going to default
  define_method preference_getter_method(name) do
    if preference_cache_key(name) && preference_store.exist?(preference_cache_key(name))
      preference_store.get preference_cache_key(name)
    else
      if get_pending_preference(name)
        get_pending_preference(name)
      elsif Spree::Preference.table_exists? && preference = Spree::Preference.find_by_name(name)
        preference.value
      else
        send self.class.preference_default_getter_method(name)
      end
    end
  end
  alias_method prefers_getter_method(name), preference_getter_method(name)

  define_method preference_setter_method(name) do |value|
    value = convert_preference_value(value, type)
    if preference_cache_key(name)
      preference_store.set preference_cache_key(name), value, type
    else
      add_pending_preference(name, value)
    end
  end
  alias_method prefers_setter_method(name), preference_setter_method(name)

  define_method preference_default_getter_method(name) do
    default
  end

  define_method preference_type_getter_method(name) do
    type
  end

  define_method preference_description_getter_method(name) do
    description
  end
end

#preference_default_getter_method(name) ⇒ Object



76
77
78
# File 'app/models/spree/preferences/preferable_class_methods.rb', line 76

def preference_default_getter_method(name)
  "preferred_#{name}_default".to_sym
end

#preference_description_getter_method(name) ⇒ Object



84
85
86
# File 'app/models/spree/preferences/preferable_class_methods.rb', line 84

def preference_description_getter_method(name)
  "preferred_#{name}_description".to_sym
end

#preference_getter_method(name) ⇒ Object



60
61
62
# File 'app/models/spree/preferences/preferable_class_methods.rb', line 60

def preference_getter_method(name)
  "preferred_#{name}".to_sym
end

#preference_setter_method(name) ⇒ Object



64
65
66
# File 'app/models/spree/preferences/preferable_class_methods.rb', line 64

def preference_setter_method(name)
   "preferred_#{name}=".to_sym
end

#preference_type_getter_method(name) ⇒ Object



80
81
82
# File 'app/models/spree/preferences/preferable_class_methods.rb', line 80

def preference_type_getter_method(name)
  "preferred_#{name}_type".to_sym
end

#prefers_getter_method(name) ⇒ Object



68
69
70
# File 'app/models/spree/preferences/preferable_class_methods.rb', line 68

def prefers_getter_method(name)
  "prefers_#{name}?".to_sym
end

#prefers_setter_method(name) ⇒ Object



72
73
74
# File 'app/models/spree/preferences/preferable_class_methods.rb', line 72

def prefers_setter_method(name)
   "prefers_#{name}=".to_sym
end

#remove_preference(name) ⇒ Object



50
51
52
53
54
55
56
57
58
# File 'app/models/spree/preferences/preferable_class_methods.rb', line 50

def remove_preference(name)
  remove_method preference_getter_method(name) if method_defined? preference_getter_method(name)
  remove_method preference_setter_method(name) if method_defined? preference_setter_method(name)
  remove_method prefers_getter_method(name) if method_defined? prefers_getter_method(name)
  remove_method prefers_setter_method(name) if method_defined? prefers_setter_method(name)
  remove_method preference_default_getter_method(name) if method_defined? preference_default_getter_method(name)
  remove_method preference_type_getter_method(name) if method_defined? preference_type_getter_method(name)
  remove_method preference_description_getter_method(name) if method_defined? preference_description_getter_method(name)
end