Class: SettingAccessors::Accessor

Inherits:
Object
  • Object
show all
Defined in:
lib/setting_accessors/accessor.rb

Overview

Helper class to make accessing record specific settings easier

Instance Method Summary collapse

Constructor Details

#initialize(record) ⇒ Accessor

Returns a new instance of Accessor.



7
8
9
10
# File 'lib/setting_accessors/accessor.rb', line 7

def initialize(record)
  @record        = record
  @temp_settings = {}
end

Instance Method Details

#[](key) ⇒ Object

Gets a setting’s value



15
16
17
# File 'lib/setting_accessors/accessor.rb', line 15

def [](key)
  has_key?(key) ? @temp_settings[key.to_sym] : SettingAccessors.setting_class.get(key, @record)
end

#[]=(key, val) ⇒ Object

Writes a setting’s value



26
27
28
29
# File 'lib/setting_accessors/accessor.rb', line 26

def []=(key, val)
  set_value_before_type_cast(key, val)
  @temp_settings[key.to_sym] = SettingAccessors::Internal.converter(value_type(key)).convert(val)
end

#get_or_default(key) ⇒ Object

Tries to find a setting for this record. If none is found, will return the default setting value specified in the setting config file.



36
37
38
# File 'lib/setting_accessors/accessor.rb', line 36

def get_or_default(key)
  self[key] || SettingAccessors.setting_class.get_or_default(key, @record)
end

#get_or_global(key) ⇒ Object

Tries to find a setting for this record first. If none is found, tries to find a global setting with the same name



44
45
46
# File 'lib/setting_accessors/accessor.rb', line 44

def get_or_global(key)
  self[key] || SettingAccessors.setting_class.get(key)
end

#get_or_value(key, value) ⇒ Object

Tries to find a setting for this record first, if none is found, it will return the given value instead.



52
53
54
# File 'lib/setting_accessors/accessor.rb', line 52

def get_or_value(key, value)
  self.has_key?(key) ? self[key] : value
end

#get_with_fallback(key, fallback = nil) ⇒ Object



56
57
58
59
60
61
62
63
64
# File 'lib/setting_accessors/accessor.rb', line 56

def get_with_fallback(key, fallback = nil)
  return self[key] if fallback.nil?

  case fallback.to_s
    when 'default' then get_or_default(key)
    when 'global'  then get_or_global(key)
    else get_or_value(key, fallback)
  end
end

#has_key?(key) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/setting_accessors/accessor.rb', line 19

def has_key?(key)
  @temp_settings.has_key?(key.to_sym)
end

#value_before_type_cast(key) ⇒ Object



91
92
93
# File 'lib/setting_accessors/accessor.rb', line 91

def value_before_type_cast(key)
  SettingAccessors::Internal.lookup_nested_hash(@values_before_type_casts, key.to_s) || self[key]
end

#value_changed?(key) ⇒ Boolean

Returns:

  • (Boolean)


87
88
89
# File 'lib/setting_accessors/accessor.rb', line 87

def value_changed?(key)
  self[key] != value_was(key)
end

#value_type(key) ⇒ String

Returns the setting’s value type in the @record‘s context.

Returns:

  • (String)

    the setting’s value type in the @record‘s context



69
70
71
# File 'lib/setting_accessors/accessor.rb', line 69

def value_type(key)
  SettingAccessors::Internal.setting_value_type(key, @record)
end

#value_was(key, fallback = nil) ⇒ Object


ActiveRecord Helper Methods Emulation



77
78
79
80
81
82
83
84
85
# File 'lib/setting_accessors/accessor.rb', line 77

def value_was(key, fallback = nil)
  return SettingAccessors.setting_class.get(key, @record) if fallback.nil?

  case fallback.to_s
    when 'default' then SettingAccessors.setting_class.get_or_default(key, @record)
    when 'global'  then SettingAccessors.setting_class.get(key)
    else fallback
  end
end