configy 1.1.2 → 1.1.3

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.
@@ -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: