YAML + DBM = YDBM
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.
Methods
- #
-
- D
-
- E
-
- F
-
- H
-
- I
-
- K
-
- R
-
- S
-
- T
-
- U
-
- V
-
Constants
Instance Public methods
Return value associated with key
from database.
Returns nil
if there is no such key
.
Set key
to value
in
database.
value
will be converted to YAML before storage.
Source:
show
| on GitHub
def []=( key, val )
store( key, val )
end
Deletes value from database associated with key
.
Returns value or nil
.
Source:
show
| on GitHub
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
.
Source:
show
| on GitHub
def delete_if
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
.
Source:
show
| on GitHub
def each_pair
keys.each { |k| yield k, fetch( k ) }
self
end
Calls the given block for each value in database.
Returns self
.
Source:
show
| on GitHub
def each_value
super { |v| yield YAML.load( v ) }
self
end
fetch( key, ifnone = nil )
fetch( key, &block )
Link
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
.
Source:
show
| on GitHub
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.
Source:
show
| on GitHub
def has_value?( val )
each_value { |v| return true if v == val }
return false
end
Deprecated, used #key instead.
Note: #index makes warning from
internal of ::DBM#index. It says 'DBM#index is deprecated; use #key', but #key behaves not same as #index.
Source:
show
| on GitHub
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.
Source:
show
| on GitHub
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.
Source:
show
| on GitHub
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.
Source:
show
| on GitHub
def replace( hsh )
clear
update( hsh )
end
select( &block )
select( *keys )
Link
If a block is provided, returns a new array containing [key, value] pairs
for which the block returns true.
Otherwise, same as values_at
Source:
show
| on GitHub
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.
Source:
show
| on GitHub
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
Source:
show
| on GitHub
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.
Source:
show
| on GitHub
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.
Source:
show
| on GitHub
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
.
Source:
show
| on GitHub
def update( hsh )
hsh.each_pair do |k,v|
self.store( k, v )
end
self
end
Returns an array of values from the database.
Source:
show
| on GitHub
def values
super.collect { |v| YAML.load( v ) }
end
Returns an array containing the values associated with the given keys.
Source:
show
| on GitHub
def values_at( *keys )
keys.collect { |k| fetch( k ) }
end