класс YAML::DBM
YAML::DBM предоставляет тот же интерфейс, что и ::DBM.
Однако, в то время как DBM допускает только строки для ключей и значений, эта библиотека позволяет использовать большинство объектов Ruby для значений, предварительно преобразовав их в YAML. Ключи должны быть строками.
Преобразование в YAML и из него выполняется автоматически.
См. документацию для ::DBM и ::YAML для получения дополнительной информации.
Публичные методы экземпляров
# File lib/yaml/dbm.rb, line 29
def []( key )
fetch( key )
end Возвращает значение, связанное с key в базе данных.
Возвращает nil, если такого key нет.
См. fetch для получения дополнительной информации.
# File lib/yaml/dbm.rb, line 102
def delete( key )
v = super( key )
if String === v
v = YAML.load( v )
end
v
end Удаляет значение из базы данных, связанное с key.
Возвращает значение или nil.
# File 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 Вызывает заданный блок один раз для каждой пары key, value в базе данных. Удаляет все записи, для которых блок возвращает true.
Возвращает self.
# File lib/yaml/dbm.rb, line 140
def each_pair # :yields: [key, value]
keys.each { |k| yield k, fetch( k ) }
self
end Вызывает заданный блок один раз для каждой пары key, value в базе данных.
Возвращает self.
# File lib/yaml/dbm.rb, line 151
def each_value # :yields: value
super { |v| yield YAML.load( v ) }
self
end Вызывает заданный блок для каждого значения в базе данных.
Возвращает self.
# File 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 Возвращает значение, связанное с key.
Если для key нет значения и блок не задан, возвращает ifnone.
В противном случае, вызывает блок, передавая заданный key.
См. ::DBM#fetch для получения дополнительной информации.
# File lib/yaml/dbm.rb, line 168
def has_value?( val )
each_value { |v| return true if v == val }
return false
end Возвращает true, если указанное value найдено в базе данных.
# File lib/yaml/dbm.rb, line 76
def index( keystr )
super( keystr.to_yaml )
end Устаревшее, используйте YAML::DBM#key вместо этого.
Примечание: YAML::DBM#index выдает предупреждение из внутренностей ::DBM#index. В нём сказано «DBM#index устарел; используйте DBM#key», но DBM#key ведет себя не так, как DBM#index.
# File lib/yaml/dbm.rb, line 181
def invert
h = {}
keys.each { |k| h[ self.fetch( k ) ] = k }
h
end Возвращает Hash (не базу данных DBM), созданный с использованием каждого значения в базе данных в качестве ключа, а соответствующий ключ в качестве его значения.
Обратите внимание, что все значения в хэше будут строками, но ключи будут фактическими объектами.
# File lib/yaml/dbm.rb, line 84
def key( keystr )
invert[keystr]
end Возвращает ключ для указанного значения.
# File lib/yaml/dbm.rb, line 129
def reject
hsh = self.to_hash
hsh.reject { |k,v| yield k, v }
end Преобразует содержимое базы данных в хранящийся в памяти Hash, а затем вызывает Hash#reject с указанным кодовым блоком, возвращая новый Hash.
# File 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 Если предоставлен блок, возвращает новый массив, содержащий пары [ключ, значение], для которых блок возвращает true.
В противном случае, то же, что и values_at
# File lib/yaml/dbm.rb, line 205
def shift
a = super
a[1] = YAML.load( a[1] ) if a
a
end Удаляет пару [ключ, значение] из базы данных и возвращает её. Если база данных пуста, возвращает nil.
Порядок, в котором значения удаляются/возвращаются, не гарантируется.
# File lib/yaml/dbm.rb, line 234
def store( key, val )
super( key, val.to_yaml )
val
end Сохраняет value в базе данных с key в качестве индекса. value преобразуется в YAML перед сохранением.
Возвращает value
# File lib/yaml/dbm.rb, line 259
def to_a
a = []
keys.each { |k| a.push [ k, self.fetch( k ) ] }
a
end Преобразует содержимое базы данных в массив массивов [ключ, значение] и возвращает его.
# File lib/yaml/dbm.rb, line 271
def to_hash
h = {}
keys.each { |k| h[ k ] = self.fetch( k ) }
h
end Преобразует содержимое базы данных в хранящийся в памяти объект Hash и возвращает его.
# File lib/yaml/dbm.rb, line 160
def values
super.collect { |v| YAML.load( v ) }
end Возвращает массив значений из базы данных.
# File lib/yaml/dbm.rb, line 92
def values_at( *keys )
keys.collect { |k| fetch( k ) }
end Возвращает массив, содержащий значения, связанные с заданными ключами.
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.