класс YAML::DBM
YAML + DBM = YDBM
YAML::DBM предоставляет тот же интерфейс, что и ::DBM.
Однако, в то время как DBM позволяет использовать только строки как для ключей, так и для значений, эта библиотека позволяет использовать большинство объектов Ruby в качестве значений, предварительно преобразуя их в YAML. Ключи должны быть строками.
Преобразование в YAML и из YAML выполняется автоматически.
См. документацию для ::DBM и ::YAML для получения дополнительной информации.
Общедоступные методы экземпляров
# File lib/yaml/dbm.rb, line 28
def []( key )
fetch( key )
end Возвращает значение, связанное с key в базе данных.
Возвращает nil, если такого key нет.
См. fetch для получения дополнительной информации.
# File lib/yaml/dbm.rb, line 40
def []=( key, val )
store( key, val )
end Установить key в value в базе данных.
value будет преобразовано в YAML перед сохранением.
См. store для получения дополнительной информации.
# File lib/yaml/dbm.rb, line 101
def delete( key )
v = super( key )
if String === v
v = YAML.load( v )
end
v
end Удаляет значение из базы данных, связанное с key.
Возвращает значение или nil.
# File lib/yaml/dbm.rb, line 116
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 139
def each_pair # :yields: [key, value]
keys.each { |k| yield k, fetch( k ) }
self
end Вызывает заданный блок один раз для каждой key, value пары в базе данных.
Возвращает self.
# File lib/yaml/dbm.rb, line 150
def each_value # :yields: value
super { |v| yield YAML.load( v ) }
self
end Вызывает заданный блок для каждого значения в базе данных.
Возвращает self.
# File lib/yaml/dbm.rb, line 55
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 167
def has_value?( val )
each_value { |v| return true if v == val }
return false
end Возвращает true, если указанное value найдено в базе данных.
# File lib/yaml/dbm.rb, line 75
def index( keystr )
super( keystr.to_yaml )
end Устаревшее, используйте #key вместо этого.
Примечание: #index выводит предупреждение из внутренности ::DBM#index. Он говорит, что 'DBM#index устарел; используйте #key', но #key ведет себя не так, как #index.
# File lib/yaml/dbm.rb, line 180
def invert
h = {}
keys.each { |k| h[ self.fetch( k ) ] = k }
h
end Возвращает Hash (а не базу данных DBM), созданную с использованием каждого значения в базе данных в качестве ключа, а соответствующий ключ — в качестве его значения.
Обратите внимание, что все значения в хэше будут строками, но ключи — фактическими объектами.
# File lib/yaml/dbm.rb, line 83
def key( keystr )
invert[keystr]
end Возвращает ключ для указанного значения.
# File lib/yaml/dbm.rb, line 128
def reject
hsh = self.to_hash
hsh.reject { |k,v| yield k, v }
end Преобразует содержимое базы данных в хэш Hash в памяти, затем вызывает Hash#reject с указанным кодовым блоком, возвращая новый Hash.
# File lib/yaml/dbm.rb, line 192
def replace( hsh )
clear
update( hsh )
end Заменяет содержимое базы данных содержимым указанного объекта. Принимает любой объект, который реализует метод #each_pair, включая объекты Hash и DBM.
# File lib/yaml/dbm.rb, line 218
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 204
def shift
a = super
a[1] = YAML.load( a[1] ) if a
a
end Удаляет пару [ключ, значение] из базы данных и возвращает её. Если база данных пуста, возвращает nil.
Порядок, в котором значения удаляются/возвращаются, не гарантируется.
# File lib/yaml/dbm.rb, line 233
def store( key, val )
super( key, val.to_yaml )
val
end Сохраняет value в базе данных с key в качестве индекса. value преобразуется в YAML перед сохранением.
Возвращает value
# File lib/yaml/dbm.rb, line 258
def to_a
a = []
keys.each { |k| a.push [ k, self.fetch( k ) ] }
a
end Преобразует содержимое базы данных в массив массивов [ключ, значение] и возвращает его.
# File lib/yaml/dbm.rb, line 270
def to_hash
h = {}
keys.each { |k| h[ k ] = self.fetch( k ) }
h
end Преобразует содержимое базы данных в объект хэша Hash в памяти и возвращает его.
# File lib/yaml/dbm.rb, line 246
def update( hsh )
hsh.each_pair do |k,v|
self.store( k, v )
end
self
end Обновляет базу данных несколькими значениями из указанного объекта. Принимает любой объект, который реализует метод #each_pair, включая объекты Hash и DBM.
Возвращает self.
# File lib/yaml/dbm.rb, line 159
def values
super.collect { |v| YAML.load( v ) }
end Возвращает массив значений из базы данных.
# File lib/yaml/dbm.rb, line 91
def values_at( *keys )
keys.collect { |k| fetch( k ) }
end Возвращает массив, содержащий значения, связанные с заданными ключами.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.