lib/rio/grande.rb in rio-0.3.8 vs lib/rio/grande.rb in rio-0.3.9

- old
+ new

@@ -1,8 +1,8 @@ #-- # =============================================================================== -# Copyright (c) 2005, 2006 Christopher Kleckner +# Copyright (c) 2005,2006,2007 Christopher Kleckner # All rights reserved # # This file is part of the Rio library for ruby. # # Rio is free software; you can redistribute it and/or modify @@ -21,37 +21,57 @@ # =============================================================================== #++ # # To create the documentation for Rio run the command # ruby build_doc.rb -# from the distribution directory. Then point your browser at the 'doc/rdoc' directory. +# from the distribution directory. # # Suggested Reading # * RIO::Doc::SYNOPSIS # * RIO::Doc::INTRO # * RIO::Doc::HOWTO +# * RIO::Doc::EXAMPLES # * RIO::Rio # -# <b>Rio is pre-alpha software. -# The documented interface and behavior is subject to change without notice.</b> require 'rio/match' module RIO module Grande #:nodoc: all include Match::Common def [](*args) #p "#{callstr('[]',*args)} ss_type=#{cx['ss_type']} stream_iter=#{stream_iter?}" ss_args = cx['ss_args'] = args + rtn = nil if ss_args and (ss_type = ss_type?(_ss_keys())) - return self.__send__(ss_type,*(ss_args)).to_a + rtn = self.__send__(ss_type,*(ss_args)).to_a else - return to_a() + rtn = to_a() end + _ss_returns_first? ? _ss_return_first(rtn) : rtn end + private + + def _ss_return_first(ary) + _ss_clear_single_return() + ary[0] + end + + SINGLE_RETURN_KEYS = %[line record row] + + def _ss_clear_single_return + SINGLE_RETURN_KEYS.each do |key| + cx.delete(key) + end + end + + def _ss_returns_first? + cx['line'] || cx['record'] || cx['row'] + end + def fixnumss(*args) - #p "#{callstr('[]',*args)} ss_type=#{cx['ss_type']} stream_iter=#{stream_iter?}" + #p args[0].class,ss_type?(_ss_keys()) ss_args = cx['ss_args'] = args if ss_args.length == 1 and ss_args[0].kind_of?(Fixnum) and !cx.has_key?('dirlines') ans = nil ss_type = ss_type?(_ss_keys())