Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
DBM
YAML::DBM provides the same interface as ::DBM.
However, while DBM only allows strings for both keys and values, this library allows one to use most Ruby objects for values by first converting them to YAML. Keys must be strings.
Conversion to and from YAML is performed automatically.
See the documentation for ::DBM and ::YAML for more information.
Return value associated with key
from database.
Returns nil
if there is no such key
.
# File yaml/dbm.rb, line 23 def []( key ) fetch( key ) end
Set key
to value
in database.
value
will be converted to YAML
before storage.
# File yaml/dbm.rb, line 33 def []=( key, val ) store( key, val ) end
Deletes value from database associated with key
.
Returns value or nil
.
# File yaml/dbm.rb, line 72 def delete( key ) v = super( key ) if String === v v = YAML.load( v ) end v end
Calls the given block once for each key
, value
pair in the database. Deletes all entries for which the block returns true.
Returns self
.
# File yaml/dbm.rb, line 84 def delete_if # :yields: [key, value] del_keys = keys.dup del_keys.delete_if { |k| yield( k, fetch( k ) ) == false } del_keys.each { |k| delete( k ) } self end
Calls the given block once for each key
, value
pair in the database.
Returns self
.
# File yaml/dbm.rb, line 101 def each_pair # :yields: [key, value] keys.each { |k| yield k, fetch( k ) } self end
Calls the given block for each value in database.
Returns self
.
# File yaml/dbm.rb, line 109 def each_value # :yields: value super { |v| yield YAML.load( v ) } self end
Return value associated with key
.
If there is no value for key
and no block is given, returns
ifnone
.
Otherwise, calls block passing in the given key
.
# File yaml/dbm.rb, line 46 def fetch( keystr, ifnone = nil ) begin val = super( keystr ) return YAML.load( val ) if String === val rescue IndexError end if block_given? yield keystr else ifnone end end
Returns true if specified value is found in the database.
# File yaml/dbm.rb, line 120 def has_value?( val ) each_value { |v| return true if v == val } return false end
Deprecated, used YAML::DBM#key instead.
# File yaml/dbm.rb, line 60 def index( keystr ) super( keystr.to_yaml ) end
Returns a Hash (not a DBM database) created by using each value in the database as a key, with the corresponding key as its value.
Note that all values in the hash will be Strings, but the keys will be actual objects.
# File yaml/dbm.rb, line 130 def invert h = {} keys.each { |k| h[ self.fetch( k ) ] = k } h end
Converts the contents of the database to an in-memory Hash, then calls Hash#reject with the specified code block, returning a new Hash.
# File yaml/dbm.rb, line 93 def reject hsh = self.to_hash hsh.reject { |k,v| yield k, v } end
Replaces the contents of the database with the contents of the specified object. Takes any object which implements the #each_pair method, including Hash and DBM objects.
# File yaml/dbm.rb, line 139 def replace( hsh ) clear update( hsh ) end
If a block is provided, returns a new array containing [key, value] pairs for which the block returns true.
Otherwise, same as values_at
# File yaml/dbm.rb, line 162 def select( *keys ) if block_given? self.keys.collect { |k| v = self[k]; [k, v] if yield k, v }.compact else values_at( *keys ) end end
Removes a [key, value] pair from the database, and returns it. If the
database is empty, returns nil
.
The order in which values are removed/returned is not guaranteed.
# File yaml/dbm.rb, line 148 def shift a = super a[1] = YAML.load( a[1] ) if a a end
Stores value
in database with key
as the index.
value
is converted to YAML before
being stored.
Returns value
# File yaml/dbm.rb, line 177 def store( key, val ) super( key, val.to_yaml ) val end
Converts the contents of the database to an array of [key, value] arrays, and returns it.
# File yaml/dbm.rb, line 196 def to_a a = [] keys.each { |k| a.push [ k, self.fetch( k ) ] } a end
Converts the contents of the database to an in-memory Hash object, and returns it.
# File yaml/dbm.rb, line 205 def to_hash h = {} keys.each { |k| h[ k ] = self.fetch( k ) } h end
Updates the database with multiple values from the specified object. Takes any object which implements the #each_pair method, including Hash and DBM objects.
Returns self
.
# File yaml/dbm.rb, line 187 def update( hsh ) hsh.keys.each do |k| self.store( k, hsh.fetch( k ) ) end self end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.