Module: AbAdmin::Models::Settings

Extended by:
ActiveSupport::Concern
Included in:
Settings
Defined in:
lib/ab_admin/models/settings.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#allObject



43
44
45
46
47
48
# File 'lib/ab_admin/models/settings.rb', line 43

def all
  @paths.each do |path|
    @data.deep_merge!(YAML.load_file(path))
  end
  @data
end

#case_value(value) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/ab_admin/models/settings.rb', line 69

def case_value(value)
  if %w(true false 1 0).include?(value) || value.is_number?
    YAML::load(value)
  else
    value
  end
end

#editableObject



50
51
52
# File 'lib/ab_admin/models/settings.rb', line 50

def editable
  YAML.load_file(@editable_path) rescue {}
end

#find_editable_pathObject



26
27
28
29
30
31
32
33
# File 'lib/ab_admin/models/settings.rb', line 26

def find_editable_path
  edited_settings_paths = [
      Rails.root.join('config', 'settings', "#{Rails.env}.local.yml"),
      Rails.root.join('config', 'settings', 'settings.local.yml')
  ]
  path = edited_settings_paths.detect { |path| File.exists?(path) }
  path or raise("Create settings file for editing: #{edited_settings_paths.join(' or ')}")
end

#find_pathsObject



35
36
37
38
39
40
41
# File 'lib/ab_admin/models/settings.rb', line 35

def find_paths
  [
      Rails.root.join('config', 'settings', 'settings.yml'),
      Rails.root.join('config', 'settings', "#{Rails.env}.yml"),
      @editable_path
  ].find_all { |path| File.exists?(path) }
end

#initializeObject



20
21
22
23
24
# File 'lib/ab_admin/models/settings.rb', line 20

def initialize
  @data = {}
  @editable_path = find_editable_path
  @paths = find_paths
end

#save(raw_config) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/ab_admin/models/settings.rb', line 54

def save(raw_config)
  conf = {}
  raw_config.each do |root_key, root_value|
    if root_value.is_a?(Hash)
      conf[root_key] ||= {}
      root_value.each do |key, value|
        conf[root_key][key] = case_value(value)
      end
    else
      conf[root_key] = case_value(root_value)
    end
  end
  File.open(@editable_path, 'w') { |file| file.write conf.to_yaml } and self.class.load
end