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())