configy 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- configy (1.1.2)
4
+ configy (1.1.3)
5
5
  hashie (~> 1.2.0)
6
6
 
7
7
  GEM
data/HISTORY.md CHANGED
@@ -1,6 +1,11 @@
1
+ ## 1.1.3 (2012-03-31)
2
+
3
+ * Allow hash access from main config object
4
+ * Check environment variables instead of constants
5
+
1
6
  ## 1.1.2 (2012-03-30)
2
7
 
3
- * If CONFIGY_ENV is set, use that to determine config section to use.
8
+ * If ENV['CONFIGY_ENV'] is set, use that to determine config section to use.
4
9
 
5
10
  ## 1.1.1 (2012-03-18)
6
11
 
data/README.md CHANGED
@@ -1,55 +1,146 @@
1
1
  # Configy
2
2
 
3
- ## Description
3
+ Configy creates a config object based on a YAML file.
4
4
 
5
- It allows to have a file (`config/app_config.yml`) with application configuration parameters.
6
- It should have a "common" section with all parameters along with default values and can also
7
- contain a section for each of the rails environments (development, test, production, or
8
- your custom one). The values from the current environment section will override the values in the
9
- "common" section.
5
+ ## Summary
10
6
 
11
- If some developer needs his own specific values for his working copy, he can simply create
12
- a `config/app_config.local.yml` file and override any value there, again having a "common" section
13
- and a section for each environment.
7
+ It allows you to have a file (`config/app_config.yml`) with application
8
+ configuration parameters. It should have a "common" section with all
9
+ parameters along with default values and can also contain a section for each
10
+ application environment (development, test, production, or your custom one).
11
+ The values from the current environment section will override the values in
12
+ the "common" section.
14
13
 
15
- Nothing is mandatory (files, sections) you just have what you really need. The files are parsed with ERB,
16
- so they can contain some Ruby. It also checks for file modifications so you don't have to restart the server to pick up new values on production.
14
+ If a developer needs his own specific values for his working copy, he can
15
+ simply create a `config/app_config.local.yml` file and override any value
16
+ there, again having a "common" section and a section for each environment.
17
17
 
18
- ## Usage
18
+ The files are parsed with ERB. Configy also checks for file modifications so
19
+ you don't have to restart the server to pick up new values on production.
19
20
 
20
- Configy provides an [optional] generator.
21
+ ## Example
21
22
 
22
- rails g configy:install
23
+ config/app_config.yaml:
24
+
25
+ ``` yaml
26
+ common:
27
+ appname: "My App"
28
+ caching:
29
+ enabled: false
30
+ facebook:
31
+ appid: 123
32
+ secret: abc
33
+
34
+ production:
35
+ caching:
36
+ enabled: true
37
+ default_max_age: <%= 1.hour %>
38
+ facebook:
39
+ appid: 456
40
+ secret: def
41
+
42
+ ```
43
+
44
+ Assuming ENV['RACK_ENV'] == "production"
45
+
46
+ ``` ruby
47
+ Configy.create("app_config") # Creates AppConfig constant
48
+ AppConfig.caching.enabled? # => true
49
+ AppConfig.caching.default_max_age # => 3600
50
+ AppConfig.appname # => "My App"
51
+ AppConfig.facebook.appid # => 456
52
+
53
+ # Or with less magic:
54
+
55
+ config = Configy::Base.new("app_config", "production", Rails.root.join("config") )
56
+ config.caching.enabled? # => true
57
+ config['caching']['enabled'] # => true
58
+ ...
59
+
60
+ ```
61
+
62
+ ## Features
63
+
64
+ ### Sections
65
+
66
+ Configy assumes that you are breaking your configurations into sections. It
67
+ will automatically detect which section to use. It looks for an environment
68
+ variable in following order
69
+
70
+ `ENV['CONFIGY_ENV'], ENV['RAILS_ENV'], ENV['RACK_ENV']`
71
+
72
+ and assumes you have a section in your YAML file named the same way, for
73
+ example:
74
+
75
+ ``` yaml
76
+ development:
77
+ facebook_app_id: 123456
78
+ facebook_secret: abcdef
79
+ production:
80
+ facebook_app_id: 456789
81
+ facebook_secret: defghi
82
+ ```
83
+
84
+ If none of the environment variables above are set, it defaults to `development`.
85
+
86
+ ### Common section
23
87
 
24
- An example of a config file (app_config.yml):
88
+ If you have a section named `common`, that section will provide default values
89
+ for all other sections. Under the hood, Configy deep merges the environment
90
+ section into the common section. For example:
25
91
 
