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