config_logic 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README.md +159 -0
  2. data/lib/config_logic/file_cache.rb +1 -1
  3. metadata +42 -52
  4. data/README.rdoc +0 -159
data/README.md ADDED
@@ -0,0 +1,159 @@
1
+ # Config Logic
2
+
3
+ Config Logic is a configuration management tool for Ruby/Rails applications. It
4
+ wraps any set of config files in a managed access layer which supports
5
+
6
+ * caching
7
+ * multi argument, hash style, or dot style access
8
+ * ordered overlays
9
+ * dynamic or static multiplexing
10
+
11
+
12
+ ## Requirements
13
+
14
+ The following gems will be installed along with config_logic
15
+
16
+ * activesupport (2.2.2+)
17
+ * buffered_logger (0.1.2+)
18
+
19
+
20
+ ## Installation
21
+
22
+ gem install config_logic
23
+
24
+
25
+ ## Usage
26
+
27
+ Imagine that your application has a config directory with the following layout,
28
+
29
+ config/config_prod.yml -->
30
+
31
+ :key1: 1
32
+ :key2: 2
33
+ :key3: 3
34
+
35
+ config/config_dev.yml -->
36
+
37
+ :key1: 11
38
+ :key2: 12
39
+ :key3: 13
40
+
41
+ config/dir1/config_prod.yml -->
42
+
43
+ :key1: 11
44
+ :key2: 12
45
+ :key3: 13
46
+
47
+ config/dir1/config_dev.yml -->
48
+
49
+ :key4: 1
50
+ :key5: 2
51
+ :key6: 3
52
+
53
+
54
+ ### Initialization
55
+
56
+ c = ConfigLogic.new('path/to/config/dir')
57
+ c = ConfigLogic.new(['path1', 'path2'])
58
+
59
+
60
+ ### Data Access
61
+
62
+ c.config.key1 => 1
63
+ c[:config][:key1] => 1
64
+ c['config']['key1'] => 1
65
+ c(:config, :key1) => 1
66
+ c('config', 'key1') => 1
67
+ c.unknown => nil
68
+ c.config.unknown => nil
69
+
70
+
71
+ ### Rebuilding the Config Cache
72
+
73
+ c.reload!
74
+
75
+
76
+ ### Applying Overlays
77
+
78
+ An Overlay allows multiple config values to be merged in a specified order. The
79
+ merge order is determined by the order of the key names in the :inputs parameter.
80
+
81
+ #### Global
82
+
83
+ c = ConfigLogic.new('path/to/config/dir', :overlays => [ { :name => 'config',
84
+ :inputs => [:config_prod, :config_dev] } ] )
85
+ c.config.key1 => 11
86
+ c.config.key2 => 12
87
+ c.config.key3 => 13
88
+ c.config.dir1.key1 => 11
89
+ c.config.dir1.key2 => 12
90
+ c.config.dir1.key3 => 13
91
+ c.config.dir1.key4 => 1
92
+ c.config.dir1.key5 => 2
93
+ c.config.dir1.key6 => 3
94
+
95
+ #### Local
96
+
97
+ c.config.insert_overlay( { :name => 'config',
98
+ :inputs => [:config_prod, :config_dev] } )
99
+ c.config.key1 => 11
100
+ c.config.key2 => 12
101
+ c.config.key3 => 13
102
+ c.config.dir1.key1 => 1
103
+ c.config.dir1.key2 => 2
104
+ c.config.dir1.key3 => 3
105
+ c.config.dir1.key4 => nil
106
+
107
+
108
+ ### Applying Multiplexers
109
+
110
+ A multiplexer groups multiple config values and uses the result of a supplied code
111
+ block to choose the appropriate one. Multiplexers can be static or dynamic. A
112
+ static multiplexer is evaluated when it is created and its result replaces the
113
+ key group specified. A dynamic multiplexer is evaluated every time it's called.
114
+ Multiplexers are static by default.
115
+
116
+
117
+ #### Global
118
+
119
+ c = ConfigLogic.new('path/to/config/dir', :multiplexers => [ { :name => 'key',
120
+ :selector => Proc.new {1 + 1 },
121
+ :inputs => {1 => :key1, 2 => :key2, 3 => :key3} } ] )
122
+ c.config.key => 2
123
+ c.config.key1 => nil
124
+ c.config.key2 => nil
125
+ c.config.key3 => nil
126
+ c.config.dir1.key => 2
127
+ c.config.dir1.key1 => nil
128
+ c.config.dir1.key2 => nil
129
+ c.config.dir1.key3 => nil
130
+
131
+ #### Local
132
+
133
+ c.config.insert_multiplexer({ :name => 'key',
134
+ :selector => Proc.new {1 + 1 },
135
+ :inputs => {1 => :key1, 2 => :key2, 3 => :key3} })
136
+ c.config.key => 2
137
+ c.config.key1 => nil
138
+ c.config.key2 => nil
139
+ c.config.key3 => nil
140
+ c.config.dir1.key => nil
141
+ c.config.dir1.key1 => 1
142
+ c.config.dir1.key2 => 2
143
+ c.config.dir1.key3 => 3
144
+
145
+ #### Static vs Dynamic
146
+
147
+ A dynamic multiplexer will re-evaluate the selecor proc every time it's called
148
+
149
+ c.config.insert_multiplexer({ :name => 'key',
150
+ :static => false,
151
+ :selector => Proc.new { rand(3) + 1 },
152
+ :inputs => {1 => :key1, 2 => :key2, 3 => :key3} })
153
+ c.config.key => 2 = time = 0
154
+ c.config.key => 1 = time = 0 + n
155
+
156
+
157
+ ## Credits
158
+
159
+ Inspired by RConfig (Rahmal Conda) / activeconfig (Enova Financial)
@@ -53,7 +53,7 @@ private
53
53
 
