Permalink
Browse files

first commit

  • Loading branch information...
0 parents commit 3c84683c63986d64468d02a492457de014dff0ca @ahoward committed Sep 23, 2009
Showing with 781 additions and 0 deletions.
  1. +186 −0 README
  2. +69 −0 README.erb
  3. +241 −0 Rakefile
  4. +5 −0 config/a.rb
  5. +19 −0 config/b.rb
  6. +8 −0 config/c.rb
  7. +5 −0 config/d.rb
  8. +13 −0 config/e.rb
  9. +176 −0 lib/configuration.rb
  10. +11 −0 samples/a.rb
  11. +11 −0 samples/b.rb
  12. +11 −0 samples/c.rb
  13. +14 −0 samples/d.rb
  14. +12 −0 samples/e.rb
186 README
@@ -0,0 +1,186 @@
+NAME
+ configuration.rb
+
+SYNOPSIS
+ pure ruby scoped configuration files
+
+DESCRIPTION
+ configuration.rb provides a mechanism for configuring ruby programs with
+ ruby configuration files. a configuration.rb file, for example
+ 'config/app.rb', can be written simply as
+
+ Configuration.for('app'){
+ key 'value'
+ foo 'bar'
+ port 42
+ }
+
+ and loaded via the normal ruby require/load mechanism
+
+ Kernel.load 'config/app.rb'
+
+ or with a slightly augmented loading mechnanism which simply searches an
+ extra set of paths in *addition* to the standard ones
+
+ Configuration.path = %w( config configuration )
+
+ Configuration.load 'app'
+
+ configurations are completely open
+
+ Configuration.for('app'){
+ object_id 'very open'
+ }
+
+ support arbitrarily nested values
+
+ Configuration.for('app'){
+ a { b { c { d 42 } } }
+ }
+
+ c = Configuration.for 'app'
+
+ p c.a.b.c.d #=> 42
+
+ allow POLS scoped lookup of vars
+
+ Configuration.for('config'){
+ outer 'bar'
+
+ inner {
+ value 42
+ }
+ }
+
+ c = Configuration.for 'config'
+
+ p c.outer #=> 'bar'
+ p c.inner.value #=> 42
+ p c.inner.outer #=> 'bar'
+
+
+ and not a whole lot else - configuration.rb is s very small library
+ consisting of one file and < 150 loc
+
+SAMPLES
+
+ <========< samples/a.rb >========>
+
+ ~ > cat samples/a.rb
+
+ #
+ # basic usage is quite, simple, load the config and use it's values. the
+ # config syntax is fairly obvious, i think, but note that it *is* ruby and any
+ # ruby can be included. also note that each config is named, allowing
+ # multiple configs to be places in one file
+ #
+ require 'configuration'
+
+ c = Configuration.load 'a'
+
+ p c.a + c.b - c.c
+
+ ~ > ruby samples/a.rb
+
+ 42
+
+
+ <========< samples/b.rb >========>
+
+ ~ > cat samples/b.rb
+
+ #
+ # configuration.rb supports a very natural nesting syntax. note how values
+ # are scoped in a POLS fashion
+ #
+ require 'configuration'
+
+ c = Configuration.for 'b'
+
+ p c.www.url
+ p c.db.url
+ p c.mail.url
+
+ ~ > ruby samples/b.rb
+
+ "http://codeforpeople.com:80"
+ "db://codeforpeople.com:5342"
+ "mail://gmail.com:25"
+
+
+ <========< samples/c.rb >========>
+
+ ~ > cat samples/c.rb
+
+ #
+ # configuration.rb let's you keep code very dry.
+ #
+
+ require 'configuration'
+
+ Configuration.load 'c'
+
+ p Configuration.for('development').db
+ p Configuration.for('production').db
+ p Configuration.for('testing').db
+
+ ~ > ruby samples/c.rb
+
+ "db/development"
+ "db/production"
+ "db/testing"
+
+
+ <========< samples/d.rb >========>
+
+ ~ > cat samples/d.rb
+
+ #
+ # configuration.rb makes use of an external blank slate dsl, this means that
+ # you Configuration objects do, in fact, have all built-in ruby methods such
+ # as #inspect, etc, *unless* you configure over the top of them. the effect
+ # is a configuration object that behaves like a nice ruby object, but which
+ # allows *any* key to be configured
+ #
+ require 'configuration'
+
+ c = Configuration.for 'd'
+
+ p c.object_id
+ p c.inspect
+ p c.p
+
+ ~ > ruby samples/d.rb
+
+ 42
+ "forty-two"
+ 42.0
+
+
+ <========< samples/e.rb >========>
+
+ ~ > cat samples/e.rb
+
+ #
+ # configuration.rb uses a totally clean slate dsl for the block. if you need
+ # to access base Object methods you can do this
+ #
+
+ require 'configuration'
+
+ c = Configuration.for 'e'
+
+ p c.foo
+ p c.bar
+ p c.foobar
+
+ ~ > ruby samples/e.rb
+
+ 42
+ "forty-two"
+ 42.0
+
+
+
+AUTHOR
+ ara.t.howard@gmail.com
@@ -0,0 +1,69 @@
+NAME
+ configuration.rb
+
+SYNOPSIS
+ pure ruby scoped configuration files
+
+DESCRIPTION
+ configuration.rb provides a mechanism for configuring ruby programs with
+ ruby configuration files. a configuration.rb file, for example
+ 'config/app.rb', can be written simply as
+
+ Configuration.for('app'){
+ key 'value'
+ foo 'bar'
+ port 42
+ }
+
+ and loaded via the normal ruby require/load mechanism
+
+ Kernel.load 'config/app.rb'
+
+ or with a slightly augmented loading mechnanism which simply searches an
+ extra set of paths in *addition* to the standard ones
+
+ Configuration.path = %w( config configuration )
+
+ Configuration.load 'app'
+
+ configurations are completely open
+
+ Configuration.for('app'){
+ object_id 'very open'
+ }
+
+ support arbitrarily nested values
+
+ Configuration.for('app'){
+ a { b { c { d 42 } } }
+ }
+
+ c = Configuration.for 'app'
+
+ p c.a.b.c.d #=> 42
+
+ allow POLS scoped lookup of vars
+
+ Configuration.for('config'){
+ outer 'bar'
+
+ inner {
+ value 42
+ }
+ }
+
+ c = Configuration.for 'config'
+
+ p c.outer #=> 'bar'
+ p c.inner.value #=> 42
+ p c.inner.outer #=> 'bar'
+
+
+ and not a whole lot else - configuration.rb is s very small library
+ consisting of one file and < 150 loc
+
+SAMPLES
+<%= samples %>
+
+AUTHOR
+ ara.t.howard@gmail.com
Oops, something went wrong.

0 comments on commit 3c84683

Please sign in to comment.