lib/rio/file.rb in rio-0.3.7 vs lib/rio/file.rb in rio-0.3.8
- old
+ new
@@ -1,8 +1,8 @@
#--
# ===============================================================================
-# Copyright (c) 2005, Christopher Kleckner
+# Copyright (c) 2005, 2006 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
@@ -20,11 +20,11 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# ===============================================================================
#++
#
# To create the documentation for Rio run the command
-# rake rdoc
+# ruby build_doc.rb
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
#
# Suggested Reading
# * RIO::Doc::SYNOPSIS
# * RIO::Doc::INTRO
@@ -33,46 +33,86 @@
#
# <b>Rio is pre-alpha software.
# The documented interface and behavior is subject to change without notice.</b>
+require 'rio/state'
require 'rio/ops/path'
require 'rio/ops/file'
module RIO
module File #:nodoc: all
class Base < State::Base
include Ops::Path::Str
+ protected
+
+ def stream_rl_
+ #RIO::File::RL.new(self.to_uri,{:fs => self.fs})
+ self.rl.file_rl
+ end
+
+ public
+
def fstream()
- self.rl = RIO::File::RL.new(self.to_uri)
+ #p self.rl.class
+ self.rl = self.stream_rl_
become 'Path::Stream::Open'
-# become 'Stream::Open'
end
- def when_missing(sym,*args) fstream() end
+
+ def when_missing(sym,*args)
+ fstream()
+ end
end
class NonExisting < Base
include Ops::File::NonExisting
def check?() !exist? end
end
class Existing < Base
include Ops::File::Existing
+ include Enumerable
+
def check?() self.file? end
+ def handle_skipped
+ return self unless cx.has_key?('skip_args')
+ args = cx['skip_args'] || []
+ self.skipentries(*args)
+ end
+ def [](*args)
+ #p "#{callstr('[]',*args)} ss_type=#{ss_type?}"
+ if _using_files_with_a_file
+ unless args.empty?
+ ss_args = cx['ss_args'] = args
+ return self.files(*ss_args).to_a
+ else
+ return to_a()
+ end
+ else
+ fstream[*args]
+ end
+
+ end
def each(*args,&block)
#p "#{callstr('each',*args)} ss_type=#{ss_type?}"
- if ss_type? == 'files' and !stream_iter?
- #sel = Match::Entry::Selector.new(cx['sel'],cx['nosel'])
+ if _using_files_with_a_file
+ handle_skipped()
sel = Match::Entry::Selector.new(cx['entry_sel'])
yield new_rio_cx(self) if sel.match?(self)
else
fstream.each(*args,&block)
end
end
+
+ private
+
+ def _using_files_with_a_file
+ ss_type? == 'files' and !stream_iter?
+ end
end
end
-end # module RIO
+end