confit 1.0.2 → 1.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.
- 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:
|