module SmartSettings::Querying

Public Instance Methods

all() click to toggle source
# File lib/smart_settings/querying.rb, line 35
def all
  return new.all if setting_names.any?

  files = Dir.glob(Rails.root.join('app', 'settings', '*.rb'))
  files = files.map { |file| file.to_s.split('/').last.sub('_settings.rb', '') }

  where(var: files)
end
find(*var) click to toggle source
# File lib/smart_settings/querying.rb, line 10
def find(*var)
  return find_by_var!(var.first) unless var.size > 1

  results = where(var: var)
  raise_record_not_found_exception!(var) if results.blank?
end
find_by_var(var) click to toggle source
# File lib/smart_settings/querying.rb, line 17
def find_by_var(var)
  setting = setting_class(var).safe_constantize
  setting.nil? ? nil : setting.new
end
find_by_var!(var) click to toggle source
# File lib/smart_settings/querying.rb, line 22
def find_by_var!(var)
  setting = find_by_var(var)
  setting.nil? ? raise_record_not_found_exception!(var) : setting
end
method_missing(method, *args, &block) click to toggle source
Calls superclass method
# File lib/smart_settings/querying.rb, line 44
def method_missing(method, *args, &block)
  setting = find_by_var(method)
  setting.nil? ? super : setting
end
raise_record_not_found_exception!(ids) click to toggle source
# File lib/smart_settings/querying.rb, line 51
def raise_record_not_found_exception!(ids)
  vars  = ids.is_a?(Array) ? "(#{ids.join(', ')})" : ids
  error = "Couldn't find Settings with var: #{vars}"

  raise ActiveRecord::RecordNotFound.new(error, 'Settings', 'var')
end
setting_class(var) click to toggle source
# File lib/smart_settings/querying.rb, line 6
def setting_class(var)
  "#{var}_settings".camelize
end
where(options = {}) click to toggle source
# File lib/smart_settings/querying.rb, line 27
def where(options = {})
  vars = Hash[options][:var]
  return all if vars.nil?

  classes = Array(vars).map { |var| setting_class(var).safe_constantize }
  classes.reject(&:nil?).map { |setting| setting.new  }
end