README.md in o-2.0.3 vs README.md in o-2.0.4
- old
+ new
@@ -1,296 +2 @@
-O, a configuration gem for Ruby
-====================================
-
-**Homepage**: [https://github.com/GutenYe/o](https://github.com/GutenYe/o) <br/>
-**Author**: Guten <br/>
-**License**: MIT-LICENSE <br/>
-**Documentation**: [http://rubydoc.info/gems/o/frames](http://rubydoc.info/gems/o/frames) <br/>
-**Issue Tracker**: [https://github.com/GutenYe/o/issues](https://github.com/GutenYe/o/issues) <br/>
-
-The name `o` comes from option/setting, short and handy, eh-ah~
-
-Features
---------
-
-* Variable and computed attribute support
-* Pure Ruby DSL syntax
-* Multiple configuration levels including system, user, and command-line.
-* Hash compatibility
-
-Introduction
--------------
-
-The three levels of configuration include system, user, and cmdline:
-
- APP/lib/guten/rc.rb # system level
- ~/.gutenrc # user level
- $ guten --list or ENV[GEMFILE]=x guten # cmdline level
-
- module Guten
- Rc = O.require("guten/rc") + O.require("~/.gutenrc") # require use $:
- Rc.list = true or Rc.gemfile = ENV[GEMFILE] # from cmdline.
- end
-
- a constant works very well in many places, but you are free to use any variable.
-
-### An example ###
-
- Rc = O do
- host "localhost"
- port 8080
- mail.stmp.address "stmp.gmail.com"
-
- my.development do # namespace
- adapter "postgresql"
- database "hello_development"
- username "guten"
- end
-
- time proc{|offset| Time.now} # computed attribute
- end
-
-### An example using alternative syntax ###
-
- Rc = O do |c|
- c.host = "localhost"
- c.port = 8080
- c.mail.stmp.address "stmp.gmail.com"
-
- my.development do |c|
- c.adapter = "mysql2"
- c.database = "hello"
- c.username = "guten"
- end
-
- c.time = proc{|offset| Time.now}
- end
-
-### An example of some sugar syntax. _works in a file only_ ###
-
- # file: guten/rc.rb
- development:
- adapter "mysql2"
- database "hello"
- username "guten"
-
- #=>
-
- development do
- adapter "mysql2"
- database "hello"
- username "guten"
- end
-
-
-
-**NOTE**: This is not pure ruby syntax, but it works.
-In order for this to work, a tab ("\t") must be used for indention.
-
-### Initialize ###
-
-In order to initialize the configuration object either of the two ways can be used.
-
- Rc = O.new
- Rc = O.require "guten/rc" # from file
- Rc = O do
- a 1
- end
- Rc = O[a: 1] # from a hash data
- Rc._merge!(a: 1)
-
-file: "guten/rc.rb"
-
- a 1
-
-Initalize with a default value
-
- Rc = O.new
- p Rc[:hello] #=> nil
- Rc = O.new 1
- p Rc[:hello] #=> 1
- p Rc.hello #=> <#O> be careful here
-
-### Assignment & Access ###
-
-Flexibility has been built in to allow for various ways to assign configuration
-data values and access the same values within your application. Here are some
-examples of how this can be done:
-
-Assignment:
-
- Rc.age 1
- Rc.age = 1
- Rc[:age] = 1
- Rc["age"] = 1
-
-Access:
-
- Rc.age #=> 1
- Rc.age? #=> true
- Rc[:age] #=> 1
- Rc["age"] #=> 1
- ---
- O do |c|
- age 2
- c.age = 2
- c[:age] = 2
- end
-
-### Node ###
-
- Rc = O.new
- Rc.a.b.c = 1
- p Rc.a.b.c #=> <#Fixnum 1>
- p Rc.a.b #=> <#O>
- p Rc.a #=> <#O>
- p Rc.i.dont.exists #=> <#O>
-
- Rc = O.new
- p Rc.a._empty? #=> true # if a node is empty?
- Rc.a.b = 1
- p Rc.a._empty? #=> false
- p O===Rc.a #=> true # if it is a node?
- p O===Rc.a.b #=> false
-
-### Variable & Path ###
-
- O do
- age 1
- p age #=> 1
- my do
- age 2
- friend do
- age 3
- p age #=> 3
- p __.age #=> 2 __ is relative up to 1 times
- p ___.age #=> 1 ___ and so on is relative up to 2 and so on times
- p _.age #=> 1 _ is root
- end
- end
- end
-
-### Namespace ###
-
-Either way is fine:
-
- O do
- mail.stmp.address "stmp.gmail.com"
- mail.stmp do
- address "stmp.gmail.com"
- end
- end
-
-Another namespace example:
-
- O do
- age 1
-
- my do
- age 2
- end
-
- my.friend do
- age 3
- end
- end
-
-
-### Group ###
-
-Use namespace or use some separate files like rails.
-
- config/
- applications.rb
- environments/
- development.rb
- test.rb
- production.rb
-
-### Computed attribute ###
-
- Rc = O do
- time proc{|n| Time.now}
- end
- p Rc.time # print current time. no need Rc.time.call()
- p Rc.time(2) # call time
- Rc.time = 2 # assign new value
- p Rc[:time] #=> <#Proc>
-
-### Semantic ###
-
- O do
- is_started no # yes ...
- end
-
-Note: for a list of semantic methods, see O::Semantics
-
-### Hash compatibility ###
-
-Internal, datas are stored as a Hash. You can access all hash methods via `_method`
-
- Rc = O.new
- Rc.a = 1
- Rc._child #=> {:a=>1}
-
- Rc._keys #=> [:a]
-
-### Temporarily change ###
-
- Rc.a = 1
- Rc._temp do
- Rc.a = 2
- end
- p Rc.a #=> 1
-
-
-### Access built-in method inside block ###
-
- Rc = O do
- sleep 10 # is a data. Rc.sleep #=> 10
- O.sleep 10 # call builtin 'sleep' method
- end
-
-Note: for a list of blocked methods, see O::BUILTIN_METHODS
-
-### Additional examples ###
-
- O do
- name do
- first "Guten"
- last "Ye"
- is "#{first} #{last}"
- end
- end
-
-\# file: a.rb
-
- c = self
- c.host = "localhost"
- c.port = 8080
- c.name do |c|
- c.first = "Guten"
- end
-
-Contributing
--------------
-
-* Feel free to join the project and make contributions (by submitting a pull request)
-* Submit any bugs/features/ideas to github issue tracker
-* Codeing style: https://gist.github.com/1105334
-
-Install
-----------
-
- gem install o
-
-Resources
----------
-
-* [konfigurator](https://github.com/nu7hatch/konfigurator) Small and flexible configuration toolkit inspired i.a. by Sinatra settings
-* [configatron](https://github.com/markbates/configatron) A super cool, simple, and feature rich configuration system for Ruby apps
-* [simpleconfig](https://github.com/lukeredpath/simpleconfig) make application-wide configuration settings easy to set and access in an object-oriented fashion
-* [configuration](https://github.com/ahoward/configuration) pure ruby scoped configuration files
-
-Copyright
----------
-Copyright © 2011 by Guten. this library released under MIT-LICENSE, See {file:LICENSE} for futher details.
+it renamed to optimism. new home page is [github.com/GutenYe/optimism](https://github.com/GutenYe/optimism)