Skip to content

Commit

Permalink
Fixed issue markbates#16 in regards to configure_from_hash/yaml
Browse files Browse the repository at this point in the history
  • Loading branch information
markbates committed Jun 28, 2011
1 parent 6039cd1 commit 7bad6b9
Show file tree
Hide file tree
Showing 9 changed files with 48 additions and 202 deletions.
189 changes: 0 additions & 189 deletions README

This file was deleted.

8 changes: 3 additions & 5 deletions README.textile
Expand Up @@ -57,7 +57,7 @@ Notice how our other configuration parameters haven't changed? Cool, eh?

h3. Hash/YAML

You can configure configatron from a hash as well:
You can configure configatron from a hash as well (this is really only useful in testing or for data driven configurat, it's not recommended for actual configuration):

<pre><code>
configatron.configure_from_hash({:email => {:pop => {:address => 'pop.example.com', :port => 110}}, :smtp => {:address => 'smtp.example.com'}})
Expand All @@ -67,11 +67,9 @@ You can configure configatron from a hash as well:
# and so on...
</code></pre>

Notice how they're all namespaced for your as well. The same holds true for YAML files:
h4. YAML

<pre><code>
configatron.configure_from_yaml('/path/to/file.yml')
</code></pre>
Support for YAML has been deprecated and will be removed in version 2.9 of Configatron. Please switch to Ruby based configuration of Configatron. Trust me, it's a lot nicer and easier to use. Why would you _not_ want to?

h3. Namespaces

Expand Down
4 changes: 2 additions & 2 deletions Rakefile
Expand Up @@ -17,13 +17,13 @@ Bundler.require
Gemstub.test_framework = :rspec

Gemstub.gem_spec do |s|
s.version = "2.8.1"
s.version = "2.8.2"
s.summary = "A powerful Ruby configuration system."
s.rubyforge_project = "magrathea"
s.add_dependency('yamler', '>=0.1.0')
s.email = 'mark@markbates.com'
s.homepage = 'http://www.metabates.com'
s.files = FileList['lib/**/*.*', 'README', 'LICENSE', 'bin/**/*.*', 'generators/**/*.*']
s.files = FileList['lib/**/*.*', 'README.textile', 'LICENSE', 'bin/**/*.*', 'generators/**/*.*']
end

Gemstub.rdoc do |rd|
Expand Down
6 changes: 3 additions & 3 deletions configatron.gemspec
Expand Up @@ -2,15 +2,15 @@

Gem::Specification.new do |s|
s.name = %q{configatron}
s.version = "2.8.1.20110617105939"
s.version = "2.8.2.20110628103123"

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["markbates"]
s.date = %q{2011-06-17}
s.date = %q{2011-06-28}
s.description = %q{configatron was developed by: markbates}
s.email = %q{mark@markbates.com}
s.extra_rdoc_files = ["LICENSE"]
s.files = ["lib/configatron/configatron.rb", "lib/configatron/core_ext/class.rb", "lib/configatron/core_ext/kernel.rb", "lib/configatron/core_ext/object.rb", "lib/configatron/core_ext/string.rb", "lib/configatron/errors.rb", "lib/configatron/proc.rb", "lib/configatron/rails.rb", "lib/configatron/store.rb", "lib/configatron.rb", "README", "LICENSE", "generators/configatron_generator.rb", "generators/templates/configatron/cucumber.rb", "generators/templates/configatron/defaults.rb", "generators/templates/configatron/development.rb", "generators/templates/configatron/production.rb", "generators/templates/configatron/test.rb", "generators/templates/initializers/configatron.rb"]
s.files = ["lib/configatron/configatron.rb", "lib/configatron/core_ext/class.rb", "lib/configatron/core_ext/kernel.rb", "lib/configatron/core_ext/object.rb", "lib/configatron/core_ext/string.rb", "lib/configatron/errors.rb", "lib/configatron/proc.rb", "lib/configatron/rails.rb", "lib/configatron/store.rb", "lib/configatron.rb", "README.textile", "LICENSE", "generators/configatron_generator.rb", "generators/templates/configatron/cucumber.rb", "generators/templates/configatron/defaults.rb", "generators/templates/configatron/development.rb", "generators/templates/configatron/production.rb", "generators/templates/configatron/test.rb", "generators/templates/initializers/configatron.rb"]
s.homepage = %q{http://www.metabates.com}
s.require_paths = ["lib"]
s.rubyforge_project = %q{magrathea}
Expand Down
17 changes: 16 additions & 1 deletion lib/configatron/configatron.rb
@@ -1,15 +1,30 @@
require 'singleton'
require 'logger'

class Configatron
include Singleton

alias_method :send!, :send

class << self

def log
unless @logger
if defined?(::Rails)
@logger = ::Rails.logger
end
@logger = ::Logger.new(STDOUT) if @logger.nil?
end
return @logger
end

end

def initialize # :nodoc:
@_namespace = [:default]
reset!
end

# Forwards the method call onto the 'namespaced' Configatron::Store
def method_missing(sym, *args, &block)
@_store[@_namespace.last].send(sym, *args, &block)
Expand Down
5 changes: 3 additions & 2 deletions lib/configatron/store.rb
Expand Up @@ -99,6 +99,7 @@ def configure_from_hash(options)
# <tt>:hash</tt>, that indicates a specific hash that should be
# loaded from the file.
def configure_from_yaml(path, opts = {})
Configatron.log.warn "DEPRECATED! (configure_from_yaml) Please stop using YAML and use Ruby instead. This method will be removed in 2.9."
begin
yml = ::Yamler.load(path)
yml = yml[opts[:hash]] unless opts[:hash].nil?
Expand Down Expand Up @@ -303,12 +304,12 @@ def parse_options(options)
options.each do |k,v|
if v.is_a?(Hash)
if v.keys.length == 1 && v.keys.first.is_a?(SYCK_CONSTANT)
self.method_missing("#{k.to_sym}=", v.values.first.flatten)
self.method_missing("#{k}=", v.values.first.flatten)
else
self.method_missing(k.to_sym).configure_from_hash(v)
end
else
self.method_missing("#{k.to_sym}=", v)
self.method_missing("#{k}=", v)
end
end
else
Expand Down
13 changes: 13 additions & 0 deletions spec/lib/complex.yml
@@ -0,0 +1,13 @@
complex_default: &default
access_key_id: access_key
secret_access_key: secret_access_key

complex_development:
bucket: develop
<<: *default

complex_production:
bucket: production
<<: *default

complex_test: &test
7 changes: 7 additions & 0 deletions spec/lib/configatron_spec.rb
Expand Up @@ -357,6 +357,13 @@
configatron.food.list.should == [:apple, :banana, :tomato, :brocolli, :spinach]
end

it "should handle complex yaml" do
configatron.complex_development.bucket.should be_nil
configatron.configure_from_yaml(File.join(File.dirname(__FILE__), 'complex.yml'))
configatron.complex_development.bucket.should == 'develop'
configatron.complex_development.access_key_id.should == 'access_key'
end

end

it 'should return a parameter' do
Expand Down
1 change: 1 addition & 0 deletions spec/support/rails.rb
Expand Up @@ -2,5 +2,6 @@ module Rails
class << self
attr_accessor :env
attr_accessor :root
attr_accessor :logger
end
end

0 comments on commit 7bad6b9

Please sign in to comment.