module Spreeference::Preferable
Public Instance Methods
clear_preferences()
click to toggle source
# File lib/spreeference/preferable.rb, line 51 def clear_preferences preferences.keys.each {|pref| preferences.delete pref} end
default_preferences()
click to toggle source
# File lib/spreeference/preferable.rb, line 43 def default_preferences Hash[ defined_preferences.map do |preference| [preference, preference_default(preference)] end ] end
defined_preferences()
click to toggle source
# File lib/spreeference/preferable.rb, line 37 def defined_preferences methods.grep(/\Apreferred_.*=\Z/).map do |pref_method| pref_method.to_s.gsub(/\Apreferred_|=\Z/, '').to_sym end end
get_preference(name)
click to toggle source
# File lib/spreeference/preferable.rb, line 9 def get_preference(name) has_preference! name send self.class.preference_getter_method(name) end
has_preference!(name)
click to toggle source
# File lib/spreeference/preferable.rb, line 29 def has_preference!(name) raise NoMethodError.new "#{name} preference not defined" unless has_preference? name end
has_preference?(name)
click to toggle source
# File lib/spreeference/preferable.rb, line 33 def has_preference?(name) respond_to? self.class.preference_getter_method(name) end
preference_default(name)
click to toggle source
# File lib/spreeference/preferable.rb, line 24 def preference_default(name) has_preference! name send self.class.preference_default_getter_method(name) end
preference_type(name)
click to toggle source
# File lib/spreeference/preferable.rb, line 19 def preference_type(name) has_preference! name send self.class.preference_type_getter_method(name) end
set_preference(name, value)
click to toggle source
# File lib/spreeference/preferable.rb, line 14 def set_preference(name, value) has_preference! name send self.class.preference_setter_method(name), value end
Private Instance Methods
convert_preference_value(value, type)
click to toggle source
# File lib/spreeference/preferable.rb, line 57 def convert_preference_value(value, type) case type when :string, :text value.to_s when :password value.to_s when :decimal BigDecimal.new(value.to_s) when :integer value.to_i when :boolean if value.is_a?(FalseClass) || value.nil? || value == 0 || value =~ /^(f|false|0)$/i || (value.respond_to? :empty? and value.empty?) false else true end when :array value.is_a?(Array) ? value : Array.wrap(value) when :hash case value.class.to_s when "Hash" value when "String" # only works with hashes whose keys are strings JSON.parse value.gsub('=>', ':') when "Array" begin value.try(:to_h) rescue TypeError Hash[*value] rescue ArgumentError raise 'An even count is required when passing an array to be converted to a hash' end else value.class.ancestors.include?(Hash) ? value : {} end else value end end