konfa 0.0.2 → 0.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.
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
-