26
92
  ``` yaml
27
93
  common:
28
- admin_email: admin@domain.com
29
- xml_rpc_url: http://domain.com:8000/
30
- media_path: <%= RAILS_ROOT %>/tmp/media
94
+ newrelic_enabled: true
95
+ newrelic_key: "123456"
31
96
 
32
97
  development:
33
- xml_rpc_url: http://localhost:8000/
98
+ newrelic_enabled: false
34
99
 
35
- test:
36
- xml_rpc_url: http://localhost:8008/
37
- ```
38
-
39
- In an initializer:
100
+ staging:
101
+
102
+ production:
40
103
 
41
- ``` ruby
42
- Configy.create(:app_config)
43
104
  ```
44
105
 
45
- Then, in the application you can use the config parameters like this:
106
+ All environments will inherit the `common` section configurations, and the
107
+ `development` environment overrides the `newrelic_enabled` setting.
108
+
109
+ ### Nested configs
110
+
111
+ You can nest configs as much as you like.
112
+
113
+ ``` yaml
114
+ common:
115
+ facebook:
116
+ app:
117
+ id: 123
118
+ ```
46
119
 
47
120
  ``` ruby
48
- AppConfig.xml_rpc_url
121
+ AppConfig.facebook.app.id # => 123
49
122
  ```
50
123
 
51
- So it means that you've got a Config object which holds all the configuration parameters defined.
52
- It doesn't allow to change the values in the application code, BTW.
124
+ ### Local config file
125
+
126
+ If you have a config file named `config/app_config.yml` and another config
127
+ file named `config/app_config.local.yml`, the local config file's configurations
128
+ will override the main config file's configurations.
129
+
130
+ ### ERB
131
+
132
+ Config files are parsed as ERB templates
133
+
134
+ ### Auto reloading
135
+
136
+ Configy will check the config file's mtime to see if it needs to
137
+ reload it's configuration. You can disable this with `Configy.cache_config = true`
138
+
139
+ ### Rails generator
140
+
141
+ Configy provides an [optional] generator.
142
+
143
+ rails g configy:install
53
144
 
54
145
  ## Authors
55
146
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "configy"
3
- s.version = "1.1.2"
3
+ s.version = "1.1.3"
4
4
 
5
5
  s.authors = [ "Gabe Varela", "Ben Marini", "Chip Miller", "Bram Swenson", "Jeremy Ruppel" ]
6
6
  s.date = "2012-03-18"
@@ -14,29 +14,17 @@ module Configy
14
14
  @load_path
15
15
  elsif defined? Rails
16
16
  Rails.root.join("config")
17
- elsif defined? RAILS_ROOT
18
- "#{RAILS_ROOT}/config"
19
- elsif defined? RACK_ROOT
20
- "#{RACK_ROOT}/config"
17
+ elsif ENV['RAILS_ROOT']
18
+ "#{ENV['RAILS_ROOT']}/config"
19
+ elsif ENV['RACK_ROOT']
20
+ "#{ENV['RACK_ROOT']}/config"
21
21
  else
22
22
  'config'
23
23
  end
24
24
  end
25
25
 
26
26
  def section
27
- if @section
28
- @section
29
- elsif defined? CONFIGY_ENV
30
- CONFIGY_ENV
31
- elsif defined? Rails
32
- Rails.env
33
- elsif defined? RAILS_ENV
34
- RAILS_ENV
35
- elsif defined? RACK_ENV
36
- RACK_ENV
37
- else
38
- 'development'
39
- end
27
+ @section ||= ENV["CONFIGY_ENV"] || ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
40
28
  end
41
29
 
42
30
  def cache_config
@@ -18,6 +18,10 @@ module Configy
18
18
  end
19
19
  end
20
20
 
21
+ def [](key)
22
+ config[key]
23
+ end
24
+
21
25
  def reload
22
26
  @config = config_file.config.merge(local_config_file.config).tap do |c|
23
27
  c.mtime = most_recent_mtime
@@ -19,14 +19,14 @@ describe "Configy.load_path" do
19
19
  end
20
20
 
21
21
  it "should detect rails 2 config dir" do
22
- with_const( :RAILS_ROOT, "path/to/rails/root" ) do
23
- Configy.load_path.must_equal "#{RAILS_ROOT}/config"
22
+ with_env( "RAILS_ROOT", "path/to/rails/root" ) do
23
+ Configy.load_path.must_equal "#{ENV['RAILS_ROOT']}/config"
24
24
  end
25
25
  end
26
26
 
27
27
  it "should detect rack config dir" do
