Class: Anyway::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/anyway/config.rb

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config_name = nil, do_load = true) ⇒ Config



33
34
35
36
# File 'lib/anyway/config.rb', line 33

def initialize(config_name=nil, do_load=true)
  @config_name = config_name || self.class.config_name
  load if do_load
end

Class Attribute Details

.config_attributesObject (readonly)

Returns the value of attribute config_attributes.



4
5
6
# File 'lib/anyway/config.rb', line 4

def config_attributes
  @config_attributes
end

.defaultsObject (readonly)

Returns the value of attribute defaults.



4
5
6
# File 'lib/anyway/config.rb', line 4

def defaults
  @defaults
end

Class Method Details

.attr_config(*args, hargs) ⇒ Object



6
7
8
9
10
# File 'lib/anyway/config.rb', line 6

def attr_config(*args,hargs)
  @defaults = hargs.dup.with_indifferent_access
  @config_attributes = args+hargs.keys
  attr_accessor *@config_attributes
end

.config_name(val = nil) ⇒ Object



12
13
14
15
# File 'lib/anyway/config.rb', line 12

def config_name(val = nil)
  return (@config_name = val.to_s) unless val.nil?
  @config_name ||= extract_name
end

.for(name) ⇒ Object

Load config as Hash by any name

Example:

my_config = Anyway::Config.for(:my_app) 
# will load data from config/my_app.yml, secrets.my_app, ENV["MY_APP_*"]


23
24
25
# File 'lib/anyway/config.rb', line 23

def for(name)
  self.new(name,false).load_from_sources
end

Instance Method Details

#clearObject



44
45
46
47
48
49
# File 'lib/anyway/config.rb', line 44

def clear
  self.class.config_attributes.each do |attr|
    self.send("#{attr}=", nil)
  end
  self
end

#loadObject



51
52
53
54
55
56
# File 'lib/anyway/config.rb', line 51

def load
  config = load_from_sources self.class.defaults.deep_dup
  config.each do |key, val| 
    self.send("#{key}=",val)
  end
end

#load_from_sources(config = {}.with_indifferent_access) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/anyway/config.rb', line 58

def load_from_sources(config={}.with_indifferent_access)        
  # then load from YAML if any
  config_path = Rails.root.join("config","#{@config_name}.yml")
  if File.file? config_path
    require 'yaml'
    config.deep_merge! (YAML.load_file(config_path)[Rails.env] || {})
  end

  # then load from Rails secrets
  if Rails.application.respond_to?(:secrets)
    config.deep_merge! (Rails.application.secrets.send(@config_name)||{})
  end

  # and then load from env
  config.deep_merge! (Anyway.env.send(@config_name) || {})
  config
end

#reloadObject



38
39
40
41
42
# File 'lib/anyway/config.rb', line 38

def reload
  clear
  load
  self
end