Class: Spree::Preferences::Configuration
- Inherits:
-
Object
- Object
- Spree::Preferences::Configuration
- Includes:
- Preferable
- Defined in:
- lib/spree/preferences/configuration.rb
Overview
This takes the preferrable methods and adds some syntatic sugar to access the preferences
class App < Configuration
preference :color, :string
end
a = App.new
Provides the following setters:
a.color = :blue
a[:color] = :blue
a.set color: :blue
a.preferred_color = :blue
and the following getters:
a.color
a[:color]
a.get :color
a.preferred_color
Direct Known Subclasses
Instance Attribute Summary collapse
- #load_defaults_called ⇒ Object readonly private
-
#loaded_defaults ⇒ Object
readonly
Returns the value of attribute loaded_defaults.
-
#preference_store ⇒ Object
(also: #preferences)
Storage method for preferences.
Class Method Summary collapse
- .class_name_attribute(name, default:) ⇒ Object
- .inherited(klass) ⇒ Object
- .preference(name, type, options = {}) ⇒ Object
-
.versioned_preference(name, type, initial_value:, boundaries:, **options) ⇒ Object
Adds a preference with different default depending on #loaded_defaults.
Instance Method Summary collapse
- #check_load_defaults_called(instance_constant_name = nil) ⇒ Object
- #configure {|config| ... } ⇒ Object
-
#initialize ⇒ Configuration
constructor
A new instance of Configuration.
-
#load_defaults(version) ⇒ Object
are not overriden by the user.
-
#reset ⇒ Object
Reset all preferences to their default values.
- #set(preferences) ⇒ Object
-
#use_legacy_db_preferences! ⇒ Object
Replace the new static preference store with the legacy store which fetches preferences from the DB.
-
#use_static_preferences! ⇒ Object
Replace the default legacy preference store, which stores preferences in the spree_preferences table, with a plain in memory hash.
Methods included from Preferable
#admin_form_preference_names, #default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference
Constructor Details
#initialize ⇒ Configuration
Returns a new instance of Configuration.
44 45 46 47 |
# File 'lib/spree/preferences/configuration.rb', line 44 def initialize @loaded_defaults = Spree.solidus_version @load_defaults_called = false end |
Instance Attribute Details
#load_defaults_called ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
42 43 44 |
# File 'lib/spree/preferences/configuration.rb', line 42 def load_defaults_called @load_defaults_called end |
#loaded_defaults ⇒ Object (readonly)
Returns the value of attribute loaded_defaults.
39 40 41 |
# File 'lib/spree/preferences/configuration.rb', line 39 def loaded_defaults @loaded_defaults end |
#preference_store ⇒ Object Also known as: preferences
Storage method for preferences.
79 |
# File 'lib/spree/preferences/configuration.rb', line 79 attr_writer :preference_store |
Class Method Details
.class_name_attribute(name, default:) ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/spree/preferences/configuration.rb', line 159 def self.class_name_attribute(name, default:) ivar = :"@#{name}" define_method("#{name}=") do |class_name| # If this is a named class constant, we should store it as a string to # allow code reloading. class_name = class_name.name if class_name.is_a?(Class) && class_name.name instance_variable_set(ivar, class_name) end define_method(name) do class_name = instance_variable_get(ivar) class_name ||= default class_name = class_name.constantize if class_name.is_a?(String) class_name end end |
.inherited(klass) ⇒ Object
122 123 124 125 126 127 |
# File 'lib/spree/preferences/configuration.rb', line 122 def self.inherited(klass) klass.instance_variable_set(:@versioned_preferences, []) class << klass attr_reader :versioned_preferences end end |
.preference(name, type, options = {}) ⇒ Object
153 154 155 156 157 |
# File 'lib/spree/preferences/configuration.rb', line 153 def self.preference(name, type, = {}) super alias_method name.to_s, "preferred_#{name}" alias_method "#{name}=", "preferred_#{name}=" end |
.versioned_preference(name, type, initial_value:, boundaries:, **options) ⇒ Object
Adds a preference with different default depending on #loaded_defaults
This method is a specialized version of preference that generates a different default value for different Solidus versions. For instance, in the example, ‘foo`’s default was ‘true` until version 3.0.0.alpha, when it became `false`:
142 143 144 145 146 147 148 149 150 151 |
# File 'lib/spree/preferences/configuration.rb', line 142 def self.versioned_preference(name, type, initial_value:, boundaries:, **) @versioned_preferences << name preference( name, type, .merge( default: by_version(initial_value, boundaries) ) ) end |
Instance Method Details
#check_load_defaults_called(instance_constant_name = nil) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/spree/preferences/configuration.rb', line 58 def check_load_defaults_called(instance_constant_name = nil) return if load_defaults_called || !Spree::Core.has_install_generator_been_run? target_name = instance_constant_name || "#{self.class.name}.new" Spree.deprecator.warn <<~MSG It's recommended that you explicitly load the default configuration for your current Solidus version. You can do it by adding the following call to your Solidus initializer within the #{target_name} block: config.load_defaults('#{Spree.solidus_version}') MSG end |
#configure {|config| ... } ⇒ Object
73 74 75 |
# File 'lib/spree/preferences/configuration.rb', line 73 def configure yield(self) end |
#load_defaults(version) ⇒ Object
are not overriden by the user.
52 53 54 55 56 |
# File 'lib/spree/preferences/configuration.rb', line 52 def load_defaults(version) @loaded_defaults = version @load_defaults_called = true reset end |
#reset ⇒ Object
Reset all preferences to their default values.
106 107 108 |
# File 'lib/spree/preferences/configuration.rb', line 106 def reset set(default_preferences) end |
#set(preferences) ⇒ Object
116 117 118 119 120 |
# File 'lib/spree/preferences/configuration.rb', line 116 def set(preferences) preferences.each do |name, value| set_preference name, value end end |
#use_legacy_db_preferences! ⇒ Object
Replace the new static preference store with the legacy store which fetches preferences from the DB.
99 100 101 |
# File 'lib/spree/preferences/configuration.rb', line 99 def use_legacy_db_preferences! @preference_store = ScopedStore.new(self.class.name.underscore) end |
#use_static_preferences! ⇒ Object
Replace the default legacy preference store, which stores preferences in the spree_preferences table, with a plain in memory hash. This is faster and less error prone.
This will set all preferences to their default values.
These won’t be loaded from or persisted to the database, so any desired changes must be made each time the application is started, such as in an initializer.
93 94 95 |
# File 'lib/spree/preferences/configuration.rb', line 93 def use_static_preferences! @preference_store = default_preferences end |