28
- with_const( :RACK_ROOT, "path/to/rack/root" ) do
29
- Configy.load_path.must_equal "#{RACK_ROOT}/config"
28
+ with_env( "RACK_ROOT", "path/to/rack/root" ) do
29
+ Configy.load_path.must_equal "#{ENV['RACK_ROOT']}/config"
30
30
  end
31
31
  end
32
32
  end
@@ -7,7 +7,7 @@ describe Configy do
7
7
  Configy.cache_config = nil
8
8
  end
9
9
 
10
- it "should be accessbile as methods" do
10
+ it "should be accessbile as methods or hashes" do
11
11
  with_config_file({
12
12
  'common' => {
13
13
  'level1' => {
@@ -20,6 +20,7 @@ describe Configy do
20
20
  }
21
21
  }, 'nested_config') do
22
22
  Configy.create('nested_config')
23
+ NestedConfig['level1']['level2']['level3'].must_equal "whynot"
23
24
  NestedConfig.level1.level2.level3.must_equal "whynot"
24
25
  NestedConfig.level1.level2.nokey?.must_equal false
25
26
  NestedConfig.level1.level2.falsekey?.must_equal false
@@ -10,28 +10,19 @@ describe "Configy.section" do
10
10
  end
11
11
 
12
12
  it "should detect configy environment" do
13
- with_const( :CONFIGY_ENV, "staging" ) do
13
+ with_env( "CONFIGY_ENV", "staging" ) do
14
14
  Configy.section.must_equal "staging"
15
15
  end
16
16
  end
17
17
 
18
- it "should detect rails 3 environment" do
19
- rails3_obj = MiniTest::Mock.new
20
- rails3_obj.expect :env, "staging"
21
-
22
- with_const(:Rails, rails3_obj) do
23
- Configy.section.must_equal "staging"
24
- end
25
- end
26
-
27
- it "should detect rails 2 environment" do
28
- with_const( :RAILS_ENV, "test" ) do
18
+ it "should detect rails environment" do
19
+ with_env( "RAILS_ENV", "test" ) do
29
20
  Configy.section.must_equal "test"
30
21
  end
31
22
  end
32
23
 
33
24
  it "should detect rack environment" do
34
- with_const( :RACK_ENV, "production" ) do
25
+ with_env( "RACK_ENV", "production" ) do
35
26
  Configy.section.must_equal "production"
36
27
  end
37
28
  end
@@ -35,6 +35,12 @@ module Configy::TestHelpers
35
35
  Object.send :remove_const, const
36
36
  end
37
37
 
38
+ def with_env(name, value)
39
+ old = ENV[name]
40
+ ENV[name] = value
41
+ yield
42
+ ENV[name] = old
43
+ end
38
44
  end
39
45
 
40
46
  class MiniTest::Unit::TestCase
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,11 +13,11 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2012-03-18 00:00:00.000000000Z
16
+ date: 2012-03-18 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: hashie
20
- requirement: &2155296220 !ruby/object:Gem::Requirement
20
+ requirement: &70283820015920 !ruby/object:Gem::Requirement
21
21
  none: false
22
22
  requirements:
23
23
  - - ~>
@@ -25,10 +25,10 @@ dependencies:
25
25
  version: 1.2.0
26
26
  type: :runtime
27
27
  prerelease: false
28
- version_requirements: *2155296220
28
+ version_requirements: *70283820015920
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: bundler
31
- requirement: &2155295760 !ruby/object:Gem::Requirement
31
+ requirement: &70283820015460 !ruby/object:Gem::Requirement
32
32
  none: false
33
33
  requirements:
34
34
  - - ! '>='
@@ -36,10 +36,10 @@ dependencies:
36
36
  version: 1.0.0
37
37
  type: :development
38
38
  prerelease: false
39
- version_requirements: *2155295760
39
+ version_requirements: *70283820015460
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: minitest
42
- requirement: &2155295380 !ruby/object:Gem::Requirement
42
+ requirement: &70283820015080 !ruby/object:Gem::Requirement
43
43
  none: false
44
44
  requirements:
45
45
  - - ! '>='
@@ -47,7 +47,7 @@ dependencies:
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
- version_requirements: *2155295380
50
+ version_requirements: *70283820015080
51
51
  description:
52
52
  email: bmarini@gmail.com
53
53
  executables: []
@@ -104,9 +104,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  version: 1.3.6
105
105
  requirements: []
106
106
  rubyforge_project:
107
- rubygems_version: 1.8.10
107
+ rubygems_version: 1.8.11
108
108
  signing_key:
109
109
  specification_version: 3
110
110
  summary: Simple yaml driven configuration gem
111
111
  test_files: []
112
- has_rdoc: