Class: CleanSettings::Setting

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/clean_settings/setting.rb

Direct Known Subclasses

Ownerable

Defined Under Namespace

Classes: Defaults, SettingNotFound

Constant Summary collapse

@@defaults =
Defaults.new

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.[](var_name) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/clean_settings/setting.rb', line 44

def [](var_name)
  if var = object(var_name)
    var.value
  elsif @@defaults.send(var_name.to_sym)
    @@defaults.send(var_name.to_sym)
  else
    nil
  end
end

.[]=(var_name, value) ⇒ Object



54
55
56
57
58
59
60
61
62
# File 'lib/clean_settings/setting.rb', line 54

def []=(var_name, value)
  var_name = var_name.to_s

  record = object(var_name) || with_owner.new(var: var_name)
  record.value = value
  record.save!

  value
end

.clear_defaultsObject



40
41
42
# File 'lib/clean_settings/setting.rb', line 40

def clear_defaults
  @@defaults = Defaults.new
end

.defaultsObject



27
28
29
# File 'lib/clean_settings/setting.rb', line 27

def defaults
  @@defaults ||= Defaults.new
end

.defaults=(key, value) ⇒ Object



36
37
38
# File 'lib/clean_settings/setting.rb', line 36

def defaults=(key, value)
  @@defaults.send("#{key}=", value)
end

.destroy(var_name) ⇒ Object



64
65
66
67
68
69
70
71
72
73
# File 'lib/clean_settings/setting.rb', line 64

def destroy(var_name)
  var_name = var_name.to_s

  if obj = object(var_name)
    obj.destroy
    true
  else
    raise SettingNotFound, "Setting variable \"#{var_name}\" not found"
  end
end

.fetchObject Also known as: all_settings



84
85
86
# File 'lib/clean_settings/setting.rb', line 84

def fetch
  fetch_defaults.merge(fetch_globals)
end

.fetch_defaultsObject Also known as: all_defaults



31
32
33
# File 'lib/clean_settings/setting.rb', line 31

def fetch_defaults
  @@defaults.marshal_dump.with_indifferent_access
end

.fetch_globalsObject Also known as: all_globals



75
76
77
78
79
80
81
# File 'lib/clean_settings/setting.rb', line 75

def fetch_globals
  vars = with_owner.select([:var, :value])

  result = {}
  vars.each { |record| result[record.var] = record.value }
  result.with_indifferent_access
end

.for_thing(owner) ⇒ Object



90
91
92
93
# File 'lib/clean_settings/setting.rb', line 90

def for_thing(owner)
  @owner = owner
  self
end

.method_missing(method, *args, &block) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/clean_settings/setting.rb', line 103

def method_missing(method, *args, &block)
  method_name = method.to_s
  super(method, *args, &block)

rescue NoMethodError

  if method_name[-1] == "="
    var_name = method_name.chop
    value = args[0]
    self[var_name] = value
  else
    self[method_name]
  end
end

.object(var_name) ⇒ Object



99
100
101
# File 'lib/clean_settings/setting.rb', line 99

def object(var_name)
  with_owner.where(var: var_name).first
end

.with_ownerObject



95
96
97
# File 'lib/clean_settings/setting.rb', line 95

def with_owner
  unscoped.where("owner_type is NULL and owner_id is NULL")
end

Instance Method Details

#valueObject



18
19
20
# File 'lib/clean_settings/setting.rb', line 18

def value
  YAML::load(self[:value])
end

#value=(new_value) ⇒ Object



22
23
24
# File 'lib/clean_settings/setting.rb', line 22

def value=(new_value)
  self[:value] = new_value.to_yaml
end