configutron 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -1,7 +1,7 @@
1
1
  configutron
2
2
  ===========
3
3
 
4
- configutron is a rails gemplugin for simple, application wide configuration variables specific to a rails environment. there are a grip of projects like this; each does it differently, and this is how i like to do it. all the ones I tried seemed too heavy handed. i am publishing this as a convenience for me to use in projects i work on.
4
+ configutron is a rails gemplugin for simple, application wide settings. there are tons of projects like this; each does it differently, and this is how i like to do it. all the ones I tried seemed too heavy handed. i am publishing this as a convenience for myself to use in projects i work on.
5
5
 
6
6
  usage
7
7
  -----
@@ -12,16 +12,42 @@ use the gem in your rails project:
12
12
  config.gem 'configutron'
13
13
  end
14
14
 
15
- create a folder *config/settings* and a file named after each of your rails environments:
15
+ you have two options for specifying settings.
16
+
17
+ 1. one file (_config/settings.yml_)
18
+ 2. one file per environment (_config/settings/environment\_name.yml_)
19
+
20
+ option 1 takes presedence; that is, if _config/settings.yml_ exists, it will be used, and the _config/settings_ directory will be ignored.
21
+
22
+ config/settings.yml
23
+ -------------------
24
+ this option uses one file for the application, with settings for each
25
+ environment nested under the environment's name, like database.yml.
26
+
27
+ add your variables to that file:
28
+
29
+ % echo "--- \ndevelopment: \n variable: value\n" > config/settings.yml
30
+
31
+ try it out:
32
+
33
+ % ./script/console
34
+ Loading development environment (Rails 2.3.5)
35
+ $ >> Configutron.variable
36
+ % => "value
37
+
38
+ config/settings/RAILS\_ENV.yml
39
+ ------------------------------
40
+
41
+ create a folder *config/settings*. configutron will be available for each environment
42
+ that has a corresponding yaml file in that directory.
16
43
 
17
44
  % mkdir config/settings
18
- % touch config/settings/development.yml config/settings/test.yml config/settings/production.yml
19
45
 
20
46
  add your variables to those files:
21
47
 
22
48
  % echo "--- \nvariable: value\n" > config/settings/development.yml
23
49
 
24
- make sure it works:
50
+ try it out:
25
51
 
26
52
  % ./script/console
27
53
  Loading development environment (Rails 2.3.5)
@@ -29,6 +55,8 @@ make sure it works:
29
55
  => "value"
30
56
 
31
57
  name it something easier to type:
58
+ ---------------------------------
59
+ back in _environment.rb_
32
60
 
33
61
  Rails::Initializer.run do |config|
34
62
  config.gem 'configutron'
@@ -36,7 +64,7 @@ name it something easier to type:
36
64
 
37
65
  Configutron.constant = 'App'
38
66
 
39
- then back in the console:
67
+ try it out:
40
68
 
41
69
  % ./script/console
42
70
  Loading development environment (Rails 2.3.5)
data/Rakefile CHANGED
@@ -13,6 +13,8 @@ begin
13
13
  gem.add_dependency "activesupport", ">= 0"
14
14
  gem.add_runtime_dependency "activesupport", ">= 0"
15
15
  gem.add_development_dependency "rspec", ">= 1.2.9"
16
+ gem.add_development_dependency "fakefs", ">= 0.2.1"
17
+
16
18
  gem.files = [
17
19
  ".gitignore",
18
20
  "LICENSE",
@@ -25,7 +27,7 @@ begin
25
27
  "spec/configutron_spec.rb",
26
28
  "spec/spec.opts",
27
29
  "spec/spec_helper.rb",
28
- "spec/fake_rails_root/config/settings/development.yml"
30
+ "spec/fake_yml_files.rb"
29
31
  ]
30
32
  end
31
33
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.3.0
data/lib/configutron.rb CHANGED
@@ -13,12 +13,21 @@ module Configutron
13
13
  def method_missing(key)
