konfa 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/konfa.rb +58 -29
  2. metadata +19 -40
@@ -3,25 +3,59 @@ require 'yaml'
3
3
 
4
4
  module Konfa
5
5
  class Base
6
+ class << self
7
+ protected
6
8
 
7
- @@env_variable_prefix = 'APP_'
8
- @@variables = {}
9
+ #
10
+ # The following methods are not a part of the public API. You may sublcass
11
+ # them, but remember that unless you scope them as protected or private,
12
+ # they will then be public
13
+ #
9
14
 
10
- class << self
15
+ attr_writer :configuration
11
16
 
12
- def get(variable)
13
- raise UnsupportedVariableError.new(variable) unless @@variables.has_key? variable
14
- @@variables[variable]
17
+ def configuration
18
+ @configuration ||= self.allowed_variables
19
+ end
20
+
21
+ def truthy?(value)
22
+ (!value.nil? && value =~ /^\s*(?:true|1|yes|on)\s*$/i) ? true : false
23
+ end
24
+
25
+ def store(key, value)
26
+ key = key.to_sym
27
+ raise UnsupportedVariableError.new(key) unless self.configuration.has_key? key
28
+ self.configuration[key] = value.to_s
15
29
  end
16
30
 
17
- def set(variable, value = nil)
18
- raise UnsupportedVariableError.new(variable) unless @@variables.has_key? variable
19
- @@variables[variable] = value
31
+ public
32
+
33
+
34
+ #
35
+ # The following methods should be overridden and used to configure the
36
+ # configuration class
37
+ #
38
+
39
+ def env_variable_prefix
40
+ 'APP_'
41
+ end
42
+
43
+ def allowed_variables
44
+ {}
45
+ end
46
+
47
+
48
+ #
49
+ # The following methods provides the interface to this class
50
+ #
51
+
52
+ def get(variable)
53
+ raise UnsupportedVariableError.new(variable) unless self.configuration.has_key? variable
54
+ self.configuration[variable]
20
55
  end
21
56
 
22
57
  def true?(variable)
23
- v = self.get(variable)
24
- (!v.nil? && v =~ /^\s*(?:true|1|yes|on)\s*$/i) ? true : false
58
+ self.truthy?(self.get(variable))
25
59
  end
26
60
 
27
61
  def false?(variable)
@@ -29,15 +63,11 @@ module Konfa
29
63
  end
30
64
 
31
65
  def variables
32
- @@variables.keys
66
+ self.configuration.keys
33
67
  end
34
68
 
35
69
  def dump
36
- @@variables.dup
37
- end
38
-
39
- def env_variable_prefix
40
- @@env_variable_prefix
70
+ self.configuration.dup
41
71
  end
42
72
 
43
73
  def initialize_from_yaml(path)
@@ -47,23 +77,22 @@ module Konfa
47
77
 
48
78
  yaml_data = YAML.load_file(path)
49
79
  yaml_data.each do |variable, value|
50
- raise UnsupportedVariableError.new(variable) unless @@variables.has_key? variable.to_sym
51
- set(variable.to_sym, value.to_s)
80
+ self.store(variable, value)
52
81
  end
82
+
53
83
  after_initialize
54
84
  dump
55
85
  end
56
86
 
57
- def initialize_from_env(prefix=@@env_variable_prefix)
87
+ def initialize_from_env
88
+ conf_prefix = self.env_variable_prefix.upcase
89
+
58
90
  ENV.keys.reject { |key|
59
- key !~ /^#{prefix}/ # Ignore everything that doesn't match the prefix
91
+ key !~ /^#{conf_prefix}/ # Ignore everything that doesn't match the prefix
60
92
  }.each { |key|
61
- variable = key[prefix.size..-1].downcase.to_sym
62
- unless @@variables.has_key? variable
63
- raise UnsupportedVariableError.new(variable)
64
- end
93
+ variable = key[conf_prefix.size..-1].downcase
65
94
 
66
- set(variable, ENV[key])
95
+ self.store(variable, ENV[key])
67
96
  }
68
97
  after_initialize
69
98
  dump
@@ -73,13 +102,13 @@ module Konfa
73
102
  end
74
103
 
75
104
  def with_config(overrides={})
76
- originals = dump
77
- overrides.each_pair {|k,v| self.set(k, v) }
105
+ original_config = dump
106
+ overrides.each_pair {|k,v| self.store(k, v) }
78
107
 
79
108
  begin
80
109
  result = yield
81
110
  ensure
82
- @@variables = originals
111
+ self.configuration = original_config
83
112
  end
84
113
 
85
114
  result
metadata CHANGED
@@ -1,68 +1,47 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: konfa
3
- version: !ruby/object:Gem::Version
4
- hash: 27
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 2
10
- version: 0.0.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Gunnar Hansson
14
9
  - Avidity
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2013-09-20 00:00:00 +02:00
20
- default_executable:
13
+ date: 2014-03-24 00:00:00.000000000 Z
21
14
  dependencies: []
22
-
23
15
  description: Helps you avoid common pitfalls when dealing with app config
24
16
  email: code@avidiy.se
25
17
  executables: []
26
-
27
18
  extensions: []
28
-
29
19
  extra_rdoc_files: []
30
-
31
- files:
20
+ files:
32
21
  - lib/konfa.rb
33
- has_rdoc: true
34
22
  homepage: http://github.com/avidity/konfa
35
- licenses:
23
+ licenses:
36
24
  - MIT
37
25
  post_install_message:
38
26
  rdoc_options: []
39
-
40
- require_paths:
27
+ require_paths:
41
28
  - lib
42
- required_ruby_version: !ruby/object:Gem::Requirement
29
+ required_ruby_version: !ruby/object:Gem::Requirement
43
30
  none: false
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- hash: 3
48
- segments:
49
- - 0
50
- version: "0"
51
- required_rubygems_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
36
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
60
41
  requirements: []
61
-
62
42
  rubyforge_project:
63
- rubygems_version: 1.6.2
43
+ rubygems_version: 1.8.23
64
44
  signing_key:
65
45
  specification_version: 3
66
46
  summary: Application configuration
67
47
  test_files: []
68
-