module MournfulSettings::SettingMethods
Constants
- VALUE_TYPES
Public Class Methods
included(base)
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 8 def self.included(base) base.before_save :set_encrypted_true_unless_false base.before_save :encrypt_value base.validates :value_type, :presence => true, :inclusion => {:in => VALUE_TYPES} base.validates :value, :presence => true base.validates :name, :uniqueness => true, :presence => true end
Public Instance Methods
value()
click to toggle source
Calls superclass method
# File lib/mournful_settings/setting_methods.rb, line 39 def value if value_type.present? parent_value = encrypted? ? decrypt(super) : super case value_type.to_s when 'number' parent_value.to_f when 'decimal' BigDecimal.new(parent_value.to_s) else parent_value end end end
Private Instance Methods
add_separators(text)
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 97 def add_separators(text) [separator, text, separator].join end
decrypt(text)
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 59 def decrypt(text) if is_encrypted?(text) Cipher.decrypt Base64.decode64 remove_separators text else text end end
encrypt(text)
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 55 def encrypt(text) add_separators Base64.encode64 Cipher.encrypt text.to_s end
encrypt_value()
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 89 def encrypt_value if encrypted? self.value = encrypt(self.value) else self.value = decrypt(self.value) end end
inside_separators_and_is_base64_encoded?(text)
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 71 def inside_separators_and_is_base64_encoded?(text) return unless text.kind_of? String bytes = text.bytes.to_a return unless bytes[0] == separator_byte return unless bytes[-1] == separator_byte return unless bytes[-2] == last_byte_of_base_64_encoded_text non_white_space_with_equal_sign_packing =~ text[1..-3] end
is_encrypted?(text)
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 67 def is_encrypted?(text) inside_separators_and_is_base64_encoded?(text) end
last_byte_of_base_64_encoded_text()
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 115 def last_byte_of_base_64_encoded_text line_feed_byte end
line_feed_byte()
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 119 def line_feed_byte 10 end
non_white_space_with_equal_sign_packing()
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 80 def non_white_space_with_equal_sign_packing /\S+=*/ end
remove_separators(text)
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 101 def remove_separators(text) text.gsub(separator, "") end
separator()
click to toggle source
Used to delimit encrypted values to make identification more reliable
# File lib/mournful_settings/setting_methods.rb, line 106 def separator separator_byte.chr end
separator_byte()
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 111 def separator_byte 31 # ASCII unit separator end
set_encrypted_true_unless_false()
click to toggle source
# File lib/mournful_settings/setting_methods.rb, line 84 def set_encrypted_true_unless_false self.encrypted = true unless self.encrypted == false end