uber_config 0.0.6 → 1.0.0

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.
data/README.md CHANGED
@@ -1,28 +1,27 @@
1
1
  UberConfig is a config loader that will load config files from various locations.
2
2
 
3
+ # New in 1.0
4
+
5
+ - Will look for both yml AND json files
6
+ - Added :ext option to choose config extension
7
+ - Indifferent access so you can use either symbols or strings for keys
8
+
9
+ # Usage
10
+
3
11
  Just run:
4
12
 
5
13
  config = UberConfig.load
6
14
 
7
- Looks for `config.yml` file or name passed in via :file param.
15
+ It will look `config.yml` or `config.json` by default. You can change what it will look for and
16
+ where with the different load() options.
8
17
 
9
18
  Here is the order of where it looks:
10
19
 
11
20
  - $abt_config global variable (for https://github.com/iron-io/abt)
12
21
  - directory of file that calls UberConfig.load
13
22
  - working directory
14
- - TODO: look at ~/configs directory
23
+ - TODO: look at ~/configs/#{working_directory_name} directory
15
24
  - ~/Dropbox/configs/#{working_directory_name}
16
25
 
17
26
  :dir can be used to change working_directory_name.
18
27
 
19
- ## Helper methods
20
-
21
- ### Symbolize Keys
22
-
23
- When it loads up config files, the hash keys will be strings by default because they are
24
- strings in the files. You can convert them to keys by running `UberConfig.symbolize_keys!`, for example:
25
-
26
- config = UberConfig.load
27
- config = UberConfig.symbolize_keys!(config)
28
-
@@ -0,0 +1,12 @@
1
+ class UberHash < Hash
2
+
3
+ def [](key)
4
+ r = super[key]
5
+ return r if r
6
+ if r.is_a?(Symbol)
7
+ return super[key.to_s]
8
+ end
9
+ r
10
+ end
11
+
12
+ end
@@ -1,3 +1,3 @@
1
1
  module UberConfig
2
- VERSION = "0.0.6"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/uber_config.rb CHANGED
@@ -3,9 +3,13 @@ require "uber_config/version"
3
3
  module UberConfig
4
4
 
5
5
  # Load a config file from various system locations
6
+ # Options:
7
+ # :file => filename, default is 'config' which means it will look for both config.yml and config.json. You can use the full filename like 'config.json'
8
+ # :dir => directory to look for in the default locations
9
+ # :ext => extension, either yml or json. Default will check both.
6
10
  def self.load(options={})
7
11
 
8
- # First check for abt config
12
+ # First check for abt config: https://github.com/iron-io/abt
9
13
  if defined? $abt_config
10
14
  puts "$abt_config found."
11
15
  @config = $abt_config
@@ -19,13 +23,20 @@ module UberConfig
19
23
  dir = [dir]
20
24
  end
21
25
  end
22
- file = "config.yml"
23
- if options[:file]
24
- file = options[:file]
25
- end
26
26
 
27
- working_directory = Dir.pwd
28
- #puts "working_dir: " + working_directory
27
+ file = options[:file] || "config"
28
+ ext = options[:ext]
29
+ filenames = []
30
+ if file.include?(".") # then has extension
31
+ filenames << file
32
+ else
33
+ if ext
34
+ filenames << "#{file}.#{ext}"
35
+ else
36
+ filenames << "#{file}.yml"
37
+ filenames << "#{file}.json"
38
+ end
39
+ end
29
40
 
30
41
  #p Kernel.caller
31
42
  caller_file = caller[0][0...(caller[0].index(":in"))]
@@ -44,33 +55,36 @@ module UberConfig
44
55
  end
45
56
 
46
57
  # Now check near caller file
47
- dir_and_file = dir.nil? ? [] : dir.dup
48
- dir_and_file << file
49
- p dir_and_file
50
- location = File.join(dir_and_file)
51
- p location
52
- cf = File.expand_path(location, caller_dir)
53
- @config = load_from(cf)
54
- return @config if @config
55
-
56
- # and working directory
57
- cf = File.expand_path(location)
58
- @config = load_from(cf)
59
- return @config if @config
60
-
61
- puts "auto_dir_name: #{auto_dir_name}"
58
+ filenames.each do |file|
59
+ dir_and_file = dir.nil? ? [] : dir.dup
60
+ dir_and_file << file
61
+ #p dir_and_file
62
+ location = File.join(dir_and_file)
63
+ #p location
64
+ cf = File.expand_path(location, caller_dir)
65
+ @config = load_from(cf)
66
+ return @config if @config
67
+
68
+ # and working directory
69
+ cf = File.expand_path(location)
70
+ @config = load_from(cf)
71
+ return @config if @config
72
+
73
+ end
62
74
 
63
75
  # Now check in Dropbox
64
- dropbox_folders = ["~", "Dropbox", "configs"]
65
- if dir
66
- dropbox_folders = dropbox_folders + dir
67
- else
68
- dropbox_folders = dropbox_folders << auto_dir_name
76
+ filenames.each do |file|
77
+ dropbox_folders = ["~", "Dropbox", "configs"]
78
+ if dir
79
+ dropbox_folders = dropbox_folders + dir
80
+ else
81
+ dropbox_folders = dropbox_folders << auto_dir_name
82
+ end
83
+ dropbox_folders << file
84
+ cf = File.expand_path(File.join(dropbox_folders))
85
+ @config = load_from(cf)
86
+ return @config if @config
69
87
  end
70
- dropbox_folders << file
71
- cf = File.expand_path(File.join(dropbox_folders))
72
- @config = load_from(cf)
73
- return @config if @config
74
88
 
75
89
  # couldn't find it
76
90
  raise "UberConfig could not find config file!"
@@ -82,17 +96,31 @@ module UberConfig
82
96
  if File.exist?(cf)
83
97
  config = YAML::load_file(cf)
84
98
  # the following makes it indifferent access, but doesn't seem to for inner hashes
85
- #config.default_proc = proc do |h, k|
86
- # case k
87
- # when String then sym = k.to_sym; h[sym] if h.key?(sym)
88
- # when Symbol then str = k.to_s; h[str] if h.key?(str)
89
- # end
90
- #end
99
+ set_default_proc(config)
91
100
  return config
92
101
  end
93
102
  nil
94
103
  end
95
104
 
105
+ def self.set_default_proc(hash)
106
+ puts 'setting default proc'
107
+ p hash
108
+ hash.default_proc = proc do |h, k|
109
+ case k
110
+ when String
111
+ sym = k.to_sym; h[sym] if h.key?(sym)
112
+ when Symbol
113
+ str = k.to_s; h[str] if h.key?(str)
114
+ end
115
+ end
116
+ hash.each_pair do |k, v|
117
+ if v.is_a?(Hash)
118
+ set_default_proc(v)
119
+ end
120
+ end
121
+
122
+ end
123
+
96
124
  # Destructively convert all keys to symbols, as long as they respond to to_sym.
97
125
  # inspired by activesupport
98
126
  def self.symbolize_keys!(hash)
@@ -124,8 +152,10 @@ module UberConfig
124
152
  def self.make_indifferent(hash)
125
153
  hash.default_proc = proc do |h, k|
126
154
  case k
127
- when String then sym = k.to_sym; h[sym] if h.key?(sym)
128
- when Symbol then str = k.to_s; h[str] if h.key?(str)
155
+ when String then
156
+ sym = k.to_sym; h[sym] if h.key?(sym)
157
+ when Symbol then
158
+ str = k.to_s; h[str] if h.key?(str)
129
159
  end
130
160
  end
131
161
  end
data/test/config.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "jsonx": "value"
3
+ }
data/test/config.yml ADDED
@@ -0,0 +1,4 @@
1
+ ymlx: value
2
+
3
+ outer:
4
+ inner: inside
data/test/config2.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "jsonx": "value2"
3
+ }
@@ -7,6 +7,23 @@ class TestUberConfig < Test::Unit::TestCase
7
7
  def test_loading
