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.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 29
def []( key )
fetch( key )
end
Return value associated with key
from database.
Returns nil
if there is no such key
.
See fetch
for more information.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 41
def []=( key, val )
store( key, val )
end
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 102
def delete( key )
v = super( key )
if String === v
v = YAML.load( v )
end
v
end
Deletes value from database associated with key
.
Returns value or nil
.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 117
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. Deletes all entries for which the block returns true.
Returns self
.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 140
def each_pair # :yields: [key, value]
keys.each { |k| yield k, fetch( k ) }
self
end
Calls the given block once for each key
, value
pair in the database.
Returns self
.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 151
def each_value # :yields: value
super { |v| yield YAML.load( v ) }
self
end
Calls the given block for each value in database.
Returns self
.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 56
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
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
.
See ::DBM#fetch
for more information.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 168
def has_value?( val )
each_value { |v| return true if v == val }
return false
end
Returns true if specified value
is found in the database.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 76
def index( keystr )
super( keystr.to_yaml )
end
Deprecated, used YAML::DBM#key
instead.
Note: YAML::DBM#index
makes warning from internal of ::DBM#index. It says ‘DBM#index is deprecated; use DBM#key
’, but DBM#key
behaves not same as DBM#index
.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 181
def invert
h = {}
keys.each { |k| h[ self.fetch( k ) ] = k }
h
end
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 84
def key( keystr )
invert[keystr]
end
Returns the key for the specified value.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 129
def reject
hsh = self.to_hash
hsh.reject { |k,v| yield k, v }
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 tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 193
def replace( hsh )
clear
update( hsh )
end
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 219
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
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 tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 205
def shift
a = super
a[1] = YAML.load( a[1] ) if a
a
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 tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 234
def store( key, val )
super( key, val.to_yaml )
val
end
Stores value
in database with key
as the index. value
is converted to YAML before being stored.
Returns value
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 259
def to_a
a = []
keys.each { |k| a.push [ k, self.fetch( k ) ] }
a
end
Converts the contents of the database to an array of [key, value] arrays, and returns it.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 271
def to_hash
h = {}
keys.each { |k| h[ k ] = self.fetch( k ) }
h
end
Converts the contents of the database to an in-memory Hash
object, and returns it.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 247
def update( hsh )
hsh.each_pair do |k,v|
self.store( k, v )
end
self
end
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 160
def values
super.collect { |v| YAML.load( v ) }
end
Returns an array of values from the database.
# File tmp/rubies/ruby-2.6.10/lib/yaml/dbm.rb, line 92
def values_at( *keys )
keys.collect { |k| fetch( k ) }
end
Returns an array containing the values associated with the given keys.