14
14
  configutron[key].to_openstruct || nil
15
15
  end
16
-
17
- def settings_path
18
- File.expand_path("#{RAILS_ROOT}/config/settings/#{RAILS_ENV}.yml")
19
- end
20
16
 
21
17
  def configutron
22
- @configutron ||= YAML.load_file(settings_path).symbolize_keys
18
+ @configutron ||= setup
19
+ end
20
+
21
+ def setup
22
+ settings_path = File.expand_path("#{RAILS_ROOT}/config/settings.yml")
23
+ env_settings_path = File.expand_path("#{RAILS_ROOT}/config/settings/#{RAILS_ENV}.yml")
24
+
25
+ if File.exist?(settings_path)
26
+ @configutron = YAML.load_file(settings_path)[RAILS_ENV].symbolize_keys
27
+ elsif File.exists?(env_settings_path)
28
+ @configutron = YAML.load_file(env_settings_path).symbolize_keys
29
+ else
30
+ raise IOError, "Create either config/settings.yml or config/settings/RAILS_ENV.yml"
31
+ end
23
32
  end
24
33
  end
@@ -1,11 +1,10 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- RAILS_ROOT = File.join(File.dirname(__FILE__), 'fake_rails_root')
3
- RAILS_ENV = 'development'
2
+ RAILS_ROOT = '/rails_root/'
3
+ RAILS_ENV = 'test'
4
4
 
5
5
  describe Configutron do
6
- before do
7
- @fixture_path = File.expand_path(File.dirname(__FILE__) + "/fake_rails_root/config/settings/development.yml")
8
- end
6
+ include FakeFS::SpecHelpers
7
+ after(:each) { reset! }
9
8
 
10
9
  describe "module methods" do
11
10
  describe ".constant=" do
@@ -15,45 +14,63 @@ describe Configutron do
15
14
  end
16
15
  end
17
16
  end
18
-
19
- describe "settings file" do
20
- before do
21
- Configutron.should_receive(:settings_path).and_return(@fixture_path)
22
- end
23
-
24
- specify "is loaded from config/settings based on the RAILS_ENV" do
25
- lambda { Configutron.some_variable }.should_not raise_error
26
- end
27
- end
28
17
 
29
- describe "non-nested settings" do
30
- specify "strings can be accessed" do
31
- Configutron.my_string.should == 'string'
32
- end
33
-
34
- specify "integers can be accessed" do
35
- Configutron.my_integer.should == 1
18
+ describe "settings file" do
19
+ context 'one file per env' do
20
+ before(:each) { mock_test_yml }
21
+
22
+ specify 'is loaded from config/settings/#{RAILS_ENV}.yml' do
23
+ Configutron.file.should == 'test.yml'
24
+ end
36
25
  end
37
26
 
38
- specify "arrays can be accessed" do
39
- Configutron.my_array.should == [1,2,3,4]
27
+ context 'one file for the whole application' do
28
+ before(:each) { mock_settings_yml }
29
+
30
+ specify 'is loaded from config/settings.yml based on the RAILS_ENV' do
31
+ Configutron.file.should == 'settings.yml'
32
+ end
40
33
  end
41
34
 
42
- specify "hashes can be accesed" do
43
- Configutron.my_hash.one.should == 1
44
- Configutron.my_hash.two.should == 2
35
+ context 'that is missing' do
36
+ specify 'raises an IOError' do
37
+ lambda { Configutron.snoop_dogg }.should raise_error(IOError, "Create either config/settings.yml or config/settings/RAILS_ENV.yml")
38
+ end
45
39
  end
46
40
  end
