easy_config 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ pkg/
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,31 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ easy_config (0.0.1)
5
+ methodize (~> 0.2.1)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.1.3)
11
+ fakefs (0.4.0)
12
+ methodize (0.2.1)
13
+ rake (0.9.2.2)
14
+ rspec (2.9.0)
15
+ rspec-core (~> 2.9.0)
16
+ rspec-expectations (~> 2.9.0)
17
+ rspec-mocks (~> 2.9.0)
18
+ rspec-core (2.9.0)
19
+ rspec-expectations (2.9.0)
20
+ diff-lcs (~> 1.1.3)
21
+ rspec-mocks (2.9.0)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ bundler (>= 1.0.0)
28
+ easy_config!
29
+ fakefs
30
+ rake
31
+ rspec (~> 2.9.0)
data/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # Easy config
2
+ Rails and Rack applications configuration made easy.
3
+
4
+ # Installation
5
+
6
+ `gem install easy-config`
7
+
8
+ or in your Gemfile
9
+
10
+ `gem "easy-config"`
11
+
12
+ # How it works
13
+
14
+ EasyConfig allows you to access your config files easily. All you have to do is
15
+ to put your files in config dir and be a valid YAML file (with .yml as extension).
16
+
17
+ If you desire you can split your configurations by environment. Easy config treats it
18
+ automatically.
19
+
20
+ ## Example
21
+
22
+ We can access database.yml file as:
23
+
24
+ `EasyConfig.database.adapter`
25
+
26
+ And if you have your our custom config file named my_customs.yml:
27
+
28
+ `EasyConfig.my_customs.custom_var`
29
+
30
+ # TODO
31
+
32
+ Support ENV['DATABASE_URL'] to EasyConfig.database.url
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ desc "run the spec suite"
7
+ task :spec do
8
+ system "rspec -cfp spec"
9
+ end
10
+
11
+ task :default => :spec
@@ -0,0 +1,24 @@
1
+ require File.expand_path("../lib/easy_config/version", __FILE__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'easy_config'
5
+ s.version = EasyConfig::VERSION
6
+ s.date = '2012-03-17'
7
+ s.summary = "Easy config, Rails and Rack application's configuration made easy."
8
+ s.description = s.summary
9
+ s.authors = ["Felipe Oliveira"]
10
+ s.email = 'felipecvo@gmail.com'
11
+ s.homepage = 'http://rubygems.org/gems/easy_config'
12
+
13
+ s.required_rubygems_version = ">= 1.3.6"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {spec}/*`.split("\n")
17
+ s.require_path = 'lib'
18
+
19
+ s.add_dependency "methodize", "~> 0.2.1"
20
+
21
+ s.add_development_dependency "bundler", ">= 1.0.0"
22
+ s.add_development_dependency "rspec", "~> 2.9.0"
23
+ s.add_development_dependency "rake"
24
+ end
@@ -0,0 +1,26 @@
1
+ class EasyConfig::ConfigFile
2
+ attr_reader :name
3
+
4
+ def initialize(path)
5
+ @path = path
6
+ @name = File.basename(path, '.*').to_sym
7
+ end
8
+
9
+ def configuration
10
+ @configuration ||= create_configuration
11
+ end
12
+
13
+ def create_configuration
14
+ yaml = YAML::load_file(@path)
15
+
16
+ yaml = yaml[EasyConfig::Env.current] if EasyConfig::Env.has_environment?(yaml)
17
+
18
+ EasyConfig::Configuration.new(yaml)
19
+ end
20
+
21
+ def self.all
22
+ @all ||= Dir.glob(EasyConfig::PathResolver.config_path).map do |path|
23
+ EasyConfig::ConfigFile.new path
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,11 @@
1
+ require 'methodize'
2
+
3
+ class EasyConfig::Configuration
4
+ def initialize(config)
5
+ @config = config.extend(Methodize)
6
+ end
7
+
8
+ def method_missing(name, *args)
9
+ @config.send(name, *args)
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module EasyConfig::Env
2
+ def self.current
3
+ if defined?(Rails)
4
+ Rails.env
5
+ elsif !ENV['RACK_ENV'].nil?
6
+ ENV['RACK_ENV']
7
+ else
8
+ "development"
9
+ end
10
+ end
11
+
12
+ def self.has_environment?(hash)
13
+ hash.keys.include?(self.current)
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module EasyConfig::PathResolver
2
+ def self.config_path=(value)
3
+ @config_path = value
4
+ end
5
+
6
+ def self.config_path
7
+ if defined?(@config_path) and @config_path
8
+ File.join(@config_path, '*.yml')
9
+ elsif defined?(Rails)
10
+ File.join(Rails.root, 'config', '*.yml')
11
+ elsif defined?(Sinatra)
12
+ File.join(Sinatra::Application.root, 'config', '*.yml')
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module EasyConfig
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,11 @@
1
+ module EasyConfig
2
+ def self.method_missing(name)
3
+ file = nil
4
+ file.configuration if file = EasyConfig::ConfigFile.all.find { |f| f.name == name }
5
+ end
6
+ end
7
+
8
+ require 'easy_config/config_file'
9
+ require 'easy_config/configuration'
10
+ require 'easy_config/env'
11
+ require 'easy_config/path_resolver'
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe EasyConfig::ConfigFile do
4
+ before { EasyConfig::PathResolver.config_path = './spec/fixtures' }
5
+ after { EasyConfig::PathResolver.config_path = nil }
6
+
7
+ context "all files" do
8
+ subject { EasyConfig::ConfigFile.all }
9
+ it { should_not be_nil }
10
+ its(:size) { should eq 3 }
11
+ end
12
+
13
+ context "specific file" do
14
+ subject { EasyConfig::ConfigFile.all.first }
15
+ it { should_not be_nil }
16
+ its(:name) { should eq :facebook }
17
+ its(:configuration) { should_not be_nil }
18
+ its(:configuration) { should be_a EasyConfig::Configuration }
19
+ its('configuration.app_id') { should eq 1234 }
20
+ its('configuration.permissions.roles') { should eq 'master' }
21
+ end
22
+
23
+ context "per environment file" do
24
+ subject { EasyConfig::ConfigFile.all.find { |c| c.name == :redis } }
25
+ it { should_not be_nil }
26
+ its(:name) { should eq :redis }
27
+ its(:configuration) { should_not be_nil }
28
+ its(:configuration) { should be_a EasyConfig::Configuration }
29
+ its('configuration.host') { should eq 'localhost' }
30
+ its('configuration.port') { should eq 4567 }
31
+ end
32
+ end
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe EasyConfig::Configuration do
4
+ subject { EasyConfig::Configuration.new({ :blue => 255 }) }
5
+ it { should_not be_nil }
6
+ its(:blue) { should eq 255 }
7
+ its(:red) { should be_nil }
8
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe EasyConfig::Env do
4
+ context :current do
5
+ context "Rails.env" do
6
+ before { module ::Rails; def self.env; "production"; end; end }
7
+ after { Object.send(:remove_const, :Rails) }
8
+ subject { EasyConfig::Env.current }
9
+ it { should eq "production" }
10
+ end
11
+
12
+ context "Rack env" do
13
+ before { ENV['RACK_ENV'] = "test" }
14
+ after { ENV['RACK_ENV'] = nil }
15
+ subject { EasyConfig::Env.current }
16
+ it { should eq "test" }
17
+ end
18
+
19
+ context "default environment" do
20
+ subject { EasyConfig::Env.current }
21
+ it { should eq "development" }
22
+ end
23
+ end
24
+
25
+ context :has_environment? do
26
+ context "with environments" do
27
+ subject { EasyConfig::Env.has_environment?({ 'development' => { 'key' => 'value' } }) }
28
+ it { should be_true }
29
+ end
30
+
31
+ context "without environments" do
32
+ subject { EasyConfig::Env.has_environment?({ 'key' => 'value' }) }
33
+ it { should be_false }
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe EasyConfig::PathResolver do
4
+ context "#config_path" do
5
+ context "resolve Rails config dir" do
6
+ before { module ::Rails; def self.root; "./"; end; end }
7
+ after { Object.send(:remove_const, :Rails) }
8
+ subject { EasyConfig::PathResolver.config_path }
9
+ it { should eq "./config/*.yml" }
10
+ end
11
+
12
+ context "resolve Sinatra config dir" do
13
+ before { module ::Sinatra; module Application; def self.root; "/sinatra/"; end; end; end }
14
+ after { Object.send(:remove_const, :Sinatra) }
15
+ subject { EasyConfig::PathResolver.config_path }
16
+ it { should eq "/sinatra/config/*.yml" }
17
+ end
18
+
19
+ context "allow custom config path" do
20
+ before { EasyConfig::PathResolver.config_path = './my_custom_path/' }
21
+ subject { EasyConfig::PathResolver.config_path }
22
+ it { should eq "./my_custom_path/*.yml" }
23
+ end
24
+
25
+ context "allow reset custom config path" do
26
+ before { EasyConfig::PathResolver.config_path = './my_custom_path/' }
27
+ subject {
28
+ EasyConfig::PathResolver.config_path = nil
29
+ module ::Rails; def self.root; "./"; end; end
30
+ EasyConfig::PathResolver.config_path
31
+ }
32
+ after { Object.send(:remove_const, :Rails) }
33
+ it { should eq "./config/*.yml" }
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe EasyConfig do
4
+ context "mising methods" do
5
+ it 'should treat it' do
6
+ lambda { EasyConfig.facebook }.should_not raise_error
7
+ end
8
+ end
9
+
10
+ context "access per env config file" do
11
+ subject { EasyConfig.redis }
12
+ its(:host) { should eq 'localhost' }
13
+ its(:port) { should eq 4567 }
14
+ end
15
+
16
+ context "access simle config file" do
17
+ subject { EasyConfig.github }
18
+ its(:user) { should eq 'felipecvo' }
19
+ end
20
+
21
+ context "inexistent files" do
22
+ subject { EasyConfig.no_exist }
23
+ it { should be_nil }
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ app_id: 1234
2
+ permissions:
3
+ roles: 'master'
@@ -0,0 +1 @@
1
+ user: 'felipecvo'
@@ -0,0 +1,7 @@
1
+ development:
2
+ host: 'localhost'
3
+ port: 4567
4
+
5
+ production:
6
+ host: 'redis.easyconfig.com'
7
+ port: 9840
@@ -0,0 +1,3 @@
1
+ require 'bundler/setup'
2
+ require 'easy_config'
3
+ require 'fakefs/spec_helpers'
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: easy_config
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Felipe Oliveira
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-03-17 00:00:00 -03:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: methodize
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 21
30
+ segments:
31
+ - 0
32
+ - 2
33
+ - 1
34
+ version: 0.2.1
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: bundler
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 23
46
+ segments:
47
+ - 1
48
+ - 0
49
+ - 0
50
+ version: 1.0.0
51
+ type: :development
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: rspec
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ hash: 43
62
+ segments:
63
+ - 2
64
+ - 9
65
+ - 0
66
+ version: 2.9.0
67
+ type: :development
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ type: :development
82
+ version_requirements: *id004
83
+ description: Easy config, Rails and Rack application's configuration made easy.
84
+ email: felipecvo@gmail.com
85
+ executables: []
86
+
87
+ extensions: []
88
+
89
+ extra_rdoc_files: []
90
+
91
+ files:
92
+ - .gitignore
93
+ - Gemfile
94
+ - Gemfile.lock
95
+ - README.md
96
+ - Rakefile
97
+ - easy_config.gemspec
98
+ - lib/easy_config.rb
99
+ - lib/easy_config/config_file.rb
100
+ - lib/easy_config/configuration.rb
101
+ - lib/easy_config/env.rb
102
+ - lib/easy_config/path_resolver.rb
103
+ - lib/easy_config/version.rb
104
+ - spec/easy_config/config_file_spec.rb
105
+ - spec/easy_config/configuration_spec.rb
106
+ - spec/easy_config/env_spec.rb
107
+ - spec/easy_config/path_resolver_spec.rb
108
+ - spec/easy_config_spec.rb
109
+ - spec/fixtures/facebook.yml
110
+ - spec/fixtures/github.yml
111
+ - spec/fixtures/redis.yml
112
+ - spec/spec_helper.rb
113
+ has_rdoc: true
114
+ homepage: http://rubygems.org/gems/easy_config
115
+ licenses: []
116
+
117
+ post_install_message:
118
+ rdoc_options: []
119
+
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ hash: 3
128
+ segments:
129
+ - 0
130
+ version: "0"
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ hash: 23
137
+ segments:
138
+ - 1
139
+ - 3
140
+ - 6
141
+ version: 1.3.6
142
+ requirements: []
143
+
144
+ rubyforge_project:
145
+ rubygems_version: 1.4.2
146
+ signing_key:
147
+ specification_version: 3
148
+ summary: Easy config, Rails and Rack application's configuration made easy.
149
+ test_files: []
150
+