54
54
  begin
55
55
  parser.call(path)
56
- rescue => e
56
+ rescue Exception => e
57
57
  log.warn "#{RED} #{path} #{RESET} is not a valid config file"
58
58
  end
59
59
  end
metadata CHANGED
@@ -1,97 +1,87 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: config_logic
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
4
5
  prerelease:
5
- version: 0.1.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Alex Skryl
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-08-17 00:00:00 -05:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2012-07-31 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: activesupport
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70304940575640 !ruby/object:Gem::Requirement
20
17
  none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
24
21
  version: 2.2.2
25
22
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: buffered_logger
29
23
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70304940575640
25
+ - !ruby/object:Gem::Dependency
26
+ name: buffered_logger
27
+ requirement: &70304940574720 !ruby/object:Gem::Requirement
31
28
  none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
35
32
  version: 0.1.2
36
33
  type: :runtime
37
- version_requirements: *id002
34
+ prerelease: false
35
+ version_requirements: *70304940574720
38
36
  description: An intuitive configuration access layer
39
37
  email: rut216@gmail.com
40
38
  executables: []
41
-
42
39
  extensions: []
43
-
44
40
  extra_rdoc_files: []
45
-
46
- files:
47
- - lib/config_logic.rb
48
- - lib/config_logic/logger.rb
49
- - lib/config_logic/config_logic.rb
50
- - lib/config_logic/logic_element.rb
41
+ files:
51
42
  - lib/config_logic/cache.rb
52
- - lib/config_logic/tree_cache.rb
53
- - lib/config_logic/file_cache.rb
54
- - lib/config_logic/multiplexer.rb
43
+ - lib/config_logic/config_logic.rb
55
44
  - lib/config_logic/core_ext/array.rb
56
45
  - lib/config_logic/core_ext/class.rb
46
+ - lib/config_logic/file_cache.rb
47
+ - lib/config_logic/logger.rb
48
+ - lib/config_logic/logic_element.rb
49
+ - lib/config_logic/multiplexer.rb
57
50
  - lib/config_logic/overlay.rb
51
+ - lib/config_logic/tree_cache.rb
52
+ - lib/config_logic.rb
58
53
  - spec/cache_spec.rb
54
+ - spec/config_logic_spec.rb
59
55
  - spec/file_cache_spec.rb
60
56
  - spec/logic_element_spec.rb
61
57
  - spec/multiplexer_spec.rb
62
58
  - spec/overlay_spec.rb
63
- - spec/config_logic_spec.rb
64
59
  - spec/spec_helper.rb
65
60
  - spec/tree_cache_spec.rb
66
- - README.rdoc
61
+ - README.md
67
62
  - TODO
68
- has_rdoc: true
69
63
  homepage: http://github.com/skryl
70
64
  licenses: []
71
-
72
65
  post_install_message:
73
66
  rdoc_options: []
74
-
75
- require_paths:
67
+ require_paths:
76
68
  - lib
77
- required_ruby_version: !ruby/object:Gem::Requirement
69
+ required_ruby_version: !ruby/object:Gem::Requirement
78
70
  none: false
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: "0"
83
- required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ! '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
76
  none: false
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: "0"
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
89
81
  requirements: []
90
-
91
82
  rubyforge_project:
92
- rubygems_version: 1.6.2
83
+ rubygems_version: 1.8.15
93
84
  signing_key:
94
85
  specification_version: 3
95
86
  summary: A configuration access layer for Ruby/Rails applications
96
87
  test_files: []
