confit 0.0.5 → 1.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 +10 -6
- data/lib/confit.rb +65 -12
- data/test/complex.yml +26 -0
- data/test/confit_test.rb +20 -15
- data/test/{test.yml → simple.yml} +0 -0
- metadata +6 -6
data/README.md
CHANGED
@@ -1,18 +1,22 @@
|
|
1
|
+
**N.B. Confit 1.0 breaks backwards-compatibility with earlier versions!**
|
2
|
+
|
1
3
|
Installation
|
2
4
|
------------
|
3
5
|
* sudo gem install confit
|
4
6
|
|
5
7
|
Initialization
|
6
8
|
--------------
|
7
|
-
* require 'confit'
|
8
|
-
|
9
|
+
* `require 'confit'`
|
10
|
+
`confit('path/to/file_name.yml')`
|
9
11
|
|
10
12
|
Usage
|
11
13
|
-----
|
12
|
-
* puts confit.some_key # "The value of this key!"
|
14
|
+
* `puts confit.file_name.some_key # "The value of this key!"`
|
13
15
|
|
14
16
|
Notes
|
15
17
|
-----
|
16
|
-
* Optional initialization params include environment and
|
17
|
-
* confit('path/to/
|
18
|
-
* Strict mode raises a
|
18
|
+
* Optional initialization params include environment, strict mode, and force reload of file
|
19
|
+
* `confit('path/to/file_name.yml', 'development', true, true) # confit.file_name.key_name -- from the yaml block named "development"`
|
20
|
+
* Strict mode raises a `MissingVariableError` if that key hasn't been loaded from your yaml file.
|
21
|
+
* Force reload ensures that the file is processed, even if Confit has already seen it before. This is useful for loading multiple
|
22
|
+
environments at different times from within one file.
|
data/lib/confit.rb
CHANGED
@@ -1,9 +1,21 @@
|
|
1
1
|
require 'ostruct'
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
class InvalidFileNameError < StandardError; end
|
5
|
+
class MissingVariableError < StandardError; end
|
6
|
+
class MissingFileError < StandardError; end
|
2
7
|
|
3
8
|
module Confit
|
4
9
|
|
5
10
|
@@app_config = nil
|
6
11
|
@@strict = nil
|
12
|
+
@@files = Array.new
|
13
|
+
@@current_file_name = nil
|
14
|
+
@@debug = false
|
15
|
+
|
16
|
+
def self.debug(msg)
|
17
|
+
puts "\nDebug:\t#{msg}" if @@debug
|
18
|
+
end
|
7
19
|
|
8
20
|
def self.strict
|
9
21
|
@@strict
|
@@ -14,31 +26,72 @@ module Confit
|
|
14
26
|
end
|
15
27
|
|
16
28
|
def self.confit(file=nil, env=nil, strict=false, force=false)
|
17
|
-
|
18
|
-
|
19
|
-
|
29
|
+
self.debug("self.confit(file=#{file}, env=#{env}, strict=#{strict}, force=#{force})")
|
30
|
+
|
31
|
+
@@app_config = OpenStruct.new if not @@app_config
|
32
|
+
|
33
|
+
if not @@files.include?(file) and not file.nil?
|
34
|
+
self.debug "New file: #{file}"
|
35
|
+
self.prep_config(file)
|
36
|
+
else
|
37
|
+
self.debug "File exists: (#{force}) #{file}"
|
38
|
+
return @@app_config if not force
|
39
|
+
self.debug "Forcing reload of file"
|
40
|
+
end
|
41
|
+
|
20
42
|
@@strict = strict ? true : false
|
21
43
|
|
44
|
+
self.process_file(file, env)
|
45
|
+
|
46
|
+
@@app_config
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.prep_config(file)
|
50
|
+
file =~ /([^\/]+)\.yml$/i
|
51
|
+
raise InvalidFileNameError, "Filename is not valid: #{file}" if not $1
|
52
|
+
|
53
|
+
@@current_file_name = $1
|
54
|
+
self.debug "Current file #{@@current_file_name}"
|
55
|
+
@@files << file
|
56
|
+
@@app_config.send("#{@@current_file_name}=", OpenStruct.new)
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.process_file(file, env=nil)
|
22
60
|
if not file.nil?
|
23
61
|
if File.exist?(file)
|
24
62
|
yaml = env ? YAML.load_file(file)[env] : YAML.load_file(file)
|
25
|
-
yaml
|
26
|
-
@@app_config.send("#{self.prep_key(key)}=", val)
|
27
|
-
end
|
63
|
+
self.parse_hash(yaml, @@app_config.send(@@current_file_name))
|
28
64
|
else
|
29
|
-
raise
|
65
|
+
raise MissingFileError, "File #{file} does not exist!"
|
30
66
|
end
|
31
67
|
end
|
32
|
-
|
33
|
-
@@app_config
|
34
68
|
end
|
35
|
-
|
69
|
+
|
70
|
+
def self.load_pair(key, val, parent)
|
71
|
+
self.debug "load_pair: #{parent}.send(#{key}=, #{val})"
|
72
|
+
parent.send("#{key}=", val)
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.parse_hash(zee_hash, parent)
|
76
|
+
zee_hash.each do |key, val|
|
77
|
+
if val.is_a?(Hash)
|
78
|
+
self.debug "is a Hash #{key},#{val}"
|
79
|
+
self.load_pair(key, OpenStruct.new, parent)
|
80
|
+
self.parse_hash(val, parent.send(key))
|
81
|
+
else
|
82
|
+
self.debug "Not a Hash #{key},#{val}"
|
83
|
+
self.load_pair(key, val, parent)
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
36
89
|
end
|
37
90
|
|
38
91
|
module Kernel
|
39
92
|
|
40
93
|
def confit(file=nil, env=nil, strict=false, force=false)
|
41
|
-
Confit::confit(file, env, strict)
|
94
|
+
Confit::confit(file, env, strict, force)
|
42
95
|
end
|
43
96
|
|
44
97
|
end
|
@@ -48,7 +101,7 @@ class OpenStruct
|
|
48
101
|
def method_missing(mid, *args)
|
49
102
|
mname = mid.id2name
|
50
103
|
if mname !~ /=/
|
51
|
-
raise
|
104
|
+
raise MissingVariableError, "Confit variable not defined! #{mname}" if Confit.strict
|
52
105
|
else
|
53
106
|
len = args.length
|
54
107
|
if mname.chomp!('=')
|
data/test/complex.yml
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
jo_dev:
|
2
|
+
app_name: jo dev
|
3
|
+
api_key: theapikey
|
4
|
+
secret_key: thesecret
|
5
|
+
canvas_page_name: jo_dev_test
|
6
|
+
callback_url: http://urldoesntexist.com
|
7
|
+
page_id: 12345
|
8
|
+
app_id: 56789
|
9
|
+
page_url: http://www.facebook.com/apps/application.php?id=56789
|
10
|
+
page_tab_url: http://www.facebook.com/apps/application.php?id=56789&v=app_56789
|
11
|
+
uid: 100000981545471
|
12
|
+
|
13
|
+
poeks_dev:
|
14
|
+
app_name: poeks dev
|
15
|
+
api_key: thepoeksapikey
|
16
|
+
secret_key: thepoekssecretkey
|
17
|
+
canvas_page_name: poeks_dev_test
|
18
|
+
callback_url: http://urldontexist.com
|
19
|
+
page_id: 923048
|
20
|
+
app_id: 685490605
|
21
|
+
page_url: http://www.facebook.com/apps/application.php?id=685490605
|
22
|
+
page_tab_url: http://www.facebook.com/apps/application.php?id=685490605&v=app_685490605
|
23
|
+
uid: 655764281
|
24
|
+
a_hash:
|
25
|
+
name: the hash
|
26
|
+
value: the value
|
data/test/confit_test.rb
CHANGED
@@ -1,30 +1,35 @@
|
|
1
1
|
require File.join(File.expand_path(File.join(File.dirname(__FILE__))), '..', 'lib', 'confit')
|
2
2
|
|
3
3
|
require 'test/unit'
|
4
|
-
require 'rubygems'
|
5
4
|
|
6
5
|
class ConfitTest < Test::Unit::TestCase
|
7
|
-
|
8
|
-
def
|
9
|
-
file = File.join(File.expand_path(File.join(File.dirname(__FILE__))), '..', 'test', '
|
6
|
+
|
7
|
+
def test_missing
|
8
|
+
file = File.join(File.expand_path(File.join(File.dirname(__FILE__))), '..', 'test', 'simple.yml')
|
10
9
|
confit(file, 'dev', true)
|
10
|
+
puts "Doesn't exist: #{confit.test.your_mom}"
|
11
|
+
rescue MissingVariableError => e
|
12
|
+
assert_equal(e.class.to_s, "MissingVariableError")
|
11
13
|
end
|
12
14
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
15
|
+
def test_simple
|
16
|
+
file = File.join(File.expand_path(File.join(File.dirname(__FILE__))), '..', 'test', 'simple.yml')
|
17
|
+
confit(file, 'dev', true)
|
18
|
+
assert_equal("Poeks", confit.simple.author)
|
16
19
|
end
|
17
20
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
puts "Rescued NoMethodError for confit.your_mom!"
|
21
|
+
def test_complex
|
22
|
+
file = File.join(File.expand_path(File.join(File.dirname(__FILE__))), '..', 'test', 'complex.yml')
|
23
|
+
confit(file, nil, true)
|
24
|
+
assert_equal("the value", confit.complex.poeks_dev.a_hash.value)
|
23
25
|
end
|
24
26
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
27
|
+
def test_force
|
28
|
+
file = File.join(File.expand_path(File.join(File.dirname(__FILE__))), '..', 'test', 'complex.yml')
|
29
|
+
confit(file, 'jo_dev', true, true)
|
30
|
+
assert_equal("jo dev", confit.complex.app_name)
|
31
|
+
confit(file, 'poeks_dev', true, true)
|
32
|
+
assert_equal("poeks dev", confit.complex.app_name)
|
28
33
|
end
|
29
34
|
|
30
35
|
end
|
File without changes
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: confit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
|
9
|
-
- 5
|
10
|
-
version: 0.0.5
|
9
|
+
version: "1.0"
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Jen Oslislo
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-11-
|
17
|
+
date: 2010-11-30 00:00:00 -08:00
|
19
18
|
default_executable:
|
20
19
|
dependencies: []
|
21
20
|
|
@@ -30,8 +29,9 @@ extra_rdoc_files: []
|
|
30
29
|
|
31
30
|
files:
|
32
31
|
- lib/confit.rb
|
32
|
+
- test/complex.yml
|
33
33
|
- test/confit_test.rb
|
34
|
-
- test/
|
34
|
+
- test/simple.yml
|
35
35
|
- README.md
|
36
36
|
has_rdoc: true
|
37
37
|
homepage: https://github.com/poeks/confit
|