123456789_123456789_123456789_123456789_123456789_

Class: Shell::Filter

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
self, Enumerable
Inherits: Object
Defined in: lib/shell/filter.rb

Overview

Any result of command execution is a Filter.

This class includes Enumerable, therefore a Filter object can use all Enumerable facilities.

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(sh) ⇒ Filter

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 23

def initialize(sh)
  @shell = sh         # parent shell
  @input = nil        # input filter
end

Instance Attribute Details

#input (rw)

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 28

attr_reader :input

#input=(filter) (rw)

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 30

def input=(filter)
  @input = filter
end

Instance Method Details

#+(filter2)

Outputs filter1, and then filter2 using Join.new

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 114

def +(filter)
  Join.new(@shell, self, filter)
end

#<(source)

Inputs from source, which is either a string of a file name or an IO object.

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 50

def <(src)
  case src
  when String
    cat = Cat.new(@shell, src)
    cat | self
  when IO
    self.input = src
    self
  else
    Shell.Fail Error::CantApplyMethod, "<", to.class
  end
end

#>(source)

Outputs from source, which is either a string of a file name or an IO object.

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 68

def >(to)
  case to
  when String
    dst = @shell.open(to, "w")
    begin
      each(){|l| dst << l}
    ensure
      dst.close
    end
  when IO
    each(){|l| to << l}
  else
    Shell.Fail Error::CantApplyMethod, ">", to.class
  end
  self
end

#>>(source)

Appends the output to source, which is either a string of a file name or an IO object.

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 90

def >>(to)
  begin
    Shell.cd(@shell.pwd).append(to, self)
  rescue CantApplyMethod
    Shell.Fail Error::CantApplyMethod, ">>", to.class
  end
end

#each(record_separator = nil) Also known as: #super_each

Iterates a block for each line.

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 38

def each(rs = nil)
  rs = @shell.record_separator unless rs
  if @input
    @input.each(rs){|l| yield l}
  end
end

#inspect

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 130

def inspect
  if @shell.debug.kind_of?(Integer) && @shell.debug > 2
    super
  else
    to_s
  end
end

#to_a

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 118

def to_a
  ary = []
  each(){|l| ary.push l}
  ary
end

#to_s

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 124

def to_s
  str = ""
  each(){|l| str.concat l}
  str
end

#|(filter)

Processes a pipeline.

[ GitHub ]

  
# File 'lib/shell/filter.rb', line 102

def |(filter)
  filter.input = self
  if active?
    @shell.process_controller.start_job filter
  end
  filter
end