Returns a new hash with the nil values/key pairs removed
h = { a: 1, b: false, c: nil } h.compact #=> { a: 1, b: false } h #=> { a: 1, b: false, c: nil }
Removes all nil values from the hash. Returns nil if no changes were made, otherwise returns the hash.
h = { a: 1, b: false, c: nil } h.compact! #=> { a: 1, b: false }
Returns true
if the given key is present in hsh.
h = { "a" => 100, "b" => 200 } h.has_key?("a") #=> true h.has_key?("z") #=> false
Note that include?
and member?
do not test member equality using ==
as do other Enumerables.
See also Enumerable#include?
Removes every environment variable; returns ENV:
ENV.replace('foo' => '0', 'bar' => '1') ENV.size # => 2 ENV.clear # => ENV ENV.size # => 0
Returns a copy of the environment for entries where the block returns true.
Returns an Enumerator
if no block was given.
ENV.filter
is an alias for ENV.select
.
Equivalent to ENV.keep_if
but returns nil
if no changes were made.
ENV.filter!
is an alias for ENV.select!
.
Returns a copy of the environment for entries where the block returns true.
Returns an Enumerator
if no block was given.
ENV.filter
is an alias for ENV.select
.
Equivalent to ENV.keep_if
but returns nil
if no changes were made.
ENV.filter!
is an alias for ENV.select!
.
Returns a new hash created by using environment variable names as values and values as names.
Adds the contents of hash
to the environment variables. If no block is specified entries with duplicate keys are overwritten, otherwise the value of each duplicate name is determined by calling the block with the key, its value from the environment and its value from the hash.
Returns true when there are no environment variables
ENV.has_key?
, ENV.member?
, and ENV.key?
are aliases for ENV.include?
.
Returns true
if there is an environment variable with the given name
:
ENV.replace('foo' => '0', 'bar' => '1') ENV.include?('foo') # => true
Returns false
if name
is a valid String
and there is no such environment variable:
ENV.include?('baz') # => false
Returns false
if name
is the empty String
or is a String
containing character '='
:
ENV.include?('') # => false ENV.include?('=') # => false
Raises an exception if name
is a String
containing the NUL character "\0"
:
ENV.include?("\0") # Raises ArgumentError (bad environment variable name: contains null byte)
Raises an exception if name
has an encoding that is not ASCII-compatible:
ENV.include?("\xa1\xa1".force_encoding(Encoding::UTF_16LE)) # Raises ArgumentError (bad environment variable name: ASCII incompatible encoding: UTF-16LE)
Raises an exception if name
is not a String:
ENV.include?(Object.new) # TypeError (no implicit conversion of Object into String)
Returns the ARGV
array, which contains the arguments passed to your script, one per element.
For example:
$ ruby argf.rb -v glark.txt ARGF.argv #=> ["-v", "glark.txt"]
Reads the next character from ARGF
and returns it as a String
. Raises an EOFError
after the last character of the last file has been read.
For example:
$ echo "foo" > file $ ruby argf.rb file ARGF.readchar #=> "f" ARGF.readchar #=> "o" ARGF.readchar #=> "o" ARGF.readchar #=> "\n" ARGF.readchar #=> end of file reached (EOFError)
Seeks to offset amount (an Integer
) in the ARGF
stream according to the value of whence. See IO#seek
for further details.
Returns the current filename. “-” is returned when the current file is STDIN.
For example:
$ echo "foo" > foo $ echo "bar" > bar $ echo "glark" > glark $ ruby argf.rb foo bar glark ARGF.filename #=> "foo" ARGF.read(5) #=> "foo\nb" ARGF.filename #=> "bar" ARGF.skip ARGF.filename #=> "glark"
Closes the current file and skips to the next file in ARGV. If there are no more files to open, just closes the current file. STDIN
will not be closed.
For example:
$ ruby argf.rb foo bar ARGF.filename #=> "foo" ARGF.close ARGF.filename #=> "bar" ARGF.close
Returns true if the current file has been closed; false otherwise. Use ARGF.close
to actually close the current file.
Synonym for $stdin.
This method is an alias for http_header
, when HTML5
tag maker is inactive.
NOTE: use http_header
to create HTTP header blocks, this alias is only provided for backwards compatibility.
Using header
with the HTML5
tag maker will create a <header> element.
This method is a convenience for building Unix-like filters for CSV
data. Each row is yielded to the provided block which can alter it as needed. After the block returns, the row is appended to output
altered or not.
The input
and output
arguments can be anything CSV::new()
accepts (generally String
or IO
objects). If not given, they default to ARGF
and $stdout
.
The options
parameter is also filtered down to CSV::new()
after some clever key parsing. Any key beginning with :in_
or :input_
will have that leading identifier stripped and will only be used in the options
Hash
for the input
object. Keys starting with :out_
or :output_
affect only output
. All other keys are assigned to both objects.
The :output_row_sep
option
defaults to $INPUT_RECORD_SEPARATOR
($/
).
This method wraps a String
you provide, or an empty default String
, in a CSV
object which is passed to the provided block. You can use the block to append CSV
rows to the String
and when the block exits, the final String
will be returned.
Note that a passed String
is modified by this method. Call dup() before passing if you need a new String
.
The options
parameter can be anything CSV::new()
understands. This method understands an additional :encoding
parameter when not passed a String
to set the base Encoding
for the output. CSV
needs this hint if you plan to output non-ASCII compatible data.
This method opens an IO
object, and wraps that with CSV
. This is intended as the primary interface for writing a CSV
file.
You must pass a filename
and may optionally add a mode
for Ruby’s open(). You may also pass an optional Hash
containing any options
CSV::new()
understands as the final argument.
This method works like Ruby’s open() call, in that it will pass a CSV
object to a provided block and close it when the block terminates, or it will return the CSV
object when no block is provided. (Note: This is different from the Ruby 1.8 CSV
library which passed rows to the block. Use CSV::foreach()
for that behavior.)
You must provide a mode
with an embedded Encoding
designator unless your data is in Encoding::default_external()
. CSV
will check the Encoding
of the underlying IO
object (set by the mode
you pass) to determine how to parse the data. You may provide a second Encoding
to have the data transcoded as it is read just as you can with a normal call to IO::open()
. For example, "rb:UTF-32BE:UTF-8"
would read UTF-32BE data from the file but transcode it to UTF-8 before CSV
parses it.
An opened CSV
object will delegate to many IO
methods for convenience. You may call: