confit 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/confit.rb +44 -41
- data/lib/confit/kernel.rb +3 -3
- data/test/complex.yml +9 -1
- data/test/confit_test.rb +46 -17
- metadata +25 -49
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2013b7e542bcf8dc35acdd6452fe262bf0707b1b
|
4
|
+
data.tar.gz: fdecbc102cba8a0293f062749420ead9ad495462
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0ae85fe63e62917f8f35a3ad887447f3f0a0487ecfeceaff1eddfcf34f4eb27eb3dbbbbbade19c95da71f7d50e27d07a88f4b954cecd5ce7522e42fa1df41d74
|
7
|
+
data.tar.gz: 5b2726193ef4926eb8f9833965c9ce7d26a4ef2ec0fecd4b27d3aea10892e4e6611a885fb296ac4c603a7535168ba82ddebc143c66c8a5f43a81df36c2128108
|
data/lib/confit.rb
CHANGED
@@ -1,86 +1,82 @@
|
|
1
1
|
require 'ostruct'
|
2
2
|
require 'rubygems'
|
3
|
-
require 'extlib'
|
4
3
|
|
5
4
|
class InvalidFileNameError < StandardError; end
|
6
5
|
class MissingVariableError < StandardError; end
|
7
6
|
class MissingFileError < StandardError; end
|
8
7
|
|
9
8
|
module Confit
|
10
|
-
|
9
|
+
|
11
10
|
@@app_config = nil
|
12
|
-
@@strict =
|
11
|
+
@@strict = false
|
13
12
|
@@files = Array.new
|
14
13
|
@@current_file_name = nil
|
15
14
|
@@debug = false
|
16
|
-
|
17
|
-
|
18
|
-
@@debug = bool
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.debug
|
22
|
-
@@debug
|
23
|
-
end
|
24
|
-
|
15
|
+
@@default_opts = lambda { return {:strict => @@strict, :force => false} }
|
16
|
+
|
25
17
|
def self.debug(msg)
|
26
18
|
puts "\nDebug:\t#{msg}" if @@debug
|
27
19
|
end
|
28
|
-
|
20
|
+
|
29
21
|
def self.strict
|
30
22
|
@@strict
|
31
23
|
end
|
32
24
|
|
33
|
-
def self.
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
self.debug("self.confit(file=#{file}, env=#{env}, strict=#{strict}, force=#{force})")
|
39
|
-
|
40
|
-
@@app_config
|
41
|
-
|
25
|
+
def self.confit(*args, &block)
|
26
|
+
file = args.shift
|
27
|
+
opts = (args.last and args.last.is_a? Hash) ? args.pop : @@default_opts.call
|
28
|
+
env = (args && args.compact) || []
|
29
|
+
|
30
|
+
self.debug("self.confit(file=#{file}, env=#{env}, strict=#{opts[:strict]}, force=#{opts[:force]})")
|
31
|
+
|
32
|
+
@@app_config ||= OpenStruct.new
|
33
|
+
|
42
34
|
if not @@files.include?(file) and not file.nil?
|
43
35
|
self.debug "New file: #{file}"
|
44
36
|
self.prep_config(file)
|
45
37
|
else
|
46
|
-
self.debug "File exists: (#{force}) #{file}"
|
47
|
-
return @@app_config
|
38
|
+
self.debug "File exists: (#{opts[:force]}) #{file}"
|
39
|
+
return @@app_config unless opts[:force]
|
48
40
|
self.debug "Forcing reload of file"
|
49
41
|
end
|
50
|
-
|
51
|
-
@@strict = strict ? true : false
|
52
|
-
|
53
|
-
self.process_file(file, env)
|
42
|
+
|
43
|
+
@@strict = opts[:strict] ? true : false
|
44
|
+
|
45
|
+
self.process_file(file, env, &block)
|
54
46
|
|
55
47
|
@@app_config
|
56
48
|
end
|
57
|
-
|
49
|
+
|
58
50
|
def self.prep_config(file)
|
59
51
|
file =~ /([^\/]+)\.yml$/i
|
60
52
|
raise InvalidFileNameError, "Filename is not valid: #{file}" if not $1
|
61
|
-
|
53
|
+
|
62
54
|
@@current_file_name = $1
|
63
55
|
self.debug "Current file #{@@current_file_name}"
|
64
56
|
@@files << file
|
65
|
-
@@app_config.send("#{@@current_file_name}=", OpenStruct.new)
|
57
|
+
@@app_config.send("#{@@current_file_name}=", OpenStruct.new)
|
66
58
|
end
|
67
|
-
|
59
|
+
|
68
60
|
def self.process_file(file, env=nil)
|
69
61
|
if not file.nil?
|
70
62
|
if File.exist?(file)
|
71
|
-
yaml = env ? YAML.load_file(file)[env] : YAML.load_file(file)
|
63
|
+
#yaml = env ? YAML.load_file(file)[env] : YAML.load_file(file)
|
64
|
+
yaml = YAML.load_file(file)
|
65
|
+
env.each {|key| yaml = yaml[key.to_s]}
|
66
|
+
yield yaml if block_given?
|
72
67
|
self.parse_hash(yaml, @@app_config.send(@@current_file_name))
|
73
68
|
else
|
74
69
|
raise MissingFileError, "File #{file} does not exist!"
|
75
70
|
end
|
76
71
|
end
|
77
72
|
end
|
78
|
-
|
73
|
+
|
79
74
|
def self.load_pair(key, val, parent)
|
80
|
-
|
81
|
-
parent.send(
|
75
|
+
_key = key.gsub /\s+/, '_'
|
76
|
+
self.debug "load_pair: #{parent}.send(#{_key}=, #{val})"
|
77
|
+
parent.send("#{_key}=", val)
|
82
78
|
end
|
83
|
-
|
79
|
+
|
84
80
|
def self.parse_hash(zee_hash, parent)
|
85
81
|
zee_hash.each do |key, val|
|
86
82
|
if val.is_a?(Hash)
|
@@ -91,14 +87,21 @@ module Confit
|
|
91
87
|
self.debug "Not a Hash #{key},#{val}"
|
92
88
|
self.load_pair(key, val, parent)
|
93
89
|
end
|
94
|
-
|
90
|
+
|
95
91
|
end
|
96
92
|
end
|
97
|
-
|
93
|
+
|
94
|
+
def self.reset!
|
95
|
+
@@app_config = nil
|
96
|
+
@@strict = false
|
97
|
+
@@files = Array.new
|
98
|
+
@@current_file_name = nil
|
99
|
+
end
|
100
|
+
|
98
101
|
end
|
99
102
|
|
100
103
|
class OpenStruct
|
101
|
-
|
104
|
+
|
102
105
|
def method_missing(mid, *args)
|
103
106
|
mname = mid.id2name
|
104
107
|
if mname !~ /=/
|
@@ -117,5 +120,5 @@ class OpenStruct
|
|
117
120
|
end
|
118
121
|
end
|
119
122
|
end
|
120
|
-
|
123
|
+
|
121
124
|
end
|
data/lib/confit/kernel.rb
CHANGED
data/test/complex.yml
CHANGED
data/test/confit_test.rb
CHANGED
@@ -1,35 +1,64 @@
|
|
1
1
|
require File.join(File.expand_path(File.join(File.dirname(__FILE__))), '..', 'lib', 'confit')
|
2
2
|
|
3
3
|
require 'test/unit'
|
4
|
+
require 'yaml'
|
4
5
|
|
5
6
|
class ConfitTest < Test::Unit::TestCase
|
6
7
|
|
8
|
+
@@simple = File.join(File.expand_path(File.join(File.dirname(__FILE__))), 'simple.yml')
|
9
|
+
@@complex = File.join(File.expand_path(File.join(File.dirname(__FILE__))), 'complex.yml')
|
10
|
+
|
11
|
+
def setup
|
12
|
+
Confit.reset!
|
13
|
+
end
|
14
|
+
|
7
15
|
def test_missing
|
8
|
-
|
9
|
-
|
10
|
-
puts "Doesn't exist: #{confit.test.your_mom}"
|
16
|
+
Confit::confit(@@simple, 'dev', :strict => true)
|
17
|
+
puts "Doesn't exist: #{Confit::confit.test.your_mom}"
|
11
18
|
rescue MissingVariableError => e
|
12
19
|
assert_equal(e.class.to_s, "MissingVariableError")
|
13
20
|
end
|
14
|
-
|
21
|
+
|
15
22
|
def test_simple
|
16
|
-
|
17
|
-
|
18
|
-
assert_equal("Poeks", confit.simple.author)
|
23
|
+
Confit::confit(@@simple, 'dev', :strict => true)
|
24
|
+
assert_equal("Poeks", Confit::confit.simple.author)
|
19
25
|
end
|
20
26
|
|
21
27
|
def test_complex
|
22
|
-
|
23
|
-
|
24
|
-
assert_equal("the value", confit.complex.poeks_dev.a_hash.value)
|
28
|
+
Confit::confit(@@complex, nil, :strict => true)
|
29
|
+
assert_equal("the value", Confit::confit.complex.poeks_dev.a_hash.value)
|
25
30
|
end
|
26
|
-
|
31
|
+
|
27
32
|
def test_force
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
+
Confit::confit(@@complex, 'jo_dev', :strict => true, :force => true)
|
34
|
+
assert_equal("jo dev", Confit::confit.complex.app_name)
|
35
|
+
Confit::confit(@@complex, 'poeks_dev', :strict => true, :force => true)
|
36
|
+
assert_equal("poeks dev", Confit::confit.complex.app_name)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_key_with_spaces
|
40
|
+
Confit::confit(@@simple, 'dev', :strict => true)
|
41
|
+
assert_equal "Now underscores", Confit::confit.simple.a_key_with_spaces
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_nesting
|
45
|
+
Confit::confit(@@complex, 'foo', 'bar', :strict => false)
|
46
|
+
assert_equal 1, Confit::confit.complex.num
|
47
|
+
assert_equal false, Confit::confit.complex.boo
|
48
|
+
Confit::confit(@@complex, 'foo', 'baz', :force => true)
|
49
|
+
assert_equal 2, Confit::confit.complex.num
|
50
|
+
assert_equal true, Confit::confit.complex.boo
|
33
51
|
end
|
34
|
-
|
52
|
+
|
53
|
+
def test_block
|
54
|
+
Confit::confit @@complex, 'foo', 'bar', :strict => false do |pre_parse_hash|
|
55
|
+
pre_parse_hash['boo_is_false'] = !pre_parse_hash['boo']
|
56
|
+
end
|
57
|
+
assert Confit::confit.complex.boo_is_false
|
58
|
+
Confit::confit @@complex, 'foo', 'baz', :force => true do |pre_parse_hash|
|
59
|
+
pre_parse_hash['boo_is_false'] = !pre_parse_hash['boo']
|
60
|
+
end
|
61
|
+
assert !Confit::confit.complex.boo_is_false
|
62
|
+
end
|
63
|
+
|
35
64
|
end
|
metadata
CHANGED
@@ -1,75 +1,51 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: confit
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 2
|
10
|
-
version: 1.0.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Jen Oslislo
|
8
|
+
- Kenichi Nakamura
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
date: 2011-07-12 00:00:00 -07:00
|
19
|
-
default_executable:
|
12
|
+
date: 2015-08-02 00:00:00.000000000 Z
|
20
13
|
dependencies: []
|
21
|
-
|
22
14
|
description: A teeny, tiny configuration manager for YAML config files.
|
23
|
-
email:
|
24
|
-
- twitterpoeks@gmail.com
|
15
|
+
email:
|
16
|
+
- twitterpoeks@gmail.com, kenichi.nakamura@gmail.com
|
25
17
|
executables: []
|
26
|
-
|
27
18
|
extensions: []
|
28
|
-
|
29
19
|
extra_rdoc_files: []
|
30
|
-
|
31
|
-
|
32
|
-
- lib/confit/kernel.rb
|
20
|
+
files:
|
21
|
+
- README.md
|
33
22
|
- lib/confit.rb
|
23
|
+
- lib/confit/kernel.rb
|
34
24
|
- test/complex.yml
|
35
25
|
- test/confit_test.rb
|
36
26
|
- test/simple.yml
|
37
|
-
- README.md
|
38
|
-
has_rdoc: true
|
39
27
|
homepage: https://github.com/poeks/confit
|
40
28
|
licenses: []
|
41
|
-
|
29
|
+
metadata: {}
|
42
30
|
post_install_message:
|
43
31
|
rdoc_options: []
|
44
|
-
|
45
|
-
require_paths:
|
32
|
+
require_paths:
|
46
33
|
- lib
|
47
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
hash: 23
|
62
|
-
segments:
|
63
|
-
- 1
|
64
|
-
- 3
|
65
|
-
- 6
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - '>='
|
42
|
+
- !ruby/object:Gem::Version
|
66
43
|
version: 1.3.6
|
67
44
|
requirements: []
|
68
|
-
|
69
45
|
rubyforge_project: confit
|
70
|
-
rubygems_version:
|
46
|
+
rubygems_version: 2.4.8
|
71
47
|
signing_key:
|
72
|
-
specification_version:
|
48
|
+
specification_version: 4
|
73
49
|
summary: A teeny, tiny configuration manager for YAML config files.
|
74
50
|
test_files: []
|
75
|
-
|
51
|
+
has_rdoc:
|