enfig 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/enfig.rb +82 -0
  3. metadata +44 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6ccb02c60cdf0585d71aba41b5a42dc23307e422
4
+ data.tar.gz: 0ec650247a06b91fa07da600ed311e2611b9ebba
5
+ SHA512:
6
+ metadata.gz: 402f541327e906055729ccac38e37547cc9b558c11a8a57af78c8aa138cf485496c0fd128bf77eb35b3241cdaa9dd3a933096c523508eb74d696ad980ba65af4
7
+ data.tar.gz: 82f0993f267732c09efc54b91ee96746a47d00e8a09b72b2f895c5aa84554d9d0f65fc3190d146c9179a2a0cc77a4209a924723504ecc2975f559ae5f0b4d706
@@ -0,0 +1,82 @@
1
+ require 'yaml'
2
+
3
+ class Enfig
4
+
5
+ attr_accessor :env, :root, :files, :enable_overwrite
6
+
7
+ alias_method :'overwrite?', :enable_overwrite
8
+
9
+ def initialize(args = {})
10
+ @config = nil
11
+ @env = args[:env] || 'development'
12
+ @root = args[:root] || '.'
13
+ @files = args[:files] || [args[:file]].compact
14
+ @enable_overwrite = args[:overwrite] == false ? false : true
15
+ end
16
+
17
+ def config
18
+ @config ||= load_config
19
+ end
20
+
21
+ def [](key)
22
+ config[key]
23
+ end
24
+
25
+ def load_config
26
+ conf = {}
27
+
28
+ files.each do |file|
29
+ name = File.basename(file, '.yml').to_s.downcase.to_sym
30
+ conf[name] = load_yaml(file)
31
+ end
32
+
33
+ conf
34
+ end
35
+
36
+ def update_env!
37
+ load_env_hash(config).each do |k, v|
38
+ ENV[k] = v if ENV[k].nil? || ENV[k] == '' || overwrite?
39
+ end
40
+ end
41
+
42
+ def self.update!(args = {})
43
+ enfig = Enfig.new(args)
44
+ enfig.update_env!
45
+ enfig
46
+ end
47
+
48
+ private
49
+
50
+ def load_yaml(*args)
51
+ config = YAML.load_file(File.join(root, *args))
52
+ symbolize_keys(config[env])
53
+ end
54
+
55
+ def load_env_hash(config_src, target = {}, prefix = nil)
56
+ prefix.concat('_') if prefix && !prefix.end_with?('_')
57
+ config_src.each do |key, value|
58
+ suffix = key.to_s.upcase
59
+ target_key = "#{prefix}#{suffix}"
60
+ if value.is_a?(Hash)
61
+ load_env_hash(value, target, target_key)
62
+ else
63
+ target[target_key] = value
64
+ end
65
+ end
66
+
67
+ target
68
+ end
69
+
70
+ def symbolize_keys(hash)
71
+ transform_keys(hash) { |key| key.to_sym rescue key }
72
+ end
73
+
74
+ def transform_keys(hash, &block)
75
+ result = {}
76
+ hash.each do |key, value|
77
+ result[yield(key)] = value.is_a?(Hash) ? transform_keys(value, &block) : value
78
+ end
79
+ result
80
+ end
81
+
82
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: enfig
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Arturo Guzman
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-08-05 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Sets ENV values from a group of YAML files
14
+ email: arturo@kisurfer.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/enfig.rb
20
+ homepage: http://github.com/guzart/enfig
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.0.2
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: ENV values for your project
44
+ test_files: []