97
-
data/README.rdoc DELETED
@@ -1,159 +0,0 @@
1
- = Config Logic
2
-
3
- Config Logic is a configuration management tool for Ruby/Rails applications. It
4
- wraps any set of config files in a managed access layer which supports
5
-
6
- * caching
7
- * multi argument, hash style, or dot style access
8
- * ordered overlays
9
- * dynamic or static multiplexing
10
-
11
-
12
- == Requirements
13
-
14
- The following gems will be installed along with config_logic
15
-
16
- * activesupport (2.2.2+)
17
- * buffered_logger (0.1.2+)
18
-
19
-
20
- == Installation
21
-
22
- gem install config_logic
23
-
24
-
25
- == Usage
26
-
27
- Imagine that your application has a config directory with the following layout,
28
-
29
- config/config_prod.yml -->
30
-
31
- :key1: 1
32
- :key2: 2
33
- :key3: 3
34
-
35
- config/config_dev.yml -->
36
-
37
- :key1: 11
38
- :key2: 12
39
- :key3: 13
40
-
41
- config/dir1/config_prod.yml -->
42
-
43
- :key1: 11
44
- :key2: 12
45
- :key3: 13
46
-
47
- config/dir2/config_dev.yml -->
48
-
49
- :key4: 1
50
- :key5: 2
51
- :key6: 3
52
-
53
-
54
- === Initialization
55
-
56
- c = ConfigLogic.new('path/to/config/dir')
57
- c = ConfigLogic.new(['path1', 'path2'])
58
-
59
-
60
- === Data Access
61
-
62
- c.config.key1 => 1
63
- c[:config][:key1] => 1
64
- c['config']['key1'] => 1
65
- c(:config, :key1) => 1
66
- c('config', 'key1') => 1
67
- c.unknown => nil
68
- c.config.unknown => nil
69
-
70
-
71
- === Rebuilding the Config Cache
72
-
73
- c.reload!
74
-
75
-
76
- === Applying Overlays
77
-
78
- An Overlay allows multiple config values to be merged in a specified order. The
79
- merge order is determined by the order of the key names in the :inputs parameter.
80
-
81
- ==== Global
82
-
83
- c = ConfigLogic.new('path/to/config/dir', :overlays => [ { :name => 'config',
84
- :inputs => [:config_prod, :config_dev] } ] )
85
- c.config.key1 => 11
86
- c.config.key2 => 12
87
- c.config.key3 => 13
88
- c.config.dir1.key1 => 11
89
- c.config.dir1.key2 => 12
90
- c.config.dir1.key3 => 13
91
- c.config.dir1.key4 => 1
92
- c.config.dir1.key5 => 2
93
- c.config.dir1.key6 => 3
94
-
95
- ==== Local
96
-
97
- c.config.insert_overlay( { :name => 'config',
98
- :inputs => [:config_prod, :config_dev] } )
99
- c.config.key1 => 11
100
- c.config.key2 => 12
101
- c.config.key3 => 13
102
- c.config.dir1.key1 => 1
103
- c.config.dir1.key2 => 2
104
- c.config.dir1.key3 => 3
105
- c.config.dir1.key4 => nil
106
-
107
-
108
- === Applying Multiplexers
109
-
110
- A multiplexer groups multiple config values and uses the result of a supplied code
111
- block to choose the appropriate one. Multiplexers can be static or dynamic. A
112
- static multiplexer is evaluated when it is created and its result replaces the
113
- key group specified. A dynamic multiplexer is evaluated every time it's called.
114
- Multiplexers are static by default.
115
-
116
-
117
- ==== Global
118
-
119
- c = ConfigLogic.new('path/to/config/dir', :multiplexers => [ { :name => 'key',
120
- :selector => Proc.new {1 + 1 },
121
- :inputs => {1 => :key1, 2 => :key2, 3 => :key3} } ] )
122
- c.config.key => 2
123
- c.config.key1 => nil
124
- c.config.key2 => nil
125
- c.config.key3 => nil
126
- c.config.dir1.key => 2
127
- c.config.dir1.key1 => nil
128
- c.config.dir1.key2 => nil
129
- c.config.dir1.key3 => nil
130
-
131
- ==== Local
132
-
133
- c.config.insert_multiplexer({ :name => 'key',
134
- :selector => Proc.new {1 + 1 },
135
- :inputs => {1 => :key1, 2 => :key2, 3 => :key3} })
136
- c.config.key => 2
137
- c.config.key1 => nil
138
- c.config.key2 => nil
139
- c.config.key3 => nil
140
- c.config.dir1.key => nil
141
- c.config.dir1.key1 => 1
142
- c.config.dir1.key2 => 2
143
- c.config.dir1.key3 => 3
144
-
145
- ==== Static vs Dynamic
146
-
147
- A dynamic multiplexer will re-evaluate the selecor proc every time it's called
148
-
149
- c.config.insert_multiplexer({ :name => 'key',
150
- :static => false,
151
- :selector => Proc.new { rand(3) + 1 },
152
- :inputs => {1 => :key1, 2 => :key2, 3 => :key3} })
153
- c.config.key => 2 # time = 0
154
- c.config.key => 1 # time = 0 + n
155
-
156
-
157
- == Credits
158
-
159
- Inspired by RConfig (Rahmal Conda) / activeconfig (Enova Financial)