47
-
48
- describe "nested settings" do
49
- specify "can be accessed" do
50
- Configutron.two.three.should == 3
41
+
42
+ describe "settings" do
43
+ before(:each) { mock_test_yml }
44
+
45
+ describe "non-nested settings" do
46
+ specify "strings can be accessed" do
47
+ Configutron.my_string.should == 'string'
48
+ end
49
+
50
+ specify "integers can be accessed" do
51
+ Configutron.my_integer.should == 1
52
+ end
53
+
54
+ specify "arrays can be accessed" do
55
+ Configutron.my_array.should == [1,2,3,4]
56
+ end
57
+
58
+ specify "hashes can be accesed" do
59
+ Configutron.my_hash.one.should == 1
60
+ Configutron.my_hash.two.should == 2
61
+ end
51
62
  end
52
63
 
53
64
  describe "nested settings" do
54
65
  specify "can be accessed" do
55
- Configutron.four.five.six.should == 6
66
+ Configutron.two.three.should == 3
56
67
  end
57
- end
68
+
69
+ describe "nested settings" do
70
+ specify "can be accessed" do
71
+ Configutron.four.five.six.should == 6
72
+ end
73
+ end
74
+ end
58
75
  end
59
76
  end
@@ -1,3 +1,6 @@
1
+ TEST_YML = <<-END_SETTINGS
2
+ file: test.yml
3
+
1
4
  some_variable: some value
2
5
 
3
6
  my_string: string
@@ -9,15 +12,20 @@ my_array:
9
12
  - 2
10
13
  - 3
11
14
  - 4
12
-
15
+
13
16
  my_hash:
14
17
  one: 1
15
18
  two: 2
16
-
19
+
17
20
  two:
18
21
  three: 3
19
22
 
20
23
  four:
21
- five:
24
+ five:
22
25
  six: 6
26
+ END_SETTINGS
23
27
 
28
+ SETTINGS_YML = <<-END_SETTINGS
29
+ test:
30
+ file: settings.yml
31
+ END_SETTINGS
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,32 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'configutron'
4
4
  require 'spec'
5
5
  require 'spec/autorun'
6
+ require 'fake_yml_files'
6
7
 
7
8
  require 'rubygems'
8
- require 'active_support'
9
+ require 'active_support'
10
+ require 'fakefs/spec_helpers'
11
+
12
+ def mock_test_yml
13
+ path = '/rails_root/config/settings/test.yml'
14
+
15
+ FileUtils.mkdir_p('/rails_root/config/settings')
16
+ File.open(path, 'w') do |f|
17
+ f.puts TEST_YML
18
+ end
19
+ end
20
+
21
+ def mock_settings_yml
22
+ FileUtils.mkdir_p('/rails_root/config')
23
+ File.open('/rails_root/config/settings.yml', 'w') do |f|
24
+ f.puts SETTINGS_YML
25
+ end
26
+ end
27
+
28
+ def reset!
29
+ FileUtils.rm_rf('/rails_root')
30
+
31
+ Configutron.instance_eval do
32
+ @configutron = nil
33
+ end
34
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configutron
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neal Clark
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-30 00:00:00 -08:00
12
+ date: 2010-03-03 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -42,6 +42,16 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: 1.2.9
44
44
  version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: fakefs
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.2.1
54
+ version:
45
55
  description: simple app-wide settings for rails applications
46
56
  email: nclark@thrownproject.com
47
57
  executables: []
@@ -61,7 +71,7 @@ files:
61
71
  - lib/core_ext.rb
62
72
  - rails/init.rb
63
73
  - spec/configutron_spec.rb
64
- - spec/fake_rails_root/config/settings/development.yml
74
+ - spec/fake_yml_files.rb
65
75
  - spec/spec.opts
66
76
  - spec/spec_helper.rb
67
77
  has_rdoc: true
@@ -94,4 +104,5 @@ specification_version: 3
94
104
  summary: simple app-wide settings for rails apps
95
105
  test_files:
96
106
  - spec/configutron_spec.rb
107
+ - spec/fake_yml_files.rb
97
108
  - spec/spec_helper.rb