o 2.0.1 → 2.0.2
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/README.md +10 -7
- data/lib/o.rb +2 -2
- data/lib/o/parser.rb +0 -1
- data/lib/o/version.rb +1 -1
- metadata +2 -3
- data/lib/o1.rb +0 -189
    
        data/README.md
    CHANGED
    
    | @@ -7,6 +7,8 @@ O, a configuration libraray for Ruby | |
| 7 7 | 
             
            **Documentation**: [http://rubydoc.info/gems/o/frames](http://rubydoc.info/gems/o/frames) <br/>
         | 
| 8 8 | 
             
            **Issue Tracker**: [https://github.com/GutenYe/o/issues](https://github.com/GutenYe/o/issues) <br/>
         | 
| 9 9 |  | 
| 10 | 
            +
            then name `o` comes from option/setting, short and handy, eh-ah~
         | 
| 11 | 
            +
             | 
| 10 12 | 
             
            Features
         | 
| 11 13 | 
             
            --------
         | 
| 12 14 |  | 
| @@ -22,11 +24,11 @@ do configuration at three levels: system, user, cmdline | |
| 22 24 |  | 
| 23 25 | 
             
            	lib/guten/rc.rb   # system level
         | 
| 24 26 | 
             
            	~/.gutenrc        # user level
         | 
| 25 | 
            -
            	$ guten --list | 
| 27 | 
            +
            	$ guten --list or ENV[GEMFILE]=x guten  # cmdline level
         | 
| 26 28 |  | 
| 27 29 | 
             
            	module Guten
         | 
| 28 30 | 
             
            		Rc = O.require("guten/rc") + O.require("~/.gutenrc")
         | 
| 29 | 
            -
            		Rc.list = true
         | 
| 31 | 
            +
            		Rc.list = true or Rc.gemfile = ENV[GEMFILE] # from cmdline.
         | 
| 30 32 | 
             
            	end
         | 
| 31 33 |  | 
| 32 34 |  | 
| @@ -62,7 +64,7 @@ alternative syntax | |
| 62 64 | 
             
            		c.time = proc{|offset| Time.now}
         | 
| 63 65 | 
             
            	end
         | 
| 64 66 |  | 
| 65 | 
            -
            a sugar syntax 
         | 
| 67 | 
            +
            a sugar syntax. _works in a file only_ 
         | 
| 66 68 |  | 
| 67 69 | 
             
            	# file: guten/rc.rb
         | 
| 68 70 | 
             
            	development:
         | 
| @@ -78,8 +80,9 @@ a sugar syntax | |
| 78 80 | 
             
            		username "guten"
         | 
| 79 81 | 
             
            	end
         | 
| 80 82 |  | 
| 81 | 
            -
             | 
| 83 | 
            +
            this is not pure ruby syntax, but it works.
         | 
| 82 84 |  | 
| 85 | 
            +
            **WARNNING**:  must use \t to indent for this sugar syntax.
         | 
| 83 86 |  | 
| 84 87 | 
             
            ### initialize ###
         | 
| 85 88 |  | 
| @@ -136,9 +139,9 @@ either way is fine | |
| 136 139 | 
             
            			friend do
         | 
| 137 140 | 
             
            				age 3
         | 
| 138 141 | 
             
            				p age     #=> 3
         | 
| 139 | 
            -
            				p __.age  #=> 2  relative
         | 
| 140 | 
            -
            				p ___.age #=> 1
         | 
| 141 | 
            -
            				p _.age   #=> 1  root
         | 
| 142 | 
            +
            				p __.age  #=> 2  __ is relative up to 1 times
         | 
| 143 | 
            +
            				p ___.age #=> 1  ___ and so on is relative up to 2 and so on times
         | 
| 144 | 
            +
            				p _.age   #=> 1  _ is root
         | 
| 142 145 | 
             
            			end
         | 
| 143 146 | 
             
            		end
         | 
| 144 147 | 
             
            	end
         | 
    
        data/lib/o.rb
    CHANGED
    
    | @@ -9,7 +9,7 @@ class O | |
| 9 9 | 
             
            	Error 		= Class.new Exception 
         | 
| 10 10 | 
             
            	LoadError = Class.new Error
         | 
| 11 11 |  | 
| 12 | 
            -
            	BUILTIN_METHODS = [ :p, : | 
| 12 | 
            +
            	BUILTIN_METHODS = [ :p, :raise, :sleep, :rand, :srand, :exit, :require, :at_exit, :autoload, :open]
         | 
| 13 13 |  | 
| 14 14 | 
             
            	class << self
         | 
| 15 15 | 
             
            		public *BUILTIN_METHODS 
         | 
| @@ -189,7 +189,7 @@ class O | |
| 189 189 | 
             
            	# .a.b.c
         | 
| 190 190 | 
             
            	#
         | 
| 191 191 | 
             
            	def method_missing name, *args, &blk
         | 
| 192 | 
            -
            		#O. | 
| 192 | 
            +
            		#O.p d 'missing', name, args, blk
         | 
| 193 193 |  | 
| 194 194 | 
             
            		# path: root
         | 
| 195 195 | 
             
            		if name == :_
         | 
    
        data/lib/o/parser.rb
    CHANGED
    
    
    
        data/lib/o/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            name: o
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 4 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 2.0. | 
| 5 | 
            +
              version: 2.0.2
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors: 
         | 
| 8 8 | 
             
            - Guten
         | 
| @@ -10,7 +10,7 @@ autorequire: | |
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 12 |  | 
| 13 | 
            -
            date: 2011-07- | 
| 13 | 
            +
            date: 2011-07-26 00:00:00 Z
         | 
| 14 14 | 
             
            dependencies: []
         | 
| 15 15 |  | 
| 16 16 | 
             
            description: |
         | 
| @@ -36,7 +36,6 @@ files: | |
| 36 36 | 
             
            - lib/o/parser.rb
         | 
| 37 37 | 
             
            - lib/o/semantics.rb
         | 
| 38 38 | 
             
            - lib/o/version.rb
         | 
| 39 | 
            -
            - lib/o1.rb
         | 
| 40 39 | 
             
            - o.gemspec
         | 
| 41 40 | 
             
            - o.watchr
         | 
| 42 41 | 
             
            - spec/data/home/gutenrc
         | 
    
        data/lib/o1.rb
    DELETED
    
    | @@ -1,189 +0,0 @@ | |
| 1 | 
            -
            #
         | 
| 2 | 
            -
            # internal: store data in a Hash, the key of the Hash is always converted to symbol.
         | 
| 3 | 
            -
            #
         | 
| 4 | 
            -
            #
         | 
| 5 | 
            -
            #
         | 
| 6 | 
            -
            class O < Hash
         | 
| 7 | 
            -
            	autoload :VERSION,	"o/version"
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            	# PATH for O.load
         | 
| 10 | 
            -
            	PATH = []
         | 
| 11 | 
            -
            	Error = Exception.new 
         | 
| 12 | 
            -
            	LoadError = Exception.new(Error)
         | 
| 13 | 
            -
             | 
| 14 | 
            -
            	class O_Eval
         | 
| 15 | 
            -
            		def _data
         | 
| 16 | 
            -
            			_data = {}
         | 
| 17 | 
            -
            			self.instance_variables.each do |k|
         | 
| 18 | 
            -
            				key = k[1..-1].to_sym
         | 
| 19 | 
            -
            				value = self.instance_variable_get(k)
         | 
| 20 | 
            -
            				_data[key] = value 
         | 
| 21 | 
            -
            			end
         | 
| 22 | 
            -
            			_data
         | 
| 23 | 
            -
            		end
         | 
| 24 | 
            -
            	end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
            	class << self
         | 
| 27 | 
            -
            		# convert <#Hash> to <#O>
         | 
| 28 | 
            -
            		#
         | 
| 29 | 
            -
            		# @param [hash] hash
         | 
| 30 | 
            -
            		# @return O
         | 
| 31 | 
            -
            		def from_hash hash
         | 
| 32 | 
            -
            			o = O.new
         | 
| 33 | 
            -
            			o._replace hash
         | 
| 34 | 
            -
            		end
         | 
| 35 | 
            -
             | 
| 36 | 
            -
            		# load a configuration file,
         | 
| 37 | 
            -
            		# support PATH, and '~/.gutenrc'
         | 
| 38 | 
            -
            		#
         | 
| 39 | 
            -
            		# first try name.rb, then use name
         | 
| 40 | 
            -
            		#
         | 
| 41 | 
            -
            		# @example
         | 
| 42 | 
            -
            		#   option = O.load("~/.gutenrc")
         | 
| 43 | 
            -
            		#
         | 
| 44 | 
            -
            		#   option = O.load("/absolute/path/a.rb")
         | 
| 45 | 
            -
            		#   
         | 
| 46 | 
            -
            		#   O::Path << "/home"
         | 
| 47 | 
            -
            		#   option = O.load("guten")  #=> try guten.rb; then try guten
         | 
| 48 | 
            -
            		#   option = O.load("guten.rb")
         | 
| 49 | 
            -
            		#
         | 
| 50 | 
            -
            		# @param [String] name
         | 
| 51 | 
            -
            		# @return [O]
         | 
| 52 | 
            -
            		def load name
         | 
| 53 | 
            -
            			path = nil
         | 
| 54 | 
            -
            			if name =~ /^~/
         | 
| 55 | 
            -
            				file = File.expand_path(name)
         | 
| 56 | 
            -
            				path = file if File.exists?(file)
         | 
| 57 | 
            -
            			elsif File.absolute_path(name) == name
         | 
| 58 | 
            -
            				path = name if File.exists?(name)
         | 
| 59 | 
            -
            			else
         | 
| 60 | 
            -
            				catch :break do
         | 
| 61 | 
            -
            					PATH.each  do |p|
         | 
| 62 | 
            -
            						['.rb', ''].each {|ext|
         | 
| 63 | 
            -
            							file = File.join(p, name+ext)
         | 
| 64 | 
            -
            							if File.exists? file
         | 
| 65 | 
            -
            								path = file
         | 
| 66 | 
            -
            								throw :break
         | 
| 67 | 
            -
            							end
         | 
| 68 | 
            -
            						}
         | 
| 69 | 
            -
            					end
         | 
| 70 | 
            -
            				end
         | 
| 71 | 
            -
            			end
         | 
| 72 | 
            -
             | 
| 73 | 
            -
            			raise LoadError, "can't find file -- #{name}" unless path
         | 
| 74 | 
            -
             | 
| 75 | 
            -
            			eval_file path
         | 
| 76 | 
            -
            		end
         | 
| 77 | 
            -
             | 
| 78 | 
            -
            		# relative load a configuration file
         | 
| 79 | 
            -
            		# @see load
         | 
| 80 | 
            -
            		#
         | 
| 81 | 
            -
            		# @param [String] name
         | 
| 82 | 
            -
            		# @return [O] option
         | 
| 83 | 
            -
            		def relative_load name
         | 
| 84 | 
            -
            			pd caller if $TEST
         | 
| 85 | 
            -
            			a,file, line, method = caller[0].match(/^(.*):(\d+):.*`(.*)'$/).to_a
         | 
| 86 | 
            -
            			raise LoadError, "#{type} is called in #{file}" if file=~/\(.*\)/ # eval, etc.
         | 
| 87 | 
            -
             | 
| 88 | 
            -
            			file = File.readlink(file) if File.symlink?(file)
         | 
| 89 | 
            -
             | 
| 90 | 
            -
            			path = nil
         | 
| 91 | 
            -
            			[".rb", ""].each do |ext|
         | 
| 92 | 
            -
            				f = File.absolute_path(File.join(File.dirname(file), name+ext))
         | 
| 93 | 
            -
            				if File.exists?(f)
         | 
| 94 | 
            -
            					path = f
         | 
| 95 | 
            -
            					break
         | 
| 96 | 
            -
            				end
         | 
| 97 | 
            -
            			end
         | 
| 98 | 
            -
             | 
| 99 | 
            -
            			raise LoadError, "can't find file -- #{name}" unless path
         | 
| 100 | 
            -
             | 
| 101 | 
            -
            			eval_file path
         | 
| 102 | 
            -
            		end
         | 
| 103 | 
            -
             | 
| 104 | 
            -
            		private
         | 
| 105 | 
            -
            		def eval_file path
         | 
| 106 | 
            -
            			content = File.open(path){|f| f.read}
         | 
| 107 | 
            -
            			o_eval = O_Eval.new
         | 
| 108 | 
            -
            			o_eval.instance_eval(content)
         | 
| 109 | 
            -
            			O.from_hash(o_eval._data)
         | 
| 110 | 
            -
            		end
         | 
| 111 | 
            -
             | 
| 112 | 
            -
            	end
         | 
| 113 | 
            -
             | 
| 114 | 
            -
            	attr_reader :_data
         | 
| 115 | 
            -
             | 
| 116 | 
            -
            	def initialize default=nil, &blk
         | 
| 117 | 
            -
            		@_data = Hash.new(default)
         | 
| 118 | 
            -
            		if blk
         | 
| 119 | 
            -
            			o_eval = O_Eval.new
         | 
| 120 | 
            -
            			o_eval.instance_eval &blk
         | 
| 121 | 
            -
            			@_data.merge!(o_eval._data)
         | 
| 122 | 
            -
            		end
         | 
| 123 | 
            -
            	end
         | 
| 124 | 
            -
             | 
| 125 | 
            -
            	def []= key, value
         | 
| 126 | 
            -
            		@_data[key.to_sym] = value
         | 
| 127 | 
            -
            	end
         | 
| 128 | 
            -
             | 
| 129 | 
            -
            	def [] key
         | 
| 130 | 
            -
            		@_data[key.to_sym]
         | 
| 131 | 
            -
            	end
         | 
| 132 | 
            -
             | 
| 133 | 
            -
            	def + other
         | 
| 134 | 
            -
            		O.new(@_data, other._data)
         | 
| 135 | 
            -
            	end
         | 
| 136 | 
            -
             | 
| 137 | 
            -
            	def _replace data
         | 
| 138 | 
            -
            		case data
         | 
| 139 | 
            -
            		when Hash
         | 
| 140 | 
            -
            			@_data = data
         | 
| 141 | 
            -
            		when O
         | 
| 142 | 
            -
            			@_data = data._data
         | 
| 143 | 
            -
            		end
         | 
| 144 | 
            -
            		self
         | 
| 145 | 
            -
            	end
         | 
| 146 | 
            -
             | 
| 147 | 
            -
            	#
         | 
| 148 | 
            -
            	# _method goes to @_data.send(_method, ..)
         | 
| 149 | 
            -
            	# method? #=> !! @_data[:method]
         | 
| 150 | 
            -
            	# method #=> @_data[:method]
         | 
| 151 | 
            -
            	# method=value #=> @_data[:method]=value
         | 
| 152 | 
            -
            	#
         | 
| 153 | 
            -
            	def method_missing method, *args, &blk
         | 
| 154 | 
            -
            		if method =~ /(.*)=$/
         | 
| 155 | 
            -
            			@_data[$1.to_sym] = args[0]
         | 
| 156 | 
            -
            		elsif method =~ /(.*)\?$/
         | 
| 157 | 
            -
            			!! @_data[$1.to_sym]
         | 
| 158 | 
            -
            		elsif method =~ /^_(.*)/
         | 
| 159 | 
            -
            			method = $1.to_sym
         | 
| 160 | 
            -
            			args.map!{|arg| O===arg ? arg._data : arg} 
         | 
| 161 | 
            -
            			rst = @_data.send(method, *args, &blk)
         | 
| 162 | 
            -
             | 
| 163 | 
            -
            			if [:merge!].include method
         | 
| 164 | 
            -
            				self
         | 
| 165 | 
            -
            			elsif [:merge].include method
         | 
| 166 | 
            -
            				O.new(rst)
         | 
| 167 | 
            -
            			end
         | 
| 168 | 
            -
            		else
         | 
| 169 | 
            -
            			@_data[method]
         | 
| 170 | 
            -
            		end
         | 
| 171 | 
            -
            	end
         | 
| 172 | 
            -
             | 
| 173 | 
            -
            	def inspect 
         | 
| 174 | 
            -
            		rst = "<#O "
         | 
| 175 | 
            -
            		@_data.each do |k,v|
         | 
| 176 | 
            -
            			rst << "#{k}:#{v.inspect} "
         | 
| 177 | 
            -
            		end
         | 
| 178 | 
            -
            		rst << " >" 
         | 
| 179 | 
            -
            	end
         | 
| 180 | 
            -
             | 
| 181 | 
            -
            	alias to_s inspect
         | 
| 182 | 
            -
             | 
| 183 | 
            -
            end
         | 
| 184 | 
            -
             | 
| 185 | 
            -
            module Kernel
         | 
| 186 | 
            -
            	def O default=nil, &blk
         | 
| 187 | 
            -
            		O.new(default, &blk)
         | 
| 188 | 
            -
            	end
         | 
| 189 | 
            -
            end
         |