8
8
  @config = UberConfig.load
9
9
  p @config
10
+
11
+ assert_equal "value", @config['ymlx']
12
+ assert_equal "value", @config[:ymlx]
13
+ p @config[:outer]
14
+ assert_equal "inside", @config[:outer][:inner]
15
+
16
+ @config = UberConfig.load(:ext=>'json')
17
+ p @config
18
+ assert_equal "value", @config['jsonx']
19
+ assert_equal "value", @config[:jsonx]
20
+
21
+ @config = UberConfig.load(:file=>"config2")
22
+ p @config
23
+ assert_equal "value2", @config['jsonx']
24
+ assert_equal "value2", @config[:jsonx]
25
+
26
+
10
27
  end
11
28
 
12
29
  def test_symbolize
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uber_config
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-20 00:00:00.000000000 Z
12
+ date: 2012-09-25 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Loads configs from common locations.
15
15
  email:
@@ -23,7 +23,11 @@ files:
23
23
  - README.md
24
24
  - Rakefile
25
25
  - lib/uber_config.rb
26
+ - lib/uber_config/uber_hash.rb
26
27
  - lib/uber_config/version.rb
28
+ - test/config.json
29
+ - test/config.yml
30
+ - test/config2.json
27
31
  - test/test_uber_config.rb
28
32
  - uber_config.gemspec
29
33
  homepage: ''