Class: RailsSettings::Settings
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- RailsSettings::Settings
- Defined in:
- lib/rails-settings/settings.rb
Direct Known Subclasses
Defined Under Namespace
Classes: SettingNotFound
Class Method Summary collapse
-
.[](var_name) ⇒ Object
get a setting value by [] notation.
-
.[]=(var_name, value) ⇒ Object
set a setting value by [] notation.
-
.destroy(var_name) ⇒ Object
destroy the specified settings record.
-
.get_all(starting_with = nil) ⇒ Object
retrieve all settings as a hash (optionally starting with a given namespace).
- .merge!(var_name, hash_value) ⇒ Object
-
.method_missing(method, *args) ⇒ Object
get or set a variable with the variable as the called method rubocop:disable Style/MethodMissing.
- .object(var_name) ⇒ Object
- .rails_initialized? ⇒ Boolean
- .source(filename) ⇒ Object
- .thing_scoped ⇒ Object
- .where(sql = nil) ⇒ Object
Instance Method Summary collapse
-
#value ⇒ Object
get the value field, YAML decoded.
-
#value=(new_value) ⇒ Object
set the value field, YAML encoded.
Class Method Details
.[](var_name) ⇒ Object
get a setting value by [] notation
63 64 65 66 67 68 69 |
# File 'lib/rails-settings/settings.rb', line 63 def [](var_name) return Default[var_name] unless rails_initialized? val = object(var_name) return val.value if val return Default[var_name] if Default.enabled? end |
.[]=(var_name, value) ⇒ Object
set a setting value by [] notation
72 73 74 75 76 77 78 79 80 |
# File 'lib/rails-settings/settings.rb', line 72 def []=(var_name, value) var_name = var_name.to_s record = object(var_name) || thing_scoped.new(var: var_name) record.value = value record.save! value end |
.destroy(var_name) ⇒ Object
destroy the specified settings record
38 39 40 41 42 43 44 45 |
# File 'lib/rails-settings/settings.rb', line 38 def destroy(var_name) var_name = var_name.to_s obj = object(var_name) raise SettingNotFound, "Setting variable \"#{var_name}\" not found" if obj.nil? obj.destroy true end |
.get_all(starting_with = nil) ⇒ Object
retrieve all settings as a hash (optionally starting with a given namespace)
48 49 50 51 52 53 54 55 |
# File 'lib/rails-settings/settings.rb', line 48 def get_all(starting_with = nil) vars = thing_scoped.select("var, value") vars = vars.where("var LIKE '#{starting_with}%'") if starting_with result = {} vars.each { |record| result[record.var] = record.value } result.reverse_merge!(default_settings(starting_with)) result.with_indifferent_access end |
.merge!(var_name, hash_value) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/rails-settings/settings.rb', line 82 def merge!(var_name, hash_value) raise ArgumentError unless hash_value.is_a?(Hash) old_value = self[var_name] || {} raise TypeError, "Existing value is not a hash, can't merge!" unless old_value.is_a?(Hash) new_value = old_value.merge(hash_value) self[var_name] = new_value if new_value != old_value new_value end |
.method_missing(method, *args) ⇒ Object
get or set a variable with the variable as the called method rubocop:disable Style/MethodMissing
22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/rails-settings/settings.rb', line 22 def method_missing(method, *args) method_name = method.to_s super(method, *args) rescue NoMethodError # set a value for a variable if method_name[-1] == "=" var_name = method_name.sub("=", "") value = args.first self[var_name] = value else # retrieve a value self[method_name] end end |
.object(var_name) ⇒ Object
94 95 96 97 |
# File 'lib/rails-settings/settings.rb', line 94 def object(var_name) return nil unless table_exists? thing_scoped.where(var: var_name.to_s).first end |
.rails_initialized? ⇒ Boolean
107 108 109 110 |
# File 'lib/rails-settings/settings.rb', line 107 def rails_initialized? # Rails.application && Rails.application.initialized? true end |
.source(filename) ⇒ Object
103 104 105 |
# File 'lib/rails-settings/settings.rb', line 103 def source(filename) Default.source(filename) end |
.thing_scoped ⇒ Object
99 100 101 |
# File 'lib/rails-settings/settings.rb', line 99 def thing_scoped unscoped.where("thing_type is NULL and thing_id is NULL") end |
.where(sql = nil) ⇒ Object
57 58 59 60 |
# File 'lib/rails-settings/settings.rb', line 57 def where(sql = nil) vars = thing_scoped.where(sql) if sql vars end |
Instance Method Details
#value ⇒ Object
get the value field, YAML decoded
10 11 12 |
# File 'lib/rails-settings/settings.rb', line 10 def value YAML.load(self[:value]) if self[:value].present? end |
#value=(new_value) ⇒ Object
set the value field, YAML encoded
15 16 17 |
# File 'lib/rails-settings/settings.rb', line 15 def value=(new_value) self[:value] = new_value.